# when clause with lookup plugn works for template but not for uri

**URL:** <https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344>\
**Category:** Ansible Project\
**Created:** [December 20, 2017, 3:01pm UTC](https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344 "2017-12-20T15:01:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mark\_Eisenblatter](https://avatars.discourse-cdn.com/v4/letter/m/90db22/32.png) [@Mark\_Eisenblatter](https://forum.ansible.com/u/Mark_Eisenblatter)\
**Post date:** [December 20, 2017, 3:01pm UTC](https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344/1 "2017-12-20T15:01:04Z")

</div>

hello list,

i have a strage problem.

`

# do we need to readd server to cluster in case of rebuild

- name: get etcd server  
set\_fact:  
etcd\_server: “{{ lookup(‘get\_serverip\_by\_group’, zone, ‘kubernetes\_etcd’, wantlist=True)}}”

# Get ETCD Members

- name: get all members from ETCD Cluster  
uri:  
url: http://{{ item }}:2379/v2/members  
register: etcd\_members  
with\_items: “{{ etcd\_server }}”  
when: etcd\_members is not defined or etcd\_members.failed  
ignore\_errors: true

- debug: var=etcd\_members

- name: did i get members?  
fail: msg=“NO Members found”  
when: ‘“failed” in etcd\_members.results[-1] and etcd\_members.results[-1].failed == true’

- name: body template  
template:  
src: “{{ playbook\_dir }}/templates/add\_etcd\_member.json.j2”  
dest: “{{ playbook\_dir }}/tmp/add\_etcd\_member-{{ server[‘name’] }}.json”  
when: lookup(‘get\_id\_from\_etcd\_api’, etcd\_members.results, server[‘name’]) == None

- debug: var=server

# add ETCD member

- name: add member  
uri:  
url: http://{{ item }}:2379/v2/members  
method: POST  
body\_fromat: json  
body: “{{ lookup(‘file’, playbook\_dir + ‘/tmp/add\_etcd\_member-’ + server[‘name’] \* ‘.json’) }}”  
register: etcd\_add  
with\_items: “{{ etcd\_server }}”  
when: lookup(‘get\_id\_from\_etcd\_api’, etcd\_members.results, server[‘name’]) == None  
#- (etcd\_add is not defined or etcd\_add.failed)  
ignore\_errors: true

- debug: var=etcd\_add

- name: “did i delete member: {{ server[‘name’] }}?”  
fail: msg=“did not delete {{ server[‘name’] }}”  
when: ‘“failed” in etcd\_add.results[-1] and etcd\_add.results[-1].failed == true’

`

in module template the when clause works fine, but in the URI it casues an errer

`

fatal: [localhost]: FAILED! =\> {“failed”: true, “msg”: “The conditional check ‘lookup(‘get\_id\_from\_etcd\_api’, etcd\_members.results, server[‘name’]) == None’ failed. The error was: error while evaluating conditional (lookup(‘get\_id\_from\_etcd\_api’, etcd\_members.results, server[‘name’]) == None): ‘ansible.utils.unsafe\_proxy.AnsibleUnsafeText object’ has no attribute ‘name’\n\nThe error appears to have been in ‘/build/tasks/add\_etcd\_to\_cluster.yaml’: line 35, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n # add ETCD member\n - name: add member\n ^ here\n”}

`

but i have no idea why it works the first time and not the second?

server[‘name’] is there i use it on many parts and it is working fine everywhere else.

thanks in advanced,  
mark

---

<div class="post-metadata">

**Author:** ![Mark\_Eisenblatter](https://avatars.discourse-cdn.com/v4/letter/m/90db22/32.png) [@Mark\_Eisenblatter](https://forum.ansible.com/u/Mark_Eisenblatter)\
**Post date:** [December 20, 2017, 3:02pm UTC](https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344/2 "2017-12-20T15:02:11Z")

</div>

Ok forget:

ansible-playbook 2.4.1.0

---

<div class="post-metadata">

**Author:** ![sivel](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/sivel/32/1198_2.png) [@sivel](https://forum.ansible.com/u/sivel)\
**Post date:** [December 20, 2017, 4:00pm UTC](https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344/3 "2017-12-20T16:00:04Z")

</div>

Seeing the output of the debug task could probably be helpful for answering your question.

---

<div class="post-metadata">

**Author:** ![Mark\_Eisenblatter](https://avatars.discourse-cdn.com/v4/letter/m/90db22/32.png) [@Mark\_Eisenblatter](https://forum.ansible.com/u/Mark_Eisenblatter)\
**Post date:** [December 21, 2017, 8:56am UTC](https://forum.ansible.com/t/when-clause-with-lookup-plugn-works-for-template-but-not-for-uri/26344/4 "2017-12-21T08:56:51Z")

</div>

hello ok

i did some more debugging.  
looks like an bug.

the combination uri, with\_items and when is the problem

using only two of them work fine

server → is a straight forward dict.
