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

📄 main.py

📁 xen虚拟机源代码安装包
💻 PY
📖 第 1 页 / 共 5 页
字号:
        config = xml.dom.minidom.parse(xmConfigFile)    except:        print >>sys.stderr, ('Ignoring invalid configuration file %s.' %                             xmConfigFile)def parseServer():    if config:        server = config.getElementsByTagName('server')        if server:            st = server[0].getAttribute('type')            if st != SERVER_XEN_API and st != SERVER_LEGACY_XMLRPC:                print >>sys.stderr, ('Invalid server type %s; using %s.' %                                     (st, SERVER_LEGACY_XMLRPC))                st = SERVER_LEGACY_XMLRPC            return (st, server[0].getAttribute('uri'))    return SERVER_LEGACY_XMLRPC, XendClient.uridef parseAuthentication():    server = config.getElementsByTagName('server')[0]    return (server.getAttribute('username'),            server.getAttribute('password'))serverType, serverURI = parseServer()server = None######################################################################  Help/usage printing functions#####################################################################def cmdHelp(cmd):    """Print help for a specific subcommand."""        if not SUBCOMMAND_HELP.has_key(cmd):        for fc in SUBCOMMAND_HELP.keys():            if fc[:len(cmd)] == cmd:                cmd = fc                break        try:        args, desc = SUBCOMMAND_HELP[cmd]    except KeyError:        shortHelp()        return        print 'Usage: xm %s %s' % (cmd, args)    print    print desc        try:        # If options help message is defined, print this.        for shortopt, longopt, desc in SUBCOMMAND_OPTIONS[cmd]:            if shortopt and longopt:                optdesc = '%s, %s' % (shortopt, longopt)            elif shortopt:                optdesc = shortopt            elif longopt:                optdesc = longopt            wrapped_desc = wrap(desc, 43)               print '  %-30s %-43s' % (optdesc, wrapped_desc[0])            for line in wrapped_desc[1:]:                print ' ' * 33 + line        print    except KeyError:        # if the command is an external module, we grab usage help        # from the module itself.        if cmd in IMPORTED_COMMANDS:            try:                cmd_module =  __import__(cmd, globals(), locals(), 'xen.xm')                cmd_usage = getattr(cmd_module, "help", None)                if cmd_usage:                    print cmd_usage()            except ImportError:                pass        def shortHelp():    """Print out generic help when xm is called without subcommand."""        print USAGE_HELP    print 'Common \'xm\' commands:\n'        for command in common_commands:        try:            args, desc = SUBCOMMAND_HELP[command]        except KeyError:            continue        wrapped_desc = wrap(desc, 50)        print ' %-20s %-50s' % (command, wrapped_desc[0])        for line in wrapped_desc[1:]:            print ' ' * 22 + line    print    print USAGE_FOOTER    print 'For a complete list of subcommands run \'xm help\'.'    def longHelp():    """Print out full help when xm is called with xm --help or xm help"""        print USAGE_HELP    print 'xm full list of subcommands:\n'        for command in all_commands:        try:            args, desc = SUBCOMMAND_HELP[command]        except KeyError:            continue        wrapped_desc = wrap(desc, 50)        print ' %-20s %-50s' % (command, wrapped_desc[0])        for line in wrapped_desc[1:]:            print ' ' * 22 + line            print    print USAGE_FOOTER        def _usage(cmd):    """ Print help usage information """    if cmd:        cmdHelp(cmd)    else:        shortHelp()def usage(cmd = None):    """ Print help usage information and exits """    _usage(cmd)    sys.exit(1)######################################################################  Utility functions#####################################################################def get_default_SR():    return [sr_ref            for sr_ref in server.xenapi.SR.get_all()            if server.xenapi.SR.get_type(sr_ref) == "local"][0]def get_default_Network():    return [network_ref            for network_ref in server.xenapi.network.get_all()][0]class XenAPIUnsupportedException(Exception):    passdef xenapi_unsupported():    if serverType == SERVER_XEN_API:        raise XenAPIUnsupportedException, "This function is not supported by Xen-API"def xenapi_only():    if serverType != SERVER_XEN_API:        raise XenAPIUnsupportedException, "This function is only supported by Xen-API"def map2sxp(m):    return [[k, m[k]] for k in m.keys()]def arg_check(args, name, lo, hi = -1):    n = len([i for i in args if i != '--'])        if hi == -1:        if n != lo:            err("'xm %s' requires %d argument%s.\n" % (name, lo,                                                       lo == 1 and '' or 's'))            usage(name)    else:        if n < lo or n > hi:            err("'xm %s' requires between %d and %d arguments.\n" %                (name, lo, hi))            usage(name)def unit(c):    if not c.isalpha():        return 0    base = 1    if c == 'G' or c == 'g': base = 1024 * 1024 * 1024    elif c == 'M' or c == 'm': base = 1024 * 1024    elif c == 'K' or c == 'k': base = 1024    else:        print 'ignoring unknown unit'    return basedef int_unit(str, dest):    base = unit(str[-1])    if not base:        return int(str)    value = int(str[:-1])    dst_base = unit(dest)    if dst_base == 0:        dst_base = 1    if dst_base > base:        return value / (dst_base / base)    else:        return value * (base / dst_base)def err(msg):    print >>sys.stderr, "Error:", msgdef get_single_vm(dom):    if serverType == SERVER_XEN_API:        uuids = server.xenapi.VM.get_by_name_label(dom)        if len(uuids) > 0:            return uuids[0]        refs = []        try:            domid = int(dom)            refs = [vm_ref                    for vm_ref in server.xenapi.VM.get_all()                    if int(server.xenapi.VM.get_domid(vm_ref)) == domid]        except:            pass                    if len(refs) > 0:            return refs[0]        raise OptionError("Domain '%s' not found." % dom)    else:        dominfo = server.xend.domain(dom, False)        return dominfo['uuid']#### Xen-API Shell###class Shell(cmd.Cmd):    def __init__(self):        cmd.Cmd.__init__(self)        self.prompt = "xm> "        if serverType == SERVER_XEN_API:            try:                res = server.xenapi.host.list_methods()                for f in res:                    setattr(Shell, 'do_' + f + ' ', self.default)            except:                pass    def preloop(self):        cmd.Cmd.preloop(self)        try:            import readline            readline.set_completer_delims(' ')        except ImportError:            pass    def default(self, line):        words = shlex.split(line)        if len(words) > 0 and words[0] == 'xm':            words = words[1:]        if len(words) > 0:            cmd = xm_lookup_cmd(words[0])            if cmd:                _run_cmd(cmd, words[0], words[1:])            elif serverType == SERVER_XEN_API:                ok, res = _run_cmd(lambda x: server.xenapi_request(words[0],                                                                   tuple(x)),                                   words[0], words[1:])                if ok and res is not None and res != '':                    pprint.pprint(res)            else:                print '*** Unknown command: %s' % words[0]        return False    def completedefault(self, text, line, begidx, endidx):        words = shlex.split(line[:begidx])        clas, func = words[0].split('.')        if len(words) > 1 or \           func.startswith('get_by_') or \           func == 'get_all':            return []        uuids = server.xenapi_request('%s.get_all' % clas, ())        return [u + " " for u in uuids if u.startswith(text)]    def emptyline(self):        pass    def do_EOF(self, line):        print        sys.exit(0)    def do_help(self, line):        _usage(line)def xm_shell(args):    Shell().cmdloop('The Xen Master. Type "help" for a list of functions.')def xm_event_monitor(args):    if serverType == SERVER_XEN_API:        while True:            server.xenapi.event.register(args)            events = server.xenapi.event.next()            for e in events:                print e    else:        err("Event monitoring not supported unless using Xen-API.")###########################################################################  Main xm functions##########################################################################def xm_save(args):    arg_check(args, "save", 2, 3)        try:        (options, params) = getopt.gnu_getopt(args, 'c', ['checkpoint'])    except getopt.GetoptError, opterr:        err(opterr)        sys.exit(1)    checkpoint = False    for (k, v) in options:        if k in ['-c', '--checkpoint']:            checkpoint = True    if len(params) != 2:        err("Wrong number of parameters")        usage('save')    dom = params[0]    savefile = os.path.abspath(params[1])    if not os.access(os.path.dirname(savefile), os.W_OK):        err("xm save: Unable to create file %s" % savefile)        sys.exit(1)            if serverType == SERVER_XEN_API:               server.xenapi.VM.save(get_single_vm(dom), savefile, checkpoint)    else:        server.xend.domain.save(dom, savefile, checkpoint)    def xm_restore(args):    arg_check(args, "restore", 1, 2)    try:        (options, params) = getopt.gnu_getopt(args, 'p', ['paused'])    except getopt.GetoptError, opterr:        err(opterr)        usage('restore')    paused = False    for (k, v) in options:        if k in ['-p', '--paused']:            paused = True    if len(params) != 1:        err("Wrong number of parameters")        usage('restore')    savefile = os.path.abspath(params[0])    if not os.access(savefile, os.R_OK):        err("xm restore: Unable to read file %s" % savefile)        sys.exit(1)    if serverType == SERVER_XEN_API:        server.xenapi.VM.restore(savefile, paused)    else:        server.xend.domain.restore(savefile, paused)def datetime_to_secs(v):    unwanted = ":-."    for c in unwanted:        v = str(v).replace(c, "")    return time.mktime(time.strptime(v[0:14], '%Y%m%dT%H%M%S'))def getDomains(domain_names, state, full = 0):    if serverType == SERVER_XEN_API:        doms_sxp = []        doms_dict = []        dom_recs = server.xenapi.VM.get_all_records()        dom_metrics_recs = server.xenapi.VM_metrics.get_all_records()        for dom_ref, dom_rec in dom_recs.items():            dom_metrics_rec = dom_metrics_recs[dom_rec['metrics']]            states = ('running', 'blocked', 'paused', 'shutdown',                      'crashed', 'dying')            def state_on_off(state):                if state in dom_metrics_rec['state']:                    return state[0]                else:                    return "-"            state_str = "".join([state_on_off(state)                                 for state in states])                        dom_rec.update({'name':     dom_rec['name_label'],                            'memory_actual': int(dom_metrics_rec['memory_actual'])/1024,                            'vcpus':    dom_metrics_rec['VCPUs_number'],                            'state':    state_str,                            'cpu_time': dom_metrics_rec['VCPUs_utilisation'],                            'start_time': datetime_to_secs(                                              dom_metrics_rec['start_time'])})            doms_sxp.append(['domain'] + map2sxp(dom_rec))            doms_dict.append(dom_rec)

⌨️ 快捷键说明

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