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 de -i ec2.py
, et ont des hôtes 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)?
http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts
... Il y a d'autres endroits d'où peuvent provenir des variables, mais ce sont des types de variables qui sont découverts, 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 *. Yml Le fichier 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- mise en cache )
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 instruction include
, regardez ceci:
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:.