[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] add a command to get the state of VMs
add a command "domstate" to get the state of Vms, which may have one state of {'shutoff', 'idle','shutdown','running','crashed','paused' or 'paused by admin"}. For case of pause, I distinguish it into two conditions. One is "paused" the other is "paused by admin". "pasued by admin" means that users pause a domain voluntary by "xm paused VM" or " API" -James (Song Wei) Signed-off-by James (Song Wei) <jsong@xxxxxxxxxx> diff -r 007de86b27e7 tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Thu Jun 03 16:10:37 2010 +0800 +++ b/tools/python/xen/xend/XendDomain.py Mon Jun 21 11:41:15 2010 +0800 @@ -251,6 +251,18 @@ @return: path to config file. """ return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE) + def domain_setpauseflag(self, dom, flag=False): + try: + dominfo = self.domain_lookup_nr(dom) + dominfo.paused_by_admin = flag + except Exception, err: + log.debug("error in in setpauseflag") + def domain_getpauseflag(self, dom): + try: + dominfo = self.domain_lookup_nr(dom) + return dominfo.paused_by_admin + except Exception, err: + log.debug("error in in getpauseflag") def _managed_check_point_path(self, domuuid): """Returns absolute path to check point file for managed domain. diff -r 007de86b27e7 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Jun 03 16:10:37 2010 +0800 +++ b/tools/python/xen/xend/XendDomainInfo.py Mon Jun 21 11:41:15 2010 +0800 @@ -329,6 +329,8 @@ @type info: dictionary @ivar domid: Domain ID (if VM has started) @type domid: int or None + @ivar paused_by_admin: Is this Domain paused by command or API + @type paused_by_admin: bool @ivar guest_bitsize: the bitsize of guest @type guest_bitsize: int or None @ivar alloc_mem: the memory domain allocated when booting @@ -392,6 +394,7 @@ self.domid = domid self.guest_bitsize = None self.alloc_mem = None + self.paused_by_admin = False maxmem = self.info.get('memory_static_max', 0) memory = self.info.get('memory_dynamic_max', 0) diff -r 007de86b27e7 tools/python/xen/xend/server/SrvDomain.py --- a/tools/python/xen/xend/server/SrvDomain.py Thu Jun 03 16:10:37 2010 +0800 +++ b/tools/python/xen/xend/server/SrvDomain.py Mon Jun 21 11:41:15 2010 +0800 @@ -249,6 +249,20 @@ def op_reset(self, _, req): self.acceptCommand(req) return self.xd.domain_reset(self.dom.getName()) + + def op_do_get_pauseflag(self, op, req): + self.acceptCommand(req) + return req.threadRequest(self.do_get_pauseflag, op, req) + + def do_get_pauseflag(self, _, req): + return self.xd.domain_getpauseflag(self.dom.getName(), req) + + def op_do_set_pauseflag(self, op, req): + self.acceptCommand(req) + return req.threadRequest(self.do_set_pauseflag, op, req) + + def do_set_pauseflag(self, _, req): + return self.xd.domain_setpauseflag(self.dom.getName(), req) def op_usb_add(self, op, req): self.acceptCommand(req) diff -r 007de86b27e7 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Thu Jun 03 16:10:37 2010 +0800 +++ b/tools/python/xen/xm/main.py Mon Jun 21 11:41:15 2010 +0800 @@ -174,6 +174,8 @@ #usb 'usb-add' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'), 'usb-del' : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'), + #domstate + 'domstate' : ('<domain> ', 'get the state of a domain'), # device commands @@ -409,6 +411,7 @@ "uptime", "usb-add", "usb-del", + "domstate", "vcpu-set", ] @@ -447,6 +450,7 @@ "uptime", "usb-add", "usb-del", + "domstate", "vcpu-list", "vcpu-pin", "vcpu-set", @@ -1018,7 +1022,6 @@ 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'], @@ -1527,8 +1530,10 @@ if serverType == SERVER_XEN_API: server.xenapi.VM.pause(get_single_vm(dom)) + server.xenapi.VM.set_pauseflag(get_single_vm(dom), True) else: server.xend.domain.pause(dom) + server.xend.domain.setpauseflag(dom, True) def xm_unpause(args): arg_check(args, "unpause", 1) @@ -1536,8 +1541,10 @@ if serverType == SERVER_XEN_API: server.xenapi.VM.unpause(get_single_vm(dom)) + server.xenapi.VM.set_pauseflag(get_single_vm(dom), False) else: server.xend.domain.unpause(dom) + server.xend.domain.setpauseflag(dom, False) def xm_dump_core(args): live = False @@ -1647,6 +1654,32 @@ arg_check(args, "usb-add", 2) server.xend.domain.usb_add(args[0],args[1]) +def xm_domstate(args): + arg_check(args, "domstate", 1) + (opitons, params) = getopt.gnu_getopt(args, 's', ['domname=']) + doms = getDomains(params, 'all') + d = parse_doms_info(doms[0]) + state = d['state'] + if state: + if state.find('s') > 0: + print 'shutoff' + elif state.find('b') > 0: + print 'idle' + elif state.find('d') > 0: + print 'shutdown' + elif state.find('r') > 0: + print 'running' + elif state.find('c') > 0: + print 'crashed' + elif state.find('p') > 0: + if server.xend.domain.getpauseflag(args[0]): + print 'paused by admin' + else: + print 'paused' + else: + print 'shutoff' + return + def xm_usb_del(args): arg_check(args, "usb-del", 2) server.xend.domain.usb_del(args[0],args[1]) @@ -3857,6 +3890,8 @@ #usb "usb-add": xm_usb_add, "usb-del": xm_usb_del, + #domstate + "domstate": xm_domstate, } ## The commands supported by a separate argument parser in xend.xm. -- View this message in context: http://old.nabble.com/-PATCH--add-a-command-to-get-the-state-of-VMs-tp28989229p28989229.html Sent from the Xen - Dev mailing list archive at Nabble.com. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |