diff --git a/lib/ansible/runner/action_plugins/fetch.py b/lib/ansible/runner/action_plugins/fetch.py index 58aa627b0e5..cd40fc5df4d 100644 --- a/lib/ansible/runner/action_plugins/fetch.py +++ b/lib/ansible/runner/action_plugins/fetch.py @@ -46,6 +46,8 @@ class ActionModule(object): options.update(utils.parse_kv(module_args)) source = options.get('src', None) dest = options.get('dest', None) + fail_on_missing = options.get('fail_on_missing', False) + fail_on_missing = utils.boolean(fail_on_missing) if source is None or dest is None: results = dict(failed=True, msg="src and dest are required") return ReturnData(conn=conn, result=results) @@ -73,7 +75,10 @@ class ActionModule(object): result = dict(msg="unable to calculate the md5 sum of the remote file", file=source, changed=False) return ReturnData(conn=conn, result=result) if remote_md5 == '1': - result = dict(msg="the remote file does not exist, not transferring, ignored", file=source, changed=False) + if fail_on_missing: + result = dict(failed=True, msg="the remote file does not exist", file=source) + else: + result = dict(msg="the remote file does not exist, not transferring, ignored", file=source, changed=False) return ReturnData(conn=conn, result=result) if remote_md5 == '2': result = dict(msg="no read permission on remote file, not transferring, ignored", file=source, changed=False) diff --git a/library/fetch b/library/fetch index 9b789ccdc49..72ae55cc5a7 100644 --- a/library/fetch +++ b/library/fetch @@ -7,8 +7,9 @@ short_description: Fetches a file from remote nodes description: - This module works like M(copy), but in reverse. It is used for fetching files from remote machines and storing them locally in a file tree, - organized by hostname. Note that if the source file is missing, it - returns status=ok. + organized by hostname. Note that this module was originally written to + transfer log files that were not necessarily present, therefore, by + default, if the source file is missing, it does not fail ; version_added: "0.2" options: src: @@ -26,6 +27,12 @@ options: C(/backup/host.example.com/etc/profile) required: true default: null + fail_on_missing: + description: + - Makes it fails when the source file is missing. + required: false + choices: [ "yes", "no" ] + default: "no" examples: - code: "fetch: src=/var/log/messages dest=/home/logtree" description: "Example from Ansible Playbooks"