DevOps - Lab 4: Chef basic commands of Recipes & Cookbooks

Chef basic commands of Recipes & Cookbooks

In Lab 4: Chef Basic Commands of Recipes & Cookbooks, participants typically delve into the essential commands and concepts related to creating and managing recipes and cookbooks in Chef. This lab focuses on hands-on experience with commands such as 'chef generate' to create new cookbooks and recipes, 'kitchen converge' to apply configurations to a test environment, and 'kitchen verify' to validate the applied configurations. Participants may also explore writing custom recipes, defining attributes, and structuring cookbooks effectively. The lab aims to deepen participants' understanding of Chef's core components, enabling them to author and manage configurations that define the desired state of their infrastructure. Successful completion of Lab 4 equips participants with the skills necessary to leverage Chef efficiently for automating and maintaining consistent configurations across their infrastructure.

Lab:

Recipe 1

Step 1: To generate the Recipe

cd test-cookbook
chef generate recipe recipe1
cd ..
vi test-cookbook/recipes/recipe1.rb
(Press i)
package ‘finger’ do
  action :install
end 
 
file ‘/myfile2’ do
  content “This is my second file”
  action :create
  owner ‘root’
  group ‘root’
end

Step 2: To verify the recipe

chef exec ruby -c test-cookbook/recipe/recipe1.rb

Step 3: To apply that recipe locally

We run chef-client to apply recipe to bring node into desired state, we call this process as “Convergence”.

chef-client –zr “ recipe\[test-cookbook::recipe1\]”

Step 4: Verification

ls /
which finger

Recipe 2

Step 1: To generate the Recipe

cd test-cookbook
chef generate recipe recipe2
cd ..
vi test-cookbook/recipes/recipe2.rb
(Press i)
package ‘httpd’ do
  action :install
end 

file ‘/var/www/html/index.html’ do
  content “Hello Dear Students!!!”
  action :create
end  

service ‘httpd’ do
  action \[:enable, :start\]
end
(Press esc)
:wq!

Step 2: To verify the recipe

chef exec ruby -c test-cookbook/recipe/recipe2.rb

Step 3: To apply that recipe locally

chef-client –zr “ recipe\[test-cookbook::recipe2\]”

Step 4: Verification

Paste Public IP in the Browser

Recipe 3

Step 1: To generate the Recipe

cd test-cookbook
chef generate recipe recipe3
cd ..
vi test-cookbook/recipes/recipe3.rb
(Press i)
package ‘httpd’ do
  action :install
end 

file ‘/var/www/html/index.html’ do
  content “<h1>Hello Dear Students!!!</h1>
  <img src=‘rst.png’>”
  action :create
end  

remote\_file ‘/var/www/html/rst.png’ do
  source “https://rst-bucket-1.s3.amazonaws.com/WhatsApp+Image+2020-03-13+at+22.12.27.jpeg”
end

service ‘httpd’ do
  action \[:enable, :start\]
end
(Press esc)
:wq!

Step 2: To verify the recipe

chef exec ruby -c test-cookbook/recipe/recipe3.rb

Step 3: To apply that recipe locally

chef-client –zr “ recipe\[test-cookbook::recipe3\]”

Step 4: Verification

Paste Public IP in the Browser

Recipe 4

We have a web application to be deployed into 1000 nodes & we need to know some details of each server. Because we need to mention that in configuration file of each node. This information is varied from system to system. These details we call “Attributes” Chef-client tool gathers these Attributes from ohai store and puts in configuration files, instead of hard coding these attributes, we mention as variables

Step 1: To generate the Recipe

cd test-cookbook
chef generate recipe recipe4
cd ..
vi test-cookbook/recipes/recipe4.rb
(Press i)
file ‘/robofile’ do
  content “This is to get Attributes
  HOSTNAME: #{node\[‘hostname’\]}
  IPADDRESS: #{node\[‘ipaddress’\]}
  CPU: #{node\[‘cpu’\]\[‘0’\]\[‘mhz’\]}
  MEMORY: #{node\[‘memory’\]\[‘total’\]}”
  owner ‘root’
  group ‘root’
  action :create
end
(Press esc)
:wq!

Step 2: To verify the recipe

chef exec ruby -c test-cookbook/recipe/recipe3.rb

Step 3: To apply that recipe locally

chef-client –zr “ recipe\[test-cookbook::recipe3\]”

Step 4: Verification

ls /
cat /robofile

Recipe 5

To execute Linux commands

execute “run a script” do
  command <<-EOH
  mkdir /Panchanandir
  touch /Panchananfile
  EOH
end

Recipe 6

We can create users and groups

user “Ram” do
  action :create
end

group “devops” do
  action :create
  members ‘Ram’
  append true
end

Recipe 7

To deal with multiple resources at a time

\[‘httpd’,’mariadb-server’,’unzip’,’git’,’vim’\].each do |p|
  package p do
    action :install
  end
end

\[‘Ram’,’Shyam’,’Ajay’,’Vijay’,’Rohan’,’Sohan’\].each do |q|
  user q do
    action :create
  end
end