<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
Ansible user module fails on casting the `expires` value to an `int` when an entry already exists in `/etc/passwd` for a user with the error message `ValueError: invalid literal for int() with base 10: ''`.
https://github.com/ansible/ansible/blob/31ddca4c0db2584b0a68880bdea1d97bd8b22032/lib/ansible/modules/user.py#L800

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
user module

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/export/home/rrotaru/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /tech/home/rrotaru/venv/lib64/python3.6/site-packages/ansible
  executable location = /tech/home/rrotaru/venv/bin/ansible
  python version = 3.6.8 (default, Jun 11 2019, 15:15:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```
```
ansible 2.10.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/export/home/rrotaru/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /tech/home/rrotaru/venv/lib64/python3.6/site-packages/ansible
  executable location = /tech/home/rrotaru/venv/bin/ansible
  python version = 3.6.8 (default, Jun 11 2019, 15:15:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
N/A

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Red Hat Enterprise Linux Server release 7.5 (Maipo)


##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
Run the playbook below.


<!--- Paste example playbooks or commands between quotes below -->
```yaml
---

- hosts: localhost
  become: yes
  tasks:

    - lineinfile:
        path: /etc/passwd
        line: "dummy::123:123::/export/home/dummy:/bin/ksh"
        regexp: "^dummy.*"
        state: present

    - user:
        name: dummy
        state: present
        uid: 123
        expires: -1
        password: "dummy#password | password_hash('sha512') }}"
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
User module should update the user expiration to non-expiring.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
User module fails with python ValueError.

<!--- Paste verbatim command output between quotes -->
```paste below
(venv) $ ansible-playbook expirestest.yml -K -v
Using /etc/ansible/ansible.cfg as config file
BECOME password:
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'

PLAY [localhost] *******************************************************************************

TASK [Gathering Facts] *************************************************************************
ok: [localhost]

TASK [lineinfile] ******************************************************************************
changed: [localhost] => {"backup": "", "changed": true, "msg": "line added"}

TASK [user] ************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ValueError: invalid literal for int() with base 10: ''
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/export/home/rrotaru/.ansible/tmp/ansible-tmp-1600960729.601071-12482-194155520219212/AnsiballZ_user.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible.modules.user', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 3026, in <module>\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 2965, in main\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 1111, in modify_user\n  File \"/tmp/ansible_user_payload_v5n53kd3/ansible_user_payload.zip/ansible/modules/user.py\", line 799, in modify_user_usermod\nValueError: invalid literal for int() with base 10: ''\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

PLAY RECAP *************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

```

version_added: "2.11"
    password_expire_warn:
        description:
            - Number of days of warning before password expires.
            - Supported on Linux only.
        type: int
        version_added: "2.16"
    umask:
        description:
            - Sets the umask of the user.
            - Does nothing when used with other platforms.
            - Currently supported on Linux.
            - Requires O(local) is omitted or V(False).
        type: str
        version_added: "2.12"
extends_documentation_fragment: action_common_attributes
attributes:
    check_mode:
        support: full
    diff_mode:
        support: none
    platform:
        platforms: posix
notes:
  - There are specific requirements per platform on user management utilities. However
    they generally come pre-installed with the system and Ansible will require they
    are present at runtime. If they are not, a descriptive error message will be shown.
  - On SunOS platforms, the shadow file is backed up automatically since this module edits it directly.
    On other platforms, the shadow file is backed up by the underlying tools used by this module.
  - On macOS, this module uses C(dscl) to create, modify, and delete accounts. C(dseditgroup) is used to