Sensuの管理をChefで行う場合、subscriptions
の設定をどうするか考えた結果
下記のようにtemplate側でまとめるという方法があるのかなと思ったのですが
(attributesはrole to roleのみmergeされる。その際にnodeのattributesは破棄されてしまうので)
他に何か良い方法ありますかね。
もしくはそもそも私の認識に誤りがある可能性が高いので、
ご指摘頂ければありがたいです。
- roles/web_foo.json
"sensu": {
"node_subscriptions": [
"web_foo"
]
},
"run_list": [ "role[web]" ]
- /roles/web.json
{
"name": "web",
"description": "web",
"json_class": "Chef::Role",
"override_attributes": {
"sensu": {
"role_subscriptions": [ "web" ]
}
},
"default_attributes": {
},
"chef_type": "role",
"run_list": [
"role[base]"
]
}
- roles/base.json
{
"name": "base",
"description": "base",
"json_class": "Chef::Role",
"override_attributes": {
"sensu": {
"role_subscriptions": [ "all" ]
}
},
"default_attributes": {
},
"chef_type": "role",
"run_list": [
"recipe[sensu-settings]"
]
}
- sensu-settings/recipes/default.rb
template "/etc/sensu/conf.d/client.json" do
owner "root"
mode 0644
source "client.json.erb"
end
- client.json.erb
{
"client": {
"name": "<%= node[:hostname] %>",
"address": "<%= node[:ipaddress] %>",
<% _subscription = Array.new %>
<% _subscription += node[:sensu][:node_subscriptions] %>
<% _subscription += node[:sensu][:role_subscriptions] %>
"subscriptions": <%= _subscription %>
}
}
- client.json
{
"client": {
"name": "HOSTNAME",
"address": "IPADDR",
"subscriptions": ["web_foo", "all", "web"]
}
}