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”移到后面解决了这个问题。谢谢