You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gi...@apache.org on 2014/05/02 19:49:49 UTC

git commit: updated refs/heads/4.4-forward to 1be8b87

Repository: cloudstack
Updated Branches:
  refs/heads/4.4-forward d5374ed65 -> 1be8b87fb


CLOUDSTACK-6257: Adding function to check state of VM

Conflicts:
	tools/marvin/marvin/integration/lib/base.py


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1be8b87f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1be8b87f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1be8b87f

Branch: refs/heads/4.4-forward
Commit: 1be8b87fb7fb0203464ac4c66596008855ac5041
Parents: d5374ed
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Fri May 2 13:54:50 2014 +0530
Committer: Girish Shilamkar <gi...@clogeny.com>
Committed: Fri May 2 23:19:35 2014 +0530

----------------------------------------------------------------------
 tools/marvin/marvin/codes.py                |  5 +++
 tools/marvin/marvin/integration/lib/base.py | 46 ++++++++++++++++++++++++
 2 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1be8b87f/tools/marvin/marvin/codes.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/codes.py b/tools/marvin/marvin/codes.py
index 92d6cf9..cb268e2 100644
--- a/tools/marvin/marvin/codes.py
+++ b/tools/marvin/marvin/codes.py
@@ -31,6 +31,11 @@
 """
 
 RUNNING = "Running"
+STOPPED = "Stopped"
+STOPPING = "Stopping"
+STARTING = "Starting"
+DESTROYED = "Destroyed"
+EXPUNGING = "Expunging"
 RECURRING = "RECURRING"
 ENABLED = "Enabled"
 NETWORK_OFFERING = "network_offering"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1be8b87f/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index b0f7f8c..e0f7b89 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -22,6 +22,11 @@
 import marvin
 from utils import is_server_ssh_ready, random_gen
 from marvin.cloudstackAPI import *
+from marvin.codes import (FAILED, FAIL, PASS, RUNNING, STOPPED,
+                          STARTING, DESTROYED, EXPUNGING,
+                          STOPPING)
+from marvin.cloudstackException import GetDetailExceptionInfo
+from marvin.lib.utils import validateList
 # Import System modules
 import time
 import hashlib
@@ -219,6 +224,16 @@ class User:
 class VirtualMachine:
     """Manage virtual machine lifecycle"""
 
+    '''Class level variables'''
+    # Variables denoting VM state - start
+    STOPPED = STOPPED
+    RUNNING = RUNNING
+    DESTROYED = DESTROYED
+    EXPUNGING = EXPUNGING
+    STOPPING = STOPPING
+    STARTING = STARTING
+    # Varibles denoting VM state - end
+
     def __init__(self, items, services):
         self.__dict__.update(items)
         if "username" in services:
@@ -465,6 +480,10 @@ class VirtualMachine:
         cmd = stopVirtualMachine.stopVirtualMachineCmd()
         cmd.id = self.id
         apiclient.stopVirtualMachine(cmd)
+        response = self.getState(apiclient, VirtualMachine.STOPPED)
+        if response[0] == FAIL:
+            raise Exception(response[1])
+        return
 
     def reboot(self, apiclient):
         """Reboot the instance"""
@@ -516,6 +535,33 @@ class VirtualMachine:
                                                 )
         return self.ssh_client
 
+    def getState(self, apiclient, state, timeout=600):
+        """List VM and check if its state is as expected
+        @returnValue - List[Result, Reason]
+                       1) Result - FAIL if there is any exception
+                       in the operation or VM state does not change
+                       to expected state in given time else PASS
+                       2) Reason - Reason for failure"""
+
+        returnValue = [FAIL, "VM state not trasited to %s,\
+                        operation timed out" % state]
+
+        while timeout>0:
+            try:
+                vms = VirtualMachine.list(apiclient, id=self.id, listAll=True)
+                validationresult = validateList(vms)
+                if validationresult[0] == FAIL:
+                    raise Exception("VM list validation failed: %s" % validationresult[2])
+                elif str(vms[0].state).lower() == str(state).lower():
+                    returnValue = [PASS, None]
+                    break
+            except Exception as e:
+                returnValue = [FAIL, e]
+                break
+            time.sleep(60)
+            timeout -= 60
+        return returnValue
+
     def resetSshKey(self, apiclient, **kwargs):
         """Resets SSH key"""