prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  aws_s3 is automaticly decrypting ansible-vault encrypted files before put
  <!---
  Verify first that your issue/request is not already reported on GitHub.
  Also test if the latest release, and devel branch are affected too.
  Always add information AFTER of these html comments. -->
  
  ##### ISSUE TYPE
   - Bug Report
  
  ##### COMPONENT NAME
  aws_s3
  
  ##### ANSIBLE VERSION
  <!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
  ```
  2.5.1
  ```
  
  ##### SUMMARY
  - I'm trying to upload an ansible-vault encrypted file with aws_s3. But aws_s3 decrypts the src: file before uploading it to S3. 
  - aws_s3 in 2.4 didn't decrypt the src: parameter.
  - The documentation for aws_s3 doesn't mention that the src: parameter is autodecrypted.
  - The aws_s3 module doesn't accept the decrypt: argument.
  
  ##### STEPS TO REPRODUCE
  <!--- Paste example playbooks or commands between quotes below -->
  ```yaml
  - name: upload vault to s3
    aws_s3:
      bucket: "the bucket"
      object: "file.txt"
      src: "file.txt"
      mode: put
  ```
  1. The file.txt is encrypted with ansible-vault. 
  2. The playbook that runs this task is invoked with --vault-password and is able to decrypt the file because other tasks need the file decrypted.
  
  ##### EXPECTED RESULTS
  Don't autodecrypt the src: argument or be able to specify decrypt: no.
  
  ##### ACTUAL RESULTS
  The src: argument to aws_s3 is automagicly decrypted without documentation or a way to disable the feature like other modules (ex. copy).
  
  aws_s3 is automaticly decrypting ansible-vault encrypted files before put
  <!---
  Verify first that your issue/request is not already reported on GitHub.
  Also test if the latest release, and devel branch are affected too.
  Always add information AFTER of these html comments. -->
  
  ##### ISSUE TYPE
   - Bug Report
  
  ##### COMPONENT NAME
  aws_s3
  
  ##### ANSIBLE VERSION
  <!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible --version" between quotes below -->
  ```
  2.5.1
  ```
  
  ##### SUMMARY
  - I'm trying to upload an ansible-vault encrypted file with aws_s3. But aws_s3 decrypts the src: file before uploading it to S3. 
  - aws_s3 in 2.4 didn't decrypt the src: parameter.
  - The documentation for aws_s3 doesn't mention that the src: parameter is autodecrypted.
  - The aws_s3 module doesn't accept the decrypt: argument.
  
  ##### STEPS TO REPRODUCE
  <!--- Paste example playbooks or commands between quotes below -->
  ```yaml
  - name: upload vault to s3
    aws_s3:
      bucket: "the bucket"
      object: "file.txt"
      src: "file.txt"
      mode: put
  ```
  1. The file.txt is encrypted with ansible-vault. 
  2. The playbook that runs this task is invoked with --vault-password and is able to decrypt the file because other tasks need the file decrypted.
  
  ##### EXPECTED RESULTS
  Don't autodecrypt the src: argument or be able to specify decrypt: no.
  
  ##### ACTUAL RESULTS
  The src: argument to aws_s3 is automagicly decrypted without documentation or a way to disable the feature like other modules (ex. copy).
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `lib/ansible/plugins/action/aws_s3.py`
  Content:
  ```
  1 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
  2 # (c) 2018, Will Thames <will@thames.id.au>
  3 #
  4 # This file is part of Ansible
  5 #
  6 # Ansible is free software: you can redistribute it and/or modify
  7 # it under the terms of the GNU General Public License as published by
  8 # the Free Software Foundation, either version 3 of the License, or
  9 # (at your option) any later version.
  10 #
  11 # Ansible is distributed in the hope that it will be useful,
  12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 # GNU General Public License for more details.
  15 #
  16 # You should have received a copy of the GNU General Public License
  17 # along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
  18 from __future__ import (absolute_import, division, print_function)
  19 __metaclass__ = type
  20 
  21 import os
  22 
  23 from ansible.errors import AnsibleError, AnsibleAction, AnsibleActionFail, AnsibleFileNotFound
  24 from ansible.module_utils._text import to_text
  25 from ansible.plugins.action import ActionBase
  26 
  27 
  28 class ActionModule(ActionBase):
  29 
  30     TRANSFERS_FILES = True
  31 
  32     def run(self, tmp=None, task_vars=None):
  33         ''' handler for aws_s3 operations '''
  34         if task_vars is None:
  35             task_vars = dict()
  36 
  37         result = super(ActionModule, self).run(tmp, task_vars)
  38         del tmp  # tmp no longer has any effect
  39 
  40         source = self._task.args.get('src', None)
  41 
  42         try:
  43             new_module_args = self._task.args.copy()
  44             if source:
  45                 source = os.path.expanduser(source)
  46 
  47                 # For backward compatibility check if the file exists on the remote; it should take precedence
  48                 if not self._remote_file_exists(source):
  49                     try:
  50                         source = self._loader.get_real_file(self._find_needle('files', source))
  51                         new_module_args['src'] = source
  52                     except AnsibleFileNotFound as e:
  53                         # module handles error message for nonexistent files
  54                         new_module_args['src'] = source
  55                     except AnsibleError as e:
  56                         raise AnsibleActionFail(to_text(e))
  57 
  58             # execute the aws_s3 module now, with the updated args
  59             result.update(self._execute_module(module_args=new_module_args, task_vars=task_vars))
  60         except AnsibleAction as e:
  61             result.update(e.result)
  62         return result
  63
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/lib/ansible/plugins/action/aws_s3.py b/lib/ansible/plugins/action/aws_s3.py
  --- a/lib/ansible/plugins/action/aws_s3.py
  +++ b/lib/ansible/plugins/action/aws_s3.py
  @@ -47,7 +47,7 @@
                   # 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))
  +                        source = self._loader.get_real_file(self._find_needle('files', source), decrypt=False)
                           new_module_args['src'] = source
                       except AnsibleFileNotFound as e:
                           # module handles error message for nonexistent files
  
verification_info: {"golden_diff": "diff --git a/lib/ansible/plugins/action/aws_s3.py b/lib/ansible/plugins/action/aws_s3.py\n--- a/lib/ansible/plugins/action/aws_s3.py\n+++ b/lib/ansible/plugins/action/aws_s3.py\n@@ -47,7 +47,7 @@\n                 # For backward compatibility check if the file exists on the remote; it should take precedence\n                 if not self._remote_file_exists(source):\n                     try:\n-                        source = self._loader.get_real_file(self._find_needle('files', source))\n+                        source = self._loader.get_real_file(self._find_needle('files', source), decrypt=False)\n                         new_module_args['src'] = source\n                     except AnsibleFileNotFound as e:\n                         # module handles error message for nonexistent files\n", "issue": "aws_s3 is automaticly decrypting ansible-vault encrypted files before put\n<!---\r\nVerify first that your issue/request is not already reported on GitHub.\r\nAlso test if the latest release, and devel branch are affected too.\r\nAlways add information AFTER of these html comments. -->\r\n\r\n##### ISSUE TYPE\r\n - Bug Report\r\n\r\n##### COMPONENT NAME\r\naws_s3\r\n\r\n##### ANSIBLE VERSION\r\n<!--- Paste, BELOW THIS COMMENT, verbatim output from \"ansible --version\" between quotes below -->\r\n```\r\n2.5.1\r\n```\r\n\r\n##### SUMMARY\r\n- I'm trying to upload an ansible-vault encrypted file with aws_s3. But aws_s3 decrypts the src: file before uploading it to S3. \r\n- aws_s3 in 2.4 didn't decrypt the src: parameter.\r\n- The documentation for aws_s3 doesn't mention that the src: parameter is autodecrypted.\r\n- The aws_s3 module doesn't accept the decrypt: argument.\r\n\r\n##### STEPS TO REPRODUCE\r\n<!--- Paste example playbooks or commands between quotes below -->\r\n```yaml\r\n- name: upload vault to s3\r\n  aws_s3:\r\n    bucket: \"the bucket\"\r\n    object: \"file.txt\"\r\n    src: \"file.txt\"\r\n    mode: put\r\n```\r\n1. The file.txt is encrypted with ansible-vault. \r\n2. The playbook that runs this task is invoked with --vault-password and is able to decrypt the file because other tasks need the file decrypted.\r\n\r\n##### EXPECTED RESULTS\r\nDon't autodecrypt the src: argument or be able to specify decrypt: no.\r\n\r\n##### ACTUAL RESULTS\r\nThe src: argument to aws_s3 is automagicly decrypted without documentation or a way to disable the feature like other modules (ex. copy).\r\n\naws_s3 is automaticly decrypting ansible-vault encrypted files before put\n<!---\r\nVerify first that your issue/request is not already reported on GitHub.\r\nAlso test if the latest release, and devel branch are affected too.\r\nAlways add information AFTER of these html comments. -->\r\n\r\n##### ISSUE TYPE\r\n - Bug Report\r\n\r\n##### COMPONENT NAME\r\naws_s3\r\n\r\n##### ANSIBLE VERSION\r\n<!--- Paste, BELOW THIS COMMENT, verbatim output from \"ansible --version\" between quotes below -->\r\n```\r\n2.5.1\r\n```\r\n\r\n##### SUMMARY\r\n- I'm trying to upload an ansible-vault encrypted file with aws_s3. But aws_s3 decrypts the src: file before uploading it to S3. \r\n- aws_s3 in 2.4 didn't decrypt the src: parameter.\r\n- The documentation for aws_s3 doesn't mention that the src: parameter is autodecrypted.\r\n- The aws_s3 module doesn't accept the decrypt: argument.\r\n\r\n##### STEPS TO REPRODUCE\r\n<!--- Paste example playbooks or commands between quotes below -->\r\n```yaml\r\n- name: upload vault to s3\r\n  aws_s3:\r\n    bucket: \"the bucket\"\r\n    object: \"file.txt\"\r\n    src: \"file.txt\"\r\n    mode: put\r\n```\r\n1. The file.txt is encrypted with ansible-vault. \r\n2. The playbook that runs this task is invoked with --vault-password and is able to decrypt the file because other tasks need the file decrypted.\r\n\r\n##### EXPECTED RESULTS\r\nDon't autodecrypt the src: argument or be able to specify decrypt: no.\r\n\r\n##### ACTUAL RESULTS\r\nThe src: argument to aws_s3 is automagicly decrypted without documentation or a way to disable the feature like other modules (ex. copy).\r\n\n", "before_files": [{"content": "# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>\n# (c) 2018, Will Thames <will@thames.id.au>\n#\n# This file is part of Ansible\n#\n# Ansible is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# Ansible is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.\nfrom __future__ import (absolute_import, division, print_function)\n__metaclass__ = type\n\nimport os\n\nfrom ansible.errors import AnsibleError, AnsibleAction, AnsibleActionFail, AnsibleFileNotFound\nfrom ansible.module_utils._text import to_text\nfrom ansible.plugins.action import ActionBase\n\n\nclass ActionModule(ActionBase):\n\n    TRANSFERS_FILES = True\n\n    def run(self, tmp=None, task_vars=None):\n        ''' handler for aws_s3 operations '''\n        if task_vars is None:\n            task_vars = dict()\n\n        result = super(ActionModule, self).run(tmp, task_vars)\n        del tmp  # tmp no longer has any effect\n\n        source = self._task.args.get('src', None)\n\n        try:\n            new_module_args = self._task.args.copy()\n            if source:\n                source = os.path.expanduser(source)\n\n                # For backward compatibility check if the file exists on the remote; it should take precedence\n                if not self._remote_file_exists(source):\n                    try:\n                        source = self._loader.get_real_file(self._find_needle('files', source))\n                        new_module_args['src'] = source\n                    except AnsibleFileNotFound as e:\n                        # module handles error message for nonexistent files\n                        new_module_args['src'] = source\n                    except AnsibleError as e:\n                        raise AnsibleActionFail(to_text(e))\n\n            # execute the aws_s3 module now, with the updated args\n            result.update(self._execute_module(module_args=new_module_args, task_vars=task_vars))\n        except AnsibleAction as e:\n            result.update(e.result)\n        return result\n", "path": "lib/ansible/plugins/action/aws_s3.py"}], "after_files": [{"content": "# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>\n# (c) 2018, Will Thames <will@thames.id.au>\n#\n# This file is part of Ansible\n#\n# Ansible is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 3 of the License, or\n# (at your option) any later version.\n#\n# Ansible is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.\nfrom __future__ import (absolute_import, division, print_function)\n__metaclass__ = type\n\nimport os\n\nfrom ansible.errors import AnsibleError, AnsibleAction, AnsibleActionFail, AnsibleFileNotFound\nfrom ansible.module_utils._text import to_text\nfrom ansible.plugins.action import ActionBase\n\n\nclass ActionModule(ActionBase):\n\n    TRANSFERS_FILES = True\n\n    def run(self, tmp=None, task_vars=None):\n        ''' handler for aws_s3 operations '''\n        if task_vars is None:\n            task_vars = dict()\n\n        result = super(ActionModule, self).run(tmp, task_vars)\n        del tmp  # tmp no longer has any effect\n\n        source = self._task.args.get('src', None)\n\n        try:\n            new_module_args = self._task.args.copy()\n            if source:\n                source = os.path.expanduser(source)\n\n                # For backward compatibility check if the file exists on the remote; it should take precedence\n                if not self._remote_file_exists(source):\n                    try:\n                        source = self._loader.get_real_file(self._find_needle('files', source), decrypt=False)\n                        new_module_args['src'] = source\n                    except AnsibleFileNotFound as e:\n                        # module handles error message for nonexistent files\n                        new_module_args['src'] = source\n                    except AnsibleError as e:\n                        raise AnsibleActionFail(to_text(e))\n\n            # execute the aws_s3 module now, with the updated args\n            result.update(self._execute_module(module_args=new_module_args, task_vars=task_vars))\n        except AnsibleAction as e:\n            result.update(e.result)\n        return result\n", "path": "lib/ansible/plugins/action/aws_s3.py"}]}