📄 main.py
字号:
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_reset(args): arg_check(args, "reset", 1) dom = args[0] if serverType == SERVER_XEN_API: server.xenapi.VM.hard_reboot(get_single_vm(dom)) else: server.xend.domain.reset(dom)def xm_pause(args): arg_check(args, "pause", 1) dom = args[0] if serverType == SERVER_XEN_API: server.xenapi.VM.pause(get_single_vm(dom)) else: server.xend.domain.pause(dom)def xm_unpause(args): arg_check(args, "unpause", 1) dom = args[0] if serverType == SERVER_XEN_API: server.xenapi.VM.unpause(get_single_vm(dom)) else: server.xend.domain.unpause(dom)def xm_dump_core(args): live = False crash = False reset = False try: (options, params) = getopt.gnu_getopt(args, 'LCR', ['live', 'crash', 'reset']) for (k, v) in options: if k in ('-L', '--live'): live = True elif k in ('-C', '--crash'): crash = True elif k in ('-R', '--reset'): reset = True if crash and reset: raise OptionError("You may not specify more than one '-CR' option") if len(params) not in (1, 2): raise OptionError("Expects 1 or 2 argument(s)") except getopt.GetoptError, e: raise OptionError(str(e)) dom = params[0] if len(params) == 2: filename = os.path.abspath(params[1]) else: filename = None if not live: ds = server.xend.domain.pause(dom, True) try: print "Dumping core of domain: %s ..." % str(dom) server.xend.domain.dump(dom, filename, live, crash) if crash: print "Destroying domain: %s ..." % str(dom) server.xend.domain.destroy(dom) elif reset: print "Resetting domain: %s ..." % str(dom) server.xend.domain.reset(dom) finally: if not live and not crash and not reset and ds == DOM_STATE_RUNNING: server.xend.domain.unpause(dom)def xm_rename(args): arg_check(args, "rename", 2) if serverType == SERVER_XEN_API: server.xenapi.VM.set_name_label(get_single_vm(args[0]), args[1]) else: server.xend.domain.setName(args[0], args[1])def xm_importcommand(command, args): cmd = __import__(command, globals(), locals(), 'xen.xm') cmd.main([command] + args)#############################################################def xm_vcpu_pin(args): arg_check(args, "vcpu-pin", 3) def cpu_make_map(cpulist): cpus = [] for c in cpulist.split(','): if c.find('-') != -1: (x,y) = c.split('-') for i in range(int(x),int(y)+1): cpus.append(int(i)) else: # remove this element from the list if c[0] == '^': cpus = [x for x in cpus if x != int(c[1:])] else: cpus.append(int(c)) cpus.sort() return cpus dom = args[0] vcpu = args[1] if args[2] == 'all': cpumap = cpu_make_map('0-63') else: cpumap = cpu_make_map(args[2]) if serverType == SERVER_XEN_API: cpumap = map(str, cpumap) server.xenapi.VM.add_to_VCPUs_params_live( get_single_vm(dom), "cpumap%i" % int(vcpu), ",".join(cpumap)) else: server.xend.domain.pincpu(dom, vcpu, cpumap)def xm_mem_max(args): arg_check(args, "mem-max", 2) dom = args[0] if serverType == SERVER_XEN_API: mem = int_unit(args[1], 'k') * 1024 server.xenapi.VM.set_memory_static_max(get_single_vm(dom), mem) else: mem = int_unit(args[1], 'm') server.xend.domain.maxmem_set(dom, mem) def xm_mem_set(args): arg_check(args, "mem-set", 2) dom = args[0] if serverType == SERVER_XEN_API: mem_target = int_unit(args[1], 'm') * 1024 * 1024 server.xenapi.VM.set_memory_dynamic_max_live(get_single_vm(dom), mem_target) server.xenapi.VM.set_memory_dynamic_min_live(get_single_vm(dom), mem_target) else: mem_target = int_unit(args[1], 'm') server.xend.domain.setMemoryTarget(dom, mem_target) def xm_vcpu_set(args): arg_check(args, "vcpu-set", 2) dom = args[0] vcpus = int(args[1]) if serverType == SERVER_XEN_API: server.xenapi.VM.set_VCPUs_number_live(get_single_vm(dom), vcpus) else: server.xend.domain.setVCpuCount(dom, vcpus)def xm_destroy(args): arg_check(args, "destroy", 1) dom = args[0] if serverType == SERVER_XEN_API: server.xenapi.VM.hard_shutdown(get_single_vm(dom)) else: server.xend.domain.destroy(dom)def xm_domid(args): arg_check(args, "domid", 1) name = args[0] if serverType == SERVER_XEN_API: print server.xenapi.VM.get_domid(get_single_vm(name)) else: dom = server.xend.domain(name) print sxp.child_value(dom, 'domid') def xm_domname(args): arg_check(args, "domname", 1) name = args[0] if serverType == SERVER_XEN_API: print server.xenapi.VM.get_name_label(get_single_vm(name)) else: dom = server.xend.domain(name) print sxp.child_value(dom, 'name')def xm_sched_sedf(args): xenapi_unsupported() def ns_to_ms(val): return float(val) * 0.000001 def ms_to_ns(val): return (float(val) / 0.000001) def print_sedf(info): info['period'] = ns_to_ms(info['period']) info['slice'] = ns_to_ms(info['slice']) info['latency'] = ns_to_ms(info['latency']) print( ("%(name)-32s %(domid)5d %(period)9.1f %(slice)9.1f" + " %(latency)7.1f %(extratime)6d %(weight)6d") % info) check_sched_type('sedf') # we want to just display current info if no parameters are passed if len(args) == 0: domid = None else: # we expect at least a domain id (name or number) # and at most a domid up to 5 options with values arg_check(args, "sched-sedf", 1, 11) domid = args[0] # drop domid from args since get_opt doesn't recognize it args = args[1:] opts = {} try: (options, params) = getopt.gnu_getopt(args, 'p:s:l:e:w:', ['period=', 'slice=', 'latency=', 'extratime=', 'weight=']) except getopt.GetoptError, opterr: err(opterr) usage('sched-sedf') # convert to nanoseconds if needed for (k, v) in options: if k in ['-p', '--period']: opts['period'] = ms_to_ns(v) elif k in ['-s', '--slice']: opts['slice'] = ms_to_ns(v) elif k in ['-l', '--latency']: opts['latency'] = ms_to_ns(v) elif k in ['-e', '--extratime']: opts['extratime'] = v elif k in ['-w', '--weight']: opts['weight'] = v doms = filter(lambda x : domid_match(domid, x), [parse_doms_info(dom) for dom in getDomains(None, 'running')]) if domid is not None and doms == []: err("Domain '%s' does not exist." % domid) usage('sched-sedf') # print header if we aren't setting any parameters if len(opts.keys()) == 0: print '%-33s %4s %-4s %-4s %-7s %-5s %-6s' % \ ('Name','ID','Period(ms)', 'Slice(ms)', 'Lat(ms)', 'Extra','Weight') for d in doms: # fetch current values so as not to clobber them try: sedf_raw = server.xend.domain.cpu_sedf_get(d['domid']) except xmlrpclib.Fault: # domain does not support sched-sedf? sedf_raw = {} sedf_info = parse_sedf_info(sedf_raw) sedf_info['name'] = d['name'] # update values in case of call to set if len(opts.keys()) > 0: for k in opts.keys(): sedf_info[k]=opts[k] # send the update, converting user input v = map(int, [sedf_info['period'], sedf_info['slice'], sedf_info['latency'],sedf_info['extratime'], sedf_info['weight']]) rv = server.xend.domain.cpu_sedf_set(d['domid'], *v) if int(rv) != 0: err("Failed to set sedf parameters (rv=%d)."%(rv)) # not setting values, display info else: print_sedf(sedf_info)def xm_sched_credit(args): """Get/Set options for Credit Scheduler.""" check_sched_type('credit') try: opts, params = getopt.getopt(args, "d:w:c:", ["domain=", "weight=", "cap="]) except getopt.GetoptError, opterr: err(opterr) usage('sched-credit') domid = None weight = None cap = None for o, a in opts: if o in ["-d", "--domain"]: domid = a elif o in ["-w", "--weight"]: weight = int(a) elif o in ["-c", "--cap"]: cap = int(a); doms = filter(lambda x : domid_match(domid, x), [parse_doms_info(dom) for dom in getDomains(None, 'all')]) if weight is None and cap is None: if domid is not None and doms == []: err("Domain '%s' does not exist." % domid) usage('sched-credit') # print header if we aren't setting any parameters print '%-33s %4s %6s %4s' % ('Name','ID','Weight','Cap') for d in doms: try: if serverType == SERVER_XEN_API: info = server.xenapi.VM_metrics.get_VCPUs_params( server.xenapi.VM.get_metrics( get_single_vm(d['name']))) else: info = server.xend.domain.sched_credit_get(d['name']) except xmlrpclib.Fault: pass if 'weight' not in info or 'cap' not in info: # domain does not support sched-credit? info = {'weight': -1, 'cap': -1} info['weight'] = int(info['weight']) info['cap'] = int(info['cap']) info['name'] = d['name'] info['domid'] = str(d['domid']) print( ("%(name)-32s %(domid)5s %(weight)6d %(cap)4d") % info) else: if domid is None: # place holder for system-wide scheduler parameters err("No domain given.") usage('sched-credit') if serverType == SERVER_XEN_API: if doms[0]['domid']: server.xenapi.VM.add_to_VCPUs_params_live( get_single_vm(domid), "weight", weight) server.xenapi.VM.add_to_VCPUs_params_live( get_single_vm(domid), "cap", cap) else: server.xenapi.VM.add_to_VCPUs_params( get_single_vm(domid), "weight", weight) server.xenapi.VM.add_to_VCPUs_params( get_single_vm(domid), "cap",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -