ansible:设置了检查变量列表的正确方法?

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

我试图在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
但是,无论提供的是
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
查找将导致错误。第一个例子似乎是有效的。。。