J'utilise Ansible pour configurer des instances EC2 et déployer une application. Il existe un script d'hôtes qui rassemble des informations sur les serveurs et les groupes liés aux tags. Je voudrais exécuter ces actions comme un seul playbook, donc
Cependant, l'inventaire est chargé à l'avance, il n'y a donc pas de données de serveurs/groupes si les serveurs sont créés/mis à jour pendant la lecture. Je peux 1) séparer les playbooks de provision et de déploiement 2) utiliser l'astuce 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\"]}"
Échantillon playbook.yml
:
---
- hosts: all
tasks:
- name: show inventory_hostname
command: echo {{ inventory_hostname }}
Je l'exécute ansible-playbook -i hosts playbook.yml -v
et voir deux exécutions:
$> 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.
Avec Ansible 2.0+, vous pouvez actualiser votre inventaire en cours de partie en exécutant la tâche :
- meta: refresh_inventory
J'ai trouvé le meta: refresh_inventory
insuffisant.
J'ai dû ajouter un appel explicite à ec2.py --refresh-cache
première.
- nom: actualiser l'inventaire hôtes: localhost connexion: local rassembler_facts: fausses tâches: - nom: actualiser EC2 cache Commande: /etc/ansible/ec2.py --refresh-cache - nom: Actualiser le cache EC2 en mémoire Meta: refresh_inventory
Ansible ne prend actuellement pas en charge cela. Si vous regardez le code source de ansible
ou ansible-playbook
vous verrez que l'inventaire est chargé en premier, puis l'objet d'inventaire est passé à la commande ansible qui exécute la tâche ou le playbook spécifié. Déplacer le traitement de l'inventaire afin qu'il se produise dans les gestionnaires de tâches/playbooks serait probablement une entreprise assez importante pour un certain nombre de raisons.
Votre meilleur pari lorsque vous faites quelque chose comme ça est de simplement diviser votre playbook en deux et d'envelopper leurs appels dans un script Shell que vous n'avez à invoquer qu'une seule fois.
Vous pouvez également modifier le fichier ec2.ini et définir l'option:
cache_max_age = 0
pour éviter la nécessité de recharger en vous assurant que rien n'est mis en cache en premier lieu.