# Help with a loop

**URL:** <https://forum.ansible.com/t/help-with-a-loop/37223>\
**Category:** Ansible Project\
**Created:** [October 13, 2022, 9:54pm UTC](https://forum.ansible.com/t/help-with-a-loop/37223 "2022-10-13T21:54:00Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Clif\_Smith](https://avatars.discourse-cdn.com/v4/letter/c/b5a626/32.png) [@Clif\_Smith](https://forum.ansible.com/u/Clif_Smith)\
**Post date:** [October 13, 2022, 9:54pm UTC](https://forum.ansible.com/t/help-with-a-loop/37223/1 "2022-10-13T21:54:00Z")

</div>

I’m trying to use a loop to build out ([Datadog agent](https://docs.datadoghq.com/agent/basic_agent_usage/ansible)) configuration using a role, but each item in the loop overwrites the previous, resulting in configuration for just the last item. Can I please get a second set of eyes to determine how I should restructure my code?

- name: Configure Datadog agent  
include\_role:  
name: datadog.datadog  
apply:  
become: true  
loop\_control:  
label: “{{ dd\_item.item.oracle\_db\_name }}”  
loop\_var: dd\_item  
vars:  
datadog\_api\_key: “yyy”  
db\_domain: “{{ dd\_item.item.db\_domain }}”  
env: “{{ dd\_item.item.env\_type }}”  
interval\_for\_default\_metrics: 3600  
interval\_for\_custom\_metrics: 3600  
oracledb\_datadog\_password: “yyy”  
oracledb\_datadog\_username: “yyy”  
oracle\_db\_name: “{{ dd\_item.item.oracle\_db\_name }}”  
oracle\_server\_name: “{{ dd\_item.query\_result.0.oracle\_server\_name }}”  
oracle\_server\_fqdn: “{{ oracle\_server\_name }}-scan.{{ db\_domain }}”  
oracle\_service\_name: “{{ oracle\_db\_name }}.{{ db\_domain }}”  
datadog\_checks:  
oracle:  
init\_config:  
instances:

# Default checks

- server: “{{ oracle\_server\_fqdn }}:1521”  
service\_name: “{{ oracle\_service\_name }}”  
protocol: TCP  
username: “{{ oracledb\_datadog\_username }}”  
password: “{{ oracledb\_datadog\_password }}”  
use\_global\_custom\_queries: ‘false’  
tags:
- “dbname:{{ oracle\_db\_name }}”
- ansible\_env:testing
- “oracle\_exaname:{{ oracle\_server\_name }}”  
min\_collection\_interval: “{{ interval\_for\_default\_metrics }}”  
empty\_default\_hostname: true  
loop: “{{ server\_metadata.results }}”

---

<div class="post-metadata">

**Author:** ![Walter\_Rowe](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/walter_rowe/32/4506_2.png) [@Walter\_Rowe](https://forum.ansible.com/u/Walter_Rowe)\
**Post date:** [October 14, 2022, 11:02am UTC](https://forum.ansible.com/t/help-with-a-loop/37223/2 "2022-10-14T11:02:32Z")

</div>

Hard to tell without knowing the contents of the server\_metadata.results list.

Walter

---

<div class="post-metadata">

**Author:** ![Clif\_Smith](https://avatars.discourse-cdn.com/v4/letter/c/b5a626/32.png) [@Clif\_Smith](https://forum.ansible.com/u/Clif_Smith)\
**Post date:** [October 14, 2022, 4:11pm UTC](https://forum.ansible.com/t/help-with-a-loop/37223/3 "2022-10-14T16:11:19Z")

</div>

Ah, good point. Here you go:

“server\_metadata.results”: [  
{  
“ansible\_loop\_var”: “item”,  
“changed”: false,  
“failed”: false,  
“invocation”: {  
“module\_args”: {  
“as\_single\_query”: true,  
“autocommit”: false,  
“ca\_cert”: null,  
“db”: “inventorydb”,  
“encoding”: null,  
“login\_host”: “”,  
“login\_password”: “”,  
“login\_unix\_socket”: “”,  
“login\_user”: “yyy”,  
“named\_args”: null,  
“path\_to\_script”: null,  
“port”: 5432,  
“positional\_args”: null,  
“query”: “SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db1’”,  
“search\_path”: [  
“inventory”  
],  
“session\_role”: null,  
“ssl\_mode”: “prefer”,  
“trust\_input”: true  
}  
},  
“item”: {  
“db\_domain”: “[example.com](http://example.com)”,  
“env\_type”: “prod”,  
“oracle\_db\_name”: “db1”  
},  
“query”: “SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db1’”,  
“query\_all\_results”: [  
[  
{  
“oracle\_server\_name”: “ax1”  
}  
]  
],  
“query\_list”: [  
“SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db1’”  
],  
“query\_result”: [  
{  
“oracle\_server\_name”: “ax1”  
}  
],  
“rowcount”: 1,  
“statusmessage”: “SELECT 1”  
},  
{  
“ansible\_loop\_var”: “item”,  
“changed”: false,  
“failed”: false,  
“invocation”: {  
“module\_args”: {  
“as\_single\_query”: true,  
“autocommit”: false,  
“ca\_cert”: null,  
“db”: “inventorydb”,  
“encoding”: null,  
“login\_host”: “”,  
“login\_password”: “”,  
“login\_unix\_socket”: “”,  
“login\_user”: “yyy”,  
“named\_args”: null,  
“path\_to\_script”: null,  
“port”: 5432,  
“positional\_args”: null,  
“query”: “SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db2’”,  
“search\_path”: [  
“inventory”  
],  
“session\_role”: null,  
“ssl\_mode”: “prefer”,  
“trust\_input”: true  
}  
},  
“item”: {  
“db\_domain”: “[example.com](http://example.com)”,  
“env\_type”: “prod”,  
“oracle\_db\_name”: “db2”  
},  
“query”: “SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db2’”,  
“query\_all\_results”: [  
[  
{  
“oracle\_server\_name”: “ax1”  
}  
]  
],  
“query\_list”: [  
“SELECT oracle\_server\_name from oracle\_dg\_member WHERE database\_role = ‘primary’ and oracle\_db\_name = ‘db2’”  
],  
“query\_result”: [  
{  
“oracle\_server\_name”: “ax1”  
}  
],  
“rowcount”: 1,  
“statusmessage”: “SELECT 1”  
}  
]  
}
