#### SUMMARY
When trying to copy a file using the ansible `copy` module to a remote system with SELinux enforcing on a  `vfat` partition, throws the error below: 

```
TASK [SCORED | 1.5.2 | Copy superusers file containing password - modifed for selinux] ********************************************************************
fatal: [centos8.tatu.home]: FAILED! => {"changed": false, "checksum": "c752bf3bf5307fd295d14bdfa4fbfaceebe7ed5a", "cur_context": ["system_u", "object_r", "dosfs_t", "s0"], "gid": 0, "group": "root", "input_was": ["system_u", "object_r", "boot_t", "s0"], "mode": "0700", "msg": "invalid selinux context: [Errno 95] Operation not supported", "new_context": ["system_u", "object_r", "boot_t", "s0"], "owner": "root", "path": "/boot/efi/EFI/redhat/.ansible_tmphes6pya1user.config", "secontext": "system_u:object_r:dosfs_t:s0", "size": 14, "state": "file", "uid": 0}
```

However, when using the `touch` module, it works as expected.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
`copy`

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste 
ansible 2.9.10
  config file = /home/mdemello/.ansible.cfg
  configured module search path = ['/home/mdemello/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/mdemello/.virtualenvs/py38/lib64/python3.8/site-packages/ansible
  executable location = /home/mdemello/.virtualenvs/py38/bin/ansible
  python version = 3.8.3 (default, May 15 2020, 00:00:00) [GCC 10.1.1 20200507 (Red Hat 10.1.1-1)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
DEFAULT_BECOME(/home/mdemello/.ansible.cfg) = True
DEFAULT_BECOME_ASK_PASS(/home/mdemello/.ansible.cfg) = False
DEFAULT_BECOME_USER(/home/mdemello/.ansible.cfg) = root
DEFAULT_FORKS(/home/mdemello/.ansible.cfg) = 6
DEFAULT_HOST_LIST(/home/mdemello/.ansible.cfg) = ['/home/mdemello/ansible/inventory']
DEFAULT_JINJA2_NATIVE(/home/mdemello/.ansible.cfg) = True
DEFAULT_MODULE_NAME(/home/mdemello/.ansible.cfg) = command
DEFAULT_REMOTE_PORT(/home/mdemello/.ansible.cfg) = 22
DEFAULT_REMOTE_USER(/home/mdemello/.ansible.cfg) = root
DEFAULT_ROLES_PATH(/home/mdemello/.ansible.cfg) = ['/home/mdemello/ansible/roles']
DEFAULT_TIMEOUT(/home/mdemello/.ansible.cfg) = 10
DEFAULT_VERBOSITY(/home/mdemello/.ansible.cfg) = 0
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
```
[root@localhost EFI]# cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core) 


[root@localhost EFI]# uname -a
Linux localhost.localdomain 4.18.0-193.6.3.el8_2.x86_64 #1 SMP Wed Jun 10 11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost EFI]# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

[root@localhost EFI]# rpm -aq | grep selinux | sort 
container-selinux-2.124.0-1.module_el8.2.0+305+5e198a41.noarch
libselinux-2.9-3.el8.x86_64
libselinux-utils-2.9-3.el8.x86_64
python3-libselinux-2.9-3.el8.x86_64
rpm-plugin-selinux-4.14.2-37.el8.x86_64
selinux-policy-3.14.3-41.el8_2.4.noarch
selinux-policy-targeted-3.14.3-41.el8_2.4.noarch
```

##### STEPS TO REPRODUCE
1) Install a CentOS 8
2) Ensure the /boot/efi partition is using `vfat`
```
/dev/vdb1	 /boot/efi               vfat    umask=0077,shortname=winnt 0 2
```
3) Try the playbook below:
```
---
- hosts: centos8.tatu.home
  become: true
  gather_facts: yes
  vars:
    destfile: "/boot/efi/EFI/redhat/user.config"
    force_touch: True
    force_remove: True

  tasks:
  - name: Remove file
    file:
      path: "{{ destfile }}"
      state: absent
    when: force_remove|bool

  - name: Touching file
    file:
      path: "{{ destfile }}"
      state: touch
    when: force_touch|bool

  - name: "SCORED | 1.5.2 | Copy superusers file containing password - modifed for selinux"
    copy:
        owner: root
        group: root
        mode: 0700
        dest: "{{ destfile }}"
        src: 'user.config'
    register: copyuserconfig
    when:
      - ansible_facts['os_family'] == 'RedHat'
      - ansible_distribution_major_version == "8"
```

** When using the module `touch` the file can be deployed

