summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Houseknecht <chouseknecht@ansible.com>2016-05-31 18:16:23 -0400
committerChris Houseknecht <chouseknecht@ansible.com>2016-05-31 18:16:23 -0400
commitce34397cf8fb5419cae79b9f10524589c954c6b0 (patch)
tree6aeae1f8e12087004769afdf0a39c0c18bb27ddc
parent373b23cc2411f3f80afa79a2452c1dbcf363aad8 (diff)
parent13210e346f524f95aae286f9f46e566ab26279bd (diff)
downloadansible-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.py18
-rw-r--r--test/integration/roles/test_assemble/tasks/main.yml10
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'"
+