We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Proxmox_task_info api_password required along with api_user
### Summary

Cannot use the module with token id and secret only:

```  
        module = AnsibleModule(
        argument_spec=module_args,
        required_together=[('api_token_id', 'api_token_secret'),
                           ('api_user', 'api_password')],
        required_one_of=[('api_password', 'api_token_id')],
        supports_check_mode=True)
        result = dict(changed=False)
```

### Issue Type

Feature Request

### Component Name

proxmox_tasks_info

### Ansible Version

```ansible 2.10.8
  config file = /opt/git/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible 
  python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]

```


### Community.general Version

```console (paste below)
# /usr/lib/python3/dist-packages/ansible_collections
Collection        Version
----------------- -------
community.general 1.3.6

# /root/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
community.general 6.3.0
```


### Configuration

```console (paste below)
$ ansible-config dump --only-changed

```


### OS / Environment

_No response_

### Steps to Reproduce


```
- name: Check proxmox task
  community.general.proxmox_tasks_info:
    api_host: "{{ api_host }}"
    api_user: "{{ api_user }}"
    api_token_id: "{{ api_token_id }}"
    api_token_secret: "{{ api_token_secret }}"
    node: "{{ node }}"
    task: "{{ task }}"

"msg": "parameters are required together: api_user, api_password"
```


### Expected Results

If I comment out the required_together part for api_password and api_host the task is successful.

### Actual Results

