Comment spécifier différents hôtes pour différents playbooks dans un script ansible


9

Si je comprends bien, chaque playbook prend une entrée d'hôtes. Je veux savoir que si je crée un playbook conteneur qui inclut d'autres playbooks, puis-je paramétrer les hôtes pour chaque playbook inclus. Donc quelque chose comme

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

Je suis capable de mettre tous les playbooks différents dans un script et un appel, mais de cette façon, je ne suis pas en mesure de réutiliser certains set_fact d'un playbook dans un autre et il y a donc beaucoup de duplication de tâches.

Un autre corollaire de la question est, puis-je lancer ec2s sur amazon qui aurait

hosts: localhost

et la configuration des ec2 lancés, qui configureraient essentiellement l'inventaire à partir duquel les -i ec2.pyhôtes seraient spécifiés comme

hosts: tag_<some_tag>

se passe-t-il par le même livre de jeu ou un ensemble de livres de jeu inclus (différents rôles)?


savez-vous que vous pouvez avoir plus d'une hosts:section dans votre yaml et essentiellement avoir plusieurs playbooks utilisant différents groupes d'hôtes dans votre inventaire?
Yonsy Solis

Réponses:


4

En fait, vous pouvez avoir plus d'un hôte: section par playbook. Il semble qu'un hôte: démarre une nouvelle pièce. Voir http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ , par exemple.

Quelque chose comme ça fonctionne pour moi (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

Donc, mettez les hôtes: en haut de chaque .yml inclus, pas après l'include:.


4

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... Il existe d'autres endroits d'où peuvent provenir des variables, mais ce sont des types de variables qui sont découverts et non définis par l'utilisateur.

Les faits sont des informations dérivées de la conversation avec vos systèmes distants ...

Les faits proviennent de vos hôtes distants. C'est donc la raison pour laquelle normalement vous pouvez partager des faits entre vos différents hôtes lorsque votre fichier * .yml a plusieurs playbooks .

Maintenant, vous pouvez accéder aux faits d'autres hôtes si vous faites quelque chose comme ça dans une autre partie de votre livre de jeu:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

mais dans ce cas, vous devez vous rappeler que vous devez obtenir les faits avant de l' utiliser. Ensuite, vous pouvez configurer une première partie de votre playbook qui obtient tous les faits pour tous les hôtes ou utiliser la mise en cache des faits pour cela (voir: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Maintenant, si vous aimez partager des options dans vos playbooks, il peut être préférable de repenser les informations à mettre dans les variables et, avec cela, vous pouvez "partager" vos variables avec la même includeinstruction, regardez ceci:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles


2
Ma question était très spécifique aux hôtes, et non aux variables en général. Mon besoin est de pouvoir créer un playbook maître qui n'a pas d'hôte, mais chaque playbook inclus contient un hôte ou peut lui être fourni en tant que paramètre. Je peux toujours les exécuter comme des playbooks séparés mais les faits obtenus dans l'un ne sont pas reportés au suivant et il y a donc beaucoup de redondance
Pankaj Lal

lire à nouveau ci-dessus s'il vous plaît: "Maintenant, vous pouvez accéder aux faits d'autres hôtes si vous faites quelque chose comme ça dans une autre partie de votre livre de jeu: ... mais dans ce cas, vous devez vous rappeler que vous devez obtenir les faits avant d'utiliser ceci "donc, oui, vous pouvez partager vos faits entre les playbooks inclus dans votre playbook principal.
Yonsy Solis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.