De onde vem esse atributo de chef e por que não posso alterá-lo?

1

Um atributo para um nó chef não está sendo atualizado quando eu mudo a função, o valor antigo está persistindo.

O atributo node['nagios']['custom_variables']['styleurl'] não está atualizando para o novo valor de /urlprefix e está preso em um valor antigo urlprefix . Mudei a definição do papel há mais de uma semana.

Outro nó com chef-client (que é o servidor nagios que analisa esses atributos):

# chef-shell -z
chef > nodes.show("server2.example.com")['nagios']['custom_variables']['styleurl']
 => "urlprefix"

As definições de nó e função (abaixo) não incluem esse valor e incluem apenas /urlprefix .

debug_value me diz que isso vem de uma substituição.

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 mostra que há um override para essa variável. (veja abaixo para saída).

Eu uso esses atributos para configurar minhas verificações nagios. O Nagios é configurado com o chef, então obviamente minhas verificações de nagios estão falhando.

Por que não consigo alterar o atributo na função? Por que a função override_attribute não, bem sobrepõe a atribuição? Como posso alterar esse atributo?

Configuração do nó

Nó simples, tudo é feito na função.

$ knife node show -Fjson server2.example.com
{
  "name": "server2.example.com",
  "chef_environment": "_default",
  "run_list": [
    "role[server2]"
  ],
  "normal": {
    "tags": []
  }
}

Papel

Somente server2.example.com tem a função server2 . Tudo é feito no papel. Este é o único local onde o styleurl está definido.

$ 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": {
  }
}

Atributos do livro de receitas

O custom_variables::styleurl não está definido em nenhum lugar no livro de receitas:

$ 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

(parcialmente redigido / editado)

$ 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"
    ]
  }
}

Chef v11.8

    
por Rory 06.09.2016 / 09:57

2 respostas

0

Depois de postar essa pergunta, tentei executar chef-client no nó server2.example.com diretamente. E agora faca e amp; o outro nó pode ver os atributos de nós corretos e o problema é corrigido.

Então, "Executar chef-client no nó afetado" corrige esse problema.

    
por 06.09.2016 / 10:42
0

Para explicar ainda mais: o objeto node contém dois tipos de dados. O "estado desejado", como a lista de execução e o ambiente do chef, geralmente são atualizados por um ser humano, para que eles sempre fiquem atualizados. O "estado atual" (principalmente na forma de atributos do nó) só é salvo no Servidor Chef no final de uma convergência bem-sucedida para documentar o estado da máquina naquele momento.

    
por 26.09.2016 / 01:47

Tags