bosh-lite is a wonderful part of the BOSH toolchain - you provision a single VM one time and then bosh deploy creates Linux containers rather than full IaaS VMs. Super fast for development and super fast for CI pipelines for BOSH releases.

bosh-lite is popularly used locally via vagrant/virtualbox; but can also run on any AWS region thanks to the vagrant-aws plugin. This is great for people with smaller laptops, and great for sharing a running bosh-lite within your team or your CI system.

But then your team starts loosing track of who created each vagrant-based bosh-lite, which SSH keys let you SSH into the VM, and into which AWS account the bosh-lites are running (if you want to poke holes in its security groups, etc). Heck, you might just want to know "how many bosh-lites are we running here?"

We created snowwhite to coordinate all your bosh-lite deployments into a shared private git repo.

Getting started

snowwhite is a CLI that manages a communal git repo. To get started and create the initial git repo bosh-lites in the current folder:

curl https://raw.githubusercontent.com/cloudfoundry-community/snowwhite/master/installer.sh | bash  

(see the README for other getting started options)

Next, edit the bosh-lites/.envrc to setup your AWS credentials and VPC/subnet info:

export PATH=$PATH:${PWD}/bin  
export BOSH_CONFIG="${PWD}/.bosh_config"

export BOSH_AWS_ACCESS_KEY_ID=FIXME  
export BOSH_AWS_SECRET_ACCESS_KEY=FIXME  
export BOSH_LITE_SECURITY_GROUP=FIXME-sg-123456  
export BOSH_LITE_KEYPAIR=FIXME-keypair  
export BOSH_LITE_PRIVATE_KEY=sshkeys/bosh-lite.pem  
export BOSH_LITE_SUBNET_ID=FIXME-subnet-123456  
export BOSH_LITE_INSTANCE_TYPE=m3.2xlarge  

Once you've commited changes and pushed your private bosh-lites git repo, other members of your team need to clone it to their machines.

If you use Github and the handy hub cli to create a private repo:

hub create -p  
git push origin master  

Usage

Inside the shared bosh-lites git repo is a bin/snowwhite script. Once you've added the bin/ folder to your $PATH you get a range of handy subcommands.

To create a new bosh-lite on AWS you simply run:

snowwhite new tutorial  

It will create a subfolder deployments/tutorial and run the standard vagrant up --provider=aws command there. It will commit the .vagrant files and run git push automatically to ensure the new files are shared.

That's right - it is sort of using your new bosh-lites repo as a database of bosh-lite/vagrant deployments.

If you look in your AWS console you'll see a bosh-lite-tutorial VM.

To target the new bosh-lite and login for the first time, run:

snowwhite target tutorial  

The output is as follows, and the default username/password is admin and admin:

+ bosh target 54.167.106.255 tutorial
Target set to `Bosh Lite Director'  
Your username: admin  
Enter password: [admin]  
Logged in as `admin'  

Your new bosh-lite needs a stemcell so next run:

bosh upload stemcell https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent --skip-if-exists  

Hmm, probably could automate that. So in future perhaps you won't need to do that. Seems silly to make you do it manually. But at least its a quick confirmation that your bosh-lite is working!

Bonus commands

You can SSH into the bosh-lite machine:

snowwhite ssh tutorial  

You can see a list of all available bosh-lites within your shared bosh-lites repo:

snowwhite list  

And finally, when you've had enough fun you can destroy it:

snowwhite destroy tutorial  

This will also remove the deployments/tutorial folder, git commit, and git push the change.