我正在尝试制作一份包含几台机器上已安装的软件包及其版本的报告。
该报告必须在执行 playbook 的计算机上创建。
这是我当前的剧本
---
- name: main
hosts: all
gather_facts: no
become: true
tasks:
- setup:
gather_subset:
- '!all'
- name: Gather rpm packages
package_facts:
manager: auto
ignore_errors: true
- name: Create the result file
local_action:
module: copy
content: |
{% for h in groups.all %}
{{h}}; OS: {{hostvars[h]['ansible_distribution']|default('N/A')}}; Release: {{hostvars[h]['ansible_distribution_version']|default('N/A')}}
List of instaled packages:.......
#==============================================
{% for k,v in hostvars[h].ansible_facts.packages.iteritems() %}
package {{ k.rjust(24) }} version {{ v[0].version }}
{%endfor%}
#==============================================
{%endfor%}
dest: '/reports/OS_info.txt'
哪个运行的是
ansible-playbook -i rh_inventory -u ansuser02 os_extract_info.yml
Now, if all主机可访问,则会创建报告,但是,如果一台或多台主机无法访问
剧本执行失败并显示:
致命:[INFRA-116]:失败! => {“msg”:“该任务包含一个带有未定义变量的选项。错误是:'dict object'没有属性'packages'
我不知道解决这个问题的最佳方法是什么。
你必须申请一个default
过滤该事实,就像您对其他信息所做的那样:
hostvars[h].ansible_distribution | default('N/A')
在这种情况下,由于您想要循环字典的键/值对,因此您可以默认packages
对于任何空的事实:
{% for k, v in (hostvars[h].packages | default({})).items() %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)