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

📄 xendnode.py

📁 xen虚拟机源代码安装包
💻 PY
📖 第 1 页 / 共 2 页
字号:
    def is_valid_host(self, host_ref):        return (host_ref == self.uuid)    def is_valid_cpu(self, cpu_ref):        return (cpu_ref in self.cpus)    def is_valid_sr(self, sr_ref):        return (sr_ref in self.srs)    def is_valid_vdi(self, vdi_ref):        for sr in self.srs.values():            if sr.is_valid_vdi(vdi_ref):                return True        return False    #    # Storage Repositories    #    def get_sr(self, sr_uuid):        return self.srs.get(sr_uuid)    def get_sr_by_type(self, sr_type):        return [sr.uuid for sr in self.srs.values() if sr.type == sr_type]    def get_sr_by_name(self, name):        return [sr.uuid for sr in self.srs.values() if sr.name_label == name]    def get_all_sr_uuid(self):        return self.srs.keys()    def get_vdi_by_uuid(self, vdi_uuid):        for sr in self.srs.values():            if sr.is_valid_vdi(vdi_uuid):                return sr.get_vdi_by_uuid(vdi_uuid)        return None    def get_vdi_by_name_label(self, name):        for sr in self.srs.values():            vdi = sr.get_vdi_by_name_label(name)            if vdi:                return vdi        return None    def get_sr_containing_vdi(self, vdi_uuid):        for sr in self.srs.values():            if sr.is_valid_vdi(vdi_uuid):                return sr        return None        #    # Host Functions    #    def xen_version(self):        info = self.xc.xeninfo()        info = {'Xen': '%(xen_major)d.%(xen_minor)d' % info}        # Add xend_config_format        info.update(self.xendinfo_dict())        # Add version info about machine        info.update(self.nodeinfo_dict())        # Add specific xen version info        xeninfo_dict = self.xeninfo_dict()        info.update({            "xen_major":         xeninfo_dict["xen_major"],            "xen_minor":         xeninfo_dict["xen_minor"],            "xen_extra":         xeninfo_dict["xen_extra"],            "cc_compiler":       xeninfo_dict["cc_compiler"],            "cc_compile_by":     xeninfo_dict["cc_compile_by"],            "cc_compile_domain": xeninfo_dict["cc_compile_domain"],            "cc_compile_date":   xeninfo_dict["cc_compile_date"],            "xen_changeset":     xeninfo_dict["xen_changeset"]            })                return info    def get_name(self):        return self.name    def set_name(self, new_name):        self.name = new_name    def get_description(self):        return self.desc    def set_description(self, new_desc):        self.desc = new_desc    def get_uuid(self):        return self.uuid    def get_capabilities(self):        return self.xc.xeninfo()['xen_caps'].split(" ")    #    # Host CPU Functions    #    def get_host_cpu_by_uuid(self, host_cpu_uuid):        if host_cpu_uuid in self.cpus:            return host_cpu_uuid        raise XendError('Invalid CPU UUID')    def get_host_cpu_refs(self):        return self.cpus.keys()    def get_host_cpu_uuid(self, host_cpu_ref):        if host_cpu_ref in self.cpus:            return host_cpu_ref        else:            raise XendError('Invalid CPU Reference')    def get_host_cpu_field(self, ref, field):        try:            return self.cpus[ref][field]        except KeyError:            raise XendError('Invalid CPU Reference')    def get_host_cpu_load(self, host_cpu_ref):        host_cpu = self.cpus.get(host_cpu_ref)        if not host_cpu:            return 0.0        vcpu = int(host_cpu['number'])        cpu_loads = self.monitor.get_domain_vcpus_util()        if 0 in cpu_loads and vcpu in cpu_loads[0]:            return cpu_loads[0][vcpu]        return 0.0    def get_vcpus_policy(self):        sched_id = self.xc.sched_id_get()        if sched_id == xen.lowlevel.xc.XEN_SCHEDULER_SEDF:            return 'sedf'        elif sched_id == xen.lowlevel.xc.XEN_SCHEDULER_CREDIT:            return 'credit'        else:            return 'unknown'    def get_cpu_configuration(self):        phys_info = self.physinfo_dict()        cpu_info = {            "nr_nodes":         phys_info["nr_nodes"],            "nr_cpus":          phys_info["nr_cpus"],            "cores_per_socket": phys_info["cores_per_socket"],            "threads_per_core": phys_info["threads_per_core"]            }        return cpu_info        #    # Network Functions    #        def bridge_to_network(self, bridge):        """        Determine which network a particular bridge is attached to.        @param bridge The name of the bridge.  If empty, the default bridge        will be used instead (the first one in the list returned by brctl        show); this is the behaviour of the vif-bridge script.        @return The XendNetwork instance to which this bridge is attached.        @raise Exception if the interface is not connected to a network.        """        if not bridge:            rc, bridge = commands.getstatusoutput(                'brctl show | cut -d "\n" -f 2 | cut -f 1')            if rc != 0 or not bridge:                raise Exception(                    'Could not find default bridge, and none was specified')        for network_uuid in XendNetwork.get_all():            network = XendAPIStore.get(network_uuid, "network")            if network.get_name_label() == bridge:                return network        else:            raise Exception('Cannot find network for bridge %s' % bridge)    #    # Debug keys.    #    def send_debug_keys(self, keys):        return self.xc.send_debug_keys(keys)    #    # Getting host information.    #    def info(self):        return (self.nodeinfo() + self.physinfo() + self.xeninfo() +                self.xendinfo())    def nodeinfo(self):        (sys, host, rel, ver, mch) = os.uname()        return [['system',  sys],                ['host',    host],                ['release', rel],                ['version', ver],                ['machine', mch]]    def list_to_rangepairs(self,cmap):            cmap.sort()            pairs = []            x = y = 0            for i in range(0,len(cmap)):                try:                    if ((cmap[y+1] - cmap[i]) > 1):                        pairs.append((cmap[x],cmap[y]))                        x = y = i+1                    else:                        y = y + 1                # if we go off the end, then just add x to y                except IndexError:                    pairs.append((cmap[x],cmap[y]))            return pairs    def format_pairs(self,pairs):            if not pairs:                return "no cpus"            out = ""            for f,s in pairs:                if (f==s):                    out += '%d'%f                else:                    out += '%d-%d'%(f,s)                out += ','            # trim trailing ','            return out[:-1]    def list_to_strrange(self,list):        return self.format_pairs(self.list_to_rangepairs(list))    def format_node_to_cpu(self, pinfo):        str=''        whitespace=''        try:            node_to_cpu=pinfo['node_to_cpu']            for i in range(0, pinfo['nr_nodes']):                str+='%snode%d:%s\n' % (whitespace,                                        i,                                       self.list_to_strrange(node_to_cpu[i]))                whitespace='%25s' % ''                except:            str='none\n'        return str[:-1];    def format_node_to_memory(self, pinfo):        str=''        whitespace=''        try:            node_to_memory=pinfo['node_to_memory']            for i in range(0, pinfo['nr_nodes']):                str+='%snode%d:%d\n' % (whitespace,                                        i,                                        node_to_memory[i] / 1024)                whitespace='%25s' % ''        except:            str='none\n'        return str[:-1];    def physinfo(self):        info = self.xc.physinfo()        info['cpu_mhz'] = info['cpu_khz'] / 1000                # physinfo is in KiB, need it in MiB        info['total_memory'] = info['total_memory'] / 1024        info['free_memory']  = info['free_memory'] / 1024        info['node_to_cpu']  = self.format_node_to_cpu(info)        info['node_to_memory'] = self.format_node_to_memory(info)        ITEM_ORDER = ['nr_cpus',                      'nr_nodes',                      'cores_per_socket',                      'threads_per_core',                      'cpu_mhz',                      'hw_caps',                      'virt_caps',                      'total_memory',                      'free_memory',                      'node_to_cpu',                      'node_to_memory'                      ]        return [[k, info[k]] for k in ITEM_ORDER]    def xenschedinfo(self):        sched_id = self.xc.sched_id_get()        if sched_id == xen.lowlevel.xc.XEN_SCHEDULER_SEDF:            return 'sedf'        elif sched_id == xen.lowlevel.xc.XEN_SCHEDULER_CREDIT:            return 'credit'        else:            return 'unknown'    def xeninfo(self):        info = self.xc.xeninfo()        info['xen_scheduler'] = self.xenschedinfo()        ITEM_ORDER = ['xen_major',                      'xen_minor',                      'xen_extra',                      'xen_caps',                      'xen_scheduler',                      'xen_pagesize',                      'platform_params',                      'xen_changeset',                      'cc_compiler',                      'cc_compile_by',                      'cc_compile_domain',                      'cc_compile_date',                      ]        return [[k, info[k]] for k in ITEM_ORDER]    def xendinfo(self):        return [['xend_config_format', 4]]    #    # utilisation tracking    #    def get_vcpu_util(self, domid, vcpuid):        cpu_loads = self.monitor.get_domain_vcpus_util()        if domid in cpu_loads:            return cpu_loads[domid].get(vcpuid, 0.0)        return 0.0    def get_vif_util(self, domid, vifid):        vif_loads = self.monitor.get_domain_vifs_util()        if domid in vif_loads:            return vif_loads[domid].get(vifid, (0.0, 0.0))        return (0.0, 0.0)    def get_vif_stat(self, domid, vifid):        vif_loads = self.monitor.get_domain_vifs_stat()        if domid in vif_loads:            return vif_loads[domid].get(vifid, (0.0, 0.0))        return (0.0, 0.0)    def get_vbd_util(self, domid, vbdid):        vbd_loads = self.monitor.get_domain_vbds_util()        if domid in vbd_loads:            return vbd_loads[domid].get(vbdid, (0.0, 0.0))        return (0.0, 0.0)    # dictionary version of *info() functions to get rid of    # SXPisms.    def nodeinfo_dict(self):        return dict(self.nodeinfo())    def xendinfo_dict(self):        return dict(self.xendinfo())    def xeninfo_dict(self):        return dict(self.xeninfo())    def physinfo_dict(self):        return dict(self.physinfo())    def info_dict(self):        return dict(self.info())def instance():    global inst    try:        inst    except:        inst = XendNode()        inst.save()    return inst

⌨️ 快捷键说明

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