Ansibleプレイブックでテンプレート/jinja2フィルターを使用して条件付きで特定のものを実行する

Ansibleプレイブックでテンプレート/jinja2フィルターを使用して条件付きで特定のものを実行する

ネットワーク デバイス オーケストレーション用のプレイブックを作成しています。受信したブール変数入力に応じて特定のコマンドを実行する必要があります。

ブール入力を使用して、1 つのタスク内で実行する必要があるコマンドを入力することは可能ですか? 可能であれば、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

関連情報