Introduction
Resources are the “elementary ingredient” of Chef house. Before mounting up on the spikes of chef’s elevations, it's favorable to tailor your suit with basics. Combining common ingredients to make a new play substance is always thrilling!. I wish I had some magic secrets or shortcuts to share, but the truth is that you have to start with the ABC's and then you can rule over the game.
Trigger a VM
Git clone our repository dedicated for this blog series.
$ git clone git@github.com:OpsTree/Chef.git
Change directory to Chef/centos/chefResourceBackings. Here you find a Vagrantfile which spin up a centos7 machine with chefdk and other tools installed in it.
$ cat Vagrantfile
Launch a new vagrant machine and login.
$ vagrant up
$ vagrant ssh
Your learning environment is ready. Although in this blog we do not focus a lot on practicals, we try to clear our theoretical concepts.
Backings of Resources
Chef resources are the statements which define the configuration approach for any element. From the officials of chef, resources are
- Describes the desired state for a configuration item
- Declares the steps needed to bring that item to the desired state
- Specifies a resource type—such as package, template, or service
- Lists additional details (also known as resource properties), as necessary
- Are grouped into recipes, which describe working configurations
Chef works with two basic parts, properties and actions.
Properties
Properties are the attributes and definitions for the target element of any resources. Some common properties for all resources without exception.
ignore_failure
What to do when a resource is fail in its doings i.e. continue or stop. Default value is false or stop.
provider
This is an optional property. You can explicitly define the correct provider for a resource. In common practices this is not mandatory to specified.
retries
Number of attempts that a resource tries in chef-run. Default value is 0.
retry_delay
Time duration between two consecutive tries. Default value is 2.
sensitive
This defines that the data in resource is sensitive and is not logged by chef-client. Default value is false. This property only applies to the execute, file and template resources.
Action
Actions differ for distinct resources. A common action for every resource is :nothing. Nothing action stated that resource should not do anything until it is notified by any other resource.
Some Basic Resources
Lets took example of some of the basic resources.
- Package
This resource manage packages. This install, uninstall and upgrade any package. This resource is also a platform for some other dependent package management resources such as apt_package, dpkg_package, gem_package, yum_package etc. Available actions are :install, :purge, :remove, :upgrade and :nothing.
Example:
package 'tar' do
version '1.26-29.el7'
action :install
end
version '1.26-29.el7'
action :install
end
OR
package 'tar' do
action :remove
end
action :remove
end
- File
This is responsible to manage files on a machine. Available actions are :create, :create_if_missing, :delete, :nothing and :touch.
Example
file '/tmp/test.txt' do
content 'This is testing file.'
mode '0755'
owner 'root'
group 'root'
end
content 'This is testing file.'
mode '0755'
owner 'root'
group 'root'
end
OR
file '/tmp/test2.txt' do
content IO.read('/vagrant/resources/string.txt')
action :create
end
content IO.read('/vagrant/resources/string.txt')
action :create
end
This will create a test.txt file under /tmp directory and put the contents of string.txt file into it.
- Service
Subjected to manage services. Available actions are :disable, :enable, :nothing, :reload, :restart, :start and :stop.
Example
service 'nginx' do
action :start
end
action :start
end
OR
service 'nginx' do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
This will ensure enable then start options for nginx service. Before this, install nginx using package resource.
- Template
This resource calls chef templates to dynamically generate static files. Templates are ".erb" files with some variables and placed under “/templates” directory of cookbook. Available actions are :create, :create_if_missing, :delete, :nothing and :touch. Template resource only available with cookbooks, you can not use this resource with chef-apply from command line.
Example
template '/tmp/sshd_config' do
source 'sshd_config.erb'
owner 'root'
group 'root'
mode '0755'
end
source 'sshd_config.erb'
owner 'root'
group 'root'
mode '0755'
end
OR
template '/tmp/config.conf' do
source 'config.conf.erb'
variables(
:config_var => 'mytext'
)
end
source 'config.conf.erb'
variables(
:config_var => 'mytext'
)
end
This will pass variables to config.conf.erb file to generate config.conf file.
Extended Resource
Have some attention towards less likely used but important resources.
- Git
This resource manages git repository by interacting with source code management system. Git version 1.6.5 (or higher) is required. Available actions are :checkout, :export, :nothing and :sync.
Example
git '/opt/mygit/' do
repository 'https://github.com/OpsTree/Chef.git'
revision 'master'
action :sync
end
repository 'https://github.com/OpsTree/Chef.git'
revision 'master'
action :sync
end
- Link
Resource is responsible to manage soft and hard links. Available actions are :create, :delete and :nothing.
Example
link '/tmp/myfile' do
to '/etc/ssh/sshd_config'
end
to '/etc/ssh/sshd_config'
end
OR
link '/tmp/myhardfile' do
to '/etc/ssh/sshd_config'
link_type :hard
end
to '/etc/ssh/sshd_config'
link_type :hard
end
The default link_type is :symbolic.
- Script
This resources is used to execute external script. The supported interpreters are Bash, csh, Perl, Python, or Ruby. Available actions are :run and :nothing.
Example
script 'extract_module' do
interpreter 'bash'
cwd '/tmp'
code <<-EOH
mkdir -p /tmp/mytest
touch /tmp/mytest/file.txt
EOH
end
interpreter 'bash'
cwd '/tmp'
code <<-EOH
mkdir -p /tmp/mytest
touch /tmp/mytest/file.txt
EOH
end
- Cron
To manage your cron jobs use this resource. If a property is not specified then default ‘*’ value is taken. Available actions are :create, :delete and :nothing.
Example
cron 'noop' do
hour '5'
minute '0'
command '/bin/true'
end
hour '5'
minute '0'
command '/bin/true'
end
OR
cron 'tuesdaycron' do
minute '50'
hour '11'
weekday '2'
command '/bin/true'
action :create
end
minute '50'
hour '11'
weekday '2'
command '/bin/true'
action :create
end
This will run the cron job only on tuesday 11:50am.
To test all resources available above, go to resource directory under “chefResourceBackings” directory. All resources are available as bash script.
Custom Resources
It’s an extension of the initially available properties. Chef allows you to create your own resources. These custom resources extend the basic definitions of the built-in resources. The custom resources resides in the “/resources” directory of any cookbook. Conventionally name of any custom resource is the name of cookbook and name of resource file separated by underscore (_). Custom resource creation is not an initial task for us so we skip this for now.
This is difficult to cover all about the resource(every resource and their properties or actions) in this article. Refer to chef-resources for more information.
It’s hard to get this boring stuff exciting in any manner. But it's a fact that every serious effort makes you closer towards the excellence.
“The Expert In Anything Was Once A Beginner. “
Wanna be an adroit of Chef then from now “practice like a devil play like an angel”.
Very nice presentation and good content
ReplyDelete