2017-12-29 6 views
0

Ich führe ein Playbook gegen eine dynamische Bestandsliste, so dass das Ausfiltern verschiedener Hosts beim Ausführen des Playbooks nicht etwas ist, was ich getan habe.ansible wenn Anweisung multi-variable Substitution

Das gesagt, ich habe bestimmte Aufgaben basierend auf der 'ansible_hostname' Tatsache übersprungen/ausgeführt. Als Beispiel:

- name: say 'yes' to every server except server0[12] 
    shell: | 
    echo 'yes' 
    when: '"server01" not in ansible_hostname and 
     "server02" not in ansible_hostname' 

- name: say 'no' for only server0[12] 
    shell: | 
    echo 'no' 
    when: '"server01" in ansible_hostname or 
     "server02" in ansible_hostname' 

Das hat für mich gearbeitet, aber es ist nicht sehr nachhaltig. Ich suche nach einer Möglichkeit, dies dynamisch zu tun (Variablensubstitution?). So kann ich zum Beispiel eine Variable behalten, die eine Liste von [server01, server02] ist, und ich kann eine for-Schleife von {{var}} {nicht in ansible_hostname} machen.

Ich bin nicht sicher, ob dies möglich ist oder wie dies zu erreichen ist. Irgendwelche Gedanken?

+0

Was Ihre Absicht war, eine '„server01“in ansible_hostname' Bedingung für das Schreiben? Teilweise Übereinstimmung? – techraf

Antwort

1

Lassen Sie sagen, Sie Liste von Hostnamen haben gegen Sie überprüfen möchten:

--- 
- hosts: all 
    vars: 
    hostname_list: ["server01", "server01", "server01"] 

    tasks: 
    - debug: 
     msg: "test pass" 
     when: ansible_hostname not in hostname_list