布尔值为true或false的Ansible导入任务

布尔值为true或false的Ansible导入任务,ansible,Ansible,我想使用布尔值创建部署任务/角色。默认情况下为false,如果将其设为true,则部署完成。与main.yml中的变量类似,定义了 vars: - c - name: task 1 import_tasks: "a.yml" when: c is defined tags: - a - name: task 2 import_tasks: "b.yml" when: c is defined tags: -

我想使用布尔值创建部署任务/角色。默认情况下为false,如果将其设为true,则部署完成。与main.yml中的变量类似,定义了

vars:
  - c

- name: task 1
  import_tasks: "a.yml"
  when: c is defined
  tags:
    - a

- name: task 2
  import_tasks: "b.yml"
  when: c is defined
  tags:
    - b

您可以执行以下操作:;但是,正如下面的一条评论所指出的,在某些情况下,这可能会导致一些意想不到的行为,并且不是实现您要求的唯一方法:

- set_fact: c=false
  when: c is undefined

- name: task 1
  import_tasks: "a.yml"
  when: c | bool
  tags:
    - a

- name: task 2
  import_tasks: "b.yml"
  when: c | bool
  tags:
    - b

你不需要在这里设置事实<代码>当:c |默认值(false)| bool作为一个条件将执行此任务。请注意,您的示例在以下情况下会中断:例如,将
c
设置为
true
作为额外变量:
ansible localhost-m debug-a msg=“{{c is true}”-ec=true
给出
false
,而
ansible localhost-m debug-a msg=“{c|default(false)|bool}”-EC=true
的计算结果与预期一致。足够公平。关于调试示例,这是唯一发生这种情况的情况还是其他情况?感谢您的回复,但我收到一个错误{“msg”:“条件检查'c is true'失败。错误是:模板字符串时模板错误:没有名为'true'的测试。字符串:{%if c is true%}true{%else%}False{%endif%}我有一个错误:msg:“条件检查'c | bool'失败。错误是:计算条件(c | bool)时出错”:“c”在本地测试时是未定义的,这对我来说没有问题。您是否正确添加了set\u fact任务?我在您的后续帖子中看到您有
set\u fact:c为false
确保set\u fact说
set\u fact:c=false