我是ansible的新手,我在从ansible角色的json文件读取值时遇到问题。我的变量有如下值:
{
"queue": {
"first": {
"car": "bmw",
"year": "1990",
"model": "x3",
"color": "blue"
},
"second": {
"car": "bmw",
"year": "2000",
"model": "318",
"color": "red"
}
}
}
我正在尝试打印颜色的值,仅将其与其他变量进行比较。我用了 with_dict
迭代json对象(存储在名为jsonVar的变量中),如下所示:
- name: test loop
with_dict: "{{jsonVar}}"
shell: |
if echo "blue" | grep -q "${{item.value.color}}" ; then
echo "success"
到目前为止,从if语句中将json的颜色值与“蓝色”进行比较是没有运气的。我想知道我做错了什么?
提前致谢!
您可以使用名为的查找插件读取json文件 file
并把它传递给 from_json
jinja2过滤器。你也有错误 with_dict
循环,因为你必须循环 jsonVar['queue']
, 不只是 jsonVar
。这是一个完整的代码,有效:
---
- hosts: your_host
vars:
jsonVar: "{{ lookup('file', 'var.json') | from_json }}"
tasks:
- name: test loop
with_dict: "{{ jsonVar['queue'] }}"
shell: |
if echo "blue" | grep -q "{{ item.value.color }}" ; then
echo "success"
fi
您可以使用名为的查找插件读取json文件 file
并把它传递给 from_json
jinja2过滤器。你也有错误 with_dict
循环,因为你必须循环 jsonVar['queue']
, 不只是 jsonVar
。这是一个完整的代码,有效:
---
- hosts: your_host
vars:
jsonVar: "{{ lookup('file', 'var.json') | from_json }}"
tasks:
- name: test loop
with_dict: "{{ jsonVar['queue'] }}"
shell: |
if echo "blue" | grep -q "{{ item.value.color }}" ; then
echo "success"
fi
你可以使用| json_query过滤器。
http://docs.ansible.com/ansible/playbooks_filters.html#json-query-filter
但要确保您输入的文件也是适当的格式,否则您可以使用两个过滤器,第一个转换为适当的过滤器,第二个过滤器执行json查询。
例如: - {{ variable_name | from_json | json_query('')}}
在你的情况下,我认为这将有所帮助:
tasks: print the color
set_fact:
color1 : "{{ jsonVar | from_json | json_query('queue.[0].['color']')}}"
color2 : "{{ jsonVar | from_json | json_query('queue.[1].['color']')}}"
但请注意Ansible版本等要求