Атрибут узла шеф-повара не обновляется, когда я меняю роль, старое значение сохраняется.
В node['nagios']['custom_variables']['styleurl']
атрибут не обновляется до нового значения /urlprefix
, и застрял на старом значении urlprefix
. Я изменил определение роли более недели назад.
Другой узел с chef-client (который является сервером nagios, который смотрит на эти атрибуты):
# chef-shell -z
chef > nodes.show("server2.example.com")['nagios']['custom_variables']['styleurl']
=> "urlprefix"
Определения узла и роли (ниже) не включают это значение, а включают только /urlprefix
.
debug_value
говорит мне, что это происходит из-за переопределения.
chef > nodes.show("server2.example.com").debug_value("nagios", "custom_variables", "styleurl")
=> [["set_unless_enabled?", false], ["default", :not_present], ["env_default", :not_present], ["role_default", :not_present], ["force_default", :not_present], ["normal", :not_present], ["override", "osm"], ["role_override", :not_present], ["env_override", :not_present], ["force_override", :not_present], ["automatic", :not_present]]
knife node show -l
показывает мне, что есть override
для этой переменной. (см. выходные данные ниже).
Я использую эти атрибуты для настройки моих проверок nagios. Nagios настроен с помощью chef, поэтому очевидно, что мои проверки nagios не работают.
Почему я не могу изменить атрибут роли? Почему не роль override_attribute
не очень хорошо отменять атрибут? Как я могу изменить этот атрибут?
Простой узел, все сделано в роли.
$ knife node show -Fjson server2.example.com
{
"name": "server2.example.com",
"chef_environment": "_default",
"run_list": [
"role[server2]"
],
"normal": {
"tags": []
}
}
Только server2.example.com имеет server2
роль. Все сделано в роли. Это единственное место, где styleurl
установлен.
$ knife role show -Fjson server2
{
"name": "server2",
"description": "",
"json_class": "Chef::Role",
"default_attributes": {
},
"override_attributes": {
"nagios": {
"custom_variables": {
"styleurl": "/urlprefix"
}
}
},
"chef_type": "role",
"run_list": [
"role[ubuntu-precise-basic]",
"recipe[firewall::http]",
"recipe[firewall::https]"
],
"env_run_lists": {
}
}
В custom_variables::styleurl
нигде в кулинарной книге не определено:
$ grep -R "custom_variables" cookbooks/
cookbooks/nagios/templates/default/hosts.cfg.erb: <% if node['nagios'] && node['nagios']['custom_variables'] %>
cookbooks/nagios/templates/default/hosts.cfg.erb: <% node['nagios']['custom_variables'].each do |key, value| -%>
cookbooks/nagios/templates/default/hosts.cfg.erb: <% if n['nagios'] && n['nagios']['custom_variables'] %>
cookbooks/nagios/templates/default/hosts.cfg.erb: <% n['nagios']['custom_variables'].each do |key, value| -%>
cookbooks/nagios/templates/default/hosts.cfg.erb: <% if n['nagios'] && n['nagios']['custom_variables'] %>
cookbooks/nagios/templates/default/hosts.cfg.erb: <% n['nagios']['custom_variables'].each do |key, value| -%>
$
knife node show
(частично отредактировано / отредактировано)
$ knife node show -Fjson -l server2.example.com
{
"name": "server2.example.com",
"chef_environment": "_default",
"run_list": [
"role[server2]"
],
"normal": {
"tags": [
]
},
"override": {
"nagios": {
"custom_variables": {
"styleurl": "osm"
}
}
},
...
"recipes": [
"accounts",
"packages::precise",
"firewall::ssh",
"firewall::munin",
"firewall::nrpe",
"munin::client",
"munin-checks",
"nrpe",
"nagios-checks",
"fail2ban",
"openssh",
"mycompany::apache_logrotate",
"firewall::http",
"firewall::https"
],
"roles": [
"server2",
"ubuntu-precise-basic",
"mycompany-accounts"
]
}
}
Повар v11.8
После публикации этого вопроса я попытался запустить chef-client
на server2.example.com
узел напрямую. И теперь нож и другой узел могут видеть правильные атрибуты узла, и проблема устранена.
Так что "беги chef-client
на пораженном узле »устраняет эту проблему.
Для дальнейшего пояснения: объект узла содержит два типа данных. «Желаемое состояние», такое как список запусков и среда шеф-повара, обычно обновляются человеком, поэтому они всегда будут искать актуальные данные. «Текущее состояние» (в основном в форме атрибутов узла) сохраняется на сервере Chef только в конце успешного схождения, чтобы задокументировать состояние машины в тот момент.