Ansible 플레이북에서 템플릿/jinja2 필터를 사용하여 조건부로 특정 실행

Ansible 플레이북에서 템플릿/jinja2 필터를 사용하여 조건부로 특정 실행

네트워크 장치 오케스트레이션을 위한 플레이북을 만들고 있습니다. 내가 받은 부울 변수 입력에 따라 특정 명령을 실행해야 합니다.

하나의 작업 내에서 실행해야 하는 명령을 채우기 위해 부울 입력을 사용할 수 있습니까? 가능하다면 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

관련 정보