In this lab we will get familiar with Chef Troubleshooting.
First, we are going to install the ChefDK tools on a server, make sure that Docker is working, and ensure that Git is installed and has some basic configuration.
We will then go through troubleshooting a Chef cookbook, which will be provided. We need to figure out what it has for problems, and why it won’t work.
At the end of this hands-on lab, we will have a working cookbook, after we’ve performed tests with Docker and Kitchen.
Successfully complete this lab by achieving the following learning objectives:
- 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
- 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 https://download.docker.com/linux/centos/docker-ce.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
sudocommand. Once we’ve done this, we have to log out and back in again:
sudo usermod -aG docker $USER exit
Use SSH to get back in again, and check to make sure Docker is running:
If we can do that without prefacing it with
sudo, we’re ready to continue.
- 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:
sudo yum -y install git
Configure some Git basics, like the username, email address, and a default text editor:
git config --global user.name "USERNAME" git config --global user.email "YOUREMAIL@DOMAIN.COM" 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.
- 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
- 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/configand change things to permissive there too:
sudo vim /etc/selinux/config
- Examine the Three Cookbooks In the ~/chef/ Directory
la_troubleshootingis the current broken cookbook that we need to fix.
la_badis an exact copy of
la_troubleshooting, in case we need to start over or refer back to it.
la_gooda working "fixed" copy that we can refer to if we’re really stuck.
- Work on the la_troubleshooting Cookbook
Let’s get in and start looking around for problems and symptoms. Run
cd la_troubleshootingto get into the directory, then run
kitchen convergeto watch what happens.
It fails. If we scroll back up a bit into the logs, we can see a
SyntaxError, and the problem appears to be in
Destroy the kitchen (with
kitchen destroy) and let’s go have a look at our recipe:
The error was about the
elinkspackage, but in this file, that section looks fine. The problem is earlier. there’s a missing quote in the line:
service 'httpd doline. Fix that (adding a single quote after
'httpd), save the file, and try another
It fails again, doesn’t it? Now what’s our error saying? Up in the resource declaration, we can see something’s wrong with that section of the cookbook. Again, edit the file:
If we look in that section, something should stand out. We’ve declared a path of
/varwww/html/index.html, but there’s no such place. We’re missing a forward slash between
www. Let’s add that in, save the file, and try a
- Test Whether the Problems Are Fixed
Everything looks good, but is it really? It looks like this cookbook is supposed to set up a web server with some content in the
index.htmlpage. Does it? Log into the kitchen, and check the file itself, both by just reading it and in a (text-based) web browser:
kitchen login cat /var/www/html/index.html elinks http://localhost
If we see
SUCCESS, we’ve succeeded.
- Clean up
Get out of the kitchen and destroy it:
exit kitchen destroy