条款时使用True False和Ansible

时间:2016-09-22 13:37:33

标签: boolean ansible ansible-playbook ansible-2.x

我遇到了最愚蠢的问题。 我无法弄清楚如何在Ansible 2.2任务文件中测试布尔值。

vars/main.yml中,我有:

destroy: false

在剧本中,我有:

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

在任务文件中,我有以下内容:

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

我已尝试过以下各种组合:

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

在上述所有情况中,我仍然得到:

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

调试输出:

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

---

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

期望的结果是,它会跳过包含。

3 个答案:

答案 0 :(得分:32)

destroytrue时运行任务:

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

destroyfalse时:

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

答案 1 :(得分:9)

在hostvars下定义变量值时,无需使用bool Jinja filter

  

将值转换为某些类型,例如当您从vars_prompt输入字符串为“True”并且系统不知道它是布尔值时。

这么简单

when: not destroy

应该这样做。

答案 2 :(得分:-3)

包含在发生之前一直发生。

所以我刚刚制作了包含动态。

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

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