Ansible-jinja模板中包的Ansible_事实问题
我尝试使用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 %} 不幸的是,简单的输出造成了这种“混乱”: 其中一些元素对于当前工作
调用模块可以:
- 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
...