# variable sub dict output shows undefined

**URL:** <https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597>\
**Category:** Ansible Project\
**Created:** [June 19, 2019, 6:29am UTC](https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597 "2019-06-19T06:29:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Punit\_Jain](https://avatars.discourse-cdn.com/v4/letter/p/e56c9b/32.png) [@Punit\_Jain](https://forum.ansible.com/u/Punit_Jain)\
**Post date:** [June 19, 2019, 6:29am UTC](https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597/1 "2019-06-19T06:29:52Z")

</div>

Hi,

I have a part of playbook task as below:

- name: get url data  
uri:  
uri:   
method: GET  
user: username  
password: password  
register: dns\_result  
no\_log: true

- set\_fact:  
dns\_content: “{{ dns\_result.content.records}}”

Gives an error:

“msg” : The task includes an option with an undefined variable. The error was ansible.vars.unsafe\_proxy.AnsibleUnsafeText object’ has no attribute ‘records’

however when I set\_fact separately as below, it works :

- name: get url data  
uri:  
uri:   
method: GET  
user: username  
password: password  
register: dns\_result  
no\_log: true

- set\_fact:  
dns\_content: “{{ dns\_result.content}}”

- debug:  
msg: “{dns\_contents.records}”

This works fine and returns results. Any advice what am i doing wrong here ?

Regards,  
Punit

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [June 19, 2019, 9:25am UTC](https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597/2 "2019-06-19T09:25:25Z")

</div>

> Hi,
> 
> I have a part of playbook task as below:
> 
> - name: get url data  
> &nbsp;&nbsp;uri:  
> &nbsp;&nbsp;&nbsp;&nbsp;uri: \<path\>  
> &nbsp;&nbsp;&nbsp;&nbsp;method: GET  
> &nbsp;&nbsp;&nbsp;&nbsp;user: username  
> &nbsp;&nbsp;&nbsp;&nbsp;password: password  
> &nbsp;&nbsp;register: dns\_result  
> &nbsp;&nbsp;no\_log: true
> 
> - set\_fact:  
> &nbsp;&nbsp;&nbsp;&nbsp;dns\_content: "{{ dns\_result.content.records}}"
> 
> Gives an error:
> 
> "msg" : The task includes an option with an undefined variable. The error  
> was ansible.vars.unsafe\_proxy.AnsibleUnsafeText object' has no attribute  
> 'records'

That is because is doesn't exist, you need to check what is contains with

- debug: var=dns\_result

> however when I set\_fact separately as below, it works :
> 
> - name: get url data  
> &nbsp;&nbsp;uri:  
> &nbsp;&nbsp;&nbsp;&nbsp;uri: \<path\>  
> &nbsp;&nbsp;&nbsp;&nbsp;method: GET  
> &nbsp;&nbsp;&nbsp;&nbsp;user: username  
> &nbsp;&nbsp;&nbsp;&nbsp;password: password  
> &nbsp;&nbsp;register: dns\_result  
> &nbsp;&nbsp;no\_log: true
> 
> - set\_fact:  
> &nbsp;&nbsp;&nbsp;&nbsp;dns\_content: "{{ dns\_result.content}}"
> 
> - debug:  
> &nbsp;&nbsp;&nbsp;&nbsp;msg: "{dns\_contents.records}"

You only have one curly brackets so this is not treated as a variable but as a string.  
And if you add the missing curly brackets it will fail since you are using dns\_contents and not dns\_content.

---

<div class="post-metadata">

**Author:** ![Punit\_Jain](https://avatars.discourse-cdn.com/v4/letter/p/e56c9b/32.png) [@Punit\_Jain](https://forum.ansible.com/u/Punit_Jain)\
**Post date:** [June 19, 2019, 12:26pm UTC](https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597/3 "2019-06-19T12:26:21Z")

</div>

Hi Kai,

It seems while copying i missed {{ but actually code does have this. So repasting code :

- name: get url data  
uri:  
uri:   
method: GET  
user: username  
password: password  
register: dns\_result  
no\_log: true

- set\_fact:  
dns\_content: “{{ dns\_result.content}}”

- debug:  
msg: “{{dns\_content.records}}”

gives result:

ok: [10.4.12.5] =\>  
“msg”: [  
{  
“\_links”: {  
“self”: {  
“href”: “/api/name-services/dns/1e3w4r1q”  
}  
},  
“servers”: [  
10.2.12.3"  
],  
},  
{  
“\_links”: {  
“self”: {  
“href”: “/api/name-services/dns/1f7j9f0a”  
}  
},  
“servers”: [  
10.2.122.4"  
],  
},

The data in dns\_result is :

ok: [10.4.12.5] =\>  
“msg”: [  
{  
“\_links”: {  
“self”: {  
“href”: “/api/name-services/dns?fields=\*”  
}  
},

“num\_records”: 2,  
“ **records** ”: [  
{  
“\_links”: {  
“self”: {  
“href”: “/api/name-services/dns/1e3w4r1q”  
}  
},  
“servers”: [  
10.2.12.3"  
],  
},  
{  
---- more data -----  
}

So why i cant access data like :

- set\_fact:  
dns\_content: “{{ dns\_result.content.records}}”

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [June 19, 2019, 3:21pm UTC](https://forum.ansible.com/t/variable-sub-dict-output-shows-undefined/30597/4 "2019-06-19T15:21:49Z")

</div>

> Hi Kai,
> 
> It seems while copying i missed {{ but actually code does have this. So  
> repasting code :
> 
> - name: get url data  
> &nbsp;&nbsp;uri:  
> &nbsp;&nbsp;&nbsp;&nbsp;uri: \<path\>  
> &nbsp;&nbsp;&nbsp;&nbsp;method: GET  
> &nbsp;&nbsp;&nbsp;&nbsp;user: username  
> &nbsp;&nbsp;&nbsp;&nbsp;password: password  
> &nbsp;&nbsp;register: dns\_result  
> &nbsp;&nbsp;no\_log: true
> 
> - set\_fact:  
> &nbsp;&nbsp;&nbsp;&nbsp;dns\_content: "{{ dns\_result.content}}"

This doesn't add up, you say dns\_result contain content, but you listing below show that dns\_result doesn't contain content.

> - debug:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: "{{dns\_content.records}}"
> 
> gives result:
> 
> ok: [10.4.12.5] =\>  
> &nbsp;&nbsp;&nbsp;"msg": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\_links": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"self": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"href": "/api/name-services/dns/1e3w4r1q"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"servers": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.2.12.3"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\_links": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"self": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"href": "/api/name-services/dns/1f7j9f0a"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"servers": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.2.122.4"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
> 
> The data in dns\_result is :
> 
> ok: [10.4.12.5] =\>  
> &nbsp;&nbsp;&nbsp;"msg": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\_links": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"self": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"href": "/api/name-services/dns?fields=\*"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"num\_records": 2,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\*records\*": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\_links": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"self": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"href": "/api/name-services/dns/1e3w4r1q"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"servers": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.2.12.3"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---- more data -----  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

According to this output dns\_result is a list and there isn't a content, to get the records that would be {{ dns\_result.0.records }}.
