diff options
Diffstat (limited to 'roles/storage/zfs/base/filter_plugins/zfs.py')
-rw-r--r-- | roles/storage/zfs/base/filter_plugins/zfs.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/roles/storage/zfs/base/filter_plugins/zfs.py b/roles/storage/zfs/base/filter_plugins/zfs.py new file mode 100644 index 00000000..a336c197 --- /dev/null +++ b/roles/storage/zfs/base/filter_plugins/zfs.py @@ -0,0 +1,43 @@ +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 |