On Crunchify, we have published so number of tutorials on Ansible and this one is going to focus on How to Refresh Host Inventory at Runtime and Add a Pause while Executing Tasks.
Let’s consider this simple Amazon EC2 VM creation scenario:
- You are running Amazon EC2 Ansible script which spawns a VM and you are dynamically capturing Public IPs in script.
- During execution – you are adding Public IP of that VM to
hostsfile under[crunchify]group. - In subsequent task, use the newly added Public IP which was added to hosts file and install Java on it.
- If you don’t use
refresh_inventorythen it wont pick it up newly added IP and you will see failure same as below.
PLAY [crunchify] ************************************* skipping: no hosts matched
In addition, do you have any of below questions?
- How to Reload Ansible’s
dynamic inventory - Ansible dynamic inventory refresh steps
- Can I update the hosts inventory and use new hosts in
same playbook? - Ansible Dynamic Inventory fails to get the latest EC2 information – why?
Let’s get started:
Step-1
Completely follow tutorial on how to spawn Amazon EC2 VM instance remotely using Ansible?
Step-2
Look for a below task in crunchify-ec2.yml file.
- 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}}'
As you see here, after creating Amazon EC2 VM, we are capturing VM’s public IP and storing it into hosts file 🙂
If you have some additional tasks in the same .yml file then IPs wont be loaded automatically. Just add below line to your Ansible Playbook and it will automatically refresh all of your inventory list.
- meta: refresh_inventory
Same way if you want to add wait just add below line:
- pause:
minutes: 1
Above tag will introduce a minute long wait to your Ansible playbook.
Updated Ansible Playbook for Amazon EC2 with Wait and Meta Refresh
Here is my sample test Ansible Playbook:
File name: crunchify-refresh-hostfile-pause-1min.yml
---
- 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
Output:
Just execute your Ansible Playbook again and you will see successful result as below.
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
That’s it. Congratulations. You have successfully ran Ansible Playbook.
If you are looking for all of Ansible tutorials then please follow Ansible Archive page.


