Skip to content

Contact sales

By filling out this form and clicking submit, you acknowledge our privacy policy.
  • Labs icon Lab
  • A Cloud Guru
Google Cloud Platform icon

Cookbook Components - Attributes

In this lab we will install the ChefDK tools on a server. We will need to make sure Docker is working, then ensure that Git is installed and has some basic configuration. Then we'll gain an understanding of Local Cookbook Development by creating a cookbook that uses a custom attribute to install a package. At the end of this hands-on lab, we will have installed and configured ChefDK tools, developed cookbooks, and tested them with `docker` and `kitchen` commands.

Google Cloud Platform icon

Path Info

Clock icon Intermediate
Clock icon 1h 0m
Clock icon Aug 04, 2020

Contact sales

By filling out this form and clicking submit, you acknowledge our privacy policy.

Table of Contents

  1. Challenge

    On the Provided Server, Install Version 2.4.17 of the ChefDK Tools

    We need to download the correct version of ChefDK, which is 2.4.17. In a command line, run:


    Now install it:

    sudo rpm -ivh chefdk-2.4.17-1.el7.x86_64.rpm

    Once it's installed, we need to make sure Chef uses the correct system locations for things:

    echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile
    source ~/.bash_profile

    Now check to see if it worked with which ruby, and we should see /opt/chefdk/embedded/bin/ruby get returned.

  2. Challenge

    Install What docker-ce Requires on This Server

    We need Docker on our workstation, so we will need to install the yum-utils, add the Docker repository, and install Docker.

    sudo yum -y install yum-utils
    sudo yum-config-manager --add-repo
    sudo yum -y install docker-ce

    Now let's set Docker to start now, and on system boot:

    sudo systemctl start docker
    sudo systemctl enable docker

    We should also set your user to be able to use Docker without using the sudo command. Once we've done this, we have to log out and back in again:

    sudo usermod -aG docker $USER

    Use SSH to get back in again, and check to make sure Docker is running:

    docker ps

    If we can do that without prefacing it with sudo, we're ready to continue.

  3. Challenge

    Install Git and Set Some Global Defaults for Our User, Email Address, and Editor

    When we use Kitchen, later in the lab, we need Git to be installed and set up with some basic information. These commands will make that happen:

    Install it:

    sudo yum -y install git

    Configure some Git basics, like the username, email address, and a default text editor:

    git config --global "USERNAME"
    git config --global "[email protected]"
    git config --global core.editor vim

    Note: We can use fake email information, since we don't actually use it for this lab. It just needs to be set or we will get errors later.

  4. Challenge

    Install the Gem Required for Using Docker with the Test Kitchen

    Docker requires a gem for this all to work. Install it with this:

    gem install kitchen-docker
  5. Challenge

    Update SELinux to Be Permissive

    To perform the tasks properly you should change SELinux so that it is permissive:

    sudo setenforce permissive

    We should also /etc/selinux/config and change things to permissive there too:

    sudo vim /etc/selinux/config

    Change the SELINUX line from SELINUX=enforcing to SELINUX=permissive

  6. Challenge

    Create a Cookbook for Use with These Tasks, and Call It la_attributes

    Create the cookbook with this command:

    chef generate cookbook la_attributes

    Now get into the newly created directory:

    cd la_attributes
  7. Challenge

    Generate an Attribute Called default

    Now we can generate an attributes, called default:

    chef generate attribute default

    We'll see an attibutes directory, if we run ls.

  8. Challenge

    Edit Our kitchen.yml File

    We need to change some things in kitchen.yml, so let's edit it:

    vim .kitchen.yml

    In the top section, we're going to replace vagrant with docker, and add some things. When we're done, that top section should look like this:

      name: docker
      privileged: true
      use_sudo: false

    Remember that this is YAML, so we need to make sure we have the right number of spaces in spots. Those lines under driver are all indented two spaces.

    Down in the provisioner section, we need to add a name and version. It should look like this when we're done:

      name: chef_zero
      # You may wish to disable always updating cookbooks in CI or other testing environments.
      # For example:
      #   always_update_cookbooks: <%= !ENV['CI'] %>
      always_update_cookbooks: true
      product_name: "chef"
      product_version: "13.8.5"

    We're on a CentOS machine, so we need to get rid of ubuntu from the file. Just delete (or comment out) the line in the platforms section that reads:

      - name: ubuntu-16.04

    That's it for kitchen.yml edits. Write and quit, so that we can get back to the command prompt.

  9. Challenge

    Edit the Attribute We Created Earlier, and Add a default Attribute of app and language with a value of perl

    Edit the attributes/default.rb file:

    vim attributes/default.rb

    Add the specific attributes:

    default['app']['language'] = 'perl'
  10. Challenge

    Edit Our Recipe to Install What Our Attribute Calls For

    We need to get the perl package installed, the one we referred to back in the attribute, so add this text to the end of the ./recipes/default.rd file:

    package node['app']['language'] do
      action :install
  11. Challenge

    Verify That the Cookbooks Work

    Use the kitchen verify command to ensure the cookbook works. We should see a line in the output that says yum_package[perl] action install.

  12. Challenge

    Log into the Kitchen Instance to Check That Perl Got Installed

    We can log in with kitchen login. Once we're in, we'll run perl -v. If we get a version number, then we know Perl has been installed.

  13. Challenge

    Clean up the Environment

    To clean up after ourselves, we just use the kitchen destroy command.

The Cloud Content team comprises subject matter experts hyper focused on services offered by the leading cloud vendors (AWS, GCP, and Azure), as well as cloud-related technologies such as Linux and DevOps. The team is thrilled to share their knowledge to help you build modern tech solutions from the ground up, secure and optimize your environments, and so much more!

What's a lab?

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Provided environment for hands-on practice

We will provide the credentials and environment necessary for you to practice right within your browser.

Guided walkthrough

Follow along with the author’s guided walkthrough and build something new in your provided environment!

Did you know?

On average, you retain 75% more of your learning if you get time for practice.

Start learning by doing today

View Plans