Using pure Ruby in templates for conditionals and iterations
Switching options on and off in a configuration file is a pretty common thing. Since Chef uses ERB as its template language, you can use pure Ruby to control the flow in your templates. You can use conditionals or even loops in your templates.
Getting ready
Make sure that 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.
How to do it…
Let's create a hypothetical configuration file listing the IP addresses of a given set of backend servers. We only want to print that list if the flag called enabled
is set to true
:
Edit your cookbook's default recipe:
mma@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb template "/tmp/backends.conf" do mode "0444" owner "root" group "root" variables({ :enabled => true, :backends => ["10.0.0.10", "10.0.0.11", "10.0.0.12"] }) end...