nodes/, roles/, environments/ でJSONの属性名とか微妙に違うので、公式サンプルからゆるくテンプレ化したい。
埋めるべき項目がわかんないと、結構迷うので。ということで個人用メモとして残しておきます。
概要
-
run_list: 実行するレシピ -
attributes: レシピに適用する属性値
この2つを決めるための定義ファイルが nodes/, roles/, environments/ から呼び出される。
-
nodes/<hostname>.json: ホストごとの設定 -
roles/<rolename>.json: 役割(role)別の設定。利用に際して初心者Chefアンチパターンを読むことをおすすめする。 -
environments/<envname>.json: environmentの設定を書く。開発用や本番用などの環境で分けて、同じ環境内の複数のホストで共通の設定(DBの接続先など)があればここに書くと便利。
chef_type と json_class も記載したが、固定の情報ではあるので無くても動く。が、万が一rolesのテンプレからnodesにコピーしたりした時にわかりにくいので、コピペ用に書いておく。
nodes
参考1 : https://docs.getchef.com/knife_node.html
参考2 : https://github.com/opscode/chef/blob/master/lib/chef/node.rb
{
"name": "sample",
"chef_type": "node",
"json_class": "Chef::Node",
"chef_environment" : "sample_env",
"run_list": [
"recipe[hoge]",
"role[foo]"
],
"default": {
},
"normal": {
},
"override": {
},
"automatic": {
}
}
-
"chef_environment"でenvironmentが指定できる。指定がない場合は_defaultになる。 -
"automatic"は ohai で生成されるサーバ内のデータだから基本的に書くことはない
roles
参考1 : https://docs.getchef.com/knife_role.html
参考2 : https://github.com/opscode/chef/blob/master/lib/chef/role.rb
{
"name": "role1",
"description": "Description for Role",
"chef_type": "role",
"json_class": "Chef::Role",
"run_list": [
"recipe[cookbook_name::recipe_name]",
"role[role_name]"
],
"default_attributes": {
},
"override_attributes": {
}
}
- 別の
roleを参照することができるっぽい?
environments
参考1 : https://docs.getchef.com/knife_environment.html
参考2 : https://github.com/opscode/chef/blob/master/lib/chef/environment.rb
ドキュメントの方にJSONサンプルがないでござる。
{
"name": "sample",
"description": "サンプル環境",
"chef_type": "environment",
"json_class": "Chef::Environment",
"default_attributes": {
},
"override_attributes": {
},
"cookbook_versions" : {
"rabbitmq", "= 3.2.2"
}
}
-
run_listは書けない -
cookbook_versionsで利用するcookbookのバージョンを指定できるらしい
data_bags
参考 : https://docs.getchef.com/essentials_data_bags.html
ついでに data_bags についてメモ。これも利用に際して初心者Chefアンチパターンを読むことをおすすめする。
data_bags/<data_bag_name>/<data_bag_item_name>.json に定義を書いて、レシピの中から利用する。
利用すると言っても上記の属性値のように自動でロードされるわけではなく、Rubyコードで読みに行く。
{
"id": "hoge",
"password": "$1$YY0QI8p.$6zBvRUgjIBhF5Q7b26sSI1"
}
data_bag("users").each { |id|
u = data_bag_item("users", id)
user id do
password u["password"]
end
}