在Ansible中,可以使用json_query
过滤器从JSON数据中获取特定的值。下面是一个示例:
假设我们有一个名为data.json
的JSON文件,内容如下:
{
"users": [
{
"name": "Alice",
"age": 25
},
{
"name": "Bob",
"age": 30
},
{
"name": "Charlie",
"age": 35
}
]
}
我们想要从中获取年龄大于30的用户的姓名。我们可以使用以下Ansible任务来实现:
- name: 从JSON中获取特定值
hosts: localhost
gather_facts: false
tasks:
- name: 读取JSON文件
slurp:
src: data.json
register: json_data
- name: 解析JSON数据
set_fact:
users: "{{ json_data.content | b64decode | from_json }}"
- name: 获取年龄大于30的用户姓名
set_fact:
filtered_users: "{{ users.users | json_query('[?age > `30`].name') }}"
- name: 打印结果
debug:
var: filtered_users
在上述任务中,我们首先使用slurp
模块读取JSON文件的内容,并将其保存到变量json_data
中。然后,使用b64decode
过滤器和from_json
过滤器将JSON数据解码为可用的字典格式,并保存到变量users
中。
接下来,使用json_query
过滤器从users
变量中获取年龄大于30的用户的姓名,并保存到变量filtered_users
中。
最后,使用debug
模块打印出结果。运行这个Ansible playbook,你将得到输出:
ok: [localhost] => {
"filtered_users": [
"Charlie"
]
}
这表明只有名为"Charlie"的用户年龄大于30。
上一篇:Ansible:从结果中获取值