如何在ansible中有条件地从注册的json输出中获取值
我试图解析yum模块的json输出,以有条件地获取数据。 我的剧本如下所示:如何在ansible中有条件地从注册的json输出中获取值,json,loops,ansible,jinja2,Json,Loops,Ansible,Jinja2,我试图解析yum模块的json输出,以有条件地获取数据。 我的剧本如下所示: --- - hosts: all become: true tasks: - name: list ggk rpms yum: list: "{{ item }}" register: ggk_njk_info ignore_errors: yes with_items:
---
- hosts: all
become: true
tasks:
- name: list ggk rpms
yum:
list: "{{ item }}"
register: ggk_njk_info
ignore_errors: yes
with_items:
- ggk_base
- njk_tt_client
- debug: msg="{{ item.results }}"
with_items: "{{ ggk_njk_info.results }}"
when: item.results
"msg": [
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.11",
"yumstate": "available"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "installed",
"version": "2.36.11",
"yumstate": "installed"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.3-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.3",
"yumstate": "available"
}
]
}
调试任务的输出如下所示:
---
- hosts: all
become: true
tasks:
- name: list ggk rpms
yum:
list: "{{ item }}"
register: ggk_njk_info
ignore_errors: yes
with_items:
- ggk_base
- njk_tt_client
- debug: msg="{{ item.results }}"
with_items: "{{ ggk_njk_info.results }}"
when: item.results
"msg": [
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.11",
"yumstate": "available"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "installed",
"version": "2.36.11",
"yumstate": "installed"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.3-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.3",
"yumstate": "available"
}
]
}
调试的一部分如下所示:
---
- hosts: all
become: true
tasks:
- name: list ggk rpms
yum:
list: "{{ item }}"
register: ggk_njk_info
ignore_errors: yes
with_items:
- ggk_base
- njk_tt_client
- debug: msg="{{ item.results }}"
with_items: "{{ ggk_njk_info.results }}"
when: item.results
"msg": [
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.11",
"yumstate": "available"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.11-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "installed",
"version": "2.36.11",
"yumstate": "installed"
},
{
"arch": "noarch",
"envra": "0:njk_tt_client-2.36.3-1.noarch",
"epoch": "0",
"name": "njk_tt_client",
"release": "1",
"repo": "ggk_Software",
"version": "2.36.3",
"yumstate": "available"
}
]
}
我只想在相应的“yumstate”已“安装”时找到rpm“版本”
在这种情况下,我希望能够获得以下版本:
"repo": "installed",
"version": "2.36.11",
他做这项工作。例如,下面的任务
- debug:
msg: "{{ ggk_njk_info.results|
json_query('[?yumstate==`installed`].{repo: repo,
version: version}') }}"
给予
类似的内容可能会有所帮助,
“{{item.results.msg[0].repo}}”
和“{item.results.msg[0].version}”
我可以使用get_version:[?yumstate=='installed'].version”获得它。一切皆有可能。标量、列表或字典。