# kubelwagen
*Getting your dev environment to the front lines*

It's great to have a consistent environment in containers, and it's great to have services run on Kubernetes, but it's a pain to build dev containers to be run as pods on Kubernetes.  `git pull` on pod creation helps, but it still requires you commit and push the code, and restart the pod.

It would be great if your live development working directory could be mounted into a running pod on the powerful metal in the cloud. Plus, it would obviate the need for workaround services such as [ngrok](https://ngrok.com) to share a running WIP instance, as it would have a valid service on the dev cluster, complete with Ingress resources and everything. Plus, it's running in-cluster; so all the configurations and access controls and service discoveries are available to your dev instance. With the absolute latest, WIP code from your laptop.

Use it in tandem with automatically refreshing dev environments -- JS auto-reloaders for frontend devs, [entr](https://entrproject.org) for general reloads, or any other tooling you like. 

Kubelwagen is a sidecar ([hah](https://en.wikipedia.org/wiki/Volkswagen_K%C3%BCbelwagen)) container that provides a FUSE directory to the running pod that is mounted in from a client connecting in over an HTTPS websocket.

## FUSE over Websockets? Are you insane?

It's a dev tool, HTTPS is pretty good, relax. Yeah, it'll be slow... but with appropriate caching, a few extra automatic reload milliseconds of the code you just changed is preferable to rebuilding a container or rescheduling a pod. Faster iteration times == happier devs. Closer parity to your laptop and production == happier ops.


## Setting it up

```
kubelwagen serve [TARGET DIRECTORY]
```

```
kubelwagen connect [TARGET ADDRESS] [SOURCE DIRECTORY]
```

## Status & Todo

#### Status 
First mounting! `ls` over the internet to your heart's content!

#### Todo
* Implement *all* the methods!
  * XAttrs
* File handles
* Caching
* INotify
* Overlay (serve local directory when not connected)


## Licensing

Distributed under the GPL, as it's a dev tool and not meant as a product. Use it internally. Share alike.

## Why call it kubelwagen?

I was on vacation and read [The Last Battle: When U.S. and German Soldiers Joined Forces in the Waning Hours of World War II in Europe](https://en.wikipedia.org/wiki/The_Last_Battle_(Harding)) in one sitting, and noticed a word, starting with `kube`, that fit themeatically, with an idea I already had. 
