Verwenden von Templates/jinja2 Filtern im Ansible Playbook zur bedingten Ausführung bestimmter

Verwenden von Templates/jinja2 Filtern im Ansible Playbook zur bedingten Ausführung bestimmter

Ich erstelle ein Playbook für die Orchestrierung von Netzwerkgeräten. Ich muss bestimmte Befehle abhängig von den Booleschen Variablen ausführen, die ich als Eingabe erhalte.

Ist es möglich, den Booleschen Input zu verwenden, um die Befehle zu füllen, die innerhalb einer Aufgabe ausgeführt werden müssen? Ich bevorzuge, wenn möglich, die Verwendung von 1 Aufgabe.

Um besser zu erklären, was ich erreichen möchte, möchte ich dieses Beispiel anführen:

---

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

Geben Sie also die folgende Eingabe ein:

bool_val_1 = true, bool_val_2 = true, bool_val_3 = false

Ich würde erwarten, dass das ausführende Playbook folgendermaßen aussieht:

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

Vielen Dank für Ihre Hilfe!

Antwort1

Es gibt in Ansible keine Möglichkeit, Listenelemente wegzulassen. Sie können jedoch eine Hilfsvariable verwenden, um nur die richtigen Einträge auszuwählen:

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

verwandte Informationen