##### SUMMARY
The gitlab_user module does not set sshkey when the user is newly created or has been changed already. This is due to the `changed = changed or ...` construct on line 237 in branch devel.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
`lib/ansible/modules/source_control/gitlab_user.py`

##### ANSIBLE VERSION
```
ansible 2.8.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/user/.virtualenvs/ans3.6/lib/python3.6/site-packages/ansible
  executable location = /home/user/.virtualenvs/ans3.6/bin/ansible
  python version = 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0]
```

##### CONFIGURATION
N/A

##### OS / ENVIRONMENT
N/A

##### STEPS TO REPRODUCE
Create a new gitlab user and set sshkey:
```
- name: Create gitlab user
  gitlab_user:
    server_url: "{{ gitlab_url }}"
    api_token: "{{ gitlab_token }}"
    name: test user
    username: test_user
    password: "{{ user_password }}"
    email: "{{ user_email }}"
    sshkey_name: test_user
    sshkey_file: "{{ key_content }}"
    state: present

# Note that the sshkey for test_user is not actually set now

# Run the same module again to set the sskey

- name: Actually set sshkey for gitlab user
  gitlab_user:
    server_url: "{{ gitlab_url }}"
    api_token: "{{ gitlab_token }}"
    name: test user
    username: test_user
    password: "{{ user_password }}"
    email: "{{ user_email }}"
    sshkey_name: test_user
    sshkey_file: "{{ key_content }}"
    state: present
```

##### EXPECTED RESULTS
Only having to run the module once should set all the fields correctly.

##### ACTUAL RESULTS
Running the module once does not set sshkey, if the user was not yet there or changed.
module.fail_json(msg="Failed to connect to GitLab server: %s" % to_native(e))
    except (gitlab.exceptions.GitlabHttpError) as e:
        module.fail_json(msg="Failed to connect to GitLab server: %s. \
            GitLab remove Session API now that private tokens are removed from user API endpoints since version 10.2." % to_native(e))
    gitlab_user = GitLabUser(module, gitlab_instance)
    user_exists = gitlab_user.existsUser(user_username)
    if state == 'absent':
        if user_exists:
            gitlab_user.deleteUser()
            module.exit_json(changed=True, msg="Successfully deleted user %s" % user_username)
        else:
            module.exit_json(changed=False, msg="User deleted or does not exists")
    if state == 'present':
        if gitlab_user.createOrUpdateUser(user_username, {
                                          "name": user_name,
                                          "password": user_password,
                                          "email": user_email,
                                          "sshkey_name": user_sshkey_name,
                                          "sshkey_file": user_sshkey_file,
                                          "group_path": group_path,
                                          "access_level": access_level,
                                          "confirm": confirm,
                                          "isadmin": user_isadmin,
                                          "external": user_external}):
            module.exit_json(changed=True, msg="Successfully created or updated the user %s" % user_username, user=gitlab_user.userObject._attrs)
        else:
            module.exit_json(changed=False, msg="No need to update the user %s" % user_username, user=gitlab_user.userObject._attrs)
if __name__ == '__main__':
    main()