Looks like it's better to use set_fact here (well, that method works). It
would still be good to understand why the above fails though
On Tuesday, 28 July 2015 17:13:40 UTC+1, KSS wrote:
>
> Hi,
>
> I'm having a problem with a particular variable.
>
> I'm hoping figuring out the problem below will help me understand the
> issue with a larger playbook.
>
> # ansible --version
> ansible 1.9.2
>
>
> A simple playbook (I need the list of ip addresses as it is passed to an
> api in one request);
>
> ---
>
> - hosts: all
> gather_facts: true
>
> vars:
> ip: "{% for host in groups['all'] %}{{
> hostvars[host]['ansible_default_ipv4']['address'] }}{% if not loop.last
> %},{% endif %}{% endfor %}"
>
> tasks:
>
> - name: Debug
> debug: msg="IPaddresses={{ ip }}"
> delegate_to: localhost
> run_once: true
> tags: first-play
>
> - hosts: all
> gather_facts: true
>
> vars:
> ip: "{% for host in groups['all'] %}{{
> hostvars[host]['ansible_default_ipv4']['address'] }}{% if not loop.last
> %},{% endif %}{% endfor %}"
>
> tasks:
>
> - name: Debug 2
> debug: msg="2nd list of IPaddresses={{ ip }}"
> delegate_to: localhost
> run_once: true
> tags: second-play
>
> ------------- End of playbook -------------------
>
> When the above is run one task at a time (i.e using the tags) it works
> fine;
>
> # *ansible-playbook -i 'host1,host2' ./test-ipvar.yml --tags first-play*
>
> PLAY [all]
> ********************************************************************
>
>
> GATHERING FACTS
> ***************************************************************
> ok: [host1]
> ok: [host2]
>
>
> TASK: [Debug]
> *****************************************************************
> ok: [host1 -> localhost] => {
> "msg": "IPaddresses=10.0.0.1,10.0.0.2"
> }
>
>
> PLAY RECAP
> ********************************************************************
> host2 : ok=2 changed=0 unreachable=0 failed=0
> host1 : ok=2 changed=0 unreachable=0 failed=0
>
>
> *# ansible-playbook -i 'host1,host2' ./test-ipvar.yml --tags second-play*
>
> PLAY [all]
> ********************************************************************
>
>
> GATHERING FACTS
> ***************************************************************
> ok: [host1]
> ok: [host2]
>
> Enter code here...
>
>
> TASK: [Debug 2]
> ***************************************************************
> ok: [host1 -> localhost] => {
> "msg": "2nd list of IPaddresses=10.0.0.1,10.0.0.2"
> }
>
>
> PLAY RECAP
> ********************************************************************
> host2 : ok=2 changed=0 unreachable=0 failed=0
> host1 : ok=2 changed=0 unreachable=0 failed=0
>
>
> However, running the playbook, we get an error for the second play
> although that variable is clearly available before;
>
> # ansible-playbook -i 'host1,host2' ./test-ipvar.ymlEnter code here...
>
>
>
> PLAY [all]
> ********************************************************************
>
>
> GATHERING FACTS
> ***************************************************************
> ok: [host1]
> ok: [host2]
>
>
> TASK: [Debug]
> *****************************************************************
> ok: [host1 -> localhost] => {
> "msg": "IPaddresses=10.0.0.1,10.0.0.2"
> }
>
>
> PLAY [all]
> ********************************************************************
>
>
> GATHERING FACTS
> ***************************************************************
> ok: [host1]
> ok: [host2]
>
>
> TASK: [Debug 2]
> ***************************************************************
> fatal: [host1 -> localhost] => One or more undefined variables: 'dict'
> object has no attribute 'ansible_default_ipv4'
>
>
> FATAL: all hosts have already failed -- aborting
>
>
> PLAY RECAP
> ********************************************************************
> to retry, use: --limit @/root/test-ipvar.retry
>
>
> host2 : ok=3 changed=0 unreachable=0 failed=1
> host1 : ok=3 changed=0 unreachable=0 failed=1
>
>
>
>
> Even putting both tasks in the same play results in only the first play
> being successful.
>
> Does anyone have any ideas why it behaves this way?
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/a556cc2b-8057-4466-a425-eb7db5c0f95b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.