読者です 読者をやめる 読者になる 読者になる

Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

ひとつの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
【略】