示例#1
0
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")
示例#2
0
 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)
示例#3
0
 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")
示例#4
0
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
示例#5
0
 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)