2013年3月1日金曜日

Chef Practice :: 環境が異なっても同じレシピを使うパターン1 #opschef

dev、staging、productionとそれぞれの環境が異なる事が殆どです。

これらの環境ごとにCookbookやrecipeを分けるのも1つの方法ですが冗長になる運用コストが高いので可能な限り1つのrecipeにまとめれたほうがよいです。

Chef-serverを使うことでこの環境の差は比較的用意に乗り越えることができます。

environment


environmentでそれぞれの環境分作りノードを予め割り当てておきます。

recipe内からはnode.chef_environmentでenvironmentを取得できます。

if node.chef_environment =~ /staging|production/

else

end


environmentはchef-client実行時に"chef-client -E Production"と実行している場合は注意してください。
この場合Attributesのchef_environmentとして登録されます。

if node[:chef_environment] =~ /staging|production/

else

end


environmentとtemplates


templates利用する際はrecipe内でnode.chef_environmentを書くよりも環境ごとにtemplatesを準備します。


template "/etc/passwd" do
source "passwd." + node.chef_environment + "conf.erb"
end


attributesとenvironmentとtemplates



templatesを環境ごとにつくらずattributesにまとめる方法です。
ex)attributes/default.rb

default["passwd"]["open"] = [
"root:x:0:0:root:/root:/bin/bash",
"bin:x:1:1:bin:/bin:/sbin/nologin",
"daemon:x:2:2:daemon:/sbin:/sbin/nologin",
...


ex)recipes/default.rb


template "/etc/passwd" do
mode 00644
source "/etc/passwd.erb"
if node[:chef_environment] =~ /staging|production/

else

end
end

0 件のコメント:

コメントを投稿