Ansible: Wie aktualisiere ich das Host-Inventar zur Laufzeit und füge eine Pause hinzu, während Playbook ausgeführt wird?
Veröffentlicht: 2022-02-14 Auf Crunchify haben wir so viele Tutorials zu Ansible veröffentlicht, und dieses wird sich darauf konzentrieren, How to Refresh Host Inventory
zur Laufzeit aktualisiert und beim Ausführen von Aufgaben Add a Pause
einfügt.
Betrachten wir dieses einfache Amazon EC2-VM-Erstellungsszenario:
- Sie führen ein Amazon EC2 Ansible-Skript aus, das eine VM erzeugt, und Sie erfassen öffentliche IPs dynamisch im Skript.
- Während der Ausführung fügen Sie die öffentliche IP dieser VM zur
hosts
-Datei unter der Gruppe[crunchify]
. - Verwenden Sie in der folgenden Aufgabe die neu hinzugefügte öffentliche IP, die der Hosts-Datei hinzugefügt wurde, und installieren Sie Java darauf.
- Wenn Sie
refresh_inventory
" nicht verwenden, wird die neu hinzugefügte IP nicht übernommen und Sie sehen den gleichen Fehler wie unten.
1 2 |
PLAY [ crunchify ] ************************************* skipping : no hosts matched |
Haben Sie außerdem eine der folgenden Fragen?
- So laden Sie das
dynamic inventory
von Ansible neu - Schritte zur dynamischen Bestandsaktualisierung von Ansible
- Kann ich das Hostinventar aktualisieren und neue Hosts im
same playbook
verwenden? - Ansible Dynamic Inventory kann die neuesten EC2-Informationen nicht abrufen – warum?
Lass uns anfangen:
Schritt 1
Befolgen Sie das Tutorial zum spawn Amazon EC2 VM instance remotely using Ansible
vollständig.
Wie erstelle, starte und konfiguriere ich eine Amazon EC2-Instanz mit einem einfachen Ansible-Skript? (VM aus der Ferne spawnen)
Schritt 2
Suchen Sie in der Datei crunchify-ec2.yml
nach einer der folgenden Aufgaben.
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}}' |
Wie Sie hier sehen, erfassen wir nach der Erstellung von Amazon EC2 VM
die öffentliche IP der VM und speichern sie in hosts
-Datei
Wenn Sie einige zusätzliche Aufgaben in derselben .yml file
IPs nicht automatisch geladen. Fügen Sie einfach die folgende Zeile zu Ihrem Ansible Playbook hinzu und es aktualisiert automatisch Ihre gesamte Inventarliste.
1 |
- meta : refresh_inventory |
Auf die gleiche Weise, wenn Sie warten möchten, fügen Sie einfach die folgende Zeile hinzu:
1 2 |
- pause : minutes : 1 |
Das obige Tag führt zu einer minutenlangen Wartezeit in Ihrem Ansible-Playbook.
Aktualisiertes Ansible Playbook für Amazon EC2 mit Wait und Meta Refresh
Hier ist mein Beispieltest Ansible Playbook:
Dateiname: 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 |
Ausgabe:
Führen Sie einfach Ihr Ansible Playbook erneut aus und Sie werden das erfolgreiche Ergebnis wie unten sehen.
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 |
Das ist es. Glückwünsche. Sie haben Ansible Playbook erfolgreich ausgeführt.

Wenn Sie nach allen Ansible-Tutorials suchen, folgen Sie bitte der Ansible Archive-Seite.