# Error assigning variables with Conditionals

**URL:** <https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861>\
**Category:** Ansible Project\
**Tags:** windows\
**Created:** [June 30, 2017, 12:24pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861 "2017-06-30T12:24:13Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jrvilda](https://avatars.discourse-cdn.com/v4/letter/j/b38774/32.png) [@jrvilda](https://forum.ansible.com/u/jrvilda)\
**Post date:** [June 30, 2017, 12:24pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861/1 "2017-06-30T12:24:13Z")

</div>

When assigning variables under certain conditions, if there is no match, the last condition is erroneously assigned.

Ej:

```auto
---
- hosts: hostwin
  vars:
     # Definimos el paquete a instalar según el sistema operativo.
     - package_name: httpd
       when: ansible_os_family == "Red Hat"
     - package_name: apache2
       when: ansible_os_family == "Debian"

  tasks:

     # Consultamos al usuario si quiere actuar con dicho paquete.
     - name: Consulta sobre la instalacion del paquete {{package_name}} en {{ansible_os_family}}
       pause: prompt="Acepta la instalacion del paquete {{package_name}} en {{ansible_os_family}} "
       register: confirmación

```

```auto
# ansible-playbook playbooks/test-httpd.yml
PLAY [hostwin] ***************************************
TASK [setup] *******************************************************************
ok: [hostwin]
TASK [Consulta sobre la instalacion del paquete apache2 en **Windows**] ************
[Consulta sobre la instalacion del paquete apache2 en **Windows**]
Acepta la instalacion del paquete apache2 en **Windows** :
ok: [hostwin]
PLAY RECAP *********************************************************************
hostwin : ok=2 changed=0 unreachable=0 failed=0

```

This should be null or return error, but do not assign any one.

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [June 30, 2017, 12:33pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861/2 "2017-06-30T12:33:38Z")

</div>

Well, works as expected ... `when:` is a TASK keyword, not for use in  
var declarations, you need to use jinja2 expressions for conditionals  
like that:

package\_name: "{{ (ansible\_os\_family == "Red Hat")|ternary('httpd',  
'apache2') }}

---

<div class="post-metadata">

**Author:** ![jrvilda](https://avatars.discourse-cdn.com/v4/letter/j/b38774/32.png) [@jrvilda](https://forum.ansible.com/u/jrvilda)\
**Post date:** [June 30, 2017, 12:35pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861/3 "2017-06-30T12:35:16Z")

</div>

ansible 2.2.1.0

Linux 2.6.32-504.el6.x86\_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86\_64 x86\_64 x86\_64 GNU/Linux

---

<div class="post-metadata">

**Author:** ![jrvilda](https://avatars.discourse-cdn.com/v4/letter/j/b38774/32.png) [@jrvilda](https://forum.ansible.com/u/jrvilda)\
**Post date:** [June 30, 2017, 1:21pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861/4 "2017-06-30T13:21:54Z")

</div>

Ok,  
This would be the right way, right?

```auto
---
- hosts: hostwin

  vars:
     # definimos variables de ejemplo
     - site: localhost

  tasks:
     - name: Definimos variables para Red Hat.
       set_fact:
          package_name: "httpd"
       when:
          ansible_os_family == "Red Hat"

     - name: Definimos variables para Debian.
       set_fact:
          package_name: "apache2"
       when:
          ansible_os_family == "Debian"

     - name: Definimos variables para Windows.
       set_fact:
          package_name: "www"
       when:
          ansible_os_family == "Windows"

     # Consultamos al usuario si quiere actuar con dicho paquete.
     - name: Consulta sobre la instalacion del paquete {{package_name}} en {{ansible_os_family}}.
       pause: prompt="Acepta la instalacion del paquete {{package_name}} en {{ansible_os_family}} "
       register: confirmación

```

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [June 30, 2017, 1:25pm UTC](https://forum.ansible.com/t/error-assigning-variables-with-conditionals/24861/5 "2017-06-30T13:25:12Z")

</div>

One way, I prefer to avoid 'right' and 'wrong'.
