summaryrefslogtreecommitdiff
path: root/roles/storage/zfs/base/filter_plugins/zfs.py
blob: a336c1975add0a9fadf3cd6ee234ef13d7f49af5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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