I’m doing some cloud scripting that involves some work on one host, then using the results to take action on another host. The hostname of the second host is a dynamic result of that first bit, and won’t be in my inventory. I’d like to do as much of it as possible in ansible, and add_host seems to be working. But I’m having trouble using a variable or fact from one play as the hosts value for the next play.
Here’s a test case that I’ve been working on: I’ve made it as simple as possible.
test.yml
-
hosts: 127.0.0.1
tasks: -
set_fact: hostname_test=‘fubar’
-
add_host: name=‘{{ hostname_test }}’
register: resp -
debug: msg=‘{{ resp }}’
-
hosts: 127.0.0.1
tasks: -
debug: msg=‘resp={{ resp|default(“None”) }}’
-
debug: msg=‘hostname_test={{ hostname_test|default(“None”) }}’
end
I’d like that second play to start with - hosts: hostname_test. But that results in “skipping: no hosts matched”. At first I thought that meant add_host wasn’t working. But if I hardcode hosts: fubar for the second play then ansible tries to connect as expected. However I need to determine the second hostname as part of the first play. Running the code as above suggests that neither set_fact nor register persists from the first play to the next: both seem to be undefined.
Is it possible to use a hostname determined in one play as the hosts value for the next play? If so, what am I doing wrong? Is there a better way to persist new information from one play to the next?
Is it significant that ansible reports the first play under 127.0.0.1, as in the yml, but the second play shifts to localhost?
Thanks in advance for any help.
$ ansible --version
ansible 1.8.4
configured module search path = None
$ ansible-playbook -v test.yml
PLAY [127.0.0.1] **************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [set_fact hostname_test=‘fubar’] ****************************************
ok: [127.0.0.1] => {“ansible_facts”: {“hostname_test”: “fubar”}}
TASK: [add_host name=‘{{ hostname_test }}’] ***********************************
ok: [127.0.0.1] => {“new_host”: “fubar”}
TASK: [debug msg=‘{{ resp }}’] ************************************************
ok: [127.0.0.1] => {
“msg”: “{‘invocation’: {‘module_name’: u’add_host’, ‘module_args’: u"name=‘fubar’"}, ‘new_host’: u’fubar’}”
}
PLAY [127.0.0.1] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [debug msg=‘resp=None’] *************************************************
ok: [localhost] => {
“msg”: “resp=None”
}
TASK: [debug msg=‘hostname_test=None’] ****************************************
ok: [localhost] => {
“msg”: “hostname_test=None”
}
PLAY RECAP ********************************************************************
127.0.0.1 : ok=4 changed=0 unreachable=0 failed=0
localhost : ok=3 changed=0 unreachable=0 failed=0