All of lore.kernel.org
 help / color / mirror / Atom feed
From: "James (song wei)" <jsong@novell.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH] add a command to get the state of VMs
Date: Thu, 24 Jun 2010 22:56:41 -0700 (PDT)	[thread overview]
Message-ID: <28989229.post@talk.nabble.com> (raw)


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@novell.com>

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.

             reply	other threads:[~2010-06-25  5:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-25  5:56 James (song wei) [this message]
2010-06-25 14:19 ` [PATCH] add a command to get the state of VMs Ian Jackson
2010-06-25 14:21   ` Ian Jackson
2010-06-29  3:11     ` James Song
2010-06-29  3:04   ` James Song
2010-06-29 13:50     ` Ian Jackson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=28989229.post@talk.nabble.com \
    --to=jsong@novell.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.