web-dev-qa-db-fra.com

Existe-t-il un moyen de passer des paramètres au moment de l'exécution dans le chef?

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?

6
Manak Wadhwa

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.

9
jtimberman

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.

1
user2066657

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:

Mise en page de répertoire de chef Repo

|- 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).

Créez un sac de données utilisateur pour John:

$ knife data bag create users john

{
  "id" : "john"
  "age" : "27"
  "height" : "60in"
}

En utilisant des sacs de données

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

En utilisant des attributs

Vous pouvez également stocker les données dans votre fichier d'attributs:

fichier 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"

recette de livre de cuisine

$ vi ~/chef-repo/cookbooks/my-cookbook-name/default.rb

template "/root/user-list" do
  action :create
  source "user-list.erb"
end

user-list.erb

$ 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>
1
KLaw