WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] add a command to get the state of VMs

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] add a command to get the state of VMs
From: "James (song wei)" <jsong@xxxxxxxxxx>
Date: Thu, 24 Jun 2010 22:56:41 -0700 (PDT)
Delivery-date: Thu, 24 Jun 2010 22:57:44 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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