Ansible : comment actualiser l'inventaire de l'hôte lors de l'exécution et ajouter une pause lors de l'exécution de Playbook ?
Publié: 2022-02-14 Sur Crunchify, nous avons publié un certain nombre de tutoriels sur Ansible et celui-ci va se concentrer sur How to Refresh Host Inventory
lors de l'exécution et Add a Pause
lors de l'exécution des tâches.
Considérons ce scénario simple de création de VM Amazon EC2 :
- Vous exécutez le script Amazon EC2 Ansible qui génère une machine virtuelle et vous capturez dynamiquement les adresses IP publiques dans le script.
- Pendant l'exécution - vous ajoutez l'adresse IP publique de cette machine virtuelle au fichier
hosts
sous le groupe[crunchify]
. - Dans la tâche suivante, utilisez l'adresse IP publique nouvellement ajoutée qui a été ajoutée au fichier hosts et installez Java dessus.
- Si vous n'utilisez pas
refresh_inventory
, il ne récupérera pas l'adresse IP nouvellement ajoutée et vous verrez l'échec comme ci-dessous.
1 2 |
PLAY [ crunchify ] ************************************* skipping : no hosts matched |
De plus, avez-vous l'une des questions ci-dessous ?
- Comment recharger l'
dynamic inventory
d'Ansible - Étapes d'actualisation de l'inventaire dynamique Ansible
- Puis-je mettre à jour l'inventaire des hôtes et utiliser de nouveaux hôtes dans le
same playbook
? - Ansible Dynamic Inventory ne parvient pas à obtenir les dernières informations EC2 - pourquoi ?
Commençons:
Étape 1
Suivez complètement le didacticiel sur la spawn Amazon EC2 VM instance remotely using Ansible
?
Comment créer, démarrer et configurer une instance Amazon EC2 à l'aide d'un simple script Ansible ? (lancer la machine virtuelle à distance)
Étape 2
Recherchez une tâche ci-dessous dans le fichier crunchify-ec2.yml
.
1 2 3 4 5 6 |
- name : Add the newly created EC2 instance ( s ) to the local host group local_action : lineinfile path = hosts regexp = { { item . public_ip } } insertafter = "[crunchify]" line = { { item . public_ip } } with_items : '{{ec2_crunchify.instances}}' |
Comme vous le voyez ici, après avoir créé Amazon EC2 VM
, nous capturons l'adresse IP publique de la machine virtuelle et la stockons dans le fichier hosts
Si vous avez des tâches supplémentaires dans le même .yml file
adresses IP ne seront pas chargées automatiquement. Ajoutez simplement la ligne ci-dessous à votre Ansible Playbook et il actualisera automatiquement toute votre liste d'inventaire.
1 |
- meta : refresh_inventory |
De la même manière si vous souhaitez ajouter une attente, ajoutez simplement la ligne ci-dessous :
1 2 |
- pause : minutes : 1 |
La balise ci-dessus introduira une minute d'attente dans votre playbook Ansible.
Playbook Ansible mis à jour pour Amazon EC2 avec Wait et Meta Refresh
Voici mon exemple de test Ansible Playbook :
Nom du fichier : crunchify-refresh-hostfile-pause-1min.yml
1 2 3 4 5 6 7 8 9 10 11 |
--- - name : Refresh Host Inventory at Runtime and Add a Pause while Executing Playbook hosts : local connection : local gather_facts : True tasks : - meta : refresh_inventory - pause : minutes : 1 |
Sortir:
Exécutez simplement votre Ansible Playbook à nouveau et vous verrez un résultat réussi comme ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
bash - 3.2 $ ansible - playbook - vvv - i . / hosts crunchify - refresh - hostfile - pause - 1min.yml config file = None configured module search path = [ u '/Users/crunchify/.ansible/plugins/modules' , u '/usr/share/ansible/plugins/modules' ] ansible python module location = / Library / Python / 2.7 / site - packages / ansible executable location = / usr / local / bin / ansible - playbook python version = 2.7.16 ( default , Jul 14 2019 , 03 : 47 : 49 ) [ GCC 4.2.1 Compatible Apple LLVM 11.0.0 ( clang - 1100.0.32.4 ) ( - macos10 . 15 - objc - s No config file found ; using defaults / Users / crunchify / Documents / ansible / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / Users / crunchify / Documents / ansible / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / Users / crunchify / Documents / ansible / hosts inventory source with ini plugin PLAYBOOK : crunchify - refresh - hostfile - pause - 1min.yml ************************************************************************************************************************ 1 plays in crunchify - refresh - hostfile - pause - 1min.yml PLAY [ Refresh Host Inventory at Runtime and Add a Pause while Executing Playbook . ] ***************************************************************************************************** TASK [ Gathering Facts ] ***************************************************************************************************************************************************** task path : / Users / crunchify / Documents / ansible / crunchify - refresh - hostfile - pause - 1min.yml : 2 < localhost > ESTABLISH LOCAL CONNECTION FOR USER : crunchify < localhost > EXEC / bin / sh - c 'echo ~crunchify && sleep 0' < localhost > EXEC / bin / sh - c '( umask 77 && mkdir -p "` echo /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906 `" && echo ansible-tmp-1567083207.3-89685003930906="` echo /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906 `" ) && sleep 0' Using module file / Library / Python / 2.7 / site - packages / ansible / modules / system / setup . py < localhost > PUT / Users / crunchify / . ansible / tmp / ansible - local - 47439Jkp0pq / tmpa9O5B0 TO / Users / crunchify / . ansible / tmp / ansible - tmp - 1567083207.3 - 89685003930906 / AnsiballZ_setup . py < localhost > EXEC / bin / sh - c 'chmod u+x /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/ /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/AnsiballZ_setup.py && sleep 0' < localhost > EXEC / bin / sh - c 'python /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/AnsiballZ_setup.py && sleep 0' < localhost > EXEC / bin / sh - c 'rm -f -r /Users/crunchify/.ansible/tmp/ansible-tmp-1567083207.3-89685003930906/ > /dev/null 2>&1 && sleep 0' ok : [ localhost ] META : ran handlers / Users / crunchify / Documents / ansible / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / Users / crunchify / Documents / ansible / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / Users / crunchify / Documents / ansible / hosts inventory source with ini plugin META : inventory successfully refreshed TASK [ pause ] *************************************************************************************************************************************************************** task path : / Users / crunchify / Documents / ansible / crunchify - refresh - hostfile - pause - 1min.yml : 10 Pausing for 60 seconds ( ctrl + C then 'C' = continue early , ctrl + C then 'A' = abort ) ok : [ localhost ] = > { "changed" : false , "delta" : 60 , "echo" : true , "rc" : 0 , "start" : "2019-08-29 07:53:28.064115" , "stderr" : "" , "stdout" : "Paused for 1.0 minutes" , "stop" : "2019-08-29 07:54:28.064686" , "user_input" : "" } META : ran handlers META : ran handlers PLAY RECAP * **************************************************************************************************************************************************************** localhost : ok = 2 changed = 0 unreachable = 0 failed = 0 |
C'est ça. Toutes nos félicitations. Vous avez exécuté Ansible Playbook avec succès.

Si vous recherchez tous les didacticiels Ansible, veuillez suivre la page Ansible Archive.