```
The full traceback is:
  File "/tmp/ansible_community.general.proxmox_tasks_info_payload_j17m_215/ansible_community.general.proxmox_tasks_info_payload.zip/ansible/module_utils/basic.py", line 1626, in _check_required_together
    check_required_together(spec, param)
  File "/tmp/ansible_community.general.proxmox_tasks_info_payload_j17m_215/ansible_community.general.proxmox_tasks_info_payload.zip/ansible/module_utils/common/validation.py", line 128, in check_required_together
    raise TypeError(to_native(msg))
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `plugins/modules/proxmox_tasks_info.py`
Content:
```
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 
4 # Copyright (c) 2021, Andreas Botzner (@paginabianca) <andreas at botzner dot com>
5 # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
6 # SPDX-License-Identifier: GPL-3.0-or-later
7 
8 from __future__ import absolute_import, division, print_function
9 __metaclass__ = type
10 
11 
12 DOCUMENTATION = r'''
13 ---
14 module: proxmox_tasks_info
15 short_description: Retrieve information about one or more Proxmox VE tasks
16 version_added: 3.8.0
17 description:
18   - Retrieve information about one or more Proxmox VE tasks.
19 author: 'Andreas Botzner (@paginabianca) <andreas at botzner dot com>'
20 options:
21   node:
22     description:
23       - Node where to get tasks.
24     required: true
25     type: str
26   task:
27     description:
28       - Return specific task.
29     aliases: ['upid', 'name']
30     type: str
31 extends_documentation_fragment:
32     - community.general.proxmox.documentation
33     - community.general.attributes
34     - community.general.attributes.info_module
35 '''
36 
37 
38 EXAMPLES = '''
39 - name: List tasks on node01
40   community.general.proxmox_task_info:
41     api_host: proxmoxhost
42     api_user: root@pam
43     api_password: '{{ password | default(omit) }}'
44     api_token_id: '{{ token_id | default(omit) }}'
45     api_token_secret: '{{ token_secret | default(omit) }}'
46     node: node01
47   register: result
48 
49 - name: Retrieve information about specific tasks on node01
50   community.general.proxmox_task_info:
51     api_host: proxmoxhost
52     api_user: root@pam
53     api_password: '{{ password | default(omit) }}'
54     api_token_id: '{{ token_id | default(omit) }}'
55     api_token_secret: '{{ token_secret | default(omit) }}'
56     task: 'UPID:node01:00003263:16167ACE:621EE230:srvreload:networking:root@pam:'
57     node: node01
58   register: proxmox_tasks
59 '''
60 
61 
62 RETURN = '''
63 proxmox_tasks:
64     description: List of tasks.
65     returned: on success
66     type: list
67     elements: dict
68     contains:
69       id:
70         description: ID of the task.
71         returned: on success
72         type: str
73       node:
74         description: Node name.
75         returned: on success
76         type: str
77       pid:
78         description: PID of the task.
79         returned: on success
80         type: int
81       pstart:
82         description: pastart of the task.
83         returned: on success
84         type: int
85       starttime:
86         description: Starting time of the task.
87         returned: on success
88         type: int
89       type:
90         description: Type of the task.
91         returned: on success
92         type: str
93       upid:
94         description: UPID of the task.
95         returned: on success
96         type: str
97       user:
98         description: User that owns the task.
99         returned: on success
100         type: str
101       endtime:
102         description: Endtime of the task.
103         returned: on success, can be absent
104         type: int
105       status:
106         description: Status of the task.
107         returned: on success, can be absent
108         type: str
109       failed:
110         description: If the task failed.
111         returned: when status is defined
112         type: bool
113 msg:
114     description: Short message.
115     returned: on failure
116     type: str
117     sample: 'Task: UPID:xyz:xyz does not exist on node: proxmoxnode'
118 '''
119 
120 from ansible.module_utils.basic import AnsibleModule
121 from ansible_collections.community.general.plugins.module_utils.proxmox import (
122     proxmox_auth_argument_spec, ProxmoxAnsible)
123 
124 
125 class ProxmoxTaskInfoAnsible(ProxmoxAnsible):
126     def get_task(self, upid, node):
127         tasks = self.get_tasks(node)
128         for task in tasks:
129             if task.info['upid'] == upid:
130                 return [task]
131 
132     def get_tasks(self, node):
133         tasks = self.proxmox_api.nodes(node).tasks.get()
134         return [ProxmoxTask(task) for task in tasks]
135 
136 
137 class ProxmoxTask:
138     def __init__(self, task):
139         self.info = dict()
140         for k, v in task.items():
141             if k == 'status' and isinstance(v, str):
142                 self.info[k] = v
143                 if v != 'OK':
144                     self.info['failed'] = True
145             else:
146                 self.info[k] = v
147 
148 
149 def proxmox_task_info_argument_spec():
150     return dict(
151         task=dict(type='str', aliases=['upid', 'name'], required=False),
152         node=dict(type='str', required=True),
153     )
154 
155 
156 def main():
157     module_args = proxmox_auth_argument_spec()
158     task_info_args = proxmox_task_info_argument_spec()
159     module_args.update(task_info_args)
160 
161     module = AnsibleModule(
162         argument_spec=module_args,
163         required_together=[('api_token_id', 'api_token_secret'),
164                            ('api_user', 'api_password')],
165         required_one_of=[('api_password', 'api_token_id')],
166         supports_check_mode=True)
167     result = dict(changed=False)
168 
169     proxmox = ProxmoxTaskInfoAnsible(module)
170     upid = module.params['task']
171     node = module.params['node']
172     if upid:
173         tasks = proxmox.get_task(upid=upid, node=node)
174     else:
175         tasks = proxmox.get_tasks(node=node)
176     if tasks is not None:
177         result['proxmox_tasks'] = [task.info for task in tasks]
178         module.exit_json(**result)
179     else:
180         result['msg'] = 'Task: {0} does not exist on node: {1}.'.format(
181             upid, node)
182         module.fail_json(**result)
183 
184 
185 if __name__ == '__main__':
186     main()
187
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/plugins/modules/proxmox_tasks_info.py b/plugins/modules/proxmox_tasks_info.py
--- a/plugins/modules/proxmox_tasks_info.py
+++ b/plugins/modules/proxmox_tasks_info.py
@@ -160,8 +160,7 @@
 
     module = AnsibleModule(
         argument_spec=module_args,
-        required_together=[('api_token_id', 'api_token_secret'),
-                           ('api_user', 'api_password')],
+        required_together=[('api_token_id', 'api_token_secret')],
         required_one_of=[('api_password', 'api_token_id')],
         supports_check_mode=True)
     result = dict(changed=False)

