Recharger l'inventaire dynamique D'Ansible
J'utilise Ansible pour configurer les instances EC2 et déployer une application. Il y a un script hosts qui rassemble des informations sur les serveurs et les groupes liés aux tags. J'aimerais exécuter ces actions comme un seul playbook, donc
- de nouvelles instances sont créées si nécessaire
- Héberge le script charge de l'inventaire (y compris les serveurs " faits)
- Déploiement playbook fonctionne
cependant, l'inventaire chargé à l'avance de sorte qu'il n'y a pas de données de serveurs/groupes si les serveurs créé/mis à jour pendant le jeu. Je peux 1) séparer les manuels de fourniture et de déploiement 2) utiliser le truc add_host pour émuler l'inventaire dynamique lorsque les serveurs sont mis à jour, mais il y a des inconvénients dans ces approches.
puis-je forcer Ansible à recharger l'inventaire? Mes fichiers de test sont:
hosts
script:
#!/bin/sh
echo `date` >> log.log
echo "{"standalone":["localhost"]}"
Exemple playbook.yml
:
---
- hosts: all
tasks:
- name: show inventory_hostname
command: echo {{ inventory_hostname }}
je ansible-playbook -i hosts playbook.yml -v
et deux pistes:
$> cat log.log
Thu Mar 12 09:43:16 SAMT 2015
Thu Mar 12 09:43:16 SAMT 2015
mais je n'ai pas trouvé de commande pour le doubler.
4 réponses
avec Ansible 2.0+, vous pouvez rafraîchir votre inventaire en cours de jeu en exécutant le tâche:
- meta: refresh_inventory
j'ai trouvé meta: refresh_inventory
insuffisantes.
j'ai dû ajouter un appel explicite à l' ec2.py --refresh-cache
en premier.
- name: refresh inventory hosts: localhost connection: local gather_facts: False tasks: - name: Refresh EC2 cache command: /etc/ansible/ec2.py --refresh-cache - name: Refresh in-memory EC2 cache meta: refresh_inventory
Ansible ne supporte pas cela pour le moment. Si vous regardez le code source du ansible
ou ansible-playbook
commandes vous verrez que l'inventaire est chargé en premier et ensuite l'objet d'inventaire est passé à la commande possible qui exécute la tâche spécifiée ou playbook. Déplacer le traitement de l'inventaire de manière à ce qu'il se produise au sein des manipulateurs de tâches et de livres de jeu serait probablement une entreprise assez importante pour un certain nombre de raisons.
votre meilleur pari quand vous faites quelque chose comme ça est de il suffit de casser votre playbook en deux et envelopper leurs appels dans un script shell que vous n'avez à invoquer qu'une seule fois.
regardez add_host.
il ajoute un hôte (et alternativement un groupe) à l'inventaire ansible-playbook in-memory