【问题标题】:Ansible: how to check if a variable is being loaded in a playbook?Ansible:如何检查一个变量是否正在加载到剧本中?
【发布时间】:2019-01-17 17:05:28
【问题描述】:

我正在尝试编写一个从组 vars 文件中加载 vars 然后检查变量是否存在的 playbook

我的剧本是这样的:

---
- 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
...

我的库存文件包含

[app]
ansible-slave1
ansible-slave2

[db]
ansible-db

[multi:children]
app
db

我有 roles/app/vars/main.yml 包含

country: "France"
city: "Paris"

我期待的是输出“未定义街道”的剧本,但我有一个无法解决的语法问题

[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 }}"

我会很高兴有任何提示。

谢谢

【问题讨论】:

标签: ansible


【解决方案1】:

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

    msg: "{{ item }} is not defined"
 when: "{{ item }} is not defined"

所以输出将是:

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

【讨论】:

  • 你是对的,在 when 子句末尾移动最后的 " 解决了这个问题。谢谢
【解决方案2】:

有一个未解决的问题conditional is defined fails to capture undefined var

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

when: "{{ item }}" == ""

【讨论】:

  • 谢谢,但是通过替换“when”语句我仍然遇到同样的问题
  • 你使用哪个 Ansible 版本来执行这个剧本?
  • [vagrant@ansible-master ~]$ ansible-playbook --version ansible-playbook 2.2.0.0
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多