Ansible-jinja模板中包的Ansible_事实问题

Ansible-jinja模板中包的Ansible_事实问题,ansible,ansible-2.x,ansible-facts,ansible-template,Ansible,Ansible 2.x,Ansible Facts,Ansible Template,我尝试使用Ansible获取所有已安装的软件包,并以“漂亮”的方式将它们写入文件。 调用模块可以: - name: Gather the rpm package facts package_facts: manager: auto 在Jinja模板中,我使用了一个循环,什么也有效: {% for item in ansible_facts.packages %} {{ item }} {% endfor %} 不幸的是,简单的输出造成了这种“混乱”: 其中一些元素对于当前工作

我尝试使用Ansible获取所有已安装的软件包,并以“漂亮”的方式将它们写入文件。
调用模块可以:

- name: Gather the rpm package facts
  package_facts:
    manager: auto
在Jinja模板中,我使用了一个循环,什么也有效:

{% for item in ansible_facts.packages %}
  {{ item }}
{% endfor %}
不幸的是,简单的输出造成了这种“混乱”:

其中一些元素对于当前工作来说是不必要的,因此首先想到的是:

{% 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用户

在您发布的数据示例中,包名是
是由一个字典组成的1个元素的列表

要获取版本,必须访问第一个元素。像这样:

{% for key, value in ansible_facts.packages.iteritems() %}
{{ key }} {{ value[0].version }}
{% endfor %}
应使用包列表呈现文件,如下所示:

...
zlib 1.2.11
...
...
zlib 1.2.11
...