The Chef client enables you to run shell commands by using the execute
resource. However, how can you pass arguments to such shell commands? Let's assume you want to calculate a value and pass it to the shell command in your recipe. How can you do that? Let's find out...
Make sure you have a cookbook called my_cookbook
, and that the run_list
of your node includes my_cookbook
, as described in the Creating and using cookbooks recipe in Chapter 1, Chef Infrastructure.
Let's see how we can pass Ruby variables into shell commands:
Edit your default recipe. You'll pass an argument to a shell command by using an
execute
resource:mma@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb max_mem = node['memory']['total'].to_i * 0.8 execute 'echo max memory value into tmp file' do command "echo #{max_mem} > /tmp/max_mem" end
Upload the modified cookbook to the Chef server:
mma@laptop:~/chef-repo $ knife cookbook upload...