def clean_all(name, master, username, password, excluded_vms=None): master_url = "https://" + master session = XenAPI.Session(master_url, ignore_ssl=True) try: session.xenapi.login_with_password(username, password) except (CannotSendRequest, XenAPI.Failure) as e: logger.error("Error logging in Xen host") raise e else: try: logger.info("Cleaning backup snapshots in pool %s", name) xapi = session.xenapi session_id = session.handle vms, _ = get_vms_to_backup(xapi, master_url, session_id, excluded_vms) for vm in vms: for snap in vm.get_backup_snapshots(): snap.destroy() logger.info("Cleaning backup snapshots in pool %s completed", name) finally: try: session.xenapi.session.logout() except (CannotSendRequest, XenAPI.Failure): logger.error("Xen logout failed")
def test_get_vms_to_backup_excluded_vms(self): vm_ref = get_by_uuid(self.xapi.VM, self.test_vm_uuid) vms, _ = get_vms_to_backup(self.xapi, self.master_url, self.session_id, excluded_vms=[self.test_vm_uuid]) vm_refs = [vm.ref for vm in vms] self.assertNotIn(vm_ref, vm_refs)
def test_get_vms_to_backup_uuid(self): vm_ref = get_by_uuid(self.xapi.VM, self.test_vm_uuid) vms, n_vms = get_vms_to_backup(self.xapi, self.master_url, self.session_id, vm_uuid_list=[self.test_vm_uuid]) self.assertEqual( n_vms, 1, "get_vms_to_backup fetched {} VMS instead of 1 VM".format(n_vms)) self.assertEqual(vm_ref, next(vms).ref, "Fetched wrong VM to backup")
def do_backup(name, master, username, password, delta, backup_new_snap=True, excluded_vms=None, vm_uuid_list=None, base_folder=".", backups_to_retain=1): return_status = {} master_url = "https://" + master session = XenAPI.Session(master_url, ignore_ssl=True) try: session.xenapi.login_with_password(username, password) except (CannotSendRequest, XenAPI.Failure) as e: logger.exception("Error logging in Xen host") return_status["error"] = e.details else: try: xapi = session.xenapi session_id = session.handle pool = XenPool(xapi) vms, num_vms = get_vms_to_backup( xapi, master_url, session_id, excluded_vms=excluded_vms, vm_uuid_list=vm_uuid_list) logger.info("Backing up %d VMs in pool %s", num_vms, pool.get_label()) return_status["failed_vms"] = {} for v, vm in enumerate(vms): if delta: vm.backup_delta(return_status["failed_vms"], base_folder, v, num_vms) vm.clean_delta_backups(base_folder, backups_to_retain) else: vm.backup(return_status["failed_vms"], base_folder, v, num_vms, backup_new_snap) vm.clean_backups(base_folder, backups_to_retain) if len(return_status["failed_vms"]) == 0: logger.info("Backup of %d VMs in pool %s completed", num_vms, pool.get_label()) else: logger.error("Backup of %d VMs in pool %s completed with errors:", num_vms, pool.get_label()) for vm_error in return_status["failed_vms"].values(): logger.error(vm_error) except (IOError, XenAPI.Failure) as e: return_status["error"] = str(e) logger.warning("Backup of pool %s aborted. Error: %s", name, str(e)) except SystemExit: logger.warning("Backup of pool %s aborted on external request", name) finally: try: session.xenapi.session.logout() except (CannotSendRequest, XenAPI.Failure) as e: logger.error("Xen logout failed: %s", str(e)) return return_status
def test_get_vms_to_backup_all(self): vms, _ = get_vms_to_backup(self.xapi, self.master_url, self.session_id) all_vm_refs = get_all_vm_refs(self.xapi) for vm in vms: self.assertIn(vm.ref, all_vm_refs)