Ansible: Cum se reîmprospătează inventarul gazdei în timpul execuției și se adaugă o pauză în timpul executării Playbook-ului?
Publicat: 2022-02-14 Pe Crunchify, am publicat atât de multe tutoriale despre Ansible, iar acesta se va concentra pe How to Refresh Host Inventory
în timpul execuției și să Add a Pause
în timpul executării sarcinilor.
Să luăm în considerare acest scenariu simplu de creare a VM Amazon EC2:
- Executați scriptul Amazon EC2 Ansible care generează o VM și capturați în mod dinamic IP-uri publice în script.
- În timpul execuției – adăugați IP-ul public al acelei mașini virtuale la fișierul
hosts
din grupul[crunchify]
. - În sarcina ulterioară, utilizați IP-ul public nou adăugat, care a fost adăugat la fișierul hosts și instalați Java pe acesta.
- Dacă nu utilizați
refresh_inventory
, atunci acesta nu va prelua IP-ul nou adăugat și veți vedea eșecul la fel ca mai jos.
1 2 |
PLAY [ crunchify ] ************************************* skipping : no hosts matched |
În plus, aveți vreo întrebare de mai jos?
- Cum să reîncărcați
dynamic inventory
Ansible - Pașii de reîmprospătare dinamică a inventarului Ansible
- Pot să actualizez inventarul gazdelor și să folosesc gazde noi în
same playbook
? - Ansible Dynamic Inventory nu reușește să obțină cele mai recente informații EC2 – de ce?
Să începem:
Pasul 1
Urmați complet tutorialul despre cum să spawn Amazon EC2 VM instance remotely using Ansible
?
Cum să creați, să porniți și să configurați o instanță Amazon EC2 folosind un script simplu Ansible? (generați VM de la distanță)
Pasul 2
Căutați o sarcină de mai jos în fișierul 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}}' |
După cum vedeți aici, după ce am creat Amazon EC2 VM
, capturăm IP-ul public al VM și îl stocăm în fișierul hosts
Dacă aveți unele sarcini suplimentare în același .yml file
atunci IP-urile nu vor fi încărcate automat. Doar adăugați linia de mai jos la Ansible Playbook și va reîmprospăta automat toată lista de inventar.
1 |
- meta : refresh_inventory |
În același mod, dacă doriți să adăugați așteptați, adăugați linia de mai jos:
1 2 |
- pause : minutes : 1 |
Eticheta de mai sus va introduce un minut de așteptare în registrul de joc Ansible.
Ansible Playbook actualizat pentru Amazon EC2 cu Wait și Meta Refresh
Iată exemplul meu de test Ansible Playbook:
Nume fișier: 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 |
Ieșire:
Doar executați din nou Ansible Playbook și veți vedea rezultatul de succes ca mai jos.
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 |
Asta e. Felicitări. Ați rulat cu succes Ansible Playbook.

Dacă sunteți în căutarea tuturor tutorialelor Ansible, vă rugăm să urmați pagina Ansible Archive.