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

📄 srvdomain.py

📁 xen虚拟机源代码安装包
💻 PY
字号:
#============================================================================# This library is free software; you can redistribute it and/or# modify it under the terms of version 2.1 of the GNU Lesser General Public# License as published by the Free Software Foundation.## This library is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU# Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public# License along with this library; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#============================================================================# Copyright (C) 2004, 2005 Mike Wray <mike.wray@hp.com># Copyright (C) 2005 Xensource Ltd#============================================================================from xen.web import httpfrom xen.xend import sxpfrom xen.xend import XendDomainfrom xen.xend.Args import FormFnfrom xen.xend.XendLogging import logfrom xen.web.SrvDir import SrvDirclass SrvDomain(SrvDir):    """Service managing a single domain.    """    def __init__(self, dom):        SrvDir.__init__(self)        self.dom = dom        self.xd = XendDomain.instance()    def op_configure(self, _, req):        """Configure an existing domain.        Configure is unusual in that it requires a domain id,        not a domain name.        """        fn = FormFn(self.xd.domain_configure,                    [['dom',    'int'],                     ['config', 'sxpr']])        return fn(req.args, {'dom': self.dom.domid})    def op_unpause(self, _1, _2):        val = self.xd.domain_unpause(self.dom.domid)        return val            def op_pause(self, _1, _2):        val = self.xd.domain_pause(self.dom.domid)        return val    def acceptCommand(self, req):        req.setResponseCode(http.ACCEPTED)        req.setHeader("Location", "%s/.." % req.prePathURL())    def op_rename(self, _, req):        self.acceptCommand(req)        return self.dom.setName(req.args['name'][0])    def op_shutdown(self, _, req):        self.acceptCommand(req)        return self.dom.shutdown(req.args['reason'][0])    def op_delete(self, _, req):        self.acceptCommand(req)        return self.xd.domain_delete(self.dom.getName())    def op_start(self, _, req):        self.acceptCommand(req)        paused = False        if 'paused' in req.args and req.args['paused'] == [1]:            paused = True        log.debug("Starting domain " + self.dom.getName() + " " + str(paused))        return self.xd.domain_start(self.dom.getName(), paused)    def op_sysrq(self, _, req):        self.acceptCommand(req)        return self.dom.send_sysrq(int(req.args['key'][0]))    def op_wait_for_devices(self, _, req):        self.acceptCommand(req)        return self.dom.waitForDevices()    def op_destroy(self, _, req):        self.acceptCommand(req)        return self.xd.domain_destroy(self.dom.domid)    def op_save(self, op, req):        self.acceptCommand(req)        return req.threadRequest(self.do_save, op, req)    def do_save(self, _, req):        return self.xd.domain_save(self.dom.domid, req.args['file'][0])    def op_dump(self, op, req):        self.acceptCommand(req)        return req.threadRequest(self.do_dump, op, req)    def do_dump(self, _, req):        fn = FormFn(self.xd.domain_dump,                    [['dom',         'int'],                     ['file',        'str'],                     ['live',        'int'],                     ['crash',       'int']])        return fn(req.args, {'dom': self.dom.domid})    def op_migrate(self, op, req):        return req.threadRequest(self.do_migrate, op, req)        def do_migrate(self, _, req):        fn = FormFn(self.xd.domain_migrate,                    [['dom',         'int'],                     ['destination', 'str'],                     ['live',        'int'],                     ['port',        'int'],                     ['node',        'int'],                     ['ssl',         'int']])        return fn(req.args, {'dom': self.dom.domid})    def op_pincpu(self, _, req):        fn = FormFn(self.xd.domain_pincpu,                    [['dom', 'str'],                     ['vcpu', 'str'],                     ['cpumap', 'str']])        val = fn(req.args, {'dom': self.dom.getName()})        return val    def op_cpu_sedf_get(self, _, req):        fn = FormFn(self.xd.domain_cpu_sedf_get,                    [['dom', 'int']])        val = fn(req.args, {'dom': self.dom.domid})        return val    def op_cpu_sedf_set(self, _, req):        fn = FormFn(self.xd.domain_cpu_sedf_set,                    [['dom', 'int'],                     ['period', 'int'],                     ['slice', 'int'],                     ['latency', 'int'],                     ['extratime', 'int'],                     ['weight', 'int']])        val = fn(req.args, {'dom': self.dom.domid})        return val        def op_domain_sched_credit_get(self, _, req):        fn = FormFn(self.xd.domain_sched_credit_get,                    [['dom', 'str']])        val = fn(req.args, {'dom': self.dom.getName()})        return val    def op_domain_sched_credit_set(self, _, req):        fn = FormFn(self.xd.domain_sched_credit_set,                    [['dom', 'str'],                     ['weight', 'int'],                     ['cap', 'int']])        val = fn(req.args, {'dom': self.dom.getName()})        return val    def op_maxmem_set(self, _, req):        return self.call(self.dom.setMemoryMaximum,                         [['memory', 'int']],                         req)        def call(self, fn, args, req):        return FormFn(fn, args)(req.args)    def op_mem_target_set(self, _, req):        return self.call(self.dom.setMemoryTarget,                         [['target', 'int']],                         req)    def op_devices(self, _, req):        return self.call(self.dom.getDeviceSxprs,                         [['type', 'str']],                         req)    def op_device_create(self, _, req):        return self.call(self.dom.device_create,                         [['config', 'sxpr']],                         req)    def op_device_destroy(self, _, req):        return self.call(self.dom.destroyDevice,                         [['type', 'str'],                          ['dev',  'str'],                          ['force',  'int'],                          ['rm_cfg',  'int']],                         req)                    def op_device_configure(self, _, req):        return self.call(self.dom.device_configure,                         [['config', 'sxpr'],                          ['dev',    'str']],                         req)    def op_vif_limit_set(self, _, req):        fn = FormFn(self.xd.domain_vif_limit_set,                    [['dom',    'int'],                     ['vif',    'int'],                     ['credit', 'int'],                     ['period', 'int']])        val = fn(req.args, {'dom': self.dom.domid})        return val    def op_set_vcpus(self, _, req):        return self.call(self.dom.setVCpuCount,                         [['vcpus', 'int']],                         req)    def op_vcpuinfo(self, _1, req):        return self.call(self.dom.getVCPUInfo, [], req)    def op_reset(self, _, req):        self.acceptCommand(req)        return self.xd.domain_reset(self.dom.getName())    def render_POST(self, req):        return self.perform(req)            def render_GET(self, req):        op = req.args.get('op')        if op and op[0] in ['vcpuinfo']:            return self.perform(req)        #        # XXX SMH: below may be useful once again if we ever try to get        # the raw 'web' interface to xend working once more. But for now        # is useless and out of date (i.e. no ops called 'v???' anymore).        #        # if op and op[0] in ['vifs', 'vif', 'vbds', 'vbd', 'mem_target_set']:        #    return self.perform(req)        if self.use_sxp(req):            req.setHeader("Content-Type", sxp.mime_type)            sxp.show(self.dom.sxpr(), out=req)        else:            req.write('<html><head></head><body>')            self.print_path(req)            #self.ls()            req.write('<p>%s</p>' % self.dom)            self.form(req)            req.write('</body></html>')        return ''    def form(self, req):        url = req.prePathURL()        req.write('<form method="post" action="%s">' % url)        req.write('<input type="submit" name="op" value="unpause">')        req.write('<input type="submit" name="op" value="pause">')        req.write('</form>')        req.write('<form method="post" action="%s">' % url)        req.write('<input type="submit" name="op" value="destroy">')        req.write('</form>')        req.write('<form method="post" action="%s">' % url)        req.write('<input type="submit" name="op" value="reset">')        req.write('</form>')        req.write('<form method="post" action="%s">' % url)        req.write('<input type="submit" name="op" value="shutdown">')        req.write('<input type="radio" name="reason" value="poweroff" checked>Poweroff')        req.write('<input type="radio" name="reason" value="halt">Halt')        req.write('<input type="radio" name="reason" value="reboot">Reboot')        req.write('</form>')                req.write('<form method="post" action="%s">' % url)        req.write('<br><input type="submit" name="op" value="save">')        req.write(' To file: <input type="text" name="file">')        req.write('</form>')                req.write('<form method="post" action="%s">' % url)        req.write('<br><input type="submit" name="op" value="migrate">')        req.write(' To host: <input type="text" name="destination">')        req.write('<input type="checkbox" name="live" value="1">Live')        req.write('</form>')

⌨️ 快捷键说明

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