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

  1. de nouvelles instances sont créées si nécessaire
  2. Héberge le script charge de l'inventaire (y compris les serveurs " faits)
  3. 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.

42
demandé sur techraf 2015-03-12 09:45:23

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
41
répondu James Orenthal 2017-02-22 11:42:15

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
17
répondu dsz 2016-09-07 22:59:38

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.

7
répondu Bruce P 2015-03-12 11:33:42

regardez add_host.

il ajoute un hôte (et alternativement un groupe) à l'inventaire ansible-playbook in-memory

-2
répondu Andrew Vorobyov 2015-10-08 14:10:52