ansible:设置了检查变量列表的正确方法?
我试图在Ansible 2.5中使用ansible:设置了检查变量列表的正确方法?,ansible,ansible-2.x,Ansible,Ansible 2.x,我试图在Ansible 2.5中使用when:item未定义时检查变量列表是否已设置,如下所示: - hosts: all tasks: - name: validate some variables fail: msg: "Required variable {{item}} has not been provided" when: item is undefined loop: - v1 - v2
when:item未定义时检查变量列表是否已设置,如下所示:
- 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
,这都不会失败
在使用jinja2模板工程时切换:
when: "{{item}} is undefined"
但ansible对此表示不满:
[警告]:when语句不应包含jinja2模板分隔符,如{{}或{%}。找到:{item}}是
未定义
在变量名列表中循环并检查它们是否已设置的正确方法是什么?尝试使用下面的方法
with_items:
- v1
- v2
使用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
lookup插件:
- name: validate some variables
debug:
when: lookup('vars', item) is undefined
loop:
- v1
- v2
虽然不是您指定的错误消息,但是查找插件的默认错误消息
该模块甚至不会被执行,因此您可以使用任何ー 在上面的示例中,我用debug
替换了fail
。在循环内部,您可以使用{{variable | mandatory}
(请参阅)
我认为将此作为第一个任务添加看起来更好,它检查v1和v2是否存在:
- name: 'Check mandatory variables are defined'
assert:
that:
- v1 is defined
- v2 is defined
不幸的是,它的工作方式。我用同样的方法:--name:testhosts:localhost-gather_-facts:False-vars:required_-variables:-cloud_-yy-cloud_-xx任务:-name:Validate-required-variables-fail:msg:“当:({item}}未定义)或({item}已定义且{item}trim='''})时,{item}未指定任何值”对于_项:“{required_variables}}”,您正在使用v1
和v2
作为字符串。。如果您将使用-“{v1}}”-“{v2}”
您将收到另一个错误,说明您不能在循环中使用未定义的变量..可能与酷的变量重复!不知道2.5版本中的vars查找插件。感谢techraf(+1)assert
不是一个更合适的模块吗?不确定这是否发生了变化,但在2.7中,如果任何变量未定义(),则vars
查找将导致错误。第一个例子似乎是有效的。。。