CLOUDSTACK-6164: Added few changes for CLOUDSTACK-6164
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4a0e95cf Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4a0e95cf Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4a0e95cf Branch: refs/heads/master Commit: 4a0e95cf5b72456a9e67cc58d89717d8ec4f1ded Parents: 23e059b Author: Santhosh Edukulla <[email protected]> Authored: Wed Feb 26 17:03:22 2014 +0530 Committer: Girish Shilamkar <[email protected]> Committed: Wed Feb 26 17:03:22 2014 +0530 ---------------------------------------------------------------------- test/integration/smoke/test_hosts.py | 2 + tools/marvin/marvin/lib/base.py | 80 ++++++++++++++++++++----------- 2 files changed, 55 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a0e95cf/test/integration/smoke/test_hosts.py ---------------------------------------------------------------------- diff --git a/test/integration/smoke/test_hosts.py b/test/integration/smoke/test_hosts.py index 65e6d45..1b39b07 100644 --- a/test/integration/smoke/test_hosts.py +++ b/test/integration/smoke/test_hosts.py @@ -104,6 +104,8 @@ class TestHosts(cloudstackTestCase): podid=self.pod.id, hypervisor=self.hypervisor ) + if host == FAILED: + self.fail("Host Creation Failed") self.debug( "Created host (ID: %s) in cluster ID %s" %( host.id, http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4a0e95cf/tools/marvin/marvin/lib/base.py ---------------------------------------------------------------------- diff --git a/tools/marvin/marvin/lib/base.py b/tools/marvin/marvin/lib/base.py index c0c6f13..a2f9a8b 100755 --- a/tools/marvin/marvin/lib/base.py +++ b/tools/marvin/marvin/lib/base.py @@ -22,6 +22,9 @@ import marvin from utils import is_server_ssh_ready, random_gen from marvin.cloudstackAPI import * +from marvin.codes import FAILED, PASS +from marvin.cloudstackException import GetDetailExceptionInfo +from marvin.lib.utils import validateList # Import System modules import time import hashlib @@ -1782,35 +1785,58 @@ class Host: @classmethod def create(cls, apiclient, cluster, services, zoneid=None, podid=None, hypervisor=None): - """Create Host in cluster""" - - cmd = addHost.addHostCmd() - cmd.hypervisor = hypervisor - cmd.url = services["url"] - cmd.clusterid = cluster.id - - if zoneid: - cmd.zoneid = zoneid - else: - cmd.zoneid = services["zoneid"] - - if podid: - cmd.podid = podid - else: - cmd.podid = services["podid"] - - if "clustertype" in services: - cmd.clustertype = services["clustertype"] - if "username" in services: - cmd.username = services["username"] - if "password" in services: - cmd.password = services["password"] + """ + 1. Creates the host based upon the information provided. + 2. Verifies the output of the adding host and its state post addition + Returns FAILED in case of an issue, else an instance of Host + """ + try: + cmd = addHost.addHostCmd() + cmd.hypervisor = hypervisor + cmd.url = services["url"] + cmd.clusterid = cluster.id - # Add host - host = apiclient.addHost(cmd) + if zoneid: + cmd.zoneid = zoneid + else: + cmd.zoneid = services["zoneid"] - if isinstance(host, list): - return Host(host[0].__dict__) + if podid: + cmd.podid = podid + else: + cmd.podid = services["podid"] + + if "clustertype" in services: + cmd.clustertype = services["clustertype"] + if "username" in services: + cmd.username = services["username"] + if "password" in services: + cmd.password = services["password"] + + ''' + Adds a Host, + If response is valid and host is up return + an instance of Host. + If response is invalid, returns FAILED. + If host state is not up, verify through listHosts call + till host status is up and return accordingly. Max 3 retries + ''' + host = apiclient.addHost(cmd) + ret = validateList(host) + if ret[0] == PASS: + if str(host[0].state).lower() == 'up': + return Host(host[0].__dict__) + retries = 3 + while retries: + lh_resp = apiclient.listHosts(host[0].id) + ret = validateList(lh_resp) + if (ret[0] == PASS) and (str(ret[1].state).lower() == 'up'): + return Host(host[0].__dict__) + retries += -1 + return FAILED + except Exception, e: + print "Exception Occurred Under Host.create : %s" % GetDetailExceptionInfo(e) + return FAILED def delete(self, apiclient): """Delete Host"""
