diff --git a/plugins/modules/proxmox_backup_info.py b/plugins/modules/proxmox_backup_info.py deleted file mode 100644 index 0889239b37a..00000000000 --- a/plugins/modules/proxmox_backup_info.py +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Copyright (c) 2024 Marzieh Raoufnezhad -# Copyright (c) 2024 Maryam Mayabi -# 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_backup_info - -short_description: Retrieve information on Proxmox scheduled backups - -version_added: 10.3.0 - -description: - - Retrieve information such as backup times, VM name, VM ID, mode, backup type, and backup schedule using the Proxmox Server API. - -author: - - "Marzieh Raoufnezhad (@raoufnezhad) " - - "Maryam Mayabi (@mmayabi) " - -options: - vm_name: - description: - - The name of the Proxmox VM. - - If defined, the returned list will contain backup jobs that have been parsed and filtered based on O(vm_name) value. - - Mutually exclusive with O(vm_id) and O(backup_jobs). - type: str - vm_id: - description: - - The ID of the Proxmox VM. - - If defined, the returned list will contain backup jobs that have been parsed and filtered based on O(vm_id) value. - - Mutually exclusive with O(vm_name) and O(backup_jobs). - type: str - backup_jobs: - description: - - If V(true), the module will return all backup jobs information. - - If V(false), the module will parse all backup jobs based on VM IDs and return a list of VMs' backup information. - - Mutually exclusive with O(vm_id) and O(vm_name). - default: false - type: bool - -extends_documentation_fragment: - - community.general.proxmox.documentation - - community.general.attributes - - community.general.attributes.info_module - - community.general.proxmox.actiongroup_proxmox -""" - -EXAMPLES = """ -- name: Print all backup information by VM ID and VM name - community.general.proxmox_backup_info: - api_user: 'myUser@pam' - api_password: '*******' - api_host: '192.168.20.20' - -- name: Print Proxmox backup information for a specific VM based on its name - community.general.proxmox_backup_info: - api_user: 'myUser@pam' - api_password: '*******' - api_host: '192.168.20.20' - vm_name: 'mailsrv' - -- name: Print Proxmox backup information for a specific VM based on its VM ID - community.general.proxmox_backup_info: - api_user: 'myUser@pam' - api_password: '*******' - api_host: '192.168.20.20' - vm_id: '150' - -- name: Print Proxmox all backup job information - community.general.proxmox_backup_info: - api_user: 'myUser@pam' - api_password: '*******' - api_host: '192.168.20.20' - backup_jobs: true -""" - -RETURN = """ ---- -backup_info: - description: The return value provides backup job information based on VM ID or VM name, or total backup job information. - returned: on success, but can be empty - type: list - elements: dict - contains: - bktype: - description: The type of the backup. - returned: on success - type: str - sample: vzdump - enabled: - description: V(1) if backup is enabled else V(0). - returned: on success - type: int - sample: 1 - id: - description: The backup job ID. - returned: on success - type: str - sample: backup-83831498-c631 - mode: - description: The backup job mode such as snapshot. - returned: on success - type: str - sample: snapshot - next-run: - description: The next backup time. - returned: on success - type: str - sample: "2024-12-28 11:30:00" - schedule: - description: The backup job schedule. - returned: on success - type: str - sample: "sat 15:00" - storage: - description: The backup storage location. - returned: on success - type: str - sample: local - vm_name: - description: The VM name. - returned: on success - type: str - sample: test01 - vmid: - description: The VM ID. - returned: on success - type: str - sample: "100" -""" - -from datetime import datetime -from ansible.module_utils.basic import AnsibleModule, missing_required_lib -from ansible_collections.community.general.plugins.module_utils.proxmox import ( - proxmox_auth_argument_spec, ProxmoxAnsible, HAS_PROXMOXER, PROXMOXER_IMP_ERR) - - -class ProxmoxBackupInfoAnsible(ProxmoxAnsible): - - # Get all backup information - def get_jobs_list(self): - try: - backupJobs = self.proxmox_api.cluster.backup.get() - except Exception as e: - self.module.fail_json(msg="Getting backup jobs failed: %s" % e) - return backupJobs - - # Get VM information - def get_vms_list(self): - try: - vms = self.proxmox_api.cluster.resources.get(type='vm') - except Exception as e: - self.module.fail_json(msg="Getting VMs info from cluster failed: %s" % e) - return vms - - # Get all backup information by VM ID and VM name - def vms_backup_info(self): - backupList = self.get_jobs_list() - vmInfo = self.get_vms_list() - bkInfo = [] - for backupItem in backupList: - nextrun = datetime.fromtimestamp(backupItem['next-run']) - vmids = backupItem['vmid'].split(',') - for vmid in vmids: - for vm in vmInfo: - if vm['vmid'] == int(vmid): - vmName = vm['name'] - break - bkInfoData = {'id': backupItem['id'], - 'schedule': backupItem['schedule'], - 'storage': backupItem['storage'], - 'mode': backupItem['mode'], - 'next-run': nextrun.strftime("%Y-%m-%d %H:%M:%S"), - 'enabled': backupItem['enabled'], - 'bktype': backupItem['type'], - 'vmid': vmid, - 'vm_name': vmName} - bkInfo.append(bkInfoData) - return bkInfo - - # Get proxmox backup information for a specific VM based on its VM ID or VM name - def specific_vmbackup_info(self, vm_name_id): - fullBackupInfo = self.vms_backup_info() - vmBackupJobs = [] - for vm in fullBackupInfo: - if (vm["vm_name"] == vm_name_id or vm["vmid"] == vm_name_id): - vmBackupJobs.append(vm) - return vmBackupJobs - - -def main(): - # Define module args - args = proxmox_auth_argument_spec() - backup_info_args = dict( - vm_id=dict(type='str'), - vm_name=dict(type='str'), - backup_jobs=dict(type='bool', default=False) - ) - args.update(backup_info_args) - - module = AnsibleModule( - argument_spec=args, - mutually_exclusive=[('backup_jobs', 'vm_id', 'vm_name')], - supports_check_mode=True - ) - - # Define (init) result value - result = dict( - changed=False - ) - - # Check if proxmoxer exist - if not HAS_PROXMOXER: - module.fail_json(msg=missing_required_lib('proxmoxer'), exception=PROXMOXER_IMP_ERR) - - # Start to connect to proxmox to get backup data - proxmox = ProxmoxBackupInfoAnsible(module) - vm_id = module.params['vm_id'] - vm_name = module.params['vm_name'] - backup_jobs = module.params['backup_jobs'] - - # Update result value based on what requested (module args) - if backup_jobs: - result['backup_info'] = proxmox.get_jobs_list() - elif vm_id: - result['backup_info'] = proxmox.specific_vmbackup_info(vm_id) - elif vm_name: - result['backup_info'] = proxmox.specific_vmbackup_info(vm_name) - else: - result['backup_info'] = proxmox.vms_backup_info() - - # Return result value - module.exit_json(**result) - - -if __name__ == '__main__': - main()