1 votes

D'où provient cet attribut chef et pourquoi ne puis-je pas le changer ?

Un attribut pour un nœud chef n'est pas mis à jour lorsque je change le rôle, l'ancienne valeur persiste.

L'attribut node['nagios']['custom_variables']['styleurl'] ne se met pas à jour avec la nouvelle valeur de /urlprefix, et reste bloqué sur une ancienne valeur urlprefix. J'ai modifié la définition du rôle il y a plus d'une semaine.

Un autre nœud avec chef-client (qui est le serveur nagios qui regarde ces attributs):

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

Les définitions de nœud et de rôle (ci-dessous) n'incluent pas cette valeur, et comprennent uniquement /urlprefix.

debug_value me dit que cela provient d'un remplacement.

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 me montre qu'il y a un override pour cette variable. (voir ci-dessous pour la sortie).

J'utilise ces attributs pour configurer mes vérifications nagios. Nagios est configuré avec chef, donc évidemment mes vérifications nagios échouent.

Pourquoi ne puis-je pas changer l'attribut dans le rôle? Pourquoi la surcharge d'attribut du rôle n'écrase-t-elle pas l'attribut? Comment puis-je changer cet attribut?

Configuration du nœud

Nœud simple, tout se fait dans le rôle.

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

Rôle

Seul server2.example.com a le rôle server2. Tout se fait dans le rôle. C'est le seul endroit où styleurl est défini.

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

Attributs du Cookbook

Le custom_variables::styleurl n'est défini nulle part dans le cookbook:

$ 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

(partiellement censuré/modifié)

$ 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

0voto

mblsha Points 305

Après avoir publié cette question, j'ai essayé d'exécuter chef-client sur le nœud server2.example.com directement. Et maintenant, knife et l'autre nœud peuvent voir les attributs du nœud corrects, et le problème est résolu.

Donc, "Exécuter chef-client sur le nœud affecté" résout ce problème.

0voto

coderanger Points 826

Pour expliquer un peu plus en détail : l'objet node contient deux types de données. L'"état désiré" tel que la liste d'exécution et l'environnement chef sont généralement mis à jour par un humain afin qu'ils soient toujours à jour. L'"état actuel" (sous forme d'attributs de noeud principalement) n'est sauvegardé sur le serveur Chef qu'à la fin d'une convergence réussie pour documenter l'état de la machine à ce moment-là.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X