Using Cumulus VX with Test Kitchen

  • 1
  • Article
  • Updated 3 years ago
  • (Edited)

Test Kitchen is a popular tool for automating virtual machines with Vagrant and testing tools such as Serverspec. This article shows you how to use Test Kitchen with Cumulus VX to test Chef recipes.


Configuring Test Kitchen

Test Kitchen is very simple to configure, but you should be aware of the following caveats:

  • By default, the Chef provisioner for Test Kitchen uses the Chef Omnibus installer to install Chef. The standard installer does not recognize Cumulus Linux and thus fails to install Chef. You need to use Vagrant provisioning to install Chef from the Cumulus Networks APT repository.
  • Cumulus Linux currently provides Chef 11.6 in the Cumulus Networks APT repository. Chef 11.6 does not support Chef Zero ("local" mode), so you must use the Chef Solo provisioner.

A basic Test Kitchen configuration (.kitchen.yml) for use with the Cumulus VX Vagrant image looks like this:

  name: vagrant

  name: chef_solo
  require_chef_omnibus: false

  - name: cumulus-vx-2.5.3
      box: cumulus-vx-2.5.3
      provision: true
      vagrantfiles: ['provision-chef.rb']

  - name: default
      - recipe[example]

In addition, you must provide the following Vagrant configuration fragment (provision-chef.rb), which is included by Test Kitchen when the virtual machine is provisioned:

Vagrant.configure("2") do |config|
  config.vm.provision :shell, inline: "apt-get update && apt-get install chef"

You can then create your test cookbook(s) and Serverspec tests as you normally would.

Adding Switch Port Interfaces with Test Kitchen

By default, Vagrant only configures the first network interface (eth0) for its own use. Additional network interfaces, such as the Cumulus Linux switch port interfaces, must be configured from Test Kitchen.

The following example configuration creates a Cumulus VX virtual machine where the interfaces swp1 through swp4 are created and connected to the preconfigured private network:

  - name: cumulus-vx-2.5.3
        - ["private_network", {virtualbox__intnet: true}] # swp1
        - ["private_network", {virtualbox__intnet: true}] # swp2
        - ["private_network", {virtualbox__intnet: true}] # swp3
        - ["private_network", {virtualbox__intnet: true}] # swp4

You can find further information on configuring private network interfaces in the Cumulus VX user guide.


You can find a complete example of a Test Kitchen configuration in the test-kitchen/ directory of the cumulus-vx-vagrant Github repository.

Related Links

Photo of Kristian Van Der Vliet

Kristian Van Der Vliet, Alum

  • 290 Points 250 badge 2x thumb

Posted 3 years ago

  • 1

Be the first to post a reply!