ChefでRoleやRecipeを実行するとき渡すべき必須のattributesをチェックする
例えばlvsを構築するときに、その下にぶら下がるreal serverたちのIPアドレスとかって、chef-client実行するときに-jオプション使ってjsonでattributes渡して欲しいわけですが、実際に実行する前に必須のものがなければ弾きたい、と思って色々ためした結果
Roleならjsonに、Recipeならattributes/default.rbに、__required__とかそういう感じの名前でattributesを作って、そこに配列で指定必須のattributesを並べて書いておく。
{
"name": "nannchara-kannchara",
"default_attributes": {
},
"json_class": "Chef::Role",
"env_run_lists": {
},
"run_list": [
"recipe[foo]",
"recipe[bar::baz]"
],
"description": "hogeraccho",
"chef_type": "role",
"override_attributes": {
"__required__": [
"test",
"test1",
"test2"
]
}
}んで knife role from file nannchara-kannchara.json すると、knife search コマンドで取り出せるようになるので、あとは適当に整形すれば一覧として取り出せる
$ knife search role -F json -q "name:nannchara-kannchara AND __required__:*" | tr -d '\n' | tr -d ' ' | grep -oE "required[^]]+" | awk -F[ '{print $2}' | tr ',' '\n' | tr -d '"'
test
test1
test2無理やり感があるがまぁ使えるのでよし。