KSS
2015-07-28 16:13:40 UTC
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?
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 ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/57692d0a-6745-4114-9a39-974d87540064%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
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 ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/57692d0a-6745-4114-9a39-974d87540064%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.