J'essaie d'utiliser Chef pour gérer de nouvelles machines virtuelles. J'utilise un serveur Chef dédié et effectue tout ce travail à partir d'un poste de travail distinct vm.
Actuellement, je clone une image vm de base, puis j'utilise un couteau bootstrap pour installer Chef et ramener la vm à un état cohérent.
Je peux spécifier un environnement ou une liste d’exécution pour la machine virtuelle; Je peux remplacer certains paramètres de mon environnement, par exemple. J'ai le chef-client intervalle dans le bloc "substitutions" de l'environnement de test configuré pour exécuter le client toutes les 60 secondes pendant les tests, de sorte que je n'ai pas à exécuter manuellement chef-client à chaque fois.
Par exemple, mon flux de travail est le suivant:
clone template vm et démarrez vm
définissez le nom d'hôte manuellement (mettez à jour/etc/hostname et/etc/hosts) et redémarrez
Bootstrap le noeud avec les recettes initiales
couteau bootstrap chef-test1 -r 'recette [ntp], recette [chef-client]'
éditez le noeud pour refléter le nouvel environnement
Le problème que je rencontre est la définition des attributs par nœud. J'aimerais utiliser le hostname cookbook pour définir le nom d'hôte du nœud. Si je le configure dans un rôle, chaque serveur devra alors créer un nouveau rôle. Mais lorsque j'essaie d'initialiser et d'inclure ce rôle, une erreur se produit:
chef-test1 * log[Please set the set_fqdn attribute to desired hostname] action write[2013-12-09T16:26:56-07:00] WARN: Please set the set_fqdn attribute to desired hostname
Lorsque j'amorce sans cette recette et que j'essaie de modifier le nœud et de définir l'attribut "set_fqdn", je ne peux pas enregistrer l'attribut, par exemple. ce json:
{
"name": "chef-test1",
"set_fqdn": "chef-test1.local.fqdn",
"chef_environment": "test-dev1",
"normal": {
"tags": [
]
},
"run_list": [
"recipe[ntp]",
"recipe[chef-client]",
"recipe[hostname]"
]
}
quand je sors de mon éditeur, un couteau me dit:
Node not updated, skipping node save
J'ai tenté de modifier cet attribut dans l'interface graphique du chef et cet attribut ne sera pas enregistré.
J'ai trouvé ce type qui est en train de créer le fichier json dans /etc/chef/chef.json, faisant ce que je pensais, mais je ne sais pas comment /etc/chef/chef.json entre en jeu. (mise à jour pour chaque nouveau nœud? Je n'utilise pas chef-solo alors c'est peut-être là que je ne comprends plus).
Selon ce fil de discussion il n’est pas possible de remplacer les attributs par défaut avec le nœud de couteau, mais "set_fqdn" n’est pas un défaut. J'aimerais éviter de créer un rôle pour chaque nœud et je pense que je peux utiliser le livre de noms d'hôte pour réduire le besoin de définir manuellement le nom d'hôte, comme par exemple:
couteau bootstrap saucy64 -r 'recette [ntp], recette [chef-client], recette [nom hôte]' --json '"{set_fqdn": "chef-test1.local.tld", "chef_client": {"interval" : "600"} '
couteau bootstrap Fedora19 -r 'recette [ntp], recette [chef-client], recette [nom hôte]' --json '"{set_fqdn": "chef-test2.local.tld", "chef_client": {"interval" : "60"} '
J'apprécie l'aide.
Je vois des problèmes:
knife node edit
, vous ne pouvez pas définir l'attribut en tant qu'attribut de niveau supérieur à côté de fqdn, etc. Vous devez le placer sous normal
. C'est la hiérarchie entre default
et override
. Voir Priorité d'attributknife node edit
odeurs. Je préférerais ne pas le faire (cela pourrait aller pour le nom d'hôte, mais pour tout le reste, il est impossible de suivre de tels changements dans le contrôle de version). Essayez d’exécuter le livre de recettes hostname
.chef.json
devrait être évité, à mon humble avis. Votre logique devrait être à l'intérieur de vos livres de cuisinebase
ou similaire qui inclut les éléments triviaux de chaque nœud (comme ntp
, chef-client
et également le nom d'hôte).-E myenv
(mais oui, je me demande pourquoi cela n'est pas documenté)-N NAME
ou --node-name NAME
.que diriez-vous d’une recette qui définit le nom d’hôte en fonction du nom de noeud défini lorsque vous amorcez le noeud, I en a écrit un qui est un fork du livre de recettes original chef-hostname.
Cela marche:
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}'
(également trouvé en train de lire knife help bootstrap
help)
Cette réponse de stackoverflow utilise une syntaxe similaire.
Edit: Eh bien, presque, cela crée deux entrées de nœud. besoin de spécifier le nom du noeud avec le paramètre -N:
knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}' -N chef-test2
knife bootstrap 192.168.15.43 --run-list 'recipe[hostname],recipe[ntp],recipe[chef-client]' --json-attributes '{"set_fqdn": "chef-test2"}' --node-name chef-test2