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

📄 main.py

📁 xen 3.2.2 源码
💻 PY
📖 第 1 页 / 共 5 页
字号:
        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)        import readline        readline.set_completer_delims(' ')    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)    try:        if serverType == SERVER_XEN_API:            server.xenapi.VM.restore(savefile, paused)        else:            server.xend.domain.restore(savefile, paused)    except Exception, ex:        err("%s" % ex.faultString)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)                    if domain_names:            doms = [['domain'] + map2sxp(dom) for dom in doms_dict                    if dom["name"] in domain_names]                        if len(doms) > 0:                return doms            else:                print "Error: no domain%s named %s" % \                      (len(domain_names) > 1 and 's' or '',                       ', '.join(domain_names))                sys.exit(-1)        else:            return doms_sxp    else:        if domain_names:            return [server.xend.domain(dom, full) for dom in domain_names]        else:            return server.xend.domains_with_state(True, state, full)def xm_list(args):    use_long = 0    show_vcpus = 0    show_labels = 0    state = 'all'    try:        (options, params) = getopt.gnu_getopt(args, 'lv',                                              ['long','vcpus','label',                                               'state='])    except getopt.GetoptError, opterr:        err(opterr)        usage('list')        for (k, v) in options:        if k in ['-l', '--long']:            use_long = 1        if k in ['-v', '--vcpus']:            show_vcpus = 1        if k in ['--label']:            show_labels = 1        if k in ['--state']:            state = v    if state != 'all' and len(params) > 0:        raise OptionError(            "You may specify either a state or a particular VM, but not both")

⌨️ 快捷键说明

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