Ansible自定义筛选器未返回字典对象

2024-10-05 14:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了一个ansible自定义过滤器来处理ansible中的一些数据,并返回一个dictionary对象

模块按预期工作,我得到了类似的东西回来

TASK [ansible-role-filesystem-setup : set f_ceph_disk_check fact] ************************************************************************************************************************************************************************
empty disks: {u'nvme2n1': {'disk': u'nvme2n1', 'os_to_osd': u'unassigned', 'size': u'10.00 GB'}}
required_osds: {u'osd0': {'assigned_disk': u'unassigned', 'osd': u'osd0', 'size': u'10.00 GB'}, u'osd1': {'assigned_disk': u'unassigned', 'osd': u'osd1', 'size': u'10.00 GB'}}

Updated/assigned required_osds: {u'osd0': {'assigned_disk': u'nvme2n1', 'osd': u'osd0', 'size': u'10.00 GB'}, u'osd1': {'assigned_disk': u'unassigned', 'osd': u'osd1', 'size': u'10.00 GB'}}
<type 'dict'> <-- i'm printing out the data type before returning.
ok: [ip]

TASK [ansible-role-filesystem-setup : Display output from ceph_disk_result var] **********************************************************************************************************************************************************
ok: [ip] => {
    "msg": " {u'nvme2n1': {'disk': u'nvme2n1', 'os_to_osd': u'osd0', 'size': u'10.00 GB'}} "
}

TASK [ansible-role-filesystem-setup : Loop through ceph_disk_result and fail if any are unassigned] **************************************************************************************************************************************
ok: [ip] => (item= {u'nvme2n1': {'disk': u'nvme2n1', 'os_to_osd': u'osd0', 'size': u'10.00 GB'}} ) => {
    "msg": "checking:  {u'nvme2n1': {'disk': u'nvme2n1', 'os_to_osd': u'osd0', 'size': u'10.00 GB'}} "
}

- name: set f_ceph_disk_check fact
  set_fact:
    ceph_disk_result: " {{ empty_disks | f_ceph_disk_check(expected_disks) }} "

- name: Display output from ceph_disk_result var
  debug:
    msg: "{{ ceph_disk_result }}"

- name: Loop through ceph_disk_result
  debug:
    msg: "checking: {{ item }}"
  with_items: "{{ ceph_disk_result }}"

但是当我想从ansible使用它时,它看起来像是把返回的字典看作一个字符串——所以我不能用任何好的东西来使用dicts

有人能帮我理解为什么当它显然是一个dictionary对象时,ansible将它视为一个字符串,我能做些什么来确保它再次成为dictionary对象,这样我就可以使用循环来做各种事情

在我的python FilterModule中,我这样做只是为了返回值

        print(type(required_osds))
        return required_osds

Tags: tosizeosrequiredresultansiblediskceph