Voici la méthode recommandée dans le didacticiel Chef Fast Start:
knife ssh name:mynode -a ipaddress -x ubuntu -i mycredentials.pem "Sudo chef-client"
C'est vraiment maladroit. N'y a-t-il vraiment pas de meilleure façon, ou est-ce l'idée que dans un environnement de production réel, vous aurez quand même des nœuds à mise à jour automatique?
Ce serait à peu près ainsi que vous commenceriez les choses, mais cela ne doit être fait qu'une seule fois. L'exécution initiale de chef-client active et démarre généralement le démon chef-client en tant que service init.d.
Si vous vouliez vraiment le faire plus élégamment, vous pouvez abandonner le couteau-ssh et exécuter directement ssh:
ssh ubuntu@ipadddress -i mycredentials.pem Sudo chef-client
cela sera probablement plus rapide, car knife-ssh effectue une recherche sur le serveur Chef pour récupérer les nœuds correspondant au terme de recherche (dans ce cas name:dynode
), ce que vous n'avez pas strictement besoin de faire si vous connaissez déjà l'adresse IP.
Vous pouvez utiliser couteau ssh pour exécuter chef-client sur toutes les boîtes contenant un certain rôle ou recette:
knife ssh "role:web" "Sudo chef-client" -x ubuntu --Sudo
Ou si vous êtes en EC2:
knife ssh "role:web" "Sudo chef-client" -x ubuntu -a ec2.public_hostname
Vous pouvez utiliser ansible pour déployer et exécuter chef-client.
$ ansible -i hosts all -a 'chef-client'
ansible s'installe facilement avec pip:
pip install ansible
Votre fichier d'inventaire (dans l'exemple, nommé "hôtes") pourrait ressembler à ceci:
[all] Host1.example.com ansible_user=root Host2.example.com ansible_user=root Host3.example.com ansibel_user=root
(notez que "all" est le nom du regroupement dans le fichier de configuration pour notre exemple - il est arbitraire et peut être n'importe quoi. Votre fichier d'inventaire peut également inclure d'autres regroupements, par exemple [web_wervers], [database_servers], [chef_servers] , etc.)
Donc, encore une fois, tout mettre ensemble:
> ansible -i hosts all -a 'chef-client'
ou peut-être:
> ansible -i hosts all -a 'systemctl status'
Il est dommage que pour envoyer une commande au client chef, nous devons utiliser le soulignement ssh.
Il semble que, bien que chaque client chef ait établi une connexion sécurisée avec le serveur chef, mais que le serveur chef ne fournisse pas de multiplexeur de commandes sur cette connexion sécurisée, pourquoi?
J'utilise Jenkins CI pour gérer les runs. Le serveur Linux est configuré comme un poste de travail et Jenkins y est installé. Je peux donc bootstrap les nœuds avec run_list modifié. Le processus de bootstrapping, de toute façon, exécute chef-client à la fin.
Pour l'exécution adhoc, le travail Jenkins exécute les commandes couteau pour modifier la liste run_list d'un nœud et utiliser le plugin SSH pour exécuter chef-client sur le nœud souhaité.
Il y a une nouvelle commande chef-run
dans Chef Workstation:
chef-run server_name resource_name
Il installera chef-client
s'il n'est pas présent et exécutez la ressource ou le livre de recettes que vous spécifiez.