##### SUMMARY
In check mode, when using the file module to create a directory, if the directory already exists but the requested owner or group do not, the module will fail. I encountered this when running a playbook in check mode that creates a new user and changes the ownership of an existing directory.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
file

##### ANSIBLE VERSION
```
ansible 2.9.3
  config file = /home/nepeta/wip/lockss-playbook/ansible.cfg
  configured module search path = ['/home/nepeta/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 3.7.6 (default, Jan 30 2020, 09:44:41) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
```

##### CONFIGURATION
```
```

##### OS / ENVIRONMENT
Fedora 31 host

##### STEPS TO REPRODUCE
Run the following playbook in check mode (`ansible-playbook demo.playbook.yml -C`):

```yaml
# demo.playbook.yml---

- hosts: localhost
  tasks:
    - name: Create user.
      user:
        name: notauser
        state: present

    - name: Task succeeds in check mode.
      file:
        path: /notadirectory
        state: directory
        owner: notauser

    - name: Task fails in check mode.
      file:
        path: /usr
        state: directory
        owner: notauser
```

##### EXPECTED RESULTS
I expect the module to skip the lookup of the user or group if it doesn't exist and to report the task as changed.

##### ACTUAL RESULTS
```
TASK [Create user.] ***********************************************************************************************************************
changed: [localhost]

TASK [Task succeeds in check mode.] *******************************************************************************************************
changed: [localhost]

TASK [Task fails in check mode.] **********************************************************************************************************
fatal: [localhost]: FAILED! => changed=false 
  gid: 0
  group: root
  mode: '0755'
  msg: 'chown failed: failed to look up user notauser'
  owner: root
  path: /usr
  secontext: system_u:object_r:usr_t:s0
  size: 4096
  state: directory
  uid: 0
```
else:
            params['state'] = 'file'
    
    if params['recurse'] and params['state'] != 'directory':
        raise ParameterError(results={"msg": "recurse option requires state to be 'directory'",
                                      "path": params["path"]})
    
    if params['src'] and params['state'] not in ('link', 'hard'):
        raise ParameterError(results={'msg': "src option requires state to be 'link' or 'hard'",
                                      'path': params['path']})
def get_state(path):
    ''' Find out current state '''
    b_path = to_bytes(path, errors='surrogate_or_strict')
    try:
        if os.path.lexists(b_path):
            if os.path.islink(b_path):
                return 'link'
            elif os.path.isdir(b_path):
                return 'directory'
            elif os.stat(b_path).st_nlink > 1:
                return 'hard'
            
            return 'file'
        return 'absent'
    except OSError as e:
        if e.errno == errno.ENOENT:  
            return 'absent'
        else:
            raise
def recursive_set_attributes(b_path, follow, file_args, mtime, atime):