⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xenddomain.py

📁 xen虚拟机源代码安装包
💻 PY
📖 第 1 页 / 共 5 页
字号:
        self.domains_lock.acquire()        try:            for dom in self.domains.values() + self.managed_domains.values():                if dom.has_device(klass, dev_uuid):                    return dom            return None        finally:            self.domains_lock.release()    def get_dev_property_by_uuid(self, klass, dev_uuid, field):        value = None        self.domains_lock.acquire()        try:            try:                dom = self.get_vm_with_dev_uuid(klass, dev_uuid)                if dom:                    value = dom.get_dev_property(klass, dev_uuid, field)            except ValueError, e:                pass        finally:            self.domains_lock.release()                return value    def set_dev_property_by_uuid(self, klass, dev_uuid, field, value,                                 old_val = None):        rc = True        self.domains_lock.acquire()        try:            try:                dom = self.get_vm_with_dev_uuid(klass, dev_uuid)                if dom:                    o_val = dom.get_dev_property(klass, dev_uuid, field)                    log.info("o_val=%s, old_val=%s" % (o_val, old_val))                    if old_val and old_val != o_val:                        return False                    dom.set_dev_property(klass, dev_uuid, field, value)                    self.managed_config_save(dom)            except ValueError, e:                pass        finally:            self.domains_lock.release()        return rc    def is_valid_vm(self, vm_ref):        return (self.get_vm_by_uuid(vm_ref) != None)    def is_valid_dev(self, klass, dev_uuid):        return (self.get_vm_with_dev_uuid(klass, dev_uuid) != None)    def do_legacy_api_with_uuid(self, fn, vm_uuid, *args, **kwargs):        dom = self.uuid_to_dom(vm_uuid)        fn(dom, *args, **kwargs)    def uuid_to_dom(self, vm_uuid):        self.domains_lock.acquire()        try:            for domid, dom in self.domains.items():                if dom.get_uuid() == vm_uuid:                    return domid                                if vm_uuid in self.managed_domains:                domid = self.managed_domains[vm_uuid].getDomid()                if domid is None:                    return self.managed_domains[vm_uuid].getName()                else:                    return domid                        raise XendInvalidDomain(vm_uuid)        finally:            self.domains_lock.release()            def create_domain(self, xenapi_vm):        self.domains_lock.acquire()        try:            try:                xeninfo = XendConfig.XendConfig(xapi = xenapi_vm)                dominfo = XendDomainInfo.createDormant(xeninfo)                log.debug("Creating new managed domain: %s: %s" %                          (dominfo.getName(), dominfo.get_uuid()))                self._managed_domain_register(dominfo)                self.managed_config_save(dominfo)                return dominfo.get_uuid()            except XendError, e:                raise            except Exception, e:                raise XendError(str(e))        finally:            self.domains_lock.release()            def rename_domain(self, dom, new_name):        self.domains_lock.acquire()        try:            old_name = dom.getName()            dom.setName(new_name)        finally:            self.domains_lock.release()                        #    # End of Xen API     # ----------------------------------------------------------------    # ------------------------------------------------------------    # Xen Legacy API         def list(self, state = DOM_STATE_RUNNING):        """Get list of domain objects.        @param: the state in which the VMs should be -- one of the        DOM_STATE_XYZ constants, or the corresponding name, or 'all'.        @return: domains        @rtype: list of XendDomainInfo        """        if type(state) == int:            state = POWER_STATE_NAMES[state]        state = state.lower()                self.domains_lock.acquire()        try:            self._refresh(refresh_shutdown = False)                        # active domains            active_domains = self.domains.values()            active_uuids = [d.get_uuid() for d in active_domains]            # inactive domains            inactive_domains = []            for dom_uuid, dom in self.managed_domains.items():                if dom_uuid not in active_uuids:                    inactive_domains.append(dom)            if state == POWER_STATE_ALL:                return active_domains + inactive_domains            else:                return filter(lambda x:                                  POWER_STATE_NAMES[x._stateGet()].lower() == state,                              active_domains + inactive_domains)        finally:            self.domains_lock.release()    def list_sorted(self, state = DOM_STATE_RUNNING):        """Get list of domain objects, sorted by name.        @param: the state in which the VMs should be -- one of the        DOM_STATE_XYZ constants, or the corresponding name, or 'all'.        @return: domain objects        @rtype: list of XendDomainInfo        """        doms = self.list(state)        doms.sort(lambda x, y: cmp(x.getName(), y.getName()))        return doms    def list_names(self, state = DOM_STATE_RUNNING):        """Get list of domain names.        @param: the state in which the VMs should be -- one of the        DOM_STATE_XYZ constants, or the corresponding name, or 'all'.        @return: domain names        @rtype: list of strings.        """        return [d.getName() for d in self.list_sorted(state)]    def domain_suspend(self, domname):        """Suspends a domain that is persistently managed by Xend        @param domname: Domain Name        @type domname: string        @rtype: None        @raise XendError: Failure during checkpointing.        """        try:            dominfo = self.domain_lookup_nr(domname)            if not dominfo:                raise XendInvalidDomain(domname)            if dominfo.getDomid() == DOM0_ID:                raise XendError("Cannot suspend privileged domain %s" % domname)            if dominfo._stateGet() != DOM_STATE_RUNNING:                raise VMBadState("Domain is not running",                                 POWER_STATE_NAMES[DOM_STATE_RUNNING],                                 POWER_STATE_NAMES[dominfo._stateGet()])            dom_uuid = dominfo.get_uuid()            if not os.path.exists(self._managed_config_path(dom_uuid)):                raise XendError("Domain is not managed by Xend lifecycle " +                                "support.")            path = self._managed_check_point_path(dom_uuid)            oflags = os.O_WRONLY | os.O_CREAT | os.O_TRUNC            if hasattr(os, "O_LARGEFILE"):                oflags |= os.O_LARGEFILE            fd = os.open(path, oflags)            try:                # For now we don't support 'live checkpoint'                 XendCheckpoint.save(fd, dominfo, False, False, path)            finally:                os.close(fd)        except OSError, ex:            raise XendError("can't write guest state file %s: %s" %                            (path, ex[1]))    def domain_resume(self, domname, start_paused = False):        """Resumes a domain that is persistently managed by Xend.        @param domname: Domain Name        @type domname: string        @rtype: None        @raise XendError: If failed to restore.        """        self.domains_lock.acquire()        try:            try:                fd = None                dominfo = self.domain_lookup_nr(domname)                if not dominfo:                    raise XendInvalidDomain(domname)                if dominfo.getDomid() == DOM0_ID:                    raise XendError("Cannot resume privileged domain %s" % domname)                if dominfo._stateGet() != XEN_API_VM_POWER_STATE_SUSPENDED:                    raise XendError("Cannot resume domain that is not suspended.")                dominfo.setResume(True)                dom_uuid = dominfo.get_uuid()                chkpath = self._managed_check_point_path(dom_uuid)                if not os.path.exists(chkpath):                    raise XendError("Domain was not suspended by Xend")                # Restore that replaces the existing XendDomainInfo                try:                    log.debug('Current DomainInfo state: %d' % dominfo._stateGet())                    oflags = os.O_RDONLY                    if hasattr(os, "O_LARGEFILE"):                        oflags |= os.O_LARGEFILE                    fd = os.open(chkpath, oflags)                    XendCheckpoint.restore(self,                                           fd,                                           dominfo,                                           paused = start_paused)                    os.unlink(chkpath)                except OSError, ex:                    raise XendError("Failed to read stored checkpoint file")                except IOError, ex:                    raise XendError("Failed to delete checkpoint file")            except Exception, ex:                log.exception("Exception occurred when resuming")                raise XendError("Error occurred when resuming: %s" % str(ex))        finally:            if fd is not None:                os.close(fd)            self.domains_lock.release()    def domain_create(self, config):        """Create a domain from a configuration.        @param config: configuration        @type config: SXP Object (list of lists)        @rtype: XendDomainInfo        """        self.domains_lock.acquire()        try:            self._refresh()            dominfo = XendDomainInfo.create(config)            return dominfo        finally:            self.domains_lock.release()    def domain_create_from_dict(self, config_dict):        """Create a domain from a configuration dictionary.        @param config_dict: configuration        @rtype: XendDomainInfo        """        self.domains_lock.acquire()        try:            self._refresh()            dominfo = XendDomainInfo.create_from_dict(config_dict)            return dominfo        finally:            self.domains_lock.release()    def domain_new(self, config):        """Create a domain from a configuration but do not start it.                @param config: configuration        @type config: SXP Object (list of lists)        @rtype: XendDomainInfo        """        self.domains_lock.acquire()        try:            try:                domconfig = XendConfig.XendConfig(sxp_obj = config)                dominfo = XendDomainInfo.createDormant(domconfig)                log.debug("Creating new managed domain: %s" %                          dominfo.getName())                self._managed_domain_register(dominfo)                self.managed_config_save(dominfo)                # no return value because it isn't meaningful for client            except XendError, e:                raise            except Exception, e:                raise XendError(str(e))        finally:            self.domains_lock.release()    def domain_start(self, domid, start_paused = True):        """Start a managed domain        @require: Domain must not be running.        @param domid: Domain name or domain ID.        @type domid: string or int        @rtype: None        @raise XendError: If domain is still running        @rtype: None        """        self.domains_lock.acquire()        try:            self._refresh()            dominfo = self.domain_lookup_nr(domid)            if not dominfo:                raise XendInvalidDomain(str(domid))            if dominfo._stateGet() != DOM_STATE_HALTED:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -