Назад | Перейти на главную страницу

Откуда взялся этот атрибут шеф-повара и почему я не могу его изменить?

Атрибут узла шеф-повара не обновляется, когда я меняю роль, старое значение сохраняется.

В 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 только в конце успешного схождения, чтобы задокументировать состояние машины в тот момент.