Error assigning variables with Conditionals

23 views
Skip to first unread message

Josu Vilda

unread,
Jun 30, 2017, 8:24:13 AM6/30/17
to Ansible Project
When assigning variables under certain conditions, if there is no match, the last condition is erroneously assigned.

Ej:

---
- 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


# 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.


Brian Coca

unread,
Jun 30, 2017, 8:33:50 AM6/30/17
to Ansible Project
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') }}


----------
Brian Coca

Josu Vilda

unread,
Jun 30, 2017, 8:35:16 AM6/30/17
to Ansible Project
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

Josu Vilda

unread,
Jun 30, 2017, 9:21:54 AM6/30/17
to Ansible Project
Ok,
This would be the right way, right?


---
- 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

Brian Coca

unread,
Jun 30, 2017, 9:25:26 AM6/30/17
to Ansible Project
One way, I prefer to avoid 'right' and 'wrong'.


----------
Brian Coca
Reply all
Reply to author
Forward
0 new messages