Uso del filtro templates/jinja2 en el libro de jugadas de Ansible para ejecutar condicionalmente ciertos

Uso del filtro templates/jinja2 en el libro de jugadas de Ansible para ejecutar condicionalmente ciertos

Estoy creando un manual para la orquestación de dispositivos de red. Necesito ejecutar ciertos comandos dependiendo de la entrada booleana vars que recibo.

¿Es posible utilizar la entrada booleana para completar los comandos que deben ejecutarse dentro de una tarea? Prefiero usar 1 tarea si es posible.

Para explicar mejor lo que estoy tratando de lograr, permítanme brindarles este ejemplo:

---

task: foo_netw_task
ios_config:
  provider: "{{ router_provider }}"
  lines:
    - "{{if bool_val_1 then 'command_1'}}"
    - "{{if bool_val_2 then 'command_2'}}"
    - "{{if bool_val_3 then 'command_3'}}"

Así que dé la entrada a continuación:

bool_val_1 = true, bool_val_2 = true, bool_val_3 = false

Esperaría que el libro de jugadas en ejecución se viera así:

task: foo_netw_task
ios_config:
  provider: "{{ router_provider }}"
  lines:
    - 'command_1'
    - 'command_2'

¡Gracias por tu ayuda!

Respuesta1

No hay forma de omitir elementos de la lista en ansible. Sin embargo, puede utilizar una variable auxiliar para seleccionar solo las entradas correctas:

---
- hosts: localhost
  vars:
   bool_val_1: true
   bool_val_2: true
   bool_val_3: false
  tasks:
   - shell: "{{item}}"
     vars:
       tmp_lines:
         - "{{'echo command1' if bool_val_1 else None }}"
         - "{{'echo command2' if bool_val_2 else None }}"
         - "{{'echo command3' if bool_val_3 else None }}"
     loop: "{{tmp_lines|select()|list}}"

Output:

PLAY [localhost] ***************************************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************************************
ok: [localhost]

TASK [shell] *******************************************************************************************************************************************************************
changed: [localhost] => (item=echo command1)
changed: [localhost] => (item=echo command2)

PLAY RECAP *********************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

información relacionada