I have been interested in using PhotonOS as my backend docker OS for a while now. If you don’t know, Photon is VMware’s next generation Cloud Native OS that is native for their vSphere, ecosystem.

So imagine this: your company has a huge VMware based data center, you’re starting to leverage the concept of “infrastructure as code,” and you’re using Chef or another plugin to test-kitchen. You can’t run Docker or Virtualbox on your laptop due to security reasoning, but you have a lab environment testing out PhotonOS.

Naturally it’s easier to get another VMware product, especially because it’s FREE, in your data centers instead of approval for Virtualbox on your local laptop right?

This tutorial is a way to get kitchen-docker to talk to PhotonOS and any settings or gotcha’s you might find.

PhotonOS setup

So, the first thing you have to do is make sure that PhotonOS is installed in your vCenter. If your team hasn’t done this yet, you can go to the PhotonOS Wiki and walk through the process. It’s just importing a .ova with the typical workflow that any VMware engineer can understand.

After the power on and boot up, you’ll need to login to the machine with the password of root/changeme and change the password to something secure.

When you get to the command prompt: root@photon-machine [ ~ ]# you are ready for the next steps.

I could repeat everything here, but it’s probably just better read it directly from Ryan Kelly’s mouth. So, click this following link to allow PhotonOS to allow remote connections.

NOTE: With PhotonOS 2.0, they have changed how to set up the remote connections. Please look at here for instructions.

To test this, bring up your command line and type

$ export DOCKER_HOST=tcp://DOCKERHOST:2375
$ docker info

You should see one of the lines come back say: Operating System: VMware Photon/Linux.

Congrats! You now have a remote docker host running PhotonOS.

test-kitchen setup

Ok, now here comes the specific kitchen steps.

First, open up your .kitchen.yml or .kitchen.local.yml or .kitchen.docker.yml which ever you want to drive your kitchen settings.

Here’s a quick snippet to set it up for the changes you need to make at the top:

  name: docker
  socket: tcp://DOCKERHOST:2375

With this, you’ll also need to either add kitchen-docker to your Gemfile if you use one, or chef gem install kitchen-docker to put it inside the chefdk.

With these settings and the gem installed in the correct place, you can now run:

$ kitchen list

You should see all of the base .kitchen.yml settings such as:

Instance             Driver  Provisioner  Verifier  Transport  Last Action    Last Error
default-ubuntu-1604  Docker  ChefZero     Inspec    Ssh        <Not Created>  <None>
default-centos-72    Docker  ChefZero     Inspec    Ssh        <Not Created>  <None>

Go ahead and run kitchen test -c 2, and you’ll see how fast it is!

NOTE: The first initial run will take a bit due to the caching of images on the PhotonOS host, but after that, it’ll be significantly faster.

Double NOTE: As of the writing of this blog post, 2017-03-30 it seems that there is a problem with the overlay and inode usage. You’ll need to keep an eye on it, if you run out of no space left on device you need to look at df -i. A way to clean up the overlay directory “safely” is via:

$ docker rm $(docker ps --all | cut -f 1 -d\  )
$ docker rmi $(docker images | cut -d\  -f 1)
$ docker rmi $(docker images -q)

Triple NOTE: I have put in issue #619 to attempt to track this inode issue. I did discover that adding another harddrive to the OVA and mounting it at /var seems to be a workaround for this issue.