makotan _at_ gmail dot com

アプリケーション固有のパラメータファイルとか、各種サーバの設定ファイルとか、OSそのものの設定ファイルとかを作る場合

ファイルそのものはerbで生成する
ファイルの可変の値はnodeの値かdatabagから取ってくる
ファイルのユーザとか権限も生成のタイミングで設定
テンプレートはerbなのでループから何でも書ける

基本的な書き方

template "/tmp/config.conf" do
  source "config.conf.erb"
end

これで/tmp/にconfig.confが生成できる
もし、生成前後で結果が変わらなかった場合は結果として何もしない

パーミッションを設定する

template "/tmp/config.conf" do
  source "config.conf.erb"
  mode 0700
  owner "makotan"
  group "makotan"
end

これでmakotanユーザしか見ることの出来ないファイルが完成

erbに渡す値を設定する

通常のnodeの値はerbにnode["configs"]["config_var"]こんな風に書けば値を設定できるけど、Databagからは取得できないのでこんな風にして

template "/tmp/config.conf" do
  source "config.conf.erb"
  variables(
    :config_var => node["configs"]["config_var"]
  )
end

erbで @config_var って書けばOK!

ファイルを更新したときサービスを再起動する

template "/tmp/config.conf" do
  source "config.conf.erb"
  notifies :restart, "service[apache]", :delayed
end

ファイルパスをノードの情報から引っ張って書き換える

template "#{node[:hoge][hoge]}/config.conf" do
  source "config.conf.erb"
end