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

📄 main.py

📁 xen 3.2.2 源码
💻 PY
📖 第 1 页 / 共 5 页
字号:
    if show_vcpus:        print >>sys.stderr, (            "xm list -v is deprecated.  Please use xm vcpu-list.")        xm_vcpu_list(params)        return    doms = getDomains(params, state, use_long)    if use_long:        map(PrettyPrint.prettyprint, doms)    elif show_labels:        xm_label_list(doms)    else:        xm_brief_list(doms)def parse_doms_info(info):    def get_info(n, t, d):        return t(sxp.child_value(info, n, d))    def get_status(n, t, d):        return DOM_STATES[t(sxp.child_value(info, n, d))]    start_time = get_info('start_time', float, -1)    if start_time == -1:        up_time = float(-1)    else:        up_time = time.time() - start_time    parsed_info = {        'domid'    : get_info('domid',              str,   ''),        'name'     : get_info('name',               str,   '??'),        'state'    : get_info('state',              str,   ''),        # VCPUs is the number online when the VM is up, or the number        # configured otherwise.        'vcpus'    : get_info('online_vcpus', int,                              get_info('vcpus', int, 0)),        'up_time'  : up_time        }    security_label = get_info('security_label', str, '')    parsed_info['seclabel'] = security.parse_security_label(security_label)    if serverType == SERVER_XEN_API:        parsed_info['mem'] = get_info('memory_actual', int, 0) / 1024        cpu_times = get_info('cpu_time', lambda x : (x), 0.0)        if sum(cpu_times.values()) > 0:            parsed_info['cpu_time'] = sum(cpu_times.values()) / float(len(cpu_times.values()))        else:            parsed_info['cpu_time'] = 0    else:        parsed_info['mem'] = get_info('memory', int,0)        parsed_info['cpu_time'] = get_info('cpu_time', float, 0.0)    return parsed_infodef check_sched_type(sched):    if serverType == SERVER_XEN_API:        current = server.xenapi.host.get_sched_policy(            server.xenapi.session.get_this_host(server.getSession()))    else:        current = 'unknown'        for x in server.xend.node.info()[1:]:            if len(x) > 1 and x[0] == 'xen_scheduler':                current = x[1]                break    if sched != current:        err("Xen is running with the %s scheduler" % current)        sys.exit(1)def parse_sedf_info(info):    def get_info(n, t, d):        return t(sxp.child_value(info, n, d))    return {        'domid'    : get_info('domid',         int,   -1),        'period'   : get_info('period',        int,   -1),        'slice'    : get_info('slice',         int,   -1),        'latency'  : get_info('latency',       int,   -1),        'extratime': get_info('extratime',     int,   -1),        'weight'   : get_info('weight',        int,   -1),        }def domid_match(domid, info):    return domid is None or domid == info['name'] or \           domid == str(info['domid'])def xm_brief_list(doms):    print '%-40s %5s %5s %5s %10s %9s' % \          ('Name', 'ID', 'Mem', 'VCPUs', 'State', 'Time(s)')        format = "%(name)-40s %(domid)5s %(mem)5d %(vcpus)5d %(state)10s " \             "%(cpu_time)8.1f"        for dom in doms:        d = parse_doms_info(dom)        print format % ddef xm_label_list(doms):    print '%-40s %5s %5s %5s %10s %9s %-10s' % \          ('Name', 'ID', 'Mem', 'VCPUs', 'State', 'Time(s)', 'Label')    output = []    format = '%(name)-40s %(domid)5s %(mem)5d %(vcpus)5d %(state)10s ' \             '%(cpu_time)8.1f %(seclabel)10s'    for dom in doms:        d = parse_doms_info(dom)        if d['seclabel'] == "" and serverType != SERVER_XEN_API:            seclab = server.xend.security.get_domain_label(d['name'])            if len(seclab) > 0 and seclab[0] == '\'':                seclab = seclab[1:]            d['seclabel'] = seclab        output.append((format % d, d['seclabel']))            #sort by labels    output.sort(lambda x,y: cmp( x[1].lower(), y[1].lower()))    for line, label in output:        print linedef xm_vcpu_list(args):    if serverType == SERVER_XEN_API:        if args:            vm_refs = map(get_single_vm, args)        else:            vm_refs = server.xenapi.VM.get_all()                    vm_records = dict(map(lambda vm_ref:                                  (vm_ref, server.xenapi.VM.get_record(                                      vm_ref)),                              vm_refs))        vm_metrics = dict(map(lambda (ref, record):                                  (ref,                                   server.xenapi.VM_metrics.get_record(                                       record['metrics'])),                              vm_records.items()))        dominfo = []        # vcpu_list doesn't list 'managed' domains        # when they are not running, so filter them out        vm_refs = [vm_ref                  for vm_ref in vm_refs                  if vm_records[vm_ref]["power_state"] != "Halted"]        for vm_ref in vm_refs:            info = ['domain',                    ['domid',      vm_records[vm_ref]['domid']],                    ['name',       vm_records[vm_ref]['name_label']],                    ['vcpu_count', vm_records[vm_ref]['VCPUs_max']]]            for i in range(int(vm_records[vm_ref]['VCPUs_max'])):                def chk_flag(flag):                    return flag in vm_metrics[vm_ref]['VCPUs_flags'][str(i)] \                           and 1 or 0                                vcpu_info = ['vcpu',                             ['number',                                  i],                             ['online',                                  chk_flag("online")],                             ['blocked',                                  chk_flag("blocked")],                             ['running',                                  chk_flag("running")],                             ['cpu_time',                                  vm_metrics[vm_ref]['VCPUs_utilisation'][str(i)]],                             ['cpu',                                  vm_metrics[vm_ref]['VCPUs_CPU'][str(i)]],                             ['cpumap',                                  vm_metrics[vm_ref]['VCPUs_params']\                                  ['cpumap%i' % i].split(",")]]                                info.append(vcpu_info)            dominfo.append(info)    else:            if args:            dominfo = map(server.xend.domain.getVCPUInfo, args)        else:            doms = server.xend.domains_with_state(False, 'all', False)            dominfo = map(server.xend.domain.getVCPUInfo, doms)    print '%-32s %5s %5s %5s %5s %9s %s' % \          ('Name', 'ID', 'VCPU', 'CPU', 'State', 'Time(s)', 'CPU Affinity')    format = '%(name)-32s %(domid)5s %(number)5d %(c)5s %(s)5s ' \             ' %(cpu_time)8.1f %(cpumap)s'    for dom in dominfo:        def get_info(n):            return sxp.child_value(dom, n)        #        # convert a list of integers into a list of pairs indicating        # continuous sequences in the list:        #        # [0,1,2,3]   -> [(0,3)]        # [1,2,4,5]   -> [(1,2),(4,5)]        # [0]         -> [(0,0)]        # [0,1,4,6,7] -> [(0,1),(4,4),(6,7)]        #        def list_to_rangepairs(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        #        # Convert pairs to range string, e.g: [(1,2),(3,3),(5,7)] -> 1-2,3,5-7        #        def format_pairs(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 format_cpumap(cpumap):            cpumap = map(lambda x: int(x), cpumap)            cpumap.sort()            if serverType == SERVER_XEN_API:                nr_cpus = len(server.xenapi.host.get_host_CPUs(                    server.xenapi.session.get_this_host(server.getSession())))            else:                for x in server.xend.node.info()[1:]:                    if len(x) > 1 and x[0] == 'nr_cpus':                        nr_cpus = int(x[1])            # normalize cpumap by modulus nr_cpus, and drop duplicates            cpumap = dict.fromkeys(                       filter(lambda x: x < nr_cpus, cpumap)).keys()            if len(cpumap) == nr_cpus:                return "any cpu"            return format_pairs(list_to_rangepairs(cpumap))        name  = get_info('name')        domid = get_info('domid')        if domid is not None:            domid = str(domid)        else:            domid = ''        for vcpu in sxp.children(dom, 'vcpu'):            def vinfo(n, t):                return t(sxp.child_value(vcpu, n))            number   = vinfo('number',   int)            cpu      = vinfo('cpu',      int)            cpumap   = format_cpumap(vinfo('cpumap', list))            online   = vinfo('online',   int)            cpu_time = vinfo('cpu_time', float)            running  = vinfo('running',  int)            blocked  = vinfo('blocked',  int)            if cpu < 0:                c = ''                s = ''            elif online:                c = str(cpu)                if running:                    s = 'r'                else:                    s = '-'                if blocked:                    s += 'b'                else:                    s += '-'                s += '-'            else:                c = '-'                s = '--p'            print format % locals()def start_do_console(domain_name):    cpid = os.fork()     if cpid != 0:        for i in range(10):            # Catch failure of the create process             time.sleep(1)            (p, rv) = os.waitpid(cpid, os.WNOHANG)            if os.WIFEXITED(rv):                if os.WEXITSTATUS(rv) != 0:                    sys.exit(os.WEXITSTATUS(rv))            try:                # Acquire the console of the created dom                if serverType == SERVER_XEN_API:                    domid = server.xenapi.VM.get_domid(                               get_single_vm(domain_name))                else:                    dom = server.xend.domain(domain_name)                    domid = int(sxp.child_value(dom, 'domid', '-1'))                console.execConsole(domid)            except:                pass        print("Could not start console\n");        sys.exit(0)def xm_start(args):    paused = False    console_autoconnect = False    try:        (options, params) = getopt.gnu_getopt(args, 'cp', ['console_autoconnect','paused'])        for (k, v) in options:            if k in ('-p', '--paused'):                paused = True            if k in ('-c', '--console_autoconnect'):                console_autoconnect = True        if len(params) != 1:            raise OptionError("Expects 1 argument")    except getopt.GetoptError, opterr:        err(opterr)        usage('start')    dom = params[0]    if console_autoconnect:        start_do_console(dom)    try:        if serverType == SERVER_XEN_API:            server.xenapi.VM.start(get_single_vm(dom), paused)            domid = int(server.xenapi.VM.get_domid(get_single_vm(dom)))        else:            server.xend.domain.start(dom, paused)            info = server.xend.domain(dom)            domid = int(sxp.child_value(info, 'domid', '-1'))    except:        raise            if domid == -1:        raise xmlrpclib.Fault(0, "Domain '%s' is not started" % dom)def xm_delete(args):    arg_check(args, "delete", 1)    dom = args[0]    if serverType == SERVER_XEN_API:        server.xenapi.VM.destroy(get_single_vm(dom))    else:        server.xend.domain.delete(dom)def xm_suspend(args):    arg_check(args, "suspend", 1)    dom = args[0]    if serverType == SERVER_XEN_API:        server.xenapi.VM.suspend(get_single_vm(dom))    else:        server.xend.domain.suspend(dom)def xm_resume(args):    arg_check(args, "resume", 1, 2)    try:        (options, params) = getopt.gnu_getopt(args, 'p', ['paused'])    except getopt.GetoptError, opterr:        err(opterr)        usage('resume')    paused = False    for (k, v) in options:        if k in ['-p', '--paused']:            paused = True    if len(params) != 1:        err("Wrong number of parameters")        usage('resume')    dom = params[0]    if serverType == SERVER_XEN_API:        server.xenapi.VM.resume(get_single_vm(dom), paused)    else:        server.xend.domain.resume(dom, paused)    def xm_reboot(args):    arg_check(args, "reboot", 1, 3)    from xen.xm import shutdown    shutdown.main(["shutdown", "-R"] + args)def xm_shutdown(args):    arg_check(args, "shutdown", 1, 4)    from xen.xm import shutdown    shutdown.main(["shutdown"] + args)def xm_pause(args):    arg_check(args, "pause", 1)    dom = args[0]

⌨️ 快捷键说明

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