summaryrefslogtreecommitdiff
path: root/filter_plugins
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2021-06-19 23:14:53 +0200
committerChristian Pointner <equinox@spreadspace.org>2021-06-19 23:14:53 +0200
commit3ff4400844a08305e313d2aae058e86c20a74f5b (patch)
treed4f8d2a0beffcca98d95cc544b0f91d49979e5ae /filter_plugins
parentzfs/syncoid: inhibit autosuspend if scrubbing is in progress (diff)
add workaround for check-mode of zfs module
Diffstat (limited to 'filter_plugins')
-rw-r--r--filter_plugins/zfs.py34
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