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

📄 shutdown.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>#============================================================================"""Domain shutdown."""import timefrom xen.xend import sxpfrom opts import *from main import server, serverType, SERVER_XEN_API, get_single_vmfrom xen.xend.XendAPIConstants import *RECREATING_TIMEOUT = 30gopts = Opts(use="""[options] [DOM]Shutdown one or more domains gracefully.""")gopts.opt('help', short='h',         fn=set_true, default=0,         use="Print this help.")gopts.opt('all', short='a',         fn=set_true, default=0,         use="Shutdown all domains.")gopts.opt('wait', short='w',         fn=set_true, default=0,         use='Wait for shutdown to complete.')gopts.opt('halt', short='H',          fn=set_true, default=0,          use='Shutdown without reboot.')gopts.opt('reboot', short='R',          fn=set_true, default=0,          use='Shutdown and reboot.')def wait_reboot(opts, doms, rcs):    if serverType == SERVER_XEN_API:        opts.err("Cannot wait for reboot w/ XenAPI (yet)")    recreating = {}    while doms:        alive = server.xend.domains(0)        reboot = []        for d in doms:            if d in alive:                rc = server.xend.domain.getRestartCount(d)                if rc == rcs[d]: continue                reboot.append(d)            # Probably the domain is being recreated now.            # We have to wait just a bit for recreating the domain.            elif not recreating.has_key(d):                recreating[d] = 0            else:                recreating[d] += 1                if recreating[d] > RECREATING_TIMEOUT:                    opts.info("Domain %s destroyed for failing to reboot" % d)                    doms.remove(d)        for d in reboot:            opts.info("Domain %s rebooted" % d)            doms.remove(d)        time.sleep(1)    opts.info("All domains rebooted")def wait_shutdown(opts, doms):    while doms:        if serverType == SERVER_XEN_API:            alive = [dom for dom in server.xenapi.VM.get_all()                     if server.xenapi.VM.get_power_state(dom) ==                     XEN_API_VM_POWER_STATE[XEN_API_VM_POWER_STATE_RUNNING]]        else:            alive = server.xend.domains(0)        dead = []        for d in doms:            if d in alive: continue            dead.append(d)        for d in dead:            opts.info("Domain %s terminated" % d)            doms.remove(d)        time.sleep(1)    opts.info("All domains terminated")def shutdown(opts, doms, mode, wait):    rcs = {}    for d in doms:        if serverType == SERVER_XEN_API:            if mode == 'halt':                server.xenapi.VM.clean_shutdown(d)            if mode == 'reboot':                server.xenapi.VM.clean_reboot(d)            if mode == 'poweroff':                server.xenapi.VM.clean_shutdown(d)        else:            rcs[d] = server.xend.domain.getRestartCount(d)            server.xend.domain.shutdown(d, mode)    if wait:        if mode == 'reboot':            wait_reboot(opts, doms, rcs)        else:            wait_shutdown(opts, doms)def shutdown_mode(opts):    if opts.vals.halt and opts.vals.reboot:        opts.err("Can't specify halt and reboot")    if opts.vals.halt:        return 'halt'    elif opts.vals.reboot:        return 'reboot'    else:        return 'poweroff'def main_all(opts, args):    if serverType == SERVER_XEN_API:        doms = [dom for dom in server.xenapi.VM.get_all()                if not server.xenapi.VM.get_is_control_domain(dom)]    else:        doms = server.xend.domains(0)        dom0_name = sxp.child_value(server.xend.domain(0), 'name')        doms.remove(dom0_name)    mode = shutdown_mode(opts)      shutdown(opts, doms, mode, opts.vals.wait)def main_dom(opts, args):    if len(args) == 0: opts.err('No domain parameter given')    if len(args) >  1: opts.err('No multiple domain parameters allowed')    if serverType == SERVER_XEN_API:        dom = get_single_vm(args[0])    else:        dom = sxp.child_value(server.xend.domain(args[0]), 'name')    mode = shutdown_mode(opts)      shutdown(opts, [ dom ], mode, opts.vals.wait)    def main(argv):    opts = gopts    opts.reset()    args = opts.parse(argv)    if opts.vals.help:        return    if opts.vals.all:        main_all(opts, args)    else:        main_dom(opts, args)        

⌨️ 快捷键说明

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