268 votes

En toute sécurité en limitant Ansible tablettes playbook sur une seule machine?

Je suis à l'aide d'Ansible pour certains de simples tâches de gestion des utilisateurs avec un petit groupe d'ordinateurs. Actuellement, j'ai mes tablettes playbook ensemble d' hosts: all et mon fichier hosts est un seul groupe avec toutes les machines listées:

# file: hosts
[office]
imac-1.local
imac-2.local
imac-3.local

Je me suis trouvé souvent à cibler une seule machine. L' ansible-playbook commande peut limiter joue comme ceci:

ansible-playbook --limit imac-2.local user.yml

Mais qui semble sorte de fragile, surtout pour un potentiellement destructeurs playbook. Laissant de côté l' limit drapeau signifie le playbook serait courir partout. Étant donné que ces outils ne servent occasionnellement, il semble utile de prendre des mesures pour toute épreuve de la lecture, afin de ne pas accidentellement nuke quelque chose de mois à partir de maintenant.

Quelle est la meilleure pratique pour limiter playbook s'exécute sur une seule machine? Idéalement, les tablettes playbook devrait être inoffensifs si certains détail important a été laissé de côté.

248voto

joemaller Points 2349

S'avère qu'il est possible d'entrer un nom d'hôte directement dans le playbook, de sorte que l'exécution de la playbook avec hosts: imac-2.local fonctionnera très bien. Mais c'est un peu maladroit.

Une meilleure solution pourrait être la définition de la playbook hôtes à l'aide d'une variable, puis passage dans une adresse d'hôte via --extra-vars:

# file: user.yml  (playbook)
---
- hosts: '{{ target }}'
  user: ...

L'exécution de la playbook:

ansible-playbook user.yml --extra-vars "target=imac-2.local"

Si {{ target }} n'est pas défini, la playbook ne fait rien. Un groupe à partir du fichier hosts peut également être transmis par le biais de cas de besoin. Dans l'ensemble, cela semble être un beaucoup plus sûr moyen de construire un potentiellement destructeurs playbook.

Playbook ciblant un seul hôte:

$ ansible-playbook user.yml --extra-vars "target=imac-2.local" --list-hosts

playbook: user.yml

  play #1 (imac-2.local): host count=1
    imac-2.local

Playbook avec un groupe d'hôtes:

$ ansible-playbook user.yml --extra-vars "target=office" --list-hosts

playbook: user.yml

  play #1 (office): host count=3
    imac-1.local
    imac-2.local
    imac-3.local

Oublier de définir les hôtes est sûr!

$ ansible-playbook user.yml --list-hosts

playbook: user.yml

  play #1 ({{target}}): host count=0

208voto

Tybstar Points 510

Il y a aussi une jolie petite astuce qui vous permet de spécifier un hôte unique sur la ligne de commande (ou plusieurs hôtes, je suppose), sans l'intermédiaire de l'inventaire:

ansible-playbook -je "imac1-local," de l'utilisateur.yml

Note le , à la fin; c'est le signe que c'est une liste, pas un fichier.

Maintenant, ce ne sera pas vous protéger si vous avez accidentellement passer un vrai fichier de stock, de sorte qu'il peut ne pas être une bonne solution à ce problème spécifique. Mais c'est un truc utile à savoir!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X