# Ansible variables in when

**URL:** <https://forum.ansible.com/t/ansible-variables-in-when/12998>\
**Category:** Ansible Project\
**Tags:** ubuntu\
**Created:** [June 20, 2013, 7:47pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998 "2013-06-20T19:47:44Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mario\_Adrian\_Lopez\_A](https://avatars.discourse-cdn.com/v4/letter/m/f14d63/32.png) [@Mario\_Adrian\_Lopez\_A](https://forum.ansible.com/u/Mario_Adrian_Lopez_A)\
**Post date:** [June 20, 2013, 7:47pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/1 "2013-06-20T19:47:44Z")

</div>

Hi Everyone.

Currently I’m working in a script that should be capable of install software in different distros.  
But my problem is that I want to simplify my role conditions putting them in a file.

For example:  
My common vars file would be like this:

#ubuntu Versions  
is\_1004: “‘$ansible\_distribution\_version’ == ‘10.04’”  
is\_1010: “‘$ansible\_distribution\_version’ == ‘10.10’”  
is\_1104: “‘$ansible\_distribution\_version’ == ‘11.04’”  
is\_1110: “‘$ansible\_distribution\_version’ == ‘11.10’”  
is\_1204: “‘$ansible\_distribution\_version’ == ‘12.04’”  
is\_1210: “‘$ansible\_distribution\_version’ == ‘12.10’”  
is\_1304: “‘$ansible\_distribution\_version’ == ‘13.04’”

is\_two\_selected: “$is\_1004 or $is\_1010”

And my roles selection file:

roles:

- { role: Ubuntu\_List, when: $is\_two\_selected}

But it keeps giving me this error:

TASK: [Adding source.] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
fatal: [192.168.1.112] =\> Conditional expression must evaluate to True or False: {% if ‘6.2’ == ‘10.04’ or ‘6.2’ == ‘10.10’ %} True {% else %} False {% endif %}

FATAL: all hosts have already failed – aborting

Does ansible support variable sutitution? Or I’m doing something wrong?  
If I put the plain string in the when condition ($ansible\_distribution\_version’ == ‘10.04’ or $ansible\_distribution\_version’ == ‘10.10’) the script executes normally.

Thanks in advance.

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan2](https://avatars.discourse-cdn.com/v4/letter/m/da6949/32.png) [@Michael\_DeHaan2](https://forum.ansible.com/u/Michael_DeHaan2)\
**Post date:** [June 20, 2013, 8:42pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/2 "2013-06-20T20:42:08Z")

</div>

Yes, of course Ansible supports variable subsitution, in fact, you can see what it expanded to when it gave you the error in building the conditional.

Now, of course in Ansible 1.2, it’s preferred that when you use “when” you don’t do any of that old-style pre-1.2 templating, and use “{{ variable }}” vs "{{ $var }}, but based on what you have gottten back there may be something else up that I need to chase.

I will take a look shortly.

---

<div class="post-metadata">

**Author:** ![benno\_joy](https://avatars.discourse-cdn.com/v4/letter/b/73ab20/32.png) [@benno\_joy](https://forum.ansible.com/u/benno_joy)\
**Post date:** [June 21, 2013, 6:22am UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/3 "2013-06-21T06:22:49Z")

</div>

Hi Mario,

Can you try:

roles:

- { role: Ubuntu\_List, when: is\_two\_selected}

- Benno

---

<div class="post-metadata">

**Author:** ![Mario\_Adrian\_Lopez\_A](https://avatars.discourse-cdn.com/v4/letter/m/f14d63/32.png) [@Mario\_Adrian\_Lopez\_A](https://forum.ansible.com/u/Mario_Adrian_Lopez_A)\
**Post date:** [June 21, 2013, 3:00pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/4 "2013-06-21T15:00:20Z")

</div>

Hi Benno.

It works. Well… almost.

It doesn’t give any error, but is letting pass a non Ubuntu machine.  
So I suppose the condition is not being passed to the role.

Is there a way to see the conditions that are being applied?

---

<div class="post-metadata">

**Author:** ![Mario\_Adrian\_Lopez\_A](https://avatars.discourse-cdn.com/v4/letter/m/f14d63/32.png) [@Mario\_Adrian\_Lopez\_A](https://forum.ansible.com/u/Mario_Adrian_Lopez_A)\
**Post date:** [June 21, 2013, 3:12pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/5 "2013-06-21T15:12:04Z")

</div>

Sorry I ommited my code in the answer.  
The new version:

is\_1004: “ansible\_distribution\_version == ‘10.04’”  
is\_1010: “'ansible\_distribution\_version == ‘10.10’”  
is\_1104: “'ansible\_distribution\_version == ‘11.04’”  
is\_1110: “'ansible\_distribution\_version == ‘11.10’”  
is\_1204: “'ansible\_distribution\_version == ‘12.04’”  
is\_1210: “'ansible\_distribution\_version == ‘12.10’”  
is\_1304: “'ansible\_distribution\_version == ‘13.04’”

is\_two\_selected: “is\_1004 or is\_1010”

roles:

- { role: Ubuntu\_List, when: is\_two\_selected}

But still doesn’t work.

---

<div class="post-metadata">

**Author:** ![Michael\_DeHaan2](https://avatars.discourse-cdn.com/v4/letter/m/da6949/32.png) [@Michael\_DeHaan2](https://forum.ansible.com/u/Michael_DeHaan2)\
**Post date:** [June 22, 2013, 5:29pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/6 "2013-06-22T17:29:39Z")

</div>

Yeah, haven’t had a chance to look at this yet.

Please make sure there is a github ticket filed for this and I can investigate.

---

<div class="post-metadata">

**Author:** ![Mario\_Adrian\_Lopez\_A](https://avatars.discourse-cdn.com/v4/letter/m/f14d63/32.png) [@Mario\_Adrian\_Lopez\_A](https://forum.ansible.com/u/Mario_Adrian_Lopez_A)\
**Post date:** [June 24, 2013, 3:39pm UTC](https://forum.ansible.com/t/ansible-variables-in-when/12998/7 "2013-06-24T15:39:35Z")

</div>

Thanks, I already filled it.
