Я создаю плейбук для оркестровки сетевых устройств. Мне нужно выполнить определенные команды в зависимости от получаемых мной булевых переменных.
Можно ли использовать логический ввод для заполнения команд, которые необходимо выполнить в рамках одной задачи? Я предпочитаю использовать 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