Chef for beginners module 3
Transcript of Chef for beginners module 3
![Page 1: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/1.jpg)
CookbooksOrganizing Recipes
Slide 1 of 57
![Page 2: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/2.jpg)
After completing this module, you should be able to:
Modify a recipeUse version controlGenerate a Chef cookbookDefine a Chef recipe that sets up a web server
Objectives
Slide 2 of 57
![Page 3: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/3.jpg)
Questions You May Have
Slide 3 of 57
![Page 4: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/4.jpg)
Thinking about the workstation recipe, could we dosomething like that for a web server?
Questions You May Have
Slide 4 of 57
![Page 5: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/5.jpg)
Thinking about the workstation recipe, could we dosomething like that for a web server?
Is there a way to package up recipes you create with aversion number (and maybe a README)?
Questions You May Have
Slide 5 of 57
![Page 6: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/6.jpg)
Thinking about the workstation recipe, could we dosomething like that for a web server?
Is there a way to package up recipes you create with aversion number (and maybe a README)?
I think Chef is able to generate something called acookbook. Shouldn't we start thinking about someversion control so we don't lose all our hard work?
Questions You May Have
Slide 6 of 57
![Page 7: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/7.jpg)
Slide 7 of 57
![Page 8: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/8.jpg)
Versioning Pros and Cons
Slide 8 of 57
![Page 9: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/9.jpg)
Versioning Pros and ConsSaving a copy of the original file as another filename.
$ cp setup.rb setup.rb.bak
Slide 9 of 57
![Page 10: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/10.jpg)
Versioning Pros and ConsSaving a copy of the original file as another filename.
$ cp setup.rb setup.rb.bak
or
$ cp setup.rb{,.̀date +%Y%m%d%H%M̀}
Slide 10 of 57
![Page 11: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/11.jpg)
Versioning Pros and ConsSaving a copy of the original file as another filename.
$ cp setup.rb setup.rb.bak
or
$ cp setup.rb{,.̀date +%Y%m%d%H%M̀}
or
$ cp setup.rb{,.̀date +%Y%m%d%H%M-$USER̀}
Slide 11 of 57
![Page 12: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/12.jpg)
Git Version Controlgit is a distributed revision control system with an emphasis on speed, data
integrity, and support for distributed, non-linear workflows.
We will be using git throughout the rest of this workshop.
Slide 12 of 57
![Page 13: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/13.jpg)
Add the additional policy to setup.rb:
The package named git is installed.
Then apply this recipe with chef-apply.
Lab Exercise: Install git
Slide 13 of 57
![Page 14: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/14.jpg)
Lab Exercise: Adding the git Package~/setup.rb
package 'nano'package 'vim'package 'emacs'
package 'tree'package 'git'
file '/etc/motd' do content 'Property of ...'end
Slide 14 of 57
![Page 15: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/15.jpg)
Lab Exercise: Re-apply the Setup Recipe$ sudo chef-apply setup.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe) * yum_package[nano] action install (up to date) * yum_package[vim] action install (up to date) * yum_package[emacs] action install (up to date) * yum_package[tree] action install (up to date) * yum_package[git] action install - install version 1.7.1-4.el6_7.1 of package git * file[/etc/motd] action create (up to date)
Slide 15 of 57
![Page 16: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/16.jpg)
How are we going to manage this file?Does it need a README?
Group Exercise: Create a Cookbook
Slide 16 of 57
![Page 17: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/17.jpg)
How are we going to manage this file?Does it need a README?
Objective:☐ Use chef (CLI) to generate a cookbook to store our setuprecipe. ☐ Add the workstation cookbook to version control.
Group Exercise: Create a Cookbook
Slide 17 of 57
![Page 18: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/18.jpg)
What is chef?An executable program that allows you generate cookbooks and cookbook
components.
Slide 18 of 57
![Page 19: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/19.jpg)
What can chef do?$ chef --help
Usage: chef -h/--help chef -v/--version chef command [arguments...] [options...]
Available Commands: exec Runs the command in context of the embedded ruby env Prints environment variables used by ChefDK gem Runs the gem command in context of the embedded ruby generate Generate a new app, cookbook, or component shell-init Initialize your shell to use ChefDK as your primary ruby install Install cookbooks from a Policyfile and generate a locked cookbook set update Updates a Policyfile.lock.json with latest run_list and cookbooks... undelete Undo a delete command verify Test the embedded ChefDK applications
Slide 19 of 57
![Page 20: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/20.jpg)
CookbooksWhat is a Chef Cookbook?
Slide 20 of 57
![Page 21: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/21.jpg)
A Chef Cookbook is the fundamental unit ofconfiguration and policy distribution.
CookbooksWhat is a Chef Cookbook?
Slide 21 of 57
![Page 22: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/22.jpg)
A Chef Cookbook is the fundamental unit ofconfiguration and policy distribution.
Each cookbook defines a scenario, such as everythingneeded to install and configure MySQL, and then itcontains all of the components that are required tosupport that scenario.
CookbooksWhat is a Chef Cookbook?
Slide 22 of 57
![Page 23: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/23.jpg)
A Chef Cookbook is the fundamental unit ofconfiguration and policy distribution.
Each cookbook defines a scenario, such as everythingneeded to install and configure MySQL, and then itcontains all of the components that are required tosupport that scenario.
Read the first three paragraphs here:http://docs.chef.io/cookbooks.html
CookbooksWhat is a Chef Cookbook?
Slide 23 of 57
![Page 24: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/24.jpg)
What Can chef generate Do?$ chef generate --help
Usage: chef generate GENERATOR [options]
Available generators: app Generate an application repo cookbook Generate a single cookbook recipe Generate a new recipe attribute Generate an attributes file template Generate a file template file Generate a cookbook file lwrp Generate a lightweight resource/provider repo Generate a Chef policy repository policyfile Generate a Policyfile for use with the install/push commands generator Copy ChefDK's generator cookbook so you can customize it
Slide 24 of 57
![Page 25: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/25.jpg)
What Can chef generate cookbook Do?$ chef generate cookbook --help
Usage: chef generate cookbook NAME [options] -C, --copyright COPYRIGHT Name of the copyright holder - default... -m, --email EMAIL Email address of the author - defaults... -a, --generator-arg KEY=VALUE Use to set arbitrary attribute KEY to ... -I, --license LICENSE all_rights, httpd, mit, gplv2, gplv3 -... -g GENERATOR_COOKBOOK_PATH, Use GENERATOR_COOKBOOK_PATH for the... --generator-cookbook
Slide 25 of 57
![Page 26: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/26.jpg)
Group Exercise: Let's Create a Cookbook$ cd ~$ chef generate cookbook workstation
Installing Cookbook Gems:Compiling Cookbooks...Recipe: code_generator::cookbook * directory[/home/bmeyer/workstation] action create - create new directory /home/bmeyer/workstation * template[/home/bmeyer/workstation/metadata.rb] action create_if_missing - create new file /home/bmeyer/workstation/metadata.rb - update content in file /home/bmeyer/workstation/metadata.rb from none to 0c09e4 (diff output suppressed by config) * template[/home/bmeyer/workstation/README.md] action create_if_missing - create new file /home/bmeyer/workstation/README.md - update content in file /home/bmeyer/workstation/README.md from none to 590727 (diff output suppressed by config)... * execute[initialize-git] action run - execute git init . * cookbook_file[/home/bmeyer/workstation/.gitignore] action create - create new file /home/bmeyer/workstation/.gitignore - update content in file /home/bmeyer/workstation/.gitignore from none to dd37b2 (diff output suppressed by config)
Slide 26 of 57
![Page 27: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/27.jpg)
Group Exercise: The Cookbook Has a README.md file$ tree workstation
workstation├── Berksfile├── chefignore├── metadata.rb├── README.md├── recipes│ └── default.rb├── spec│ ├── spec_helper.rb...└── test └── integration... └── helpers └── serverspec └── spec_helper.rb10 directories, 9 files
Slide 27 of 57
![Page 28: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/28.jpg)
The description of the cookbook's features written inMarkdown.
README.md
http://daringfireball.net/projects/markdown/syntax
Slide 28 of 57
![Page 29: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/29.jpg)
Group Exercise: The Cookbook Has Some Metadata$ tree workstation
workstation├── Berksfile├── chefignore├── metadata.rb├── README.md├── recipes│ └── default.rb├── spec│ ├── spec_helper.rb│ └── unit│ └── recipes│ └── default_spec.rb10 directories, 9 files
Slide 29 of 57
![Page 30: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/30.jpg)
Every cookbook requires a small amount of metadata.
metadata.rb
Slide 30 of 57
![Page 31: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/31.jpg)
Every cookbook requires a small amount of metadata.
Metadata is stored in a file called metadata.rb thatlives at the top of each cookbook’s directory.
metadata.rb
http://docs.chef.io/config_rb_metadata.html
Slide 31 of 57
![Page 32: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/32.jpg)
Group Exercise: Let's Take a Look at the Metadata$ cat workstation/metadata.rb
name 'workstation' maintainer 'The Authors' maintainer_email '[email protected]'license 'all_rights' description 'Installs/Configures workstation'long_description 'Installs/Configures workstation' version '0.1.0'
Slide 32 of 57
![Page 33: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/33.jpg)
Group Exercise: The Cookbook Has a Folder for Recipes$ tree workstation
workstation├── Berksfile├── chefignore├── metadata.rb├── README.md├── recipes│ └── default.rb├── spec│ ├── spec_helper.rb│ └── unit│ └── recipes│ └── default_spec.rb10 directories, 9 files
Slide 33 of 57
![Page 34: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/34.jpg)
Group Exercise: The Cookbook Has a Default Recipe$ cat workstation/recipes/default.rb
# Cookbook Name:: workstation# Recipe:: default## Copyright (c) 2015 The Authors, All Rights Reserved.
Slide 34 of 57
![Page 35: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/35.jpg)
Group Exercise: Move our setup.rb Recipe into the Cookbook$ mv -v setup.rb workstation/recipes/s̀etup.rb' -> ̀workstation/recipes/setup.rb'
Slide 35 of 57
![Page 36: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/36.jpg)
This is a probably a good point to capture the initial stateof our cookbook.
Objective:☑ Use chef (CLI) to generate a cookbook to store our setuprecipe. ☐ Add the workstation cookbook to version control.
Group Exercise: Version Control
Slide 36 of 57
![Page 37: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/37.jpg)
Group Exercise: Move into the Cookbook Directory$ cd workstation
Slide 37 of 57
![Page 38: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/38.jpg)
Group Exercise: Initialize the Directory as a git Repository$ git init
Reinitialized existing Git repository in /home/chef/workstation/.git/
Slide 38 of 57
![Page 39: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/39.jpg)
Group Exercise: Use git add to Stage Files to be Committed$ git add .
Slide 39 of 57
![Page 40: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/40.jpg)
The staging area has a file, generally contained inyour Git directory, that stores information about whatwill go into your next commit.
It’s sometimes referred to as the “index”, but it’s alsocommon to refer to it as the staging area.
Staging Area
http://git-scm.com/book/en/v2/Getting-Started-Git-Basics
Slide 40 of 57
![Page 41: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/41.jpg)
Group Exercise: Use git status to View the Staged Files$ git status
# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: .gitignore# new file: .kitchen.yml# new file: Berksfile# new file: README.md# new file: chefignore# new file: metadata.rb# new file: recipes/default.rb# new file: recipes/setup.rb# new file: spec/spec_helper.rb# new file: spec/unit/recipes/default_spec.rb# new file: test/integration/default/serverspec/default_spec.rb# new file: test/integration/helpers/serverspec/spec_helper.rb#
Slide 41 of 57
![Page 42: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/42.jpg)
Group Exercise: Use git commit to Save the Staged Changes$ git commit -m "Initial workstation cookbook"
[master (root-commit) ae6968b] Initial workstation cookbook Committer: ChefDK User <[email protected]>Your name and email address were configured automatically basedon your username and hostname. Please check that they are accurate.You can suppress this message by setting them explicitly:
git config --global user.name "Your Name" git config --global user.email [email protected]
If the identity used for this commit is wrong, you can fix it with:
git commit --amend --author='Your Name <[email protected]>'
12 files changed, 207 insertions(+), 0 deletions(-) create mode 100644 .gitignore create mode 100644 .kitchen.yml create mode 100644 Berksfile create mode 100644 README.md create mode 100644 chefignore create mode 100644 metadata.rb create mode 100644 recipes/default.rb create mode 100644 recipes/setup.rb...
Slide 42 of 57
![Page 43: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/43.jpg)
If you use git versioning you should ultimately pushthe local git repository to a shared remote gitrepository.
In this way others could collaborate with you from acentralized location.
Git Version Control
Slide 43 of 57
![Page 44: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/44.jpg)
Group Exercise: Move out of the Workstation Cookbook$ cd ~
Slide 44 of 57
![Page 45: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/45.jpg)
Use chef generate to create a cookbook named apache.Write and apply a recipe named server.rb with thepolicy:
The package named httpd is installed.The file named /var/www/html/index.html iscreated with the content <h1>Hello, world!</h1>The service named httpd is started and enabled.
Apply the recipe with chef-apply.Verify the site is available by running curlhttp://localhost.
Lab Exercise: Setting up a Web Server
Slide 45 of 57
![Page 46: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/46.jpg)
Lab Exercise: Create a Cookbook$ chef generate cookbook apache
Installing Cookbook Gems:Compiling Cookbooks...Recipe: code_generator::cookbook * directory[/home/bmeyer/apache] action create - create new directory /home/bmeyer/apache * template[/home/bmeyer/apache/metadata.rb] action create_if_missing - create new file /home/bmeyer/apache/metadata.rb - update content in file /home/bmeyer/apache/metadata.rb from none to 37ed5f (diff output suppressed by config) * template[/home/bmeyer/apache/README.md] action create_if_missing - create new file /home/bmeyer/apache/README.md - update content in file /home/bmeyer/apache/README.md from none to 5c3d3a (diff output suppressed by config)... * cookbook_file[/home/bmeyer/apache/.gitignore] action create - create new file /home/bmeyer/apache/.gitignore - update content in file /home/bmeyer/apache/.gitignore from none to dd37b2 (diff output suppressed by config)
Slide 46 of 57
![Page 47: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/47.jpg)
Lab Exercise: Create a Cookbook$ chef generate recipe apache server
Installing Cookbook Gems:Compiling Cookbooks...Recipe: code_generator::recipe * directory[./apache/spec/unit/recipes] action create (up to date) * cookbook_file[./apache/spec/spec_helper.rb] action create_if_missing (up to date) * template[./apache/spec/unit/recipes/server_spec.rb] action create_if_missing - create new file ./apache/spec/unit/recipes/server_spec.rb - update content in file ./apache/spec/unit/recipes/server_spec.rb from none to a43970 (diff output suppressed by config) * template[./apache/recipes/server.rb] action create - create new file ./apache/recipes/server.rb - update content in file ./apache/recipes/server.rb from none to 3d6b92 (diff output suppressed by config)
Slide 47 of 57
![Page 48: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/48.jpg)
Lab Exercise: Create the Server Recipe~/apache/recipes/server.rb
package 'httpd'
file '/var/www/html/index.html' do content '<h1>Hello, world!</h1>'end
service 'httpd' do action [ :enable, :start ]end
Slide 48 of 57
![Page 49: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/49.jpg)
Lab Exercise: Apply the Server Recipe$ sudo chef-apply apache/recipes/server.rb
Recipe: (chef-apply cookbook)::(chef-apply recipe) * yum_package[httpd] action install - install version 2.4.6-40.el7.centos of package httpd * file[/var/www/html/index.html] action create - create new file /var/www/html/index.html - update content in file /var/www/html/index.html from none to 17d291 --- /var/www/html/index.html 2016-04-04 09:50:59.758483838 -0500 +++ /var/www/html/.chef-index.html20160404-21732-1o44k9g 2016-04-04 09:50:59.758483838 -0500 @@ -1 +1,2 @@ +<h1>Hello, world!</h1> * service[httpd] action enable - enable service service[httpd] * service[httpd] action start - start service service[httpd]
Slide 49 of 57
![Page 50: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/50.jpg)
Lab Exercise: Verify Website is Available$ curl localhost<h1>Hello, world!</h1>
Slide 50 of 57
![Page 51: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/51.jpg)
Group Exercise: Commit Your Work$ cd apache$ git init $ git add .$ git commit -m "Initial Apache Cookbook"
Slide 51 of 57
![Page 52: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/52.jpg)
What file would you read first when examining acookbook?
Discussion
Slide 52 of 57
![Page 53: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/53.jpg)
What file would you read first when examining acookbook?
What other recipes might you include in the apache orworkstation cookbook?
Discussion
Slide 53 of 57
![Page 54: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/54.jpg)
What file would you read first when examining acookbook?
What other recipes might you include in the apache orworkstation cookbook?
Can resources accept multiple actions?
Discussion
Slide 54 of 57
![Page 55: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/55.jpg)
What file would you read first when examining acookbook?
What other recipes might you include in the apache orworkstation cookbook?
Can resources accept multiple actions?
How often would you commit changes with versioncontrol?
Discussion
Slide 55 of 57
![Page 56: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/56.jpg)
CookbooksVersionsVersion control
Q&AWhat questions can we answer for you?
Slide 56 of 57
![Page 57: Chef for beginners module 3](https://reader034.fdocuments.us/reader034/viewer/2022042723/58f1d6641a28abf15e8b45b3/html5/thumbnails/57.jpg)
On to Module 4
Slide 57 of 57