2023-12-31 15:21:20 +01:00
|
|
|
#!/usr/bin/python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
|
|
|
# Copyright Julian Vanden Broeck (@l00ptr) <julian.vandenbroeck at dalibo.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_storage_contents_info
|
|
|
|
short_description: List content from a Proxmox VE storage
|
|
|
|
version_added: 8.2.0
|
|
|
|
description:
|
|
|
|
- Retrieves information about stored objects on a specific storage attached to a node.
|
2024-05-12 10:03:06 +02:00
|
|
|
attributes:
|
|
|
|
action_group:
|
|
|
|
version_added: 9.0.0
|
2023-12-31 15:21:20 +01:00
|
|
|
options:
|
|
|
|
storage:
|
|
|
|
description:
|
|
|
|
- Only return content stored on that specific storage.
|
|
|
|
aliases: ['name']
|
|
|
|
type: str
|
|
|
|
required: true
|
|
|
|
node:
|
|
|
|
description:
|
|
|
|
- Proxmox node to which the storage is attached.
|
|
|
|
type: str
|
|
|
|
required: true
|
|
|
|
content:
|
|
|
|
description:
|
|
|
|
- Filter on a specific content type.
|
|
|
|
type: str
|
|
|
|
choices: ["all", "backup", "rootdir", "images", "iso"]
|
|
|
|
default: "all"
|
|
|
|
vmid:
|
|
|
|
description:
|
|
|
|
- Filter on a specific VMID.
|
|
|
|
type: int
|
|
|
|
author: Julian Vanden Broeck (@l00ptr)
|
|
|
|
extends_documentation_fragment:
|
2024-05-12 10:03:06 +02:00
|
|
|
- community.general.proxmox.actiongroup_proxmox
|
2023-12-31 15:21:20 +01:00
|
|
|
- community.general.proxmox.documentation
|
|
|
|
- community.general.attributes
|
|
|
|
- community.general.attributes.info_module
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
EXAMPLES = """
|
|
|
|
- name: List existing storages
|
|
|
|
community.general.proxmox_storage_contents_info:
|
|
|
|
api_host: helldorado
|
|
|
|
api_user: root@pam
|
|
|
|
api_password: "{{ password | default(omit) }}"
|
|
|
|
api_token_id: "{{ token_id | default(omit) }}"
|
|
|
|
api_token_secret: "{{ token_secret | default(omit) }}"
|
|
|
|
storage: lvm2
|
|
|
|
content: backup
|
|
|
|
vmid: 130
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
RETURN = """
|
|
|
|
proxmox_storage_content:
|
|
|
|
description: Content of of storage attached to a node.
|
|
|
|
type: list
|
|
|
|
returned: success
|
|
|
|
elements: dict
|
|
|
|
contains:
|
|
|
|
content:
|
|
|
|
description: Proxmox content of listed objects on this storage.
|
|
|
|
type: str
|
|
|
|
returned: success
|
|
|
|
ctime:
|
|
|
|
description: Creation time of the listed objects.
|
|
|
|
type: str
|
|
|
|
returned: success
|
|
|
|
format:
|
|
|
|
description: Format of the listed objects (can be V(raw), V(pbs-vm), V(iso),...).
|
|
|
|
type: str
|
|
|
|
returned: success
|
|
|
|
size:
|
|
|
|
description: Size of the listed objects.
|
|
|
|
type: int
|
|
|
|
returned: success
|
|
|
|
subtype:
|
|
|
|
description: Subtype of the listed objects (can be V(qemu) or V(lxc)).
|
|
|
|
type: str
|
|
|
|
returned: When storage is dedicated to backup, typically on PBS storage.
|
|
|
|
verification:
|
|
|
|
description: Backup verification status of the listed objects.
|
|
|
|
type: dict
|
|
|
|
returned: When storage is dedicated to backup, typically on PBS storage.
|
|
|
|
sample: {
|
|
|
|
"state": "ok",
|
|
|
|
"upid": "UPID:backup-srv:00130F49:1A12D8375:00001CD7:657A2258:verificationjob:daily\\x3av\\x2dd0cc18c5\\x2d8707:root@pam:"
|
|
|
|
}
|
|
|
|
volid:
|
|
|
|
description: Volume identifier of the listed objects.
|
|
|
|
type: str
|
|
|
|
returned: success
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
from ansible_collections.community.general.plugins.module_utils.proxmox import (
|
|
|
|
ProxmoxAnsible, proxmox_auth_argument_spec)
|
|
|
|
|
|
|
|
|
|
|
|
def proxmox_storage_info_argument_spec():
|
|
|
|
return dict(
|
|
|
|
storage=dict(type="str", required=True, aliases=["name"]),
|
|
|
|
content=dict(type="str", required=False, default="all", choices=["all", "backup", "rootdir", "images", "iso"]),
|
|
|
|
vmid=dict(type="int"),
|
|
|
|
node=dict(required=True, type="str"),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
module_args = proxmox_auth_argument_spec()
|
|
|
|
storage_info_args = proxmox_storage_info_argument_spec()
|
|
|
|
module_args.update(storage_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 = ProxmoxAnsible(module)
|
|
|
|
res = proxmox.get_storage_content(
|
|
|
|
node=module.params["node"],
|
|
|
|
storage=module.params["storage"],
|
|
|
|
content=None if module.params["content"] == "all" else module.params["content"],
|
|
|
|
vmid=module.params["vmid"],
|
|
|
|
)
|
|
|
|
result["proxmox_storage_content"] = res
|
|
|
|
module.exit_json(**result)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|