Compare commits

..

3 Commits

2 changed files with 129 additions and 2 deletions

View File

@ -81,7 +81,7 @@ options:
If the access control list should be present, absent or exact. When state is exact, If the access control list should be present, absent or exact. When state is exact,
the value of `propagate` is also considered, and if an existing access control rule is found the value of `propagate` is also considered, and if an existing access control rule is found
which only differs in the value of `propagate`, the old rule is removed by the module, which only differs in the value of `propagate`, the old rule is removed by the module,
essentially replacing it. essentially replacing it.
type: str type: str
choices: [present, exact, absent] choices: [present, exact, absent]
default: present default: present
@ -100,7 +100,7 @@ EXAMPLES = r'''
propagate: true propagate: true
state: present state: present
- name: Configure an LDAP user to use their own VM - name: Configure an LDAP user to use their own VM
finallycoffee.proxmox.realm: finallycoffee.proxmox.acl:
proxmox_instance: https://my.proxmox-node.local:8006 proxmox_instance: https://my.proxmox-node.local:8006
promox_api_token_id: root@pam!token promox_api_token_id: root@pam!token
proxmox_api_secret: supersecuretokencontent proxmox_api_secret: supersecuretokencontent

View File

@ -0,0 +1,127 @@
#!/usr/bin/python
# coding: utf-8
# (c) 2022, Johanna Dorothea Reichmann <transcaffeine@finally.coffee>
__metaclass__ = type
import dataclasses
import traceback
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.finallycoffee.proxmox.plugins.module_utils.common import *
from ansible_collections.finallycoffee.proxmox.plugins.module_utils.proxmox_datacenter_group import *
DOCUMENTATION = r'''
---
module: group_info
author:
- Johanna Dorothea Reichmann (transcaffeine@finally.coffee)
requirements:
- python >= 3.9
short_description: Get all groups of a proxmox
description:
- "Lists all groups in proxmos"
options:
proxmox_instance:
description: Location of the proxmox API with scheme, domain name/ip and port, e.g. https://localhost:8006
type: str
required: true
proxmox_api_token_id:
description: The token ID containing username, realm and token name (format: user@realm!name)
type: str
required: true
proxmox_api_secret:
description: The secret
type: str
required: true
proxmox_api_verify_cert:
description: If the certificate presented for `proxmox_instance_url` should be verified
type: bool
required: false
default: true
group:
description: Group to retrieve information about. If left omitted, return all groups
type: str
required: false
'''
EXAMPLES = r'''
- name: Retrieve all groups
finallycoffee.proxmox.group_info:
proxmox_instance: https://my.proxmox-node.local:8006
promox_api_token_id: root@pam!token
proxmox_api_secret: supersecuretokencontent
- name: Retrieve group information for group developers-realm
finallycoffee.proxmox.group_info:
proxmox_instance: https://my.proxmox-node.local:8006
promox_api_token_id: root@pam!token
proxmox_api_secret: supersecuretokencontent
group: developers-realm
'''
RETURN = r'''
groups:
description: The retrieved groups
returned: When groups were found (matching the filter)
type: list
elements: dict[str, list[str]]
group:
description: The groups's name (`.name`) and members (`.members`)
returned: When a single group was queried
type: dict[str, list[str]]
'''
def main():
_ = dict
module = AnsibleModule(
argument_spec=_(
proxmox_instance=_(required=True, type='str'),
proxmox_api_token_id=_(required=True, type='str'),
proxmox_api_secret=_(type='str', required=True, no_log=True),
proxmox_api_verify_cert=_(type='bool', required=False, default=True),
group=_(required=False, type='str'),
),
supports_check_mode=True
)
result = _(
changed=False,
diff={},
message=''
)
groups = []
try:
groups = get_groups(ProxmoxAuthInfo(
module.params['proxmox_instance'],
module.params['proxmox_api_token_id'],
module.params['proxmox_api_secret'],
module.params['proxmox_api_verify_cert'],
))
except IOError as owie:
result['msg'] = owie
module.exit_json(**result)
result['groups'] = list(
map(lambda r: dataclasses.asdict(r),
filter(lambda r: r.name == module.params['group']
if module.params['group'] is not None
else True,
groups)
)
)
if module.params['group'] is not None:
result['group'] = dataclasses.asdict(
list(filter(lambda r: r.name == module.params['group'], groups))[0]
)
module.exit_json(**result)
if __name__ == '__main__':
main()