Merge "Add support for start/end_string arguments"
This commit is contained in:
commit
8d14af7a2f
@ -737,6 +737,10 @@ class ActionModule(ActionBase):
|
|||||||
remote_src = self._task.args.get('remote_src', False)
|
remote_src = self._task.args.get('remote_src', False)
|
||||||
|
|
||||||
yml_multilines = self._task.args.get('yml_multilines', False)
|
yml_multilines = self._task.args.get('yml_multilines', False)
|
||||||
|
block_end_string = self._task.args.get('block_end_string', '%}')
|
||||||
|
block_start_string = self._task.args.get('block_start_string', '{%')
|
||||||
|
variable_end_string = self._task.args.get('variable_end_string', '}}')
|
||||||
|
variable_start_string = self._task.args.get('variable_start_string', '{{')
|
||||||
|
|
||||||
return True, dict(
|
return True, dict(
|
||||||
source=source,
|
source=source,
|
||||||
@ -748,7 +752,11 @@ class ActionModule(ActionBase):
|
|||||||
ignore_none_type=ignore_none_type,
|
ignore_none_type=ignore_none_type,
|
||||||
default_section=default_section,
|
default_section=default_section,
|
||||||
yml_multilines=yml_multilines,
|
yml_multilines=yml_multilines,
|
||||||
remote_src=remote_src
|
remote_src=remote_src,
|
||||||
|
block_end_string=block_end_string,
|
||||||
|
block_start_string=block_start_string,
|
||||||
|
variable_end_string=variable_end_string,
|
||||||
|
variable_start_string=variable_start_string
|
||||||
)
|
)
|
||||||
|
|
||||||
def resultant_ini_as_dict(self, resultant_dict, return_dict=None):
|
def resultant_ini_as_dict(self, resultant_dict, return_dict=None):
|
||||||
@ -766,14 +774,22 @@ class ActionModule(ActionBase):
|
|||||||
|
|
||||||
return return_dict
|
return return_dict
|
||||||
|
|
||||||
def _check_templar(self, data):
|
def _check_templar(self, data, extra):
|
||||||
if boolean(self._task.args.get('render_template', True)):
|
if boolean(self._task.args.get('render_template', True)):
|
||||||
return self._templar.template(
|
templar = self._templar
|
||||||
data,
|
with templar.set_temporary_context(
|
||||||
preserve_trailing_newlines=True,
|
variable_start_string=extra['variable_start_string'],
|
||||||
escape_backslashes=False,
|
variable_end_string=extra['variable_end_string'],
|
||||||
convert_data=False
|
block_start_string=extra['block_start_string'],
|
||||||
)
|
block_end_string=extra['block_end_string'],
|
||||||
|
searchpath=extra['searchpath']
|
||||||
|
):
|
||||||
|
return templar.template(
|
||||||
|
data,
|
||||||
|
preserve_trailing_newlines=True,
|
||||||
|
escape_backslashes=False,
|
||||||
|
convert_data=False
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@ -862,14 +878,12 @@ class ActionModule(ActionBase):
|
|||||||
template_data_slurpee['content']
|
template_data_slurpee['content']
|
||||||
).decode('utf-8')
|
).decode('utf-8')
|
||||||
|
|
||||||
self._templar.environment.loader.searchpath = _vars['searchpath']
|
|
||||||
|
|
||||||
if LooseVersion(__ansible_version__) < LooseVersion("2.9"):
|
if LooseVersion(__ansible_version__) < LooseVersion("2.9"):
|
||||||
self._templar.set_available_variables(temp_vars)
|
self._templar.set_available_variables(temp_vars)
|
||||||
else:
|
else:
|
||||||
self._templar.available_variables = temp_vars
|
self._templar.available_variables = temp_vars
|
||||||
|
|
||||||
resultant = self._check_templar(data=template_data)
|
resultant = self._check_templar(data=template_data, extra=_vars)
|
||||||
|
|
||||||
if LooseVersion(__ansible_version__) < LooseVersion("2.9"):
|
if LooseVersion(__ansible_version__) < LooseVersion("2.9"):
|
||||||
# Access to protected method is unavoidable in Ansible
|
# Access to protected method is unavoidable in Ansible
|
||||||
@ -898,7 +912,7 @@ class ActionModule(ActionBase):
|
|||||||
if 'content' in slurpee:
|
if 'content' in slurpee:
|
||||||
dest_data = base64.b64decode(
|
dest_data = base64.b64decode(
|
||||||
slurpee['content']).decode('utf-8')
|
slurpee['content']).decode('utf-8')
|
||||||
resultant_dest = self._check_templar(data=dest_data)
|
resultant_dest = self._check_templar(data=dest_data, extra=_vars)
|
||||||
type_merger = getattr(self,
|
type_merger = getattr(self,
|
||||||
CONFIG_TYPES.get(_vars['config_type']))
|
CONFIG_TYPES.get(_vars['config_type']))
|
||||||
_, config_new = type_merger(
|
_, config_new = type_merger(
|
||||||
@ -941,7 +955,7 @@ class ActionModule(ActionBase):
|
|||||||
|
|
||||||
# Re-template the resultant object as it may have new data within it
|
# Re-template the resultant object as it may have new data within it
|
||||||
# as provided by an override variable.
|
# as provided by an override variable.
|
||||||
resultant = self._check_templar(data=resultant)
|
resultant = self._check_templar(data=resultant, extra=_vars)
|
||||||
|
|
||||||
# run the copy module
|
# run the copy module
|
||||||
new_module_args = self._task.args.copy()
|
new_module_args = self._task.args.copy()
|
||||||
@ -976,6 +990,10 @@ class ActionModule(ActionBase):
|
|||||||
new_module_args.pop('ignore_none_type', None)
|
new_module_args.pop('ignore_none_type', None)
|
||||||
new_module_args.pop('default_section', None)
|
new_module_args.pop('default_section', None)
|
||||||
new_module_args.pop('yml_multilines', None)
|
new_module_args.pop('yml_multilines', None)
|
||||||
|
new_module_args.pop('block_end_string', None)
|
||||||
|
new_module_args.pop('block_start_string', None)
|
||||||
|
new_module_args.pop('variable_end_string', None)
|
||||||
|
new_module_args.pop('variable_start_string', None)
|
||||||
|
|
||||||
# While this is in the copy module we dont want to use it.
|
# While this is in the copy module we dont want to use it.
|
||||||
new_module_args.pop('remote_src', None)
|
new_module_args.pop('remote_src', None)
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added support for arguments that can be used to avoid templating Jinja
|
||||||
|
content:
|
||||||
|
|
||||||
|
* variable_start_string
|
||||||
|
* variable_end_string
|
||||||
|
* block_start_string
|
||||||
|
* block_end_string
|
4
tests/files/test_jinja_variables.yml.expected
Normal file
4
tests/files/test_jinja_variables.yml.expected
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
section1:
|
||||||
|
alfa: '{{ alfa_hotel }}'
|
||||||
|
baz: baz
|
||||||
|
tango: tango
|
5
tests/templates/test_jinja_variables.yml
Normal file
5
tests/templates/test_jinja_variables.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
section1:
|
||||||
|
alfa: "{{ alfa_hotel }}"
|
||||||
|
tango: "tango"
|
@ -173,3 +173,28 @@
|
|||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- "(test_list_only_replace_file_expected.content | b64decode) == (test_list_only_replace_file.content | b64decode)"
|
- "(test_list_only_replace_file_expected.content | b64decode) == (test_list_only_replace_file.content | b64decode)"
|
||||||
|
|
||||||
|
- name: Test template with jinja vars in it
|
||||||
|
config_template:
|
||||||
|
src: "{{ playbook_dir }}/templates/test_jinja_variables.yml"
|
||||||
|
dest: "/tmp/test_jinja_variables.yml"
|
||||||
|
config_overrides: "{{ test_jinja_variables }}"
|
||||||
|
config_type: yaml
|
||||||
|
variable_end_string: "%]"
|
||||||
|
variable_start_string: "[%"
|
||||||
|
|
||||||
|
- name: Read test_jinja_variables.yml
|
||||||
|
slurp:
|
||||||
|
src: /tmp/test_jinja_variables.yml
|
||||||
|
register: test_jinja_variables
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: "Jinja strings - {{ test_jinja_variables.content | b64decode }}"
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: "Jinja strings Expected - {{ test_jinja_variables_expected.content | b64decode }}"
|
||||||
|
|
||||||
|
- name: Compare files
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "(test_jinja_variables_expected.content | b64decode) == (test_jinja_variables.content | b64decode)"
|
||||||
|
@ -73,6 +73,11 @@
|
|||||||
src: "{{ playbook_dir }}/files/test_list_only_replace.yml.expected"
|
src: "{{ playbook_dir }}/files/test_list_only_replace.yml.expected"
|
||||||
register: test_list_only_replace_file_expected
|
register: test_list_only_replace_file_expected
|
||||||
|
|
||||||
|
- name: Read expected test_jinja_variables.yml
|
||||||
|
slurp:
|
||||||
|
src: "{{ playbook_dir }}/files/test_jinja_variables.yml.expected"
|
||||||
|
register: test_jinja_variables_expected
|
||||||
|
|
||||||
- import_tasks: test-common-tasks.yml
|
- import_tasks: test-common-tasks.yml
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
@ -168,6 +173,9 @@
|
|||||||
baz: "hotel"
|
baz: "hotel"
|
||||||
section3:
|
section3:
|
||||||
alfa: "bravo"
|
alfa: "bravo"
|
||||||
|
test_jinja_variables:
|
||||||
|
section1:
|
||||||
|
baz: "baz"
|
||||||
test_enhanced_comments_ini_overrides:
|
test_enhanced_comments_ini_overrides:
|
||||||
DEFAULT:
|
DEFAULT:
|
||||||
default_availability_zone: zone1
|
default_availability_zone: zone1
|
||||||
|
Loading…
Reference in New Issue
Block a user