Ansible:如何检查剧本中是否加载了变量?

Ansible:如何检查剧本中是否加载了变量?,ansible,Ansible,我正在尝试编写一个剧本,从组变量文件加载变量,然后检查变量是否存在 我的剧本是这样的: --- - hosts: "{{ target }}" roles: - app tasks: - name: alert if variable does not exist fail: msg: "{{ item }} is not defined" when: "{{ item }}" is not defined with_items:

我正在尝试编写一个剧本,从组变量文件加载变量,然后检查变量是否存在

我的剧本是这样的:

---
- hosts: "{{ target }}"
  roles:
    - app

  tasks:
  - name: alert if variable does not exist
    fail:
      msg: "{{ item }} is not defined"
    when: "{{ item }}" is not defined
    with_items:
      - country
      - city
      - street
...
    msg: "{{ item }} is not defined"
 when: "{{ item }} is not defined"
我的库存文件包含

[app]
ansible-slave1
ansible-slave2

[db]
ansible-db

[multi:children]
app
db
我的角色/app/vars/main.yml包含

country: "France"
city: "Paris"
我所期望的是playbook输出“street is not defined”,但我有一个语法问题无法解决

[vagrant@ansible-master vagrant]$ ansible-playbook --inventory-file=ansible_master_hosts test_variables.yml --extra-vars "target=ansible-slave1" --syntax-check
ERROR! Syntax Error while loading YAML.

The error appears to have been in '/vagrant/test_variables.yml': line 10, column 24, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  msg: "{{ item }} is not defined"
when: "{{ item }}" is not defined
                   ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"
我很乐意得到任何提示

谢谢

还有一个悬而未决的问题

作为解决方法,我建议将where条件更改为以下内容:

when:“{item}”==”

您在“when”语句中的“”位置无效。这应该是这样的:

---
- hosts: "{{ target }}"
  roles:
    - app

  tasks:
  - name: alert if variable does not exist
    fail:
      msg: "{{ item }} is not defined"
    when: "{{ item }}" is not defined
    with_items:
      - country
      - city
      - street
...
    msg: "{{ item }} is not defined"
 when: "{{ item }} is not defined"
因此,输出将是:

failed: [hostname] (item=street) => {"changed": false, "item": "street", "msg": "street is not defined"}

重复的感谢,但我仍然有相同的问题,替换了“何时”的声明您使用哪个Ansible版本来执行此剧本[vagrant@ansible-master~]$ansible playbook——ansible playbook 2.2.0.0版你说得对,将when子句末尾的“final”移到后面解决了这个问题。谢谢