1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

No need to template modules with Jinja2 as this can confuse some docstring comments.

This commit is contained in:
Michael DeHaan 2013-10-28 08:18:05 -04:00
parent 3722bebb1d
commit 6d0da41a55

View file

@ -19,7 +19,6 @@
from cStringIO import StringIO
import inspect
import os
import jinja2
import shlex
# from Ansible
@ -48,9 +47,7 @@ class ModuleReplacer(object):
from ansible.module_utils.basic import *
will result in a template evaluation of
{{ include 'basic.py' }}
will result in a slurping in of basic.py
from the module_utils/ directory in the source tree.
@ -67,6 +64,16 @@ class ModuleReplacer(object):
# ******************************************************************************
def slurp(self, path):
if not os.path.exists(path):
raise errors.AnsibleError("imported module support code does not exist at %s" % path)
fd = open(path)
data = fd.read()
fd.close()
return data
# ******************************************************************************
def _find_snippet_imports(self, module_data, module_path):
"""
Given the source of the module, convert it to a Jinja2 template to insert
@ -88,7 +95,7 @@ class ModuleReplacer(object):
for line in lines:
if line.find(REPLACER) != -1:
output.write("{% include 'basic.py' %}\n\n")
output.write(self.slurp(os.path.join(self.snippet_path, "basic.py")))
snippet_names.append('basic')
elif line.startswith('from ansible.module_utils.'):
tokens=line.split(".")
@ -101,7 +108,7 @@ class ModuleReplacer(object):
raise errors.AnsibleError("error importing module in %s, expecting format like 'from ansible.module_utils.basic import *'" % module_path)
snippet_name = tokens[2].split()[0]
snippet_names.append(snippet_name)
output.write("{% include '" + snippet_name + ".py' %}\n\n")
output.write(self.slurp(os.path.join(self.snippet_path, snippet_name + ".py")))
else:
if self.strip_comments and line.startswith("#") or line == '':
pass
@ -113,21 +120,6 @@ class ModuleReplacer(object):
return (output.getvalue(), module_style)
# ******************************************************************************
def _template_imports(self, module_data):
loader = jinja2.FileSystemLoader([self.snippet_path])
environment = jinja2.Environment(loader=loader) # trim_blocks=True)
t = environment.from_string(module_data)
vars_input = {}
try:
return t.render(vars_input)
except jinja2.TemplateNotFound, tnf:
raise errors.AnsibleError("failure to find one of the imported module utilities, an ansible.module_utils import is likely referencing a module that does not exist. Original exception was: %s" % str(tnf))
# ******************************************************************************
def modify_module(self, module_path, complex_args, module_args, inject):
@ -138,7 +130,6 @@ class ModuleReplacer(object):
module_data = f.read()
(module_data, module_style) = self._find_snippet_imports(module_data, module_path)
module_data = self._template_imports(module_data)
complex_args_json = utils.jsonify(complex_args)
# We force conversion of module_args to str because module_common calls shlex.split,