{"golden_diff": "diff --git a/plugins/modules/proxmox_tasks_info.py b/plugins/modules/proxmox_tasks_info.py\n--- a/plugins/modules/proxmox_tasks_info.py\n+++ b/plugins/modules/proxmox_tasks_info.py\n@@ -160,8 +160,7 @@\n \n     module = AnsibleModule(\n         argument_spec=module_args,\n-        required_together=[('api_token_id', 'api_token_secret'),\n-                           ('api_user', 'api_password')],\n+        required_together=[('api_token_id', 'api_token_secret')],\n         required_one_of=[('api_password', 'api_token_id')],\n         supports_check_mode=True)\n     result = dict(changed=False)\n", "issue": "Proxmox_task_info api_password required along with api_user\n### Summary\r\n\r\nCannot use the module with token id and secret only:\r\n\r\n```  \r\n        module = AnsibleModule(\r\n        argument_spec=module_args,\r\n        required_together=[('api_token_id', 'api_token_secret'),\r\n                           ('api_user', 'api_password')],\r\n        required_one_of=[('api_password', 'api_token_id')],\r\n        supports_check_mode=True)\r\n        result = dict(changed=False)\r\n```\r\n\r\n### Issue Type\r\n\r\nFeature Request\r\n\r\n### Component Name\r\n\r\nproxmox_tasks_info\r\n\r\n### Ansible Version\r\n\r\n```ansible 2.10.8\r\n  config file = /opt/git/ansible.cfg\r\n  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']\r\n  ansible python module location = /usr/lib/python3/dist-packages/ansible\r\n  executable location = /usr/bin/ansible \r\n  python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]\r\n\r\n```\r\n\r\n\r\n### Community.general Version\r\n\r\n```console (paste below)\r\n# /usr/lib/python3/dist-packages/ansible_collections\r\nCollection        Version\r\n----------------- -------\r\ncommunity.general 1.3.6\r\n\r\n# /root/.ansible/collections/ansible_collections\r\nCollection        Version\r\n----------------- -------\r\ncommunity.general 6.3.0\r\n```\r\n\r\n\r\n### Configuration\r\n\r\n```console (paste below)\r\n$ ansible-config dump --only-changed\r\n\r\n```\r\n\r\n\r\n### OS / Environment\r\n\r\n_No response_\r\n\r\n### Steps to Reproduce\r\n\r\n\r\n```\r\n- name: Check proxmox task\r\n  community.general.proxmox_tasks_info:\r\n    api_host: \"{{ api_host }}\"\r\n    api_user: \"{{ api_user }}\"\r\n    api_token_id: \"{{ api_token_id }}\"\r\n    api_token_secret: \"{{ api_token_secret }}\"\r\n    node: \"{{ node }}\"\r\n    task: \"{{ task }}\"\r\n\r\n\"msg\": \"parameters are required together: api_user, api_password\"\r\n```\r\n\r\n\r\n### Expected Results\r\n\r\nIf I comment out the required_together part for api_password and api_host the task is successful.\r\n\r\n### Actual Results\r\n\r\n```\r\nThe full traceback is:\r\n  File \"/tmp/ansible_community.general.proxmox_tasks_info_payload_j17m_215/ansible_community.general.proxmox_tasks_info_payload.zip/ansible/module_utils/basic.py\", line 1626, in _check_required_together\r\n    check_required_together(spec, param)\r\n  File \"/tmp/ansible_community.general.proxmox_tasks_info_payload_j17m_215/ansible_community.general.proxmox_tasks_info_payload.zip/ansible/module_utils/common/validation.py\", line 128, in check_required_together\r\n    raise TypeError(to_native(msg))\r\n```\r\n\r\n\r\n### Code of Conduct\r\n\r\n- [X] I agree to follow the Ansible Code of Conduct\n", "before_files": [{"content": "#!/usr/bin/python\n# -*- coding: utf-8 -*-\n\n# Copyright (c) 2021, Andreas Botzner (@paginabianca) <andreas at botzner dot com>\n# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom __future__ import absolute_import, division, print_function\n__metaclass__ = type\n\n\nDOCUMENTATION = r'''\n---\nmodule: proxmox_tasks_info\nshort_description: Retrieve information about one or more Proxmox VE tasks\nversion_added: 3.8.0\ndescription:\n  - Retrieve information about one or more Proxmox VE tasks.\nauthor: 'Andreas Botzner (@paginabianca) <andreas at botzner dot com>'\noptions:\n  node:\n    description:\n      - Node where to get tasks.\n    required: true\n    type: str\n  task:\n    description:\n      - Return specific task.\n    aliases: ['upid', 'name']\n    type: str\nextends_documentation_fragment:\n    - community.general.proxmox.documentation\n    - community.general.attributes\n    - community.general.attributes.info_module\n'''\n\n\nEXAMPLES = '''\n- name: List tasks on node01\n  community.general.proxmox_task_info:\n    api_host: proxmoxhost\n    api_user: root@pam\n    api_password: '{{ password | default(omit) }}'\n    api_token_id: '{{ token_id | default(omit) }}'\n    api_token_secret: '{{ token_secret | default(omit) }}'\n    node: node01\n  register: result\n\n- name: Retrieve information about specific tasks on node01\n  community.general.proxmox_task_info:\n    api_host: proxmoxhost\n    api_user: root@pam\n    api_password: '{{ password | default(omit) }}'\n    api_token_id: '{{ token_id | default(omit) }}'\n    api_token_secret: '{{ token_secret | default(omit) }}'\n    task: 'UPID:node01:00003263:16167ACE:621EE230:srvreload:networking:root@pam:'\n    node: node01\n  register: proxmox_tasks\n'''\n\n\nRETURN = '''\nproxmox_tasks:\n    description: List of tasks.\n    returned: on success\n    type: list\n    elements: dict\n    contains:\n      id:\n        description: ID of the task.\n        returned: on success\n        type: str\n      node:\n        description: Node name.\n        returned: on success\n        type: str\n      pid:\n        description: PID of the task.\n        returned: on success\n        type: int\n      pstart:\n        description: pastart of the task.\n        returned: on success\n        type: int\n      starttime:\n        description: Starting time of the task.\n        returned: on success\n        type: int\n      type:\n        description: Type of the task.\n        returned: on success\n        type: str\n      upid:\n        description: UPID of the task.\n        returned: on success\n        type: str\n      user:\n        description: User that owns the task.\n        returned: on success\n        type: str\n      endtime:\n        description: Endtime of the task.\n        returned: on success, can be absent\n        type: int\n      status:\n        description: Status of the task.\n        returned: on success, can be absent\n        type: str\n      failed:\n        description: If the task failed.\n        returned: when status is defined\n        type: bool\nmsg:\n    description: Short message.\n    returned: on failure\n    type: str\n    sample: 'Task: UPID:xyz:xyz does not exist on node: proxmoxnode'\n'''\n\nfrom ansible.module_utils.basic import AnsibleModule\nfrom ansible_collections.community.general.plugins.module_utils.proxmox import (\n    proxmox_auth_argument_spec, ProxmoxAnsible)\n\n\nclass ProxmoxTaskInfoAnsible(ProxmoxAnsible):\n    def get_task(self, upid, node):\n        tasks = self.get_tasks(node)\n        for task in tasks:\n            if task.info['upid'] == upid:\n                return [task]\n\n    def get_tasks(self, node):\n        tasks = self.proxmox_api.nodes(node).tasks.get()\n        return [ProxmoxTask(task) for task in tasks]\n\n\nclass ProxmoxTask:\n    def __init__(self, task):\n        self.info = dict()\n        for k, v in task.items():\n            if k == 'status' and isinstance(v, str):\n                self.info[k] = v\n                if v != 'OK':\n                    self.info['failed'] = True\n            else:\n                self.info[k] = v\n\n\ndef proxmox_task_info_argument_spec():\n    return dict(\n        task=dict(type='str', aliases=['upid', 'name'], required=False),\n        node=dict(type='str', required=True),\n    )\n\n\ndef main():\n    module_args = proxmox_auth_argument_spec()\n    task_info_args = proxmox_task_info_argument_spec()\n    module_args.update(task_info_args)\n\n    module = AnsibleModule(\n        argument_spec=module_args,\n        required_together=[('api_token_id', 'api_token_secret'),\n                           ('api_user', 'api_password')],\n        required_one_of=[('api_password', 'api_token_id')],\n        supports_check_mode=True)\n    result = dict(changed=False)\n\n    proxmox = ProxmoxTaskInfoAnsible(module)\n    upid = module.params['task']\n    node = module.params['node']\n    if upid:\n        tasks = proxmox.get_task(upid=upid, node=node)\n    else:\n        tasks = proxmox.get_tasks(node=node)\n    if tasks is not None:\n        result['proxmox_tasks'] = [task.info for task in tasks]\n        module.exit_json(**result)\n    else:\n        result['msg'] = 'Task: {0} does not exist on node: {1}.'.format(\n            upid, node)\n        module.fail_json(**result)\n\n\nif __name__ == '__main__':\n    main()\n", "path": "plugins/modules/proxmox_tasks_info.py"}], "after_files": [{"content": "#!/usr/bin/python\n# -*- coding: utf-8 -*-\n\n# Copyright (c) 2021, Andreas Botzner (@paginabianca) <andreas at botzner dot com>\n# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)\n# SPDX-License-Identifier: GPL-3.0-or-later\n\nfrom __future__ import absolute_import, division, print_function\n__metaclass__ = type\n\n\nDOCUMENTATION = r'''\n---\nmodule: proxmox_tasks_info\nshort_description: Retrieve information about one or more Proxmox VE tasks\nversion_added: 3.8.0\ndescription:\n  - Retrieve information about one or more Proxmox VE tasks.\nauthor: 'Andreas Botzner (@paginabianca) <andreas at botzner dot com>'\noptions:\n  node:\n    description:\n      - Node where to get tasks.\n    required: true\n    type: str\n  task:\n    description:\n      - Return specific task.\n    aliases: ['upid', 'name']\n    type: str\nextends_documentation_fragment:\n    - community.general.proxmox.documentation\n    - community.general.attributes\n    - community.general.attributes.info_module\n'''\n\n\nEXAMPLES = '''\n- name: List tasks on node01\n  community.general.proxmox_task_info:\n    api_host: proxmoxhost\n    api_user: root@pam\n    api_password: '{{ password | default(omit) }}'\n    api_token_id: '{{ token_id | default(omit) }}'\n    api_token_secret: '{{ token_secret | default(omit) }}'\n    node: node01\n  register: result\n\n- name: Retrieve information about specific tasks on node01\n  community.general.proxmox_task_info:\n    api_host: proxmoxhost\n    api_user: root@pam\n    api_password: '{{ password | default(omit) }}'\n    api_token_id: '{{ token_id | default(omit) }}'\n    api_token_secret: '{{ token_secret | default(omit) }}'\n    task: 'UPID:node01:00003263:16167ACE:621EE230:srvreload:networking:root@pam:'\n    node: node01\n  register: proxmox_tasks\n'''\n\n\nRETURN = '''\nproxmox_tasks:\n    description: List of tasks.\n    returned: on success\n    type: list\n    elements: dict\n    contains:\n      id:\n        description: ID of the task.\n        returned: on success\n        type: str\n      node:\n        description: Node name.\n        returned: on success\n        type: str\n      pid:\n        description: PID of the task.\n        returned: on success\n        type: int\n      pstart:\n        description: pastart of the task.\n        returned: on success\n        type: int\n      starttime:\n        description: Starting time of the task.\n        returned: on success\n        type: int\n      type:\n        description: Type of the task.\n        returned: on success\n        type: str\n      upid:\n        description: UPID of the task.\n        returned: on success\n        type: str\n      user:\n        description: User that owns the task.\n        returned: on success\n        type: str\n      endtime:\n        description: Endtime of the task.\n        returned: on success, can be absent\n        type: int\n      status:\n        description: Status of the task.\n        returned: on success, can be absent\n        type: str\n      failed:\n        description: If the task failed.\n        returned: when status is defined\n        type: bool\nmsg:\n    description: Short message.\n    returned: on failure\n    type: str\n    sample: 'Task: UPID:xyz:xyz does not exist on node: proxmoxnode'\n'''\n\nfrom ansible.module_utils.basic import AnsibleModule\nfrom ansible_collections.community.general.plugins.module_utils.proxmox import (\n    proxmox_auth_argument_spec, ProxmoxAnsible)\n\n\nclass ProxmoxTaskInfoAnsible(ProxmoxAnsible):\n    def get_task(self, upid, node):\n        tasks = self.get_tasks(node)\n        for task in tasks:\n            if task.info['upid'] == upid:\n                return [task]\n\n    def get_tasks(self, node):\n        tasks = self.proxmox_api.nodes(node).tasks.get()\n        return [ProxmoxTask(task) for task in tasks]\n\n\nclass ProxmoxTask:\n    def __init__(self, task):\n        self.info = dict()\n        for k, v in task.items():\n            if k == 'status' and isinstance(v, str):\n                self.info[k] = v\n                if v != 'OK':\n                    self.info['failed'] = True\n            else:\n                self.info[k] = v\n\n\ndef proxmox_task_info_argument_spec():\n    return dict(\n        task=dict(type='str', aliases=['upid', 'name'], required=False),\n        node=dict(type='str', required=True),\n    )\n\n\ndef main():\n    module_args = proxmox_auth_argument_spec()\n    task_info_args = proxmox_task_info_argument_spec()\n    module_args.update(task_info_args)\n\n    module = AnsibleModule(\n        argument_spec=module_args,\n        required_together=[('api_token_id', 'api_token_secret')],\n        required_one_of=[('api_password', 'api_token_id')],\n        supports_check_mode=True)\n    result = dict(changed=False)\n\n    proxmox = ProxmoxTaskInfoAnsible(module)\n    upid = module.params['task']\n    node = module.params['node']\n    if upid:\n        tasks = proxmox.get_task(upid=upid, node=node)\n    else:\n        tasks = proxmox.get_tasks(node=node)\n    if tasks is not None:\n        result['proxmox_tasks'] = [task.info for task in tasks]\n        module.exit_json(**result)\n    else:\n        result['msg'] = 'Task: {0} does not exist on node: {1}.'.format(\n            upid, node)\n        module.fail_json(**result)\n\n\nif __name__ == '__main__':\n    main()\n", "path": "plugins/modules/proxmox_tasks_info.py"}]}