Fix check mode for blockinfile when 'create: yes' is specified (#2413)

Make the module more semantically similar to lineinfile when
the destination does not exist. This fixes #2021.
This commit is contained in:
Anton Ovchinnikov 2016-07-28 18:12:14 +02:00 committed by Matt Clay
parent 3537ce57f1
commit c6ea196a8c

View file

@ -212,7 +212,8 @@ def main():
module.fail_json(rc=256, module.fail_json(rc=256,
msg='Destination %s is a directory !' % dest) msg='Destination %s is a directory !' % dest)
if not os.path.exists(dest): path_exists = os.path.exists(dest)
if not path_exists:
if not module.boolean(params['create']): if not module.boolean(params['create']):
module.fail_json(rc=257, module.fail_json(rc=257,
msg='Destination %s does not exist !' % dest) msg='Destination %s does not exist !' % dest)
@ -230,6 +231,9 @@ def main():
marker = params['marker'] marker = params['marker']
present = params['state'] == 'present' present = params['state'] == 'present'
if not present and not path_exists:
module.exit_json(changed=False, msg="File not present")
if insertbefore is None and insertafter is None: if insertbefore is None and insertafter is None:
insertafter = 'EOF' insertafter = 'EOF'
@ -299,10 +303,13 @@ def main():
changed = True changed = True
if changed and not module.check_mode: if changed and not module.check_mode:
if module.boolean(params['backup']) and os.path.exists(dest): if module.boolean(params['backup']) and path_exists:
module.backup_local(dest) module.backup_local(dest)
write_changes(module, result, dest) write_changes(module, result, dest)
if module.check_mode and not path_exists:
module.exit_json(changed=changed, msg=msg)
msg, changed = check_file_attrs(module, changed, msg) msg, changed = check_file_attrs(module, changed, msg)
module.exit_json(changed=changed, msg=msg) module.exit_json(changed=changed, msg=msg)