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

时间:2018-05-12 11:20:35

标签: ansible ansible-2.x

我正在尝试在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

但是,无论是否提供v1v2,这都不会失败。

切换when以使用jinja2模板工作:

when: "{{item}} is undefined"

但是,ansible抱怨这个:

  

[警告]:when语句不应包含jinja2模板分隔符,例如{{}}或{%%}。找到:{{item}}是   未定义

循环查看变量名列表并检查它们是否已设置的正确方法是什么?

3 个答案:

答案 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