Использование фильтра templates/jinja2 в Ansible playbook для условного выполнения определенных

Использование фильтра templates/jinja2 в Ansible playbook для условного выполнения определенных

Я создаю плейбук для оркестровки сетевых устройств. Мне нужно выполнить определенные команды в зависимости от получаемых мной булевых переменных.

Можно ли использовать логический ввод для заполнения команд, которые необходимо выполнить в рамках одной задачи? Я предпочитаю использовать 1 задачу, если это возможно.

Чтобы лучше объяснить, чего я пытаюсь добиться, позвольте мне привести такой пример:

---

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'}}"

Итак, дайте свои комментарии ниже:

bool_val_1 = true, bool_val_2 = true, bool_val_3 = false

Я ожидаю, что последовательность действий будет выглядеть следующим образом:

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

Спасибо за вашу помощь!

решение1

В ansible нет возможности пропускать элементы списка. Однако вы можете использовать вспомогательную переменную, чтобы выбрать только нужные записи:

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

Связанный контент