 ### SUMMARY
The `file` module changes the `path` of a relative symlink to absolute path.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
file

##### ANSIBLE VERSION
```
ansible 2.9.1
  config file = /Users/robertguy/.ansible.cfg
  configured module search path = [u'/Users/robertguy/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.10 (default, Feb 22 2019, 21:55:15) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]
```

##### CONFIGURATION
```
# (empty)
```

##### OS / ENVIRONMENT
controller: mac
target: centos:8

##### STEPS TO REPRODUCE

Prepare a container:
```
# Start a container:
docker run -ti centos:8 /bin/bash
# Verify /sbin:
ls -ld /sbin
lrwxrwxrwx 1 root root 8 May 11  2019 /sbin -> usr/sbin
```

Run ansible on the container:
```
ansible -i $(docker ps -ql), -c docker all -m file -a "path=/sbin mode=o-w" -vvv
...
    "changed": true, 
    "dest": "/sbin", 
    "diff": {
        "after": {
            "path": "/sbin", 
            "src": "/usr/sbin"
        }, 
        "before": {
            "path": "/sbin", 
            "src": "usr/sbin"
        }
    }, 
...

# Verify /sbin again:
ls -ld /sbin
lrwxrwxrwx 1 root root    9 Dec  3 08:13 /sbin -> /usr/sbin
```

##### EXPECTED RESULTS
I was hoping that `file` would follow the symlink '/sbin' and change the target only. In the example above you can see that the link itself is modified.

##### ACTUAL RESULTS
```
ansible -i $(docker ps -ql), -c docker all -m file -a "path=/sbin mode=o-w follow=yes" -vvv
ansible 2.9.1
  config file = /Users/robertguy/.ansible.cfg
  configured module search path = [u'/Users/robertguy/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.10 (default, Feb 22 2019, 21:55:15) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]
Using /Users/robertguy/.ansible.cfg as config file
Parsed de83dc6fa5ee, inventory source with host_list plugin
META: ran handlers
<de83dc6fa5ee> ESTABLISH DOCKER CONNECTION FOR USER: root
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u"/bin/sh -c 'echo ~ && sleep 0'"]
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u'/bin/sh -c \'( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252 `" && echo ansible-tmp-1575362596.14-246033153918252="` echo /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252 `" ) && sleep 0\'']
<de83dc6fa5ee> Attempting python interpreter discovery
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u'/bin/sh -c \'echo PLATFORM; uname; echo FOUND; command -v \'"\'"\'/usr/bin/python\'"\'"\'; command -v \'"\'"\'python3.7\'"\'"\'; command -v \'"\'"\'python3.6\'"\'"\'; command -v \'"\'"\'python3.5\'"\'"\'; command -v \'"\'"\'python2.7\'"\'"\'; command -v \'"\'"\'python2.6\'"\'"\'; command -v \'"\'"\'/usr/libexec/platform-python\'"\'"\'; command -v \'"\'"\'/usr/bin/python3\'"\'"\'; command -v \'"\'"\'python\'"\'"\'; echo ENDFOUND && sleep 0\'']
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u"/bin/sh -c '/usr/libexec/platform-python && sleep 0'"]
Using module file /Library/Python/2.7/site-packages/ansible/modules/files/file.py
<de83dc6fa5ee> PUT /Users/robertguy/.ansible/tmp/ansible-local-18934l8TrvG/tmp_uA5WD TO /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252/AnsiballZ_file.py
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u"/bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252/ /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252/AnsiballZ_file.py && sleep 0'"]
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u"/bin/sh -c '/usr/libexec/platform-python /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252/AnsiballZ_file.py && sleep 0'"]
<de83dc6fa5ee> EXEC ['/usr/local/bin/docker', 'exec', '-i', u'de83dc6fa5ee', u'/bin/sh', '-c', u"/bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1575362596.14-246033153918252/ > /dev/null 2>&1 && sleep 0'"]
de83dc6fa5ee | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": true, 
    "dest": "/sbin", 
    "diff": {
        "after": {
            "path": "/sbin", 
            "src": "/usr/sbin"
        }, 
        "before": {
            "path": "/sbin", 
            "src": "usr/sbin"
        }
    }, 
    "gid": 0, 
    "group": "root", 
    "invocation": {
        "module_args": {
            "_diff_peek": null, 
            "_original_basename": null, 
            "access_time": null, 
            "access_time_format": "%Y%m%d%H%M.%S", 
            "attributes": null, 
            "backup": null, 
            "content": null, 
            "delimiter": null, 
            "directory_mode": null, 
            "follow": true, 
            "force": false, 
            "group": null, 
            "mode": "o-w", 
            "modification_time": null, 
            "modification_time_format": "%Y%m%d%H%M.%S", 
            "owner": null, 
            "path": "/sbin", 
            "recurse": false, 
            "regexp": null, 
            "remote_src": null, 
            "selevel": null, 
            "serole": null, 
            "setype": null, 
            "seuser": null, 
            "src": null, 
            "state": "link", 
            "unsafe_writes": null
        }
    }, 
    "mode": "0777", 
    "owner": "root", 
    "size": 9, 
    "src": "/usr/sbin", 
    "state": "link", 
    "uid": 0
}
META: ran handlers
META: ran handlers
```

description:
    - Path to the file being managed.
    type: path
    required: yes
    aliases: [ dest, name ]
  state:
    description:
    - If C(absent), directories will be recursively deleted, and files or symlinks will
      be unlinked. In the case of a directory, if C(diff) is declared, you will see the files and folders deleted listed
      under C(path_contents). Note that C(absent) will not cause C(file) to fail if the C(path) does
      not exist as the state did not change.
    - If C(directory), all intermediate subdirectories will be created if they
      do not exist. Since Ansible 1.7 they will be created with the supplied permissions.
    - If C(file), without any other options this works mostly as a 'stat' and will return the current state of C(path).
      Even with other options (i.e C(mode)), the file will be modified but will NOT be created if it does not exist;
      see the C(touch) value or the M(ansible.builtin.copy) or M(ansible.builtin.template) module if you want that behavior.
    - If C(hard), the hard link will be created or changed.
    - If C(link), the symbolic link will be created or changed.
    - If C(touch) (new in 1.4), an empty file will be created if the C(path) does not
      exist, while an existing file or directory will receive updated file access and
      modification times (similar to the way C(touch) works from the command line).
    type: str
    default: file
    choices: [ absent, directory, file, hard, link, touch ]
  src:
    description:
    - Path of the file to link to.
    - This applies only to C(state=link) and C(state=hard).
    - For C(state=link), this will also accept a non-existing path.
    - Relative paths are relative to the file being created (C(path)) which is how