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