Je voulais passer des attributs à chef-client
à l'exécution. Y a-t-il un moyen de faire la même chose? Je regardais dans chef-client -j
Option, mais à ma connaissance, il peut être utilisé pour spécifier Run_List. Puis-je passer des attributs dedans? Si oui, comment?
Oui, vous pouvez utiliser l'option -j
option de fichier JSON pour remplir des attributs de nœuds.
{
"my_attribute": "I like attributes!"
}
Cela rendra un attribut nommé my_attribute
disponible dans vos livres de livres. Par exemple,
Chef::Log.info(node['my_attribute'])
Ou,
if node['my_attribute'] =~ /like/
package "foo-likes-attributes" do
action :install
end
end
Réglage d'une version initiale Run_List est l'utilisation la plus courante du fichier Attributs JSON pour le client Chef. Si vous utilisez Chef Client + Chef Server, vous pouvez simplement modifier l'objet NODE sur le serveur via le WebUI (Open Source Chef Server) ou la console de gestion (Chef OPSCode hébergé/chef privé) ou via knife node edit
Si vous utilisez l'outil de ligne de commande, couteau.
Notez que l'utilisation du fichier JSON est comme la modification de l'objet de nœud sur le serveur, les attributs définis ici "normal" de la priorité comme lorsqu'ils sont utilisés dans une recette, et ces valeurs d'attribut seront enregistrées sur l'objet Node sur le serveur à la fin d'une course réussie.
vous pouvez le faire sur la ligne de commande, mais - surtout dans une course de couteau - cela commencera à regarder reealy ooky:
chef-client \
-o vmware-tools \
--force-formatter \
-j '<(echo {\"vmware-tools\":{\"style\":\"rpm\"}})'
Mais ici, nous sommes en train de tirer parti -j et a <(notation)
pour créer le fichier JSON à la volée, comme des artefacts sont jetés dans Via Couteau (ou SSH-I, ici). Si vous devez le faire, le risque est que les délimiteurs conflictuels vous conduiront insensés à peu près au moment où vous le faites travailler.
Le moyen idéal d'utiliser des attributs est de les écrire dans votre livre de recettes ou dans un sac de données. Voici les emplacements de fichiers pour l'une ou l'autre:
|- chef-repo
|---- cookbooks
|------- attributes
|---------- default.rb
|------- recipes
|---------- default.rb
|---- data_bags
|------- users
|---------- john.json
|---------- susan.json
|------- databases
|----------- master.json
|----------- slave.json
Vous pouvez stocker des données dans vos fichiers de sac de données au format JSON de base (knife create data_bag users
).
$ knife data bag create users john
{
"id" : "john"
"age" : "27"
"height" : "60in"
}
Si vous choisissez d'utiliser des sacs de données (je les recommandes si vous avez beaucoup d'utilisateurs ou de serveurs de base de données différents (dans ce contexte)), vous pouvez afficher plus d'informations sur https://docs.getchef.com/dsl_recpe_mesthod_data_bag .html . De plus, il est plus facile de créer un répertoire users
dans votre répertoire data_bags, et créez les fichiers utilisateur .json de là (~/chef-repo/data_bags/userson/john.json) avec le contenu ci-dessus, puis télécharger le sac de données sur le serveur de chef: knife data bag from file users /path/to/data_bags/users/john.json
Vous pouvez également stocker les données dans votre fichier d'attributs:
$ vi ~/chef-repo/cookbooks/my-cookbook-name/attributes/default.rb
default['my-cookbook-name']['user-1'] = "John"
default['my-cookbook-name']['user-1']['age'] = "27"
default['my-cookbook-name']['user-1']['height'] = "60in"
$ vi ~/chef-repo/cookbooks/my-cookbook-name/default.rb
template "/root/user-list" do
action :create
source "user-list.erb"
end
$ vi ~/chef-repo/cookbooks/my-cookbook-name/templates/default/user-list.erb
<html>
<head>
<title>My User List</title>
</head>
<body>
<h1>User List</h1>
User 1: <%= node['my-cookbook-name']['user-1'] %>
User Age: <%= node['my-cookbook-name']['user-1']['age'] %>
User Height: <%= node['my-cookbook-name']['user-1']['height'] %>
</body>
</html>