From 33fb241fdf7f363659db918b8f6dd5744f599259 Mon Sep 17 00:00:00 2001 From: Gaurav Aradhye Date: Thu, 19 Dec 2013 10:21:33 +0530 Subject: [PATCH] CLOUDSTACK-4780: Changes related to checking snapshot on NFS server --- .../component/test_add_remove_network.py | 4 +- test/integration/component/test_snapshots.py | 5 +- tools/marvin/marvin/integration/lib/common.py | 68 ++++++++++++++----- tools/marvin/marvin/integration/lib/utils.py | 31 +++++++-- 4 files changed, 81 insertions(+), 27 deletions(-) diff --git a/test/integration/component/test_add_remove_network.py b/test/integration/component/test_add_remove_network.py index f1508e1f1cb..b607ff1357e 100644 --- a/test/integration/component/test_add_remove_network.py +++ b/test/integration/component/test_add_remove_network.py @@ -47,12 +47,12 @@ from marvin.integration.lib.common import (get_domain, list_events, list_zones, get_free_vlan, - get_hypervisor_type, update_resource_limit ) from marvin.integration.lib.utils import (validateList, - random_gen) + random_gen, + get_hypervisor_type) from marvin.cloudstackAPI import (addNicToVirtualMachine, removeNicFromVirtualMachine, diff --git a/test/integration/component/test_snapshots.py b/test/integration/component/test_snapshots.py index d3fac42d8c6..17579d63d4d 100644 --- a/test/integration/component/test_snapshots.py +++ b/test/integration/component/test_snapshots.py @@ -36,12 +36,13 @@ from marvin.integration.lib.common import (get_domain, list_snapshots, list_templates, list_virtual_machines, - get_hypervisor_type) + ) from marvin.integration.lib.utils import (cleanup_resources, format_volume_to_ext3, random_gen, - is_snapshot_on_nfs) + is_snapshot_on_nfs, + get_hypervisor_type) from marvin.cloudstackAPI import detachVolume import time diff --git a/tools/marvin/marvin/integration/lib/common.py b/tools/marvin/marvin/integration/lib/common.py index 096b0730092..d23d745af69 100644 --- a/tools/marvin/marvin/integration/lib/common.py +++ b/tools/marvin/marvin/integration/lib/common.py @@ -18,11 +18,56 @@ """ #Import Local Modules -from marvin.cloudstackAPI import * +from marvin.cloudstackAPI import (listConfigurations, + listPhysicalNetworks, + listRegions, + addNetworkServiceProvider, + updateNetworkServiceProvider, + listDomains, + listZones, + listPods, + listOsTypes, + listTemplates, + updateResourceLimit, + listRouters, + listNetworks, + listClusters, + listSystemVms, + listStoragePools, + listVirtualMachines, + listLoadBalancerRuleInstances, + listFirewallRules, + listVolumes, + listIsos, + listAccounts, + listSnapshotPolicies, + listDiskOfferings, + listVlanIpRanges, + listUsageRecords, + listNetworkServiceProviders, + listHosts, + listPublicIpAddresses, + listPortForwardingRules, + listLoadBalancerRules, + listSnapshots, + listUsers, + listEvents, + listServiceOfferings, + listVirtualRouterElements, + listNetworkOfferings, + listResourceLimits, + listVPCOfferings) +from marvin.integration.lib.base import (Configurations, + NetScaler, + Template, + Resources, + PhysicalNetwork, + Host) +from marvin.integration.lib.utils import (get_process_status, + xsplit) + from marvin.sshClient import SshClient -from utils import * -from base import * -from marvin.codes import PASS +import random #Import System modules import time @@ -91,7 +136,7 @@ def add_netscaler(apiclient, zoneid, NSservice): cmd = updateNetworkServiceProvider.updateNetworkServiceProviderCmd() cmd.id = netscaler_provider.id cmd.state = 'Enabled' - response = apiclient.updateNetworkServiceProvider(cmd) + apiclient.updateNetworkServiceProvider(cmd) return netscaler @@ -199,19 +244,6 @@ def get_template(apiclient, zoneid, ostype, services=None): ostypeid) return -def get_hypervisor_type(apiclient): - - """Return the hypervisor type of the hosts in setup""" - - hosts = list_hosts(apiclient, type='Routing', listall=True) - - hosts_list_validation_result = validateList(hosts) - - assert hosts_list_validation_result[0] == PASS, "host list validation failed" - - return hosts_list_validation_result[1].hypervisor - - def download_systemplates_sec_storage(server, services): """Download System templates on sec storage""" diff --git a/tools/marvin/marvin/integration/lib/utils.py b/tools/marvin/marvin/integration/lib/utils.py index d046235cee8..25ebe28d9b2 100644 --- a/tools/marvin/marvin/integration/lib/utils.py +++ b/tools/marvin/marvin/integration/lib/utils.py @@ -28,10 +28,13 @@ import email import socket import urlparse import datetime -from marvin.cloudstackAPI import * +from marvin.cloudstackAPI import cloudstackAPIClient, listHosts from marvin.sshClient import SshClient -from marvin.codes import * - +from marvin.codes import (FAIL, + PASS, + MATCH_NOT_FOUND, + INVALID_INPUT, + EMPTY_LIST) def restart_mgmt_server(server): """Restarts the management server""" @@ -237,6 +240,18 @@ def xsplit(txt, seps): txt = txt.replace(sep, default_sep) return [i.strip() for i in txt.split(default_sep)] +def get_hypervisor_type(apiclient): + + """Return the hypervisor type of the hosts in setup""" + + cmd = listHosts.listHostsCmd() + cmd.type = 'Routing' + cmd.listall = True + hosts = apiclient.listHosts(cmd) + hosts_list_validation_result = validateList(hosts) + assert hosts_list_validation_result[0] == PASS, "host list validation failed" + return hosts_list_validation_result[1].hypervisor + def is_snapshot_on_nfs(apiclient, dbconn, config, zoneid, snapshotid): """ Checks whether a snapshot with id (not UUID) `snapshotid` is present on the nfs storage @@ -248,8 +263,12 @@ def is_snapshot_on_nfs(apiclient, dbconn, config, zoneid, snapshotid): @param snapshotid: uuid of the snapshot @return: True if snapshot is found, False otherwise """ + # snapshot extension to be appended to the snapshot path obtained from db + snapshot_extensions = {"vmware": ".ovf", + "kvm": "", + "xenserver": ".vhd"} - from base import ImageStore, Snapshot + from base import ImageStore secondaryStores = ImageStore.list(apiclient, zoneid=zoneid) assert isinstance(secondaryStores, list), "Not a valid response for listImageStores" @@ -281,7 +300,9 @@ def is_snapshot_on_nfs(apiclient, dbconn, config, zoneid, snapshotid): #Snapshot does not exist return False - snapshotPath = qresultset[0][0] + hypervisor = get_hypervisor_type(apiclient) + # append snapshot extension based on hypervisor, to the snapshot path + snapshotPath = str(qresultset[0][0]) + snapshot_extensions[str(hypervisor).lower()] nfsurl = secondaryStore.url from urllib2 import urlparse