📄 main.py
字号:
cap) else: result = server.xend.domain.sched_credit_set(domid, weight, cap) if result != 0: err(str(result))def xm_info(args): arg_check(args, "info", 0, 1) try: (options, params) = getopt.gnu_getopt(args, 'c', ['config']) except getopt.GetoptError, opterr: err(opterr) usage('info') show_xend_config = 0 for (k, v) in options: if k in ['-c', '--config']: show_xend_config = 1 if show_xend_config: for name, obj in inspect.getmembers(xoptions): if not inspect.ismethod(obj): if name == "config": for x in obj[1:]: if len(x) < 2: print "%-38s: (none)" % x[0] else: print "%-38s:" % x[0], x[1] else: print "%-38s:" % name, obj return if serverType == SERVER_XEN_API: # Need to fake out old style xm info as people rely on parsing it host_record = server.xenapi.host.get_record( server.xenapi.session.get_this_host(server.getSession())) host_cpu_records = map(server.xenapi.host_cpu.get_record, host_record["host_CPUs"]) host_metrics_record = server.xenapi.host_metrics.get_record(host_record["metrics"]) def getVal(keys, default=""): data = host_record for key in keys: if key in data: data = data[key] else: return default return data def getCpuMhz(): cpu_speeds = [int(host_cpu_record["speed"]) for host_cpu_record in host_cpu_records if "speed" in host_cpu_record] if len(cpu_speeds) > 0: return sum(cpu_speeds) / len(cpu_speeds) else: return 0 getCpuMhz() def getCpuFeatures(): if len(host_cpu_records) > 0: return host_cpu_records[0].get("features", "") else: return "" info = { "host": getVal(["name_label"]), "release": getVal(["software_version", "release"]), "version": getVal(["software_version", "version"]), "machine": getVal(["software_version", "machine"]), "nr_cpus": getVal(["cpu_configuration", "nr_cpus"]), "nr_nodes": getVal(["cpu_configuration", "nr_nodes"]), "cores_per_socket": getVal(["cpu_configuration", "cores_per_socket"]), "threads_per_core": getVal(["cpu_configuration", "threads_per_core"]), "cpu_mhz": getCpuMhz(), "hw_caps": getCpuFeatures(), "total_memory": int(host_metrics_record["memory_total"])/1024/1024, "free_memory": int(host_metrics_record["memory_free"])/1024/1024, "xen_major": getVal(["software_version", "xen_major"]), "xen_minor": getVal(["software_version", "xen_minor"]), "xen_extra": getVal(["software_version", "xen_extra"]), "xen_caps": " ".join(getVal(["capabilities"], [])), "xen_scheduler": getVal(["sched_policy"]), "xen_pagesize": getVal(["other_config", "xen_pagesize"]), "platform_params": getVal(["other_config", "platform_params"]), "xen_changeset": getVal(["software_version", "xen_changeset"]), "cc_compiler": getVal(["software_version", "cc_compiler"]), "cc_compile_by": getVal(["software_version", "cc_compile_by"]), "cc_compile_domain": getVal(["software_version", "cc_compile_domain"]), "cc_compile_date": getVal(["software_version", "cc_compile_date"]), "xend_config_format":getVal(["software_version", "xend_config_format"]) } sorted = info.items() sorted.sort(lambda (x1,y1), (x2,y2): -cmp(x1,x2)) for (k, v) in sorted: print "%-23s:" % k, v else: info = server.xend.node.info() for x in info[1:]: if len(x) < 2: print "%-23s: (none)" % x[0] else: print "%-23s:" % x[0], x[1]def xm_console(args): arg_check(args, "console", 1, 2) quiet = False; try: (options, params) = getopt.gnu_getopt(args, 'q', ['quiet']) except getopt.GetoptError, opterr: err(opterr) usage('console') for (k, v) in options: if k in ['-q', '--quiet']: quiet = True else: assert False if len(params) != 1: err('No domain given') usage('console') dom = params[0] try: if serverType == SERVER_XEN_API: domid = int(server.xenapi.VM.get_domid(get_single_vm(dom))) else: info = server.xend.domain(dom) domid = int(sxp.child_value(info, 'domid', '-1')) except: if quiet: sys.exit(1) else: raise if domid == -1: if quiet: sys.exit(1) else: raise xmlrpclib.Fault(0, "Domain '%s' is not started" % dom) console.execConsole(domid)def domain_name_to_domid(domain_name): 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')) return domiddef xm_vncviewer(args): autopass = False; try: (options, params) = getopt.gnu_getopt(args, '', ['autopass','vncviewer-autopass']) except getopt.GetoptError, opterr: err(opterr) usage('vncviewer') for (k, v) in options: if k in ['--autopass','--vncviewer-autopass']: autopass = True else: assert False if len(params) != 1: err('No domain given (or several parameters specified)') usage('vncviewer') dom = params[0] domid = domain_name_to_domid(dom) console.runVncViewer(domid, autopass)def xm_uptime(args): short_mode = 0 try: (options, params) = getopt.gnu_getopt(args, 's', ['short']) except getopt.GetoptError, opterr: err(opterr) usage('uptime') for (k, v) in options: if k in ['-s', '--short']: short_mode = 1 doms = getDomains(params, 'all') if short_mode == 0: print '%-33s %4s %s ' % ('Name','ID','Uptime') for dom in doms: d = parse_doms_info(dom) if d['domid'] == '': uptime = 0 elif int(d['domid']) > 0: uptime = int(round(d['up_time'])) else: f=open('/proc/uptime', 'r') upfile = f.read() uptime = int(round(float(upfile.split(' ')[0]))) f.close() days = int(uptime / 86400) uptime -= (days * 86400) hours = int(uptime / 3600) uptime -= (hours * 3600) minutes = int(uptime / 60) uptime -= (minutes * 60) seconds = uptime upstring = "" if days > 0: upstring += str(days) + " day" if days > 1: upstring += "s" upstring += ", " upstring += '%(hours)2d:%(minutes)02d' % vars() if short_mode: now = datetime.datetime.now() upstring = now.strftime(" %H:%M:%S") + " up " + upstring upstring += ", " + d['name'] + " (" + d['domid'] + ")" else: upstring += ':%(seconds)02d' % vars() upstring = ("%(name)-32s %(domid)5s " % d) + upstring print upstringdef xm_sysrq(args): arg_check(args, "sysrq", 2) dom = args[0] req = args[1] if serverType == SERVER_XEN_API: server.xenapi.VM.send_sysrq(get_single_vm(dom), req) else: server.xend.domain.send_sysrq(dom, req)def xm_trigger(args): vcpu = 0 arg_check(args, "trigger", 2, 3) dom = args[0] trigger = args[1] if len(args) == 3: vcpu = int(args[2]) if serverType == SERVER_XEN_API: server.xenapi.VM.send_trigger(get_single_vm(dom), trigger, vcpu) else: server.xend.domain.send_trigger(dom, trigger, vcpu)def xm_debug_keys(args): arg_check(args, "debug-keys", 1) keys = str(args[0]) if serverType == SERVER_XEN_API: server.xenapi.host.send_debug_keys( server.xenapi.session.get_this_host(server.getSession()), keys) else: server.xend.node.send_debug_keys(keys)def xm_top(args): arg_check(args, "top", 0) os.system('xentop')def xm_dmesg(args): arg_check(args, "dmesg", 0, 1) try: (options, params) = getopt.gnu_getopt(args, 'c', ['clear']) except getopt.GetoptError, opterr: err(opterr) usage('dmesg') use_clear = 0 for (k, v) in options: if k in ['-c', '--clear']: use_clear = 1 if len(params) : err("No parameter required") usage('dmesg') if serverType == SERVER_XEN_API: host = server.xenapi.session.get_this_host(server.getSession()) if use_clear: print server.xenapi.host.dmesg_clear(host), else: print server.xenapi.host.dmesg(host), else: if not use_clear: print server.xend.node.dmesg.info(), else: print server.xend.node.dmesg.clear(),def xm_log(args): arg_check(args, "log", 0) if serverType == SERVER_XEN_API: print server.xenapi.host.get_log( server.xenapi.session.get_this_host(server.getSession())) else: print server.xend.node.log()def xm_serve(args): if serverType == SERVER_XEN_API: print "Not supported with XenAPI" sys.exit(-1) arg_check(args, "serve", 0) from fcntl import fcntl, F_SETFL s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.connect(XendClient.XML_RPC_SOCKET) fcntl(sys.stdin, F_SETFL, os.O_NONBLOCK) while True: iwtd, owtd, ewtd = select([sys.stdin, s], [], []) if s in iwtd: data = s.recv(4096) if len(data) > 0: sys.stdout.write(data) sys.stdout.flush() else: break if sys.stdin in iwtd: data = sys.stdin.read(4096) if len(data) > 0: s.sendall(data) else: break s.close()def parse_dev_info(info): def get_info(n, t, d): i = 0 while i < len(info): if (info[i][0] == n): return t(info[i][1]) i = i + 1 return t(d) return { #common 'backend-id' : get_info('backend-id', int, -1), 'handle' : get_info('handle', int, 0), 'state' : get_info('state', int, -1), 'be-path' : get_info('backend', str, '??'), 'event-ch' : get_info('event-channel',int, -1), #network specific 'virtual-device' : get_info('virtual-device', str, '??'), 'tx-ring-ref': get_info('tx-ring-ref', int, -1), 'rx-ring-ref': get_info('rx-ring-ref', int, -1), 'mac' : get_info('mac', str, '??'), #block-device specific 'ring-ref' : get_info('ring-ref', int, -1), }def arg_check_for_resource_list(args, name): use_long = 0 try: (options, params) = getopt.gnu_getopt(args, 'l', ['long']) except getopt.GetoptError, opterr: err(opterr) sys.exit(1) for (k, v) in options: if k in ['-l', '--long']: use_long = 1 if len(params) == 0: print 'No domain parameter given' usage(name) if len(params) > 1: print 'No multiple domain parameters allowed' usage(name) return (use_long, params)def xm_network_list(args): (use_long, params) = arg_check_for_resource_list(args, "network-list") dom = params[0] if serverType == SERVER_XEN_API: vif_refs = server.xenapi.VM.get_VIFs(get_single_vm(dom)) vif_properties = \ map(server.xenapi.VIF.get_runtime_properties, vif_refs) devs = map(lambda (handle, properties): [handle, map2sxp(properti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -