Welcome to my website. I am always posting links to photo albums, art, technology and other creations. Everything that you will see on my numerous personal sites is powered by the formVistaTM Website Management Engine.


  • Quick-Start and Minimal Cheat Sheet for Chef and Test Kitchen
    11/16/2015 3:30PM

    Following is a quick-start for getting a Chef and Test Kitchen environment set up to start writing and testing Chef cookbooks.  This is an work in progress, so please if you find something that is incorrect or does not work as expected, send me an e-mail.

    Development Environment Set-up:

    Unless you are a Ruby developer and already have a complete environmenet set-up the easiest thing to do is to install the Chef Development Kit, https://downloads.chef.io/chef-dk/.

    After downloading and installing the package add a CHEF_HOME and RUBY_HOME var pointed to the embedded version of Ruby that comes with the Chef SDK.

      export CHEF_HOME=/opt/chefdk
      export RUBY_HOME=/opt/chefdk/embedded

    Building Cookbooks:

    Generate the cookbook skeleton:

    $ chef generate cookbook <name-of-cookbook>

    Then cd into that directory and initialize the cookbook:

    $ kitchen init --create-gemfile

    You will also want to run bundle install, which will require your user to have sudo permissions.

    $ bundle install

    Run kitchen converge to verify before starting dev.

    $ kitchen converge <name-of-vm>

    Create a recipe

    $ chef generate recipe <name-of-recipe>

    [Optional] To use attributes, first create the attributes directory structure

    $ chef generate attribute default

    Some helpful Tips:

    1.  Answer the following questions for each new cookbook you are going to create.  It will help you focus the purpose of the cookbook:

    . Name
    . Purpose
    . Success criteria
    . App/Service
    . Required steps

    2.  Creating template files:

    $ chef generate template <name-of-file>

        . Sample variable to be added to a template:
          <%= node['hostname'] %>

    3.  Available host variables.  You can see all of the variables available to be used in templates by logging in to a chef managed VM and issuing the following command:

    $ kitchen login <name-of-vm>

    $ ohia | less

    4.  Add a IP to a kitchen VM so that additional kitchen VMs can talk to each other.  Add the following to your .kitchen.yml file.

      - name: centos-7.1
          - ["private_network", {type: "dhcp"}]


      - name: centos-7.1
          - ["private_network", {ip: ""}]

    When specifying an IP, check the vboxnet0 interface on the host machine to see what network the VirtualBox host is configured and pick an IP in that range.

    In my case, I had to make sure that only one machine was configured under 'platform', or that each had a network configuration.

    Also, I had to have 'require_chef_omnibus: true' under the vagrant driver as follows:

      name: vagrant
      require_chef_omnibus: true

    5.  Debugging Attributes:  Using the 'pp' module you can format the output of the node.debug('<attribute-name>').

    Add the following to a recipe, and run it with kitchen converge:

    require 'pp'

    node.default['ipaddress'] = ''
    pp node.debug_value('ipaddress')

  • Connecting To a Test Kitchen Instance Via SFTP, SSH, or SCP
    06/23/2015 5:25PM

    If you are using Chef and Test Kitchen to test your cookbooks you may have need to connect to the Test Kitchen VM in some other fashion other than $ kitchen login instance-name.

    To do so:

    Do a $ kitchen list to see the running vms

    $ kitchen list
    Instance                      Driver   Provisioner  Verifier  Transport  Last Action
    default-centos-66             Vagrant  ChefSolo     Busser    Ssh        Converged

    Then look in the .kitchen directory from where you ran your $ kitchen command and look for the corresponding .yml config file for the vm

    $ ls .kitchen
    default-centos-66.yml  kitchen-vagrant  logs

    Inside the .yml file for the vm is the path to the ssh key

    $ more .kitchen/default-centos-66.yml
    port: '2222'
    username: vagrant
    ssh_key: "/home/rchapin/.vagrant.d/insecure_private_key"
    last_action: converge

    With that, just use the -i argument to point to the identity file and sftp to the box

    sftp -P 2222 -i /home/rchapin/.vagrant.d/insecure_private_key vagrant@

    If the VM prompts you for a user name when logging in, you can always login via kitchen, change the password for that user and then retry

    To login via kitchen issue the following command:

    kitchen login default-centos-66

Advanced Search