我正在寻找一个能够列出实际安装的 Linux 系统上的所有包并将它们注册到 var 的 ansible 角色和模块。然后升级所有这些并将第二个列表放在另一个变量中。
我的模块在这里制作两个字典(yum_packages1 和 yum_packages2)的差异,并在我的角色结束时返回它
当我试图将这两个字典传递到我的模块中并开始我的治疗时,我遇到了一个非常奇怪的错误。
致命:[centos7_]:失败!=> {"changed": false, "msg": "argument yum_packages2 是类型,我们无法转换为 dict: 无法转换为 dict"}
Ansible 角色任务
---
# tasks file for ansible_yum_update_linux
- name: Listing Linux packages already installed
yum:
list: installed
register: yum_packages1
- name: Upgrade paquets Linux
yum:
name: '*'
state: latest
exclude: "{{ packages_exclude }}"
- name: Listing Linux packages installed and updated
yum:
list: installed
register: yum_packages2
- debug:
var: yum_packages1
- debug:
var: yum_packages2
- name: file compare
filecompare:
yum_packages1: "{{ yum_packages1.results }}"
yum_packages2: "{{ yum_packages2.results }}"
register: result
- debug:
var: result
客户 ansible 模块
#!/usr/bin/python
import json
from ansible.module_utils.basic import AnsibleModule
def diff_update(f1,f2):
#f3 = set(f1.keys()) == set(f2.keys())
upd1 = set(f1.values())
upd2 = set(f2.values())
f3 = (upd1.difference(upd2))
return f3
def main():
module = AnsibleModule(
argument_spec = dict(
yum_packages1 = dict(required=True, type='dict'),
yum_packages2 = dict(required=True, type='dict')
)
)
f3 = diff_update(module.params['yum_packages1'],module.params['yum_packages2'])
module.exit_json(changed=False, diff=f3)
if __name__ == '__main__':
main()
你知道我为什么会收到这个错误吗?