Add prefixing and suffixing fuctionality to assemble

This commit is contained in:
Bence Nagy 2015-03-06 15:51:47 +01:00
parent 304a33a42b
commit 4c386dba56

View file

@ -62,6 +62,18 @@ options:
version_added: "1.4" version_added: "1.4"
required: false required: false
default: null default: null
header:
description:
- A line to insert before the fragments
version_added: "2.2"
required: false
default: null
footer:
description:
- A line to insert after the fragments
version_added: "2.2"
required: false
default: null
remote_src: remote_src:
description: description:
- If False, it will search for src at originating/master machine, if True it will - If False, it will search for src at originating/master machine, if True it will
@ -106,18 +118,26 @@ EXAMPLES = '''
# Copy a new "sshd_config" file into place, after passing validation with sshd # Copy a new "sshd_config" file into place, after passing validation with sshd
- assemble: src=/etc/ssh/conf.d/ dest=/etc/ssh/sshd_config validate='/usr/sbin/sshd -t -f %s' - assemble: src=/etc/ssh/conf.d/ dest=/etc/ssh/sshd_config validate='/usr/sbin/sshd -t -f %s'
# Create a PHP configuration file with opening and closing PHP tags
- assemble: src=/etc/someapp/fragments dest=/etc/someapp/someapp.php header='<?php' footer='?>'
''' '''
# =========================================== # ===========================================
# Support method # Support method
def assemble_from_fragments(src_path, delimiter=None, compiled_regexp=None, ignore_hidden=False): def assemble_from_fragments(src_path, delimiter=None, compiled_regexp=None, ignore_hidden=False, header=None, footer=None):
''' assemble a file from a directory of fragments ''' ''' assemble a file from a directory of fragments '''
tmpfd, temp_path = tempfile.mkstemp() tmpfd, temp_path = tempfile.mkstemp()
tmp = os.fdopen(tmpfd,'w') tmp = os.fdopen(tmpfd,'w')
delimit_me = False delimit_me = False
add_newline = 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)): for f in sorted(os.listdir(src_path)):
if compiled_regexp and not compiled_regexp.search(f): if compiled_regexp and not compiled_regexp.search(f):
continue continue
@ -148,6 +168,13 @@ def assemble_from_fragments(src_path, delimiter=None, compiled_regexp=None, igno
else: else:
add_newline = True 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() tmp.close()
return temp_path return temp_path
@ -171,6 +198,8 @@ def main():
argument_spec = dict( argument_spec = dict(
src = dict(required=True), src = dict(required=True),
delimiter = dict(required=False), delimiter = dict(required=False),
header = dict(required=False),
footer = dict(required=False),
dest = dict(required=True), dest = dict(required=True),
backup=dict(default=False, type='bool'), backup=dict(default=False, type='bool'),
remote_src=dict(default=False, type='bool'), remote_src=dict(default=False, type='bool'),
@ -188,6 +217,8 @@ def main():
dest = os.path.expanduser(module.params['dest']) dest = os.path.expanduser(module.params['dest'])
backup = module.params['backup'] backup = module.params['backup']
delimiter = module.params['delimiter'] delimiter = module.params['delimiter']
header = module.params['header']
footer = module.params['footer']
regexp = module.params['regexp'] regexp = module.params['regexp']
compiled_regexp = None compiled_regexp = None
ignore_hidden = module.params['ignore_hidden'] ignore_hidden = module.params['ignore_hidden']
@ -209,7 +240,7 @@ def main():
if validate and "%s" not in validate: if validate and "%s" not in validate:
module.fail_json(msg="validate must contain %%s: %s" % validate) module.fail_json(msg="validate must contain %%s: %s" % validate)
path = assemble_from_fragments(src, delimiter, compiled_regexp, ignore_hidden) path = assemble_from_fragments(src, delimiter, compiled_regexp, ignore_hidden, header, footer)
path_hash = module.sha1(path) path_hash = module.sha1(path)
result['checksum'] = path_hash result['checksum'] = path_hash
@ -251,4 +282,3 @@ def main():
from ansible.module_utils.basic import * from ansible.module_utils.basic import *
main() main()