from ansible.plugins.action import ActionBase
from distutils.version import LooseVersion
-from ansible.errors import AnsibleUndefinedVariable
try:
from __main__ import display
def run(self, tmp=None, task_vars=None):
# we must use vars, since task_vars will have un-processed variables
host_vars = task_vars['vars']
-
- # process jinja2 templates
- reqd_type = "<class 'ansible.parsing.yaml.objects.AnsibleUnicode'>"
- for k, v in host_vars.items():
- if str(type(v)) == reqd_type and len(v) > 2:
- if v[0] == v[1] == '{' and v[-1] == v[-2] == '}' and v[2] == \
- v[-3] == ' ':
- host_vars[k] = self._expand_jinja2_template(v)
-
host = host_vars['ansible_hostname']
mode = self._task.args.get('mode', 'permissive')
return result
- def _expand_jinja2_template(self, var):
- try:
- expanded_var = self._templar.template(var, convert_bare=True, fail_on_undefined=True)
- if expanded_var == var:
- # if expanded_var is not str/unicode type, raise an exception
- if not isinstance(expanded_var, string_types):
- raise AnsibleUndefinedVariable
- # If var name is same as result, try to template it
- expanded_var = self._templar.template("{{" + expanded_var + "}}", convert_bare=True, fail_on_undefined=True)
- except AnsibleUndefinedVariable as e:
- expanded_var = u"VARIABLE IS NOT DEFINED!"
- if self._display.verbosity > 0:
- expanded_var += u": %s" % str(e)
-
- return expanded_var
-
# Schemas