네트워크 장치 오케스트레이션을 위한 플레이북을 만들고 있습니다. 내가 받은 부울 변수 입력에 따라 특정 명령을 실행해야 합니다.
하나의 작업 내에서 실행해야 하는 명령을 채우기 위해 부울 입력을 사용할 수 있습니까? 가능하다면 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