diff options
Diffstat (limited to 'filter_plugins')
-rw-r--r-- | filter_plugins/zfs.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/filter_plugins/zfs.py b/filter_plugins/zfs.py new file mode 100644 index 00000000..ebdb4dc5 --- /dev/null +++ b/filter_plugins/zfs.py @@ -0,0 +1,34 @@ +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from functools import partial + +from ansible import errors +from ansible.module_utils.common.text import formatters + + +def dehumanize_zfs_properties(data): + ''' zfs module sometimes wrongly indicates changed=true in check mode if sizes use human-readable format ''' + try: + from jinja2.runtime import Undefined + + if isinstance(data, Undefined): + return data + + for prop, value in data.items(): + if prop in ['quota', 'refquota', 'reservation', 'refreservation', 'recordsize', 'volsize']: + data[prop] = str(formatters.human_to_bytes(value)) + return data + except Exception as e: + raise errors.AnsibleFilterError("dehumanize_zfs_properties(): %s" % str(e)) + + +class FilterModule(object): + + ''' zfs filters ''' + filter_map = { + 'dehumanize_zfs_properties': dehumanize_zfs_properties, + } + + def filters(self): + return self.filter_map |