【问题标题】:Ansible - problem with ansible_facts for packages in jinja templateAnsible - jinja 模板中包的 ansible_facts 问题
【发布时间】: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


    【解决方案1】:

    在您发布的数据示例中,包名称是 keyvalue 是包含字典的 1 个元素的列表。

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

    {% for key, value in ansible_facts.packages.iteritems() %}
    {{ key }} {{ value[0].version }}
    {% endfor %}
    

    应该使用如下的包列表渲染文件:

    ...
    zlib 1.2.11
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多