ひとつのcookbookを複数のroleから使っていて、attributesをrole毎に使い分けたい場合
Chefです。
やりたいことはタイトルのまま。
例えばapacheのcookbookを作ったとして、設定ファイルとかの構成はほとんど一緒だけど、あるサーバは若干用途が違っていて、パラメータを少し変えたい場合などがあると思います。
そういうときに、attributesをroleごとに分けたいんだけど、ちょっとハマったのでメモをば。
ifで条件書いてあげる時に、
if node[:roles] == 'front_web'
じゃなくて、
if "#{node[:roles]}" == 'front_web'
こうする。
良い例
# vim attributes/default.rb 【略】 if "#{node[:roles]}" == 'front_web' default[:apache][:prefork][:startservers] = 36 default[:apache][:prefork][:minspareservers] = 36 default[:apache][:prefork][:maxspareservers] = 36 default[:apache][:prefork][:serverlimit] = 1000 default[:apache][:prefork][:maxclients] = 1000 default[:apache][:prefork][:maxrequestsperchild] = 10000 elsif "#{node[:roles]}" == 'back_web' default[:apache][:prefork][:startservers] = 500 default[:apache][:prefork][:minspareservers] = 500 default[:apache][:prefork][:maxspareservers] = 500 default[:apache][:prefork][:serverlimit] = 500 default[:apache][:prefork][:maxclients] = 500 default[:apache][:prefork][:maxrequestsperchild] = 400000 end 【略】
ダメな例
# vim attributes/default.rb 【略】 if node[:roles] == 'front_web' default[:apache][:prefork][:startservers] = 36 default[:apache][:prefork][:minspareservers] = 36 default[:apache][:prefork][:maxspareservers] = 36 default[:apache][:prefork][:serverlimit] = 1000 default[:apache][:prefork][:maxclients] = 1000 default[:apache][:prefork][:maxrequestsperchild] = 10000 elsif node[:roles] == 'back_web' default[:apache][:prefork][:startservers] = 500 default[:apache][:prefork][:minspareservers] = 500 default[:apache][:prefork][:maxspareservers] = 500 default[:apache][:prefork][:serverlimit] = 500 default[:apache][:prefork][:maxclients] = 500 default[:apache][:prefork][:maxrequestsperchild] = 400000 end 【略】