summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/general/plugins/modules/proxmox_node_info.py
blob: 51d8745c05bca67aa3672bbb9c313ab41ec63776 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright John Berninger (@jberning) <john.berninger at gmail.com>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

from __future__ import absolute_import, division, print_function
__metaclass__ = type


DOCUMENTATION = '''
---
module: proxmox_node_info
short_description: Retrieve information about one or more Proxmox VE nodes
version_added: 8.2.0
description:
  - Retrieve information about one or more Proxmox VE nodes.
author: John Berninger (@jwbernin)
attributes:
  action_group:
    version_added: 9.0.0
extends_documentation_fragment:
  - community.general.proxmox.actiongroup_proxmox
  - community.general.proxmox.documentation
  - community.general.attributes
  - community.general.attributes.info_module
'''


EXAMPLES = '''
- name: List existing nodes
  community.general.proxmox_node_info:
    api_host: proxmox1
    api_user: root@pam
    api_password: "{{ password | default(omit) }}"
    api_token_id: "{{ token_id | default(omit) }}"
    api_token_secret: "{{ token_secret | default(omit) }}"
  register: proxmox_nodes
'''


RETURN = '''
proxmox_nodes:
    description: List of Proxmox VE nodes.
    returned: always, but can be empty
    type: list
    elements: dict
    contains:
      cpu:
        description: Current CPU usage in fractional shares of this host's total available CPU.
        returned: on success
        type: float
      disk:
        description: Current local disk usage of this host.
        returned: on success
        type: int
      id:
        description: Identity of the node.
        returned: on success
        type: str
      level:
        description: Support level. Can be blank if not under a paid support contract.
        returned: on success
        type: str
      maxcpu:
        description: Total number of available CPUs on this host.
        returned: on success
        type: int
      maxdisk:
        description: Size of local disk in bytes.
        returned: on success
        type: int
      maxmem:
        description: Memory size in bytes.
        returned: on success
        type: int
      mem:
        description: Used memory in bytes.
        returned: on success
        type: int
      node:
        description: Short hostname of this node.
        returned: on success
        type: str
      ssl_fingerprint:
        description: SSL fingerprint of the node certificate.
        returned: on success
        type: str
      status:
        description: Node status.
        returned: on success
        type: str
      type:
        description: Object type being returned.
        returned: on success
        type: str
      uptime:
        description: Node uptime in seconds.
        returned: on success
        type: int
'''


from ansible.module_utils.basic import AnsibleModule
from ansible_collections.community.general.plugins.module_utils.proxmox import (
    proxmox_auth_argument_spec, ProxmoxAnsible)


class ProxmoxNodeInfoAnsible(ProxmoxAnsible):
    def get_nodes(self):
        nodes = self.proxmox_api.nodes.get()
        return nodes


def proxmox_node_info_argument_spec():
    return dict()


def main():
    module_args = proxmox_auth_argument_spec()
    node_info_args = proxmox_node_info_argument_spec()
    module_args.update(node_info_args)

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

    proxmox = ProxmoxNodeInfoAnsible(module)

    nodes = proxmox.get_nodes()
    result['proxmox_nodes'] = nodes

    module.exit_json(**result)


if __name__ == '__main__':
    main()