# Multiple values in variable

**URL:** <https://forum.ansible.com/t/multiple-values-in-variable/31648>\
**Category:** Ansible Project\
**Created:** [November 13, 2019, 11:00am UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648 "2019-11-13T11:00:29Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Oxs](https://avatars.discourse-cdn.com/v4/letter/o/ebca7d/32.png) [@Oxs](https://forum.ansible.com/u/Oxs)\
**Post date:** [November 13, 2019, 11:00am UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/1 "2019-11-13T11:00:29Z")

</div>

Hi guys,

I have create a loop in my playbook to set multiple values for lvol and vg.  
How I can write my ansible-playbook command with multiple values in a variable?

Example:  
ansible-playbook data-fs.yml -i inventory -e vg\_name=vg01,vg02 -e lv\_name=lv01,lv02

- name: Create LV’s  
lvol:  
vg: “{{ vg\_name }}”  
lv: “{{ lv\_name }}”

size: “{{ lv\_size }}”  
loop:

- { vg: ’ {{ vg\_name }}, lv: ‘{{ vg\_name }}’ }

Thanks

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [November 13, 2019, 11:56am UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/2 "2019-11-13T11:56:59Z")

</div>

It's possible to put the extra variables into the lists and use the \*zip\*  
filter. For example

&nbsp;&nbsp;&nbsp;&nbsp;ansible-playbook data-fs.yml -e "{'vg\_name': ['vg01','vg02']}" -e  
&nbsp;&nbsp;&nbsp;&nbsp;"{'lv\_name': ['lv01', 'lv02']}"

&nbsp;&nbsp;&nbsp;&nbsp;- name: Create LV's  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvol:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vg: "{{ item.0 }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lv: "{{ item.1 }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size: "{{ lv\_size }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ vg\_name|default()|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip(lv\_name|default())|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"

Cheers,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Oxs](https://avatars.discourse-cdn.com/v4/letter/o/ebca7d/32.png) [@Oxs](https://forum.ansible.com/u/Oxs)\
**Post date:** [November 13, 2019, 6:03pm UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/3 "2019-11-13T18:03:34Z")

</div>

Thanks for your feedback, work fine but I have change the syntax of the ansible-playbook command:

ansible-playbook data-fs.yml -e ‘{“vg\_name”: [“vg0”,“vg02”]}’ -e ‘{“lv\_name”: [“lv01”, “lv02”]}’

Last question: How to use the variable data\_dir with this loop… or what is the correct syntax?

Name: mount Filesystem

- mount:  
path: “{{ data\_dir }}”  
src: /dev/mapper/{{ item.0 }}-{{ item.1 }}  
fstype: xfs  
state: mounted  
opts: default,nosuid,nodev,noexec  
loop: "**{{ data\_dir|default([])**|{{ vg\_name|default()|zip(lv\_name|default()) | list }}

Thanks in advance for your help!

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [November 13, 2019, 8:19pm UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/4 "2019-11-13T20:19:34Z")

</div>

> Thanks for your feedback, work fine but I have change the syntax of the  
> ansible-playbook command:  
> ansible-playbook data-fs.yml -e '{"vg\_name": ["vg0","vg02"]}' -e  
> '{"lv\_name": ["lv01", "lv02"]}'

It's possible to keep the command and \*split\* the arguments

&nbsp;&nbsp;&nbsp;&nbsp;ansible-playbook data-fs.yml -e vg\_name=vg01,vg02 -e lv\_name=lv01,lv02

&nbsp;&nbsp;&nbsp;&nbsp;- name: Create LV's  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvol:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vg: "{{ item.0 }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lv: "{{ item.1 }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size: "{{ lv\_size }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ vg\_name.split(',')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip(lv\_name.split(','))|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"

> Last question: How to use the variable data\_dir with this loop.. or what is  
> the correct syntax?
> 
> Name: mount Filesystem  
> &nbsp;&nbsp;- mount:  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path: "{{ data\_dir }}"  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src: /dev/mapper/{{ item.0 }}-{{ item.1 }}  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstype: xfs  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state: mounted  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opts: default,nosuid,nodev,noexec  
> &nbsp;&nbsp;loop: "\*{{ data\_dir|default()\*|{{  
> vg\_name|default()|zip(lv\_name|default()) | list }}

The task below will mount the devices "/dev/mapper/vg01-lv01" and  
"/dev/mapper/vg02-lv02" to the directory "/lv01" and "/lv02" respectively

&nbsp;&nbsp;&nbsp;&nbsp;- mount:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path: "/{{ item.1 }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src: /dev/mapper/{{ item.0 }}-{{ item.1 }}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstype: xfs  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state: mounted  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opts: default,nosuid,nodev,noexec  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ vg\_name.split(',')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip(lv\_name.split(','))|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"

Try to describe where to mount the devices if this is not what you want.

Cheers,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Oxs](https://avatars.discourse-cdn.com/v4/letter/o/ebca7d/32.png) [@Oxs](https://forum.ansible.com/u/Oxs)\
**Post date:** [November 14, 2019, 9:15am UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/5 "2019-11-14T09:15:09Z")

</div>

Hi Vladimir,

Thanks a lot !!! It was what I want with the mount point!

My question was, how I can manage 3 variables in a loop? for example the chown file (path, user and group variable)

have a great day

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [November 14, 2019, 9:39am UTC](https://forum.ansible.com/t/multiple-values-in-variable/31648/6 "2019-11-14T09:39:07Z")

</div>

Let's create a list of dictionaries and loop the list. For example

&nbsp;&nbsp;&nbsp;&nbsp;vars:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my\_files:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- path: /scratch/project1/test1  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;owner: admin  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group: admin  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- path: /scratch/project1/test2  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;owner: admin  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group: admin

&nbsp;&nbsp;&nbsp;&nbsp;tasks:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- name: Create test files  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state: "{{ item.state|default('touch') }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path: "{{ item.path }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;owner: "{{ item.owner|default(omit) }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group: "{{ item.group|default(omit) }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop: "{{ my\_files }}"

Cheers,

&nbsp;&nbsp;-vlado
