如果变量包含布尔值,我如何在Ansible中的任务失败?我想为Ansible playbooks执行输入验证

时间:2017-10-10 10:10:57

标签: ansible jinja2

通过从YAML文件加载变量,将变量作为extra_args传递。 我尝试了以下但是它不起作用:

- name: Check if variable are of type boolean
  fail:
    msg: "Variable '{{ item }}' is not a boolean"
  when: item is not bool
  with_items: "{{ required_boolean_vars }}"

此外,类似于布尔值,我怎么能对整数,字典和对象类型做同样的事情。

3 个答案:

答案 0 :(得分:1)

有一个通用type_debug filter返回类型,因此对于布尔条件是:

when: "item | type_debug == 'bool'"`

另一种方式:

when: item is sameas true or item is sameas false

字典:

when: item is mapping

列表:

when: item is iterable

此外,上述条件检查item是否为标题中提到的布尔值。如果您想根据代码建议测试相反的情况,请添加not

答案 1 :(得分:0)

如果不是boolean类型的变量

,我发现失败任务的变通方法
- name: Check if variable are of type boolean
  assert:
    that: "{{ item }} == false or {{ item }} == true"
    msg: "Variable {{ item }} is not of type boolean"
  with_items: "{{ required_boolean_vars }}"

其中required_boolean_vars包含我想要检查的变量列表。

答案 2 :(得分:0)

确保变量不是布尔值的正确方法是使用与此相同的Jinja2测试:

when: item is not sameas true and item is not sameas false