From b8a93c12e22ab650ea6b4f69616ab94487fc914f Mon Sep 17 00:00:00 2001 From: Sloane Hertel Date: Tue, 15 May 2018 15:36:48 -0400 Subject: [PATCH] [aws_s3] Fix uploading src option on the target machine to a bucket (#39023) * Fix backward compatibility for uploading src option on the target machine to a bucket * Allow the module to handle errors for nonexistent files --- lib/ansible/plugins/action/aws_s3.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/ansible/plugins/action/aws_s3.py b/lib/ansible/plugins/action/aws_s3.py index dfe7f2d428..860fb96aec 100644 --- a/lib/ansible/plugins/action/aws_s3.py +++ b/lib/ansible/plugins/action/aws_s3.py @@ -20,7 +20,7 @@ __metaclass__ = type import os -from ansible.errors import AnsibleError, AnsibleAction, AnsibleActionFail +from ansible.errors import AnsibleError, AnsibleAction, AnsibleActionFail, AnsibleFileNotFound from ansible.module_utils._text import to_text from ansible.plugins.action import ActionBase @@ -43,11 +43,17 @@ class ActionModule(ActionBase): new_module_args = self._task.args.copy() if source: source = os.path.expanduser(source) - try: - source = self._loader.get_real_file(self._find_needle('files', source)) - new_module_args['src'] = source - except AnsibleError as e: - raise AnsibleActionFail(to_text(e)) + + # For backward compatibility check if the file exists on the remote; it should take precedence + if not self._remote_file_exists(source): + try: + source = self._loader.get_real_file(self._find_needle('files', source)) + new_module_args['src'] = source + except AnsibleFileNotFound as e: + # module handles error message for nonexistent files + new_module_args['src'] = source + except AnsibleError as e: + raise AnsibleActionFail(to_text(e)) # execute the aws_s3 module now, with the updated args result.update(self._execute_module(module_args=new_module_args, task_vars=task_vars))