 ### 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
```

if changed and not module.check_mode:
        if prev_state != 'absent':
            
            b_tmppath = to_bytes(os.path.sep).join(
                [os.path.dirname(b_path), to_bytes(".%s.%s.tmp" % (os.getpid(), time.time()))]
            )
            try:
                if prev_state == 'directory':
                    os.rmdir(b_path)
                os.symlink(b_src, b_tmppath)
                os.rename(b_tmppath, b_path)
            except OSError as e:
                if os.path.exists(b_tmppath):
                    os.unlink(b_tmppath)
                raise AnsibleModuleError(results={'msg': 'Error while replacing: %s'
                                                         % to_native(e, nonstring='simplerepr'),
                                                  'path': path})
        else:
            try:
                os.symlink(b_src, b_path)
            except OSError as e:
                raise AnsibleModuleError(results={'msg': 'Error while linking: %s'
                                                         % to_native(e, nonstring='simplerepr'),
                                                  'path': path})
    if module.check_mode and not os.path.exists(b_path):
        return {'dest': path, 'src': src, 'changed': changed, 'diff': diff}