【发布时间】:2021-04-14 07:53:00
【问题描述】:
我尝试使用 Ansible 获取所有已安装的软件包,并以“漂亮”的方式将它们写入文件。
调用模块有效:
- name: Gather the rpm package facts
package_facts:
manager: auto
在 Jinja 模板中,我正在使用循环,什么也可以:
{% for item in ansible_facts.packages %}
{{ item }}
{% endfor %}
不幸的是,简单的输出造成了这种“混乱”:
"yum": [
{
"arch": "noarch",
"epoch": null,
"name": "yum",
"release": "4.el8",
"source": "rpm",
"version": "4.2.23"
}
],
"zlib": [
{
"arch": "x86_64",
"epoch": null,
"name": "zlib",
"release": "16.el8_2",
"source": "rpm",
"version": "1.2.11"
}
]
其中一些元素对于当前工作来说是不必要的,所以想到的第一个电话是:
{% for item in ansible_facts.packages %}
{{ item.name }} {{ item.version }}
{% endfor %}
但这只是以错误结束:
fatal: [somehost.example.org]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'unicode object' has no attribute 'name'"}
通过互联网搜索,查看 Ansible 的文档,尝试了各种符号,但没有任何效果:
vars[item].name
item[0].name
item["name"]
作为最后一个选项,我使用 iteritems 进行了尝试:
{% for (key,value) in ansible_facts.packages.iteritems() %}
{{ value }}
{% endfor %}
但这结束了我的错误:
fatal: [somehost.example.org]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'list object' has no attribute 'name'"}
看来我还不够聪明,想不出解决办法,谁能帮帮我?
此致
一个沮丧的 Ansible 用户
【问题讨论】:
标签: ansible ansible-2.x ansible-facts ansible-template