```
ansible-playbook  -l centos8.tatu.home -e force_touch=true -e force_remove=true 02680135_copy_selinux.yaml  -v
Using /home/mdemello/.ansible.cfg as config file

PLAY [centos8.tatu.home] **********************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************
ok: [centos8.tatu.home]

TASK [Remove file] ****************************************************************************************************************************************
changed: [centos8.tatu.home] => {"changed": true, "path": "/boot/efi/EFI/redhat/user.config", "state": "absent"}

TASK [Touching file] **************************************************************************************************************************************
changed: [centos8.tatu.home] => {"changed": true, "dest": "/boot/efi/EFI/redhat/user.config", "gid": 0, "group": "root", "mode": "0700", "owner": "root", "secontext": "system_u:object_r:dosfs_t:s0", "size": 0, "state": "file", "uid": 0}

TASK [SCORED | 1.5.2 | Copy superusers file containing password - modifed for selinux] ********************************************************************
changed: [centos8.tatu.home] => {"changed": true, "checksum": "c752bf3bf5307fd295d14bdfa4fbfaceebe7ed5a", "dest": "/boot/efi/EFI/redhat/user.config", "gid": 0, "group": "root", "md5sum": "ceee01ff81a642f440bae29f1d33c23d", "mode": "0700", "owner": "root", "secontext": "system_u:object_r:dosfs_t:s0", "size": 14, "src": "/root/.ansible/tmp/ansible-tmp-1592882744.8798356-28805-242242527265135/source", "state": "file", "uid": 0}

PLAY RECAP ************************************************************************************************************************************************
centos8.tatu.home          : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```
```
[root@localhost EFI]# ls -laZ /boot/efi/EFI/redhat/
total 12
drwx------. 2 root root system_u:object_r:dosfs_t:s0 4096 Jun 22 23:25 .
drwx------. 3 root root system_u:object_r:dosfs_t:s0 4096 Jun 22 23:10 ..
-rwx------. 1 root root system_u:object_r:dosfs_t:s0   14 Jun 22 23:25 user.config
```

** When using the module `copy` directly, the copy fails

```
ansible-playbook  -l centos8.tatu.home -e force_touch=false -e force_remove=true 02680135_copy_selinux.yaml  -v
Using /home/mdemello/.ansible.cfg as config file

PLAY [centos8.tatu.home] **********************************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************
ok: [centos8.tatu.home]

TASK [Remove file] ****************************************************************************************************************************************
changed: [centos8.tatu.home] => {"changed": true, "path": "/boot/efi/EFI/redhat/user.config", "state": "absent"}

TASK [Touching file] **************************************************************************************************************************************
skipping: [centos8.tatu.home] => {"changed": false, "skip_reason": "Conditional result was False"}

TASK [SCORED | 1.5.2 | Copy superusers file containing password - modifed for selinux] ********************************************************************
fatal: [centos8.tatu.home]: FAILED! => {"changed": false, "checksum": "c752bf3bf5307fd295d14bdfa4fbfaceebe7ed5a", "cur_context": ["system_u", "object_r", "dosfs_t", "s0"], "gid": 0, "group": "root", "input_was": ["system_u", "object_r", "boot_t", "s0"], "mode": "0700", "msg": "invalid selinux context: [Errno 95] Operation not supported", "new_context": ["system_u", "object_r", "boot_t", "s0"], "owner": "root", "path": "/boot/efi/EFI/redhat/.ansible_tmphes6pya1user.config", "secontext": "system_u:object_r:dosfs_t:s0", "size": 14, "state": "file", "uid": 0}

PLAY RECAP ************************************************************************************************************************************************
centos8.tatu.home          : ok=2    changed=1    unreachable=0    failed=1    skipped=1    rescued=0    ignored=0
```

##### EXPECTED RESULTS
`copy` should work

##### ACTUAL RESULTS
`copy` module fails.

 Trying to understand why the `copy` module fails and `touch` works in this scenario

expand_user_and_vars=True, pass_fds=None, before_communicate_callback=None):
        '''
        Execute a command, returns rc, stdout, and stderr.
        :arg args: is the command to run
            * If args is a list, the command will be run with shell=False.
            * If args is a string and use_unsafe_shell=False it will split args to a list and run with shell=False
            * If args is a string and use_unsafe_shell=True it runs with shell=True.
        :kw check_rc: Whether to call fail_json in case of non zero RC.
            Default False
        :kw close_fds: See documentation for subprocess.Popen(). Default True
        :kw executable: See documentation for subprocess.Popen(). Default None
        :kw data: If given, information to write to the stdin of the command
        :kw binary_data: If False, append a newline to the data.  Default False
        :kw path_prefix: If given, additional path to find the command in.
            This adds to the PATH environment variable so helper commands in
            the same directory can also be found
        :kw cwd: If given, working directory to run the command inside
        :kw use_unsafe_shell: See `args` parameter.  Default False
        :kw prompt_regex: Regex string (not a compiled regex) which can be
            used to detect prompts in the stdout which would otherwise cause
            the execution to hang (especially if no input data is specified)
        :kw environ_update: dictionary to *update* os.environ with
        :kw umask: Umask to be used when running the command. Default None
        :kw encoding: Since we return native strings, on python3 we need to
            know the encoding to use to transform from bytes to text.  If you
            want to always get bytes back, use encoding=None.  The default is
            "utf-8".  This does not affect transformation of strings given as
            args.
        :kw errors: Since we return native strings, on python3 we need to
            transform stdout and stderr from bytes to text.  If the bytes are