vars tower playbook commands ansible ansible-playbook

playbook - ansible tower



Definir condicionalmente la variable en Ansible. (3)

Creo que estás buscando el filtro default(omit) .

http://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#omitting-parameters

Según el ejemplo, el modo se comportará como si no estuviera configurado para los dos primeros elementos del bucle.

- name: touch files with an optional mode file: dest: "{{item.path}}" state: touch mode: "{{item.mode|default(omit)}}" loop: - path: /tmp/foo - path: /tmp/bar - path: /tmp/baz mode: "0444"

Quiero definir condicionalmente una variable en un libro de juego de Ansible como este: my_var: "{{ ''foo'' if my_condition}}" . Me gustaría que la variable permaneciera indefinida si la condición no se resuelve como verdadera.

Ansible da un error si trato de hacer esto: fatal: [foo.local] => {''msg'': ''AnsibleUndefinedVariable: One or more undefined variables: the inline if-expression on line 1 evaluated to false and no else section was defined.'', ''failed'': True} . ¿Por qué es esto un error de todos modos?

El caso completo se ve así: {role: foo, my_var: "foo"} . Si se define my_var , el rol hace algo especial. En algunos casos, no quiero que el rol haga esto. Podría usar when: condition , pero luego tendría que copiar todo el bloque de roles. También podría usar una variable bool extra, pero me gustaría una solución sin tener que cambiar la "interfaz" del rol.

¿Algunas ideas?


Este código puede ayudarte a definir una variable con condición.

- hosts: node1 gather_facts: yes tasks: - name: Check File shell: ls -ld /etc/postfix/post-install register: result ignore_errors: yes - name: Define Variable set_fact: exists: "{{ result.stdout }}" when: result|success - name: Display Variable debug: msg="{{ exists }}" ignore_errors: yes

Entonces aquí "existe" se mostrará solo si la condición es verdadera.


Puedes usar algo como esto: my_var: "{{ ''foo'' if my_condition else '''' }}" . El ''else'' sucederá si la condición no coincide, y en este caso establecerá un valor vacío para la variable. Creo que esta es una solución corta, legible y elegante.