我创建了一个游戏手册,它将检查一个包是否安装在一个基于RHEL的服务器上,使用"yum“Ansible模块,然后显示结果。
我的任务是:
角色/linux/yumcheck/任务/main.yml
- name: Check for installed packages
yum: list={{ item.package }}
with_items:
- { package: 'package1' }
- { package: 'package2' }
- { package: 'package3' }
register: yumlist
- debug: var=yumlist游戏手册以下列格式正确地输出结果;
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"invocation": {
"module_args": {
"conf_file": null,
"disable_gpg_check": false,
"disablerepo": null,
"enablerepo": null,
"exclude": null,
"install_repoquery": true,
"list": "python",
"name": null,
"state": "installed",
"update_cache": false,
"validate_certs": true
},
"module_name": "yum"
},
"item": {
"package": "python"
}, yum列表模块还将显示“可用”包。当使用包名(例如python)运行这个作为多个可用包的剧本时,输出可能会变得非常长。我的目标是让剧本只输出某些字典值(我相信它们被称为字典值)。
如何将结果格式化为只显示异常信息,如“状态”(已安装或未安装)和包名称?
我尝试以使用括号或大括号显示主机事实的方式显示信息,例如{{ results.state},但是Ansible抱怨变量未定义。我在网上找不到类似的例子。我的目标是简单、干净地显示是否安装了一个软件包列表,而没有所有额外的臃肿信息。
谢谢。
发布于 2016-09-23 07:47:23
使用地图过滤器:
- debug: msg="{{ yum_list.results | map(attribute='invocation.module_args.state') | list }}"发布于 2016-09-23 04:15:05
您可以使用映射筛选器来提取您所追求的变量,filters.html#extracting-values-from-containers。
这里有一个使用它的例子,module.html
yum_list.results[0].invocation.module_args.state应该给你状态的价值。
https://stackoverflow.com/questions/39648049
复制相似问题