From fadef43af75f6510868e95deff06d5ad07e6d386 Mon Sep 17 00:00:00 2001 From: Bence Nagy Date: Fri, 6 Mar 2015 17:11:20 +0100 Subject: [PATCH 1/2] Add header and footer support to assemble action --- lib/ansible/plugins/action/assemble.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/ansible/plugins/action/assemble.py b/lib/ansible/plugins/action/assemble.py index 454e28aa34e..cad55f5ec8c 100644 --- a/lib/ansible/plugins/action/assemble.py +++ b/lib/ansible/plugins/action/assemble.py @@ -34,7 +34,7 @@ class ActionModule(ActionBase): TRANSFERS_FILES = True - def _assemble_from_fragments(self, src_path, delimiter=None, compiled_regexp=None, ignore_hidden=False): + def _assemble_from_fragments(self, src_path, delimiter=None, compiled_regexp=None, ignore_hidden=False, header=None, footer=None): ''' assemble a file from a directory of fragments ''' tmpfd, temp_path = tempfile.mkstemp() @@ -42,6 +42,11 @@ class ActionModule(ActionBase): delimit_me = False add_newline = False + if header is not None: + if not header.endswith('\n'): + header += '\n' + tmp.write(header) + for f in sorted(os.listdir(src_path)): if compiled_regexp and not compiled_regexp.search(f): continue @@ -72,6 +77,13 @@ class ActionModule(ActionBase): else: add_newline = True + if footer is not None: + if add_newline: # last fragment did not end with \n + footer = '\n' + footer + if not footer.endswith('\n'): + footer += '\n' + tmp.write(footer) + tmp.close() return temp_path @@ -83,6 +95,8 @@ class ActionModule(ActionBase): src = self._task.args.get('src', None) dest = self._task.args.get('dest', None) delimiter = self._task.args.get('delimiter', None) + header = self._task.args.get('header', None) + footer = self._task.args.get('footer', None) remote_src = self._task.args.get('remote_src', 'yes') regexp = self._task.args.get('regexp', None) ignore_hidden = self._task.args.get('ignore_hidden', False) @@ -104,7 +118,7 @@ class ActionModule(ActionBase): _re = re.compile(regexp) # Does all work assembling the file - path = self._assemble_from_fragments(src, delimiter, _re, ignore_hidden) + path = self._assemble_from_fragments(src, delimiter, _re, ignore_hidden, header, footer) path_checksum = checksum_s(path) dest = self._remote_expand_user(dest, tmp) From 13210e346f524f95aae286f9f46e566ab26279bd Mon Sep 17 00:00:00 2001 From: Bence Nagy Date: Fri, 6 Mar 2015 17:11:39 +0100 Subject: [PATCH 2/2] Add integration test for assemble with a header and a footer --- test/integration/roles/test_assemble/tasks/main.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/integration/roles/test_assemble/tasks/main.yml b/test/integration/roles/test_assemble/tasks/main.yml index d0c1f15e56d..9699b105089 100644 --- a/test/integration/roles/test_assemble/tasks/main.yml +++ b/test/integration/roles/test_assemble/tasks/main.yml @@ -91,3 +91,13 @@ - "result.state == 'file'" - "result.checksum == '505359f48c65b3904127cf62b912991d4da7ed6d'" +- name: test assemble with a header and a footer + assemble: src="{{output_dir}}/src" dest="{{output_dir}}/assembled6" header="prefix" footer="suffix" + register: result + +- name: assert the fragments were assembled with a header and a footer + assert: + that: + - "result.state == 'file'" + - "result.checksum == 'c5cca6452da7b193427ea17583188f7a17df3b60'" +