chefでレシピ中の変数をtemplateで展開する

chefでレシピ中の変数をtemplateで展開する

複数のにたような仮想ホスト(apacheの)を作成する用事。eachで回して、その変数をtemplate中でも利用する。
variablesを利用するといいみたい。

レシピ中でvariableで変数を設定する

%w(a b c d e}.each do |item|
    template #{item}.conf
      path "/usr/local/apache2/conf/#{item}.conf
      source "temp.conf.erb"
      owner "root"
      group "root"
      variables ({
          :item => item
      })
    end
end

:item => itemってところが変数をいれているところです。このケースだとループで作成している変数を格納していますが、node値も当然設定可能。

テンプレート

テンプレート側でこんなふうに展開。

<VirtualHost *:443>
    ServerName     <%= @item %>.example.com

<%= @item %>のところに展開されます。
variableで複数設定可能。その場合はコンマで分割する。