2016-09-22 1 views
6

Ich renne in das dümmste Problem. Ich kann nicht herausfinden, wie in einer Ansible 2.2-Task-Datei für boolean zu testen ist.Verwenden von True False mit Ansible Wenn Klausel

In vars/main.yml, ich habe:

destroy: false 

Im Textbuch, ich habe:

roles: 
    - {'role': 'vmdeploy','destroy': true} 

in der Aufgabendatei, ich habe folgendes:

- include: "create.yml" 
    when: "{{ destroy|bool }} == 'false'" 

I‘ habe verschiedene Kombinationen ausprobiert:

when: "{{ destroy|bool }} == false" 
when: "{{ destroy|bool }} == 'false'" 
when: "{{ destroy|bool == false}}" 
when: "{{ destroy == false}}" 
when: "{{ destroy == 'false'}}" 
when: destroy|bool == false 
when: destroy|bool == 'false' 
when: not destroy|bool 

In allen oben genannten Fällen, bekomme ich immer noch:

statically included: .../vmdeploy/tasks/create.yml 

Debug-Ausgabe:

- debug: 
    msg: "{{ destroy }}" 

--- 

ok: [atlcicd009] => { 
"msg": true 
} 

Das gewünschte Ergebnis ist, dass es überspringt die einschließen.

Antwort

-1

Die gehören gehalten, bevor geschieht das, wenn.

Also habe ich gerade das Include dynamisch gemacht.

---- defaults/main.yml 
mode: "create" 

---- tasks/main.yml 
- include: "{{ mode + '.yml' }}" 
1

Es ist nicht notwendig, boolJinja filter zu verwenden, wenn der Wert der Variablen unter Hostvars definiert ist.

Um Werte als bestimmte Typen zu konvertieren, z. B. wenn Sie eine Zeichenfolge als "True" von einem vars_prompt eingeben und das System nicht weiß, dass es ein boolescher Wert ist.

So ein einfaches

when: not destroy 

sollte den Trick.

9

Um eine Aufgabe auszuführen, wenn destroytrue ist:

--- 
- hosts: localhost 
    connection: local 
    vars: 
    destroy: true 
    tasks: 
    - debug: 
     when: destroy 

und wenn destroy ist false:

--- 
- hosts: localhost 
    connection: local 
    vars: 
    destroy: false 
    tasks: 
    - debug: 
     when: not destroy