我正在尝试在Ansible 2.5中使用when: item is undefined
来检查是否已设置变量列表,如下所示:
- hosts: all
tasks:
- name: validate some variables
fail:
msg: "Required variable {{item}} has not been provided"
when: item is undefined
loop:
- v1
- v2
但是,无论是否提供v1
或v2
,这都不会失败。
切换when
以使用jinja2模板工作:
when: "{{item}} is undefined"
但是,ansible抱怨这个:
[警告]:when语句不应包含jinja2模板分隔符,例如{{}}或{%%}。找到:{{item}}是 未定义
循环查看变量名列表并检查它们是否已设置的正确方法是什么?
答案 0 :(得分:5)
使用vars
结构:
- name: validate some variables
fail:
msg: "Required variable {{item}} has not been provided"
when: vars[item] is undefined
loop:
- v1
- v2
或者,在Ansible 2.5中,使用新的vars
查找插件:
- name: validate some variables
debug:
when: lookup('vars', item) is undefined
loop:
- v1
- v2
虽然没有您指定的错误消息,但是查找插件的默认错误消息。
该模块甚至不会被执行,因此您可以使用上面示例中我用fail
替换debug
的任何内容。
答案 1 :(得分:0)
在内部循环中,您可以使用{{ variable | mandatory }}
(请参见Forcing variables to be defined)
我认为将其添加为第一个任务看起来更好,它检查v1和v2是否存在:
- name: 'Check mandatory variables are defined'
assert:
that:
- v1 is defined
- v2 is defined
答案 2 :(得分:-3)
尝试使用以下
with_items:
- v1
- v2