diff options
author | Chris Houseknecht <chouseknecht@ansible.com> | 2016-05-31 18:16:23 -0400 |
---|---|---|
committer | Chris Houseknecht <chouseknecht@ansible.com> | 2016-05-31 18:16:23 -0400 |
commit | ce34397cf8fb5419cae79b9f10524589c954c6b0 (patch) | |
tree | 6aeae1f8e12087004769afdf0a39c0c18bb27ddc | |
parent | 373b23cc2411f3f80afa79a2452c1dbcf363aad8 (diff) | |
parent | 13210e346f524f95aae286f9f46e566ab26279bd (diff) | |
download | ansible-ce34397cf8fb5419cae79b9f10524589c954c6b0.tar.gz |
Merge pull request #10399 from underyx/assemble-with-prefix-and-suffix
Add prefixing and suffixing fuctionality to assemble module
-rw-r--r-- | lib/ansible/plugins/action/assemble.py | 18 | ||||
-rw-r--r-- | test/integration/roles/test_assemble/tasks/main.yml | 10 |
2 files changed, 26 insertions, 2 deletions
diff --git a/lib/ansible/plugins/action/assemble.py b/lib/ansible/plugins/action/assemble.py index 5cdfc7cbfb..69f32656e3 100644 --- a/lib/ansible/plugins/action/assemble.py +++ b/lib/ansible/plugins/action/assemble.py @@ -32,7 +32,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() @@ -40,6 +40,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 @@ -70,6 +75,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 @@ -87,6 +99,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) follow = self._task.args.get('follow', False) @@ -121,7 +135,7 @@ class ActionModule(ActionBase): return result # 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) diff --git a/test/integration/roles/test_assemble/tasks/main.yml b/test/integration/roles/test_assemble/tasks/main.yml index d0c1f15e56..9699b10508 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'" + |