# Variable within variable

**URL:** <https://forum.ansible.com/t/variable-within-variable/30956>\
**Category:** Ansible Project\
**Created:** [August 5, 2019, 4:53pm UTC](https://forum.ansible.com/t/variable-within-variable/30956 "2019-08-05T16:53:30Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Spiro\_Mitsialis](https://avatars.discourse-cdn.com/v4/letter/s/c57346/32.png) [@Spiro\_Mitsialis](https://forum.ansible.com/u/Spiro_Mitsialis)\
**Post date:** [August 5, 2019, 4:53pm UTC](https://forum.ansible.com/t/variable-within-variable/30956/1 "2019-08-05T16:53:30Z")

</div>

I have the following and there may be several vlans per switch.

“cisco\_ios.vlans”: {

“35”: {

“id”: “35”,  
“mtu”: “1500”,  
“name”: “CC\_internal\_subnet\_35”,  
“ports”: [  
“GigabitEthernet1/0/1”,  
“GigabitEthernet1/0/2”,  
“GigabitEthernet1/0/20”  
],  
“status”: “active”  
},  
“499”: {  
“id”: “499”,  
“mtu”: “1500”,  
“name”: “Lync\_VoIP\_Burnside1”,  
“ports”: [  
“”  
],  
“status”: “active”  
}  
}

I want to be able to reference the data in here. Example, I am looking to loop through al \*.ports. I’m trying to do the following which does not work

vars:  
old\_vlan: 35  
new\_vlan: 45

- name: Change vlan old\_vlan to new\_vlan for all ports in list  
debug:  
msg: “Old VLAN is {{ old\_vlan }} and port {{ item }} needs to be changed”  
loop: ‘{{ cisco\_ios.vlans[“{{ old\_vlan }}”].ports }}’

The following work: loop: ‘{{ cisco\_ios.vlans[“35”].ports }}’  
but how do I substitute 35 with the variable old\_vlan which contains 35?

---

<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:** [August 5, 2019, 5:18pm UTC](https://forum.ansible.com/t/variable-within-variable/30956/2 "2019-08-05T17:18:45Z")

</div>

> I have the following and there may be several vlans per switch.  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"cisco\_ios.vlans": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"35": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"id": "35",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mtu": "1500",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"name": "CC\_internal\_subnet\_35",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ports": [  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"GigabitEthernet1/0/1",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"GigabitEthernet1/0/2",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"GigabitEthernet1/0/20"  
> &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;"status": "active"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"499": {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"id": "499",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mtu": "1500",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"name": "Lync\_VoIP\_Burnside1",  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ports": [  
> &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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"status": "active"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

Your vlans are string because of the quotes around 35 and 499.

> I want to be able to reference the data in here. Example, I am looking to  
> loop through al \*.ports. I'm trying to do the following which does not work
> 
> &nbsp;&nbsp;vars:  
> &nbsp;&nbsp;&nbsp;&nbsp;old\_vlan: 35  
> &nbsp;&nbsp;&nbsp;&nbsp;new\_vlan: 45

You are here making variables with int.

> &nbsp;&nbsp;&nbsp;- name: Change vlan old\_vlan to new\_vlan for all ports in list  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: "Old VLAN is {{ old\_vlan }} and port {{ item }} needs to be  
> changed"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: '{{ cisco\_ios.vlans["{{ old\_vlan }}"].ports }}'

You can't have nested {{ }}, if you are in template mode you are in template mode so just loose the inner {{ }}.  
But since your data is a string and you variable is a int you would need to filter you int's to a string

&nbsp;&nbsp;loop: '{{ cisco\_ios.vlans[old\_vlan | string].ports }}'

Or change old\_vlan to a strings and do

&nbsp;&nbsp;loop: '{{ cisco\_ios.vlans[old\_vlan].ports }}'
