makotan _at_ gmail dot com

ServerとworkstationとnodeとattributeとCookbookとRoleとenvironmentとdatabagの関係


Serverはchefの中心にいてすべての情報を一元管理するまさにサーバ
OSSでもHostedでもその位置付けは変わらない
Chef-soloってServerの無いChefなので、Serverに登録するような情報は存在してない


workstationはServerを経由してnodeをコントロールするためのマシンで、chefで何かする時はworkstationを使う
ServerにHTMLベースのUIがついてて、そこでもworkstationと同様のことが出来るんだけど、個人的には使いにくい部分も多いので意識的にworkstationから使ってる


nodeはChefで調理する対象のマシンのこと。
サーバマシンでもクライアントマシンでも仮想マシンでも良い
nodeを新規に立ち上げるときは必ずnodeとclientの登録がセットになってて、そのときにchefServerのvalidation.pemって名前のpemがnodeに必要になる
node名は事前に存在してても問題なし。
clientは事前に存在するとエラーになる。回避策はclientを削除するか、作成時のclient.pemをclientの指定の場所に保存する


attributeはnodeの固有の値を決めたもの
node単位で設定することは当然出来るし、cookbookでデフォルト値を設定することも出来るし、roleに設定することも出来るし、environmentに設定することも出来る。
優先順はたぶんこんな感じ。environmentとroleの関係があってるかが微妙(^^ゞ
node > environment > role > cookbook



cookbookはnodeをどう調理するかを定義したもの
ここの中にrecipeとかtemplateとか色々入ってる
最終的にnodeにrun_listという形でcookbookを渡すことで実行する


roleはcookbookとattributeをまとめたもの
たとえば、webサーバ用のroleを定義しておいて、webサーバに必要な各種プログラムとか設定とか入れたり、バッチサーバ用のroleを定義しておいて・・・とか、zabbix用のroleを定義して・・・とかそんな感じで複数用意してサーバを追加したときにnodeにenvironmentとroleを割り当てるとすべて終わりってのが個人的には理想


environmentはattributeをまとめたもの
たとえば、検証環境とかステージング環境とか本番環境で異なる値をここに全部保持しておいて、サーバを追加したときにnodeにenvironmentとroleを割り当てるとすべて終わりってのが個人的には理想
他にもrecipeから簡単に参照できるからdatabagsから値を取得するときのキーにも使える


databagは秘密にしたい値をまとめたもの
本番環境のパスワードみたいな秘密にしないとまずい情報はいっぱいあるので、それを保持するためのもの
chef-client実行するとサーバ内部には平文で保持されるけど・・・まぁそれはサーバへの物理アクセスではじいてるって事でw