summaryrefslogtreecommitdiffstats
path: root/roles/lib_utils
diff options
context:
space:
mode:
Diffstat (limited to 'roles/lib_utils')
-rw-r--r--roles/lib_utils/action_plugins/generate_pv_pvcs_list.py8
-rw-r--r--roles/lib_utils/action_plugins/sanity_checks.py19
-rw-r--r--roles/lib_utils/library/yedit.py26
-rw-r--r--roles/lib_utils/src/ansible/yedit.py2
-rw-r--r--roles/lib_utils/src/class/yedit.py24
5 files changed, 63 insertions, 16 deletions
diff --git a/roles/lib_utils/action_plugins/generate_pv_pvcs_list.py b/roles/lib_utils/action_plugins/generate_pv_pvcs_list.py
index eb13a58ba..c60742dd3 100644
--- a/roles/lib_utils/action_plugins/generate_pv_pvcs_list.py
+++ b/roles/lib_utils/action_plugins/generate_pv_pvcs_list.py
@@ -118,10 +118,16 @@ class ActionModule(ActionBase):
create_pvc = self._templar.template(create_pvc)
if kind != 'object' and create_pv and create_pvc:
volume, size, _, access_modes = self.build_common(varname=varname)
+ storageclass = self.task_vars.get(str(varname) + '_storageclass')
+ if storageclass:
+ storageclass = self._templar.template(storageclass)
+ elif storageclass is None and kind != 'dynamic':
+ storageclass = ''
return dict(
name="{0}-claim".format(volume),
capacity=size,
- access_modes=access_modes)
+ access_modes=access_modes,
+ storageclass=storageclass)
return None
def run(self, tmp=None, task_vars=None):
diff --git a/roles/lib_utils/action_plugins/sanity_checks.py b/roles/lib_utils/action_plugins/sanity_checks.py
index 09ce55e8f..ce54debc2 100644
--- a/roles/lib_utils/action_plugins/sanity_checks.py
+++ b/roles/lib_utils/action_plugins/sanity_checks.py
@@ -54,6 +54,12 @@ class ActionModule(ActionBase):
def template_var(self, hostvars, host, varname):
"""Retrieve a variable from hostvars and template it.
If undefined, return None type."""
+ # We will set the current host and variable checked for easy debugging
+ # if there are any unhandled exceptions.
+ # pylint: disable=W0201
+ self.last_checked_var = varname
+ # pylint: disable=W0201
+ self.last_checked_host = host
res = hostvars[host].get(varname)
if res is None:
return None
@@ -156,6 +162,11 @@ class ActionModule(ActionBase):
# pylint: disable=W0201
self.task_vars = task_vars or {}
+ # pylint: disable=W0201
+ self.last_checked_host = "none"
+ # pylint: disable=W0201
+ self.last_checked_var = "none"
+
# self._task.args holds task parameters.
# check_hosts is a parameter to this plugin, and should provide
# a list of hosts.
@@ -172,7 +183,13 @@ class ActionModule(ActionBase):
# We loop through each host in the provided list check_hosts
for host in check_hosts:
- self.run_checks(hostvars, host)
+ try:
+ self.run_checks(hostvars, host)
+ except Exception as uncaught_e:
+ msg = "last_checked_host: {}, last_checked_var: {};"
+ msg = msg.format(self.last_checked_host, self.last_checked_var)
+ msg += str(uncaught_e)
+ raise errors.AnsibleModuleError(msg)
result["changed"] = False
result["failed"] = False
diff --git a/roles/lib_utils/library/yedit.py b/roles/lib_utils/library/yedit.py
index cf5c2e423..4bd5171a7 100644
--- a/roles/lib_utils/library/yedit.py
+++ b/roles/lib_utils/library/yedit.py
@@ -410,10 +410,16 @@ class Yedit(object):
pass
# Try to use RoundTripDumper if supported.
- try:
- Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
- except AttributeError:
- Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
+ if self.content_type == 'yaml':
+ try:
+ Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+ except AttributeError:
+ Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
+ elif self.content_type == 'json':
+ Yedit._write(self.filename, json.dumps(self.yaml_dict, indent=4, sort_keys=True))
+ else:
+ raise YeditException('Unsupported content_type: {}.'.format(self.content_type) +
+ 'Please specify a content_type of yaml or json.')
return (True, self.yaml_dict)
@@ -461,7 +467,7 @@ class Yedit(object):
# Try to use RoundTripLoader if supported.
try:
- self.yaml_dict = yaml.safe_load(contents, yaml.RoundTripLoader)
+ self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
except AttributeError:
self.yaml_dict = yaml.safe_load(contents)
@@ -706,7 +712,12 @@ class Yedit(object):
curr_value = invalue
if val_type == 'yaml':
- curr_value = yaml.load(invalue)
+ try:
+ # AUDIT:maybe-no-member makes sense due to different yaml libraries
+ # pylint: disable=maybe-no-member
+ curr_value = yaml.safe_load(invalue, Loader=yaml.RoundTripLoader)
+ except AttributeError:
+ curr_value = yaml.safe_load(invalue)
elif val_type == 'json':
curr_value = json.loads(invalue)
@@ -775,6 +786,7 @@ class Yedit(object):
'''perform the idempotent crud operations'''
yamlfile = Yedit(filename=params['src'],
backup=params['backup'],
+ content_type=params['content_type'],
separator=params['separator'])
state = params['state']
@@ -885,7 +897,7 @@ def main():
debug=dict(default=False, type='bool'),
src=dict(default=None, type='str'),
content=dict(default=None),
- content_type=dict(default='dict', choices=['dict']),
+ content_type=dict(default='yaml', choices=['yaml', 'json']),
key=dict(default='', type='str'),
value=dict(),
value_type=dict(default='', type='str'),
diff --git a/roles/lib_utils/src/ansible/yedit.py b/roles/lib_utils/src/ansible/yedit.py
index c4b818cf1..c2ae08654 100644
--- a/roles/lib_utils/src/ansible/yedit.py
+++ b/roles/lib_utils/src/ansible/yedit.py
@@ -13,7 +13,7 @@ def main():
debug=dict(default=False, type='bool'),
src=dict(default=None, type='str'),
content=dict(default=None),
- content_type=dict(default='dict', choices=['dict']),
+ content_type=dict(default='yaml', choices=['yaml', 'json']),
key=dict(default='', type='str'),
value=dict(),
value_type=dict(default='', type='str'),
diff --git a/roles/lib_utils/src/class/yedit.py b/roles/lib_utils/src/class/yedit.py
index 0a4fbe07a..5f69d797c 100644
--- a/roles/lib_utils/src/class/yedit.py
+++ b/roles/lib_utils/src/class/yedit.py
@@ -207,10 +207,16 @@ class Yedit(object):
pass
# Try to use RoundTripDumper if supported.
- try:
- Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
- except AttributeError:
- Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
+ if self.content_type == 'yaml':
+ try:
+ Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+ except AttributeError:
+ Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
+ elif self.content_type == 'json':
+ Yedit._write(self.filename, json.dumps(self.yaml_dict, indent=4, sort_keys=True))
+ else:
+ raise YeditException('Unsupported content_type: {}.'.format(self.content_type) +
+ 'Please specify a content_type of yaml or json.')
return (True, self.yaml_dict)
@@ -258,7 +264,7 @@ class Yedit(object):
# Try to use RoundTripLoader if supported.
try:
- self.yaml_dict = yaml.safe_load(contents, yaml.RoundTripLoader)
+ self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
except AttributeError:
self.yaml_dict = yaml.safe_load(contents)
@@ -503,7 +509,12 @@ class Yedit(object):
curr_value = invalue
if val_type == 'yaml':
- curr_value = yaml.load(invalue)
+ try:
+ # AUDIT:maybe-no-member makes sense due to different yaml libraries
+ # pylint: disable=maybe-no-member
+ curr_value = yaml.safe_load(invalue, Loader=yaml.RoundTripLoader)
+ except AttributeError:
+ curr_value = yaml.safe_load(invalue)
elif val_type == 'json':
curr_value = json.loads(invalue)
@@ -572,6 +583,7 @@ class Yedit(object):
'''perform the idempotent crud operations'''
yamlfile = Yedit(filename=params['src'],
backup=params['backup'],
+ content_type=params['content_type'],
separator=params['separator'])
state = params['state']