from __future__ import (absolute_import, division, print_function) __metaclass__ = type from functools import partial from copy import deepcopy from ansible import errors def _recurse_pool_volumes(pool, prefix, volumes): result = [] if prefix != '': prefix = prefix + '/' for name, volume in volumes.items(): entry = deepcopy(volume) entry.pop('children', None) entry['pool'] = pool entry['name'] = prefix+name result.append(entry) if 'children' in volume: result = result + _recurse_pool_volumes(pool, entry['name'], volume['children']) return result def zfs_volume_list(data): try: result = [] for pool, volumes in data.items(): result = result + _recurse_pool_volumes(pool, '', volumes) return result except Exception as e: raise errors.AnsibleFilterError("zfs_volume_list(): %s" % str(e)) class FilterModule(object): filter_map = { 'zfs_volume_list': zfs_volume_list, } def filters(self): return self.filter_map