Using True False with Ansible When Clause

Simply  Seth picture Simply Seth · Sep 22, 2016 · Viewed 92.7k times · Source

I'm running into the silliest issue. I cannot figure out how to test for boolean in an Ansible 2.2 task file.

In vars/main.yml, I have:

destroy: false

In the playbook, I have:

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

In the task file, I have the following:

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

I've tried various combinations below:

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 all the above cases, I still get:

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

Debug output:

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

---

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

The desired result, is that it would skip the include.

Answer

techraf picture techraf · Sep 22, 2016

To run a task when destroy is true:

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

and when destroy is false:

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