📄 main.py
字号:
"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 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(properties)], zip(range(len(vif_properties)), vif_properties)) else: devs = server.xend.domain.getDeviceSxprs(dom, 'vif') if use_long: map(PrettyPrint.prettyprint, devs) else: hdr = 0 for x in devs: if hdr == 0: print 'Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path' hdr = 1 ni = parse_dev_info(x[1]) ni['idx'] = int(x[0]) print ("%(idx)-3d " "%(backend-id)-3d" "%(mac)-17s " "%(handle)-3d " "%(state)-3d " "%(event-ch)-3d " "%(tx-ring-ref)-5d/%(rx-ring-ref)-5d " "%(be-path)-30s " % ni)def xm_block_list(args): (use_long, params) = arg_check_for_resource_list(args, "block-list") dom = params[0] if serverType == SERVER_XEN_API: vbd_refs = server.xenapi.VM.get_VBDs(get_single_vm(dom)) vbd_properties = \ map(server.xenapi.VBD.get_runtime_properties, vbd_refs) vbd_devs = \ map(server.xenapi.VBD.get_device, vbd_refs) vbd_devids = \ map(blkdev_name_to_number, vbd_devs) devs = map(lambda (devid, prop): [devid, map2sxp(prop)], zip(vbd_devids, vbd_properties)) else: devs = server.xend.domain.getDeviceSxprs(dom, 'vbd') if use_long: map(PrettyPrint.prettyprint, devs) else: hdr = 0 for x in devs: if hdr == 0: print 'Vdev BE handle state evt-ch ring-ref BE-path' hdr = 1 ni = parse_dev_info(x[1]) ni['idx'] = int(x[0]) print ("%(idx)-3d " "%(backend-id)-3d " "%(handle)-3d " "%(state)-3d " "%(event-ch)-3d " "%(ring-ref)-5d " "%(be-path)-30s " % ni)def xm_vtpm_list(args): (use_long, params) = arg_check_for_resource_list(args, "vtpm-list") dom = params[0] if serverType == SERVER_XEN_API: vtpm_refs = server.xenapi.VM.get_VTPMs(get_single_vm(dom)) vtpm_properties = \ map(server.xenapi.VTPM.get_runtime_properties, vtpm_refs) devs = map(lambda (handle, properties): [handle, map2sxp(properties)], zip(range(len(vtpm_properties)), vtpm_properties)) else: devs = server.xend.domain.getDeviceSxprs(dom, 'vtpm') if use_long: map(PrettyPrint.prettyprint, devs) else: hdr = 0 for x in devs: if hdr == 0: print 'Idx BE handle state evt-ch ring-ref BE-path' hdr = 1 ni = parse_dev_info(x[1]) ni['idx'] = int(x[0]) print ("%(idx)-3d " "%(backend-id)-3d " "%(handle)-3d " "%(state)-3d " "%(event-ch)-3d " "%(ring-ref)-5d " "%(be-path)-30s " % ni)def parse_block_configuration(args): dom = args[0] if args[1].startswith('tap:'): cls = 'tap' else: cls = 'vbd' vbd = [cls, ['uname', args[1]], ['dev', args[2]], ['mode', args[3]]] if len(args) == 5: vbd.append(['backend', args[4]]) return (dom, vbd)def xm_block_attach(args): arg_check(args, 'block-attach', 4, 5) if serverType =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -