CLOUDSTACK-4780: Changes related to checking snapshot on NFS server

This commit is contained in:
Gaurav Aradhye 2013-12-19 10:21:33 +05:30 committed by Girish Shilamkar
parent 13ba5e45a1
commit 33fb241fdf
4 changed files with 81 additions and 27 deletions

View File

@ -47,12 +47,12 @@ from marvin.integration.lib.common import (get_domain,
list_events, list_events,
list_zones, list_zones,
get_free_vlan, get_free_vlan,
get_hypervisor_type,
update_resource_limit update_resource_limit
) )
from marvin.integration.lib.utils import (validateList, from marvin.integration.lib.utils import (validateList,
random_gen) random_gen,
get_hypervisor_type)
from marvin.cloudstackAPI import (addNicToVirtualMachine, from marvin.cloudstackAPI import (addNicToVirtualMachine,
removeNicFromVirtualMachine, removeNicFromVirtualMachine,

View File

@ -36,12 +36,13 @@ from marvin.integration.lib.common import (get_domain,
list_snapshots, list_snapshots,
list_templates, list_templates,
list_virtual_machines, list_virtual_machines,
get_hypervisor_type) )
from marvin.integration.lib.utils import (cleanup_resources, from marvin.integration.lib.utils import (cleanup_resources,
format_volume_to_ext3, format_volume_to_ext3,
random_gen, random_gen,
is_snapshot_on_nfs) is_snapshot_on_nfs,
get_hypervisor_type)
from marvin.cloudstackAPI import detachVolume from marvin.cloudstackAPI import detachVolume
import time import time

View File

@ -18,11 +18,56 @@
""" """
#Import Local Modules #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 marvin.sshClient import SshClient
from utils import * import random
from base import *
from marvin.codes import PASS
#Import System modules #Import System modules
import time import time
@ -91,7 +136,7 @@ def add_netscaler(apiclient, zoneid, NSservice):
cmd = updateNetworkServiceProvider.updateNetworkServiceProviderCmd() cmd = updateNetworkServiceProvider.updateNetworkServiceProviderCmd()
cmd.id = netscaler_provider.id cmd.id = netscaler_provider.id
cmd.state = 'Enabled' cmd.state = 'Enabled'
response = apiclient.updateNetworkServiceProvider(cmd) apiclient.updateNetworkServiceProvider(cmd)
return netscaler return netscaler
@ -199,19 +244,6 @@ def get_template(apiclient, zoneid, ostype, services=None):
ostypeid) ostypeid)
return 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): def download_systemplates_sec_storage(server, services):
"""Download System templates on sec storage""" """Download System templates on sec storage"""

View File

@ -28,10 +28,13 @@ import email
import socket import socket
import urlparse import urlparse
import datetime import datetime
from marvin.cloudstackAPI import * from marvin.cloudstackAPI import cloudstackAPIClient, listHosts
from marvin.sshClient import SshClient 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): def restart_mgmt_server(server):
"""Restarts the management server""" """Restarts the management server"""
@ -237,6 +240,18 @@ def xsplit(txt, seps):
txt = txt.replace(sep, default_sep) txt = txt.replace(sep, default_sep)
return [i.strip() for i in txt.split(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): 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 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 @param snapshotid: uuid of the snapshot
@return: True if snapshot is found, False otherwise @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) secondaryStores = ImageStore.list(apiclient, zoneid=zoneid)
assert isinstance(secondaryStores, list), "Not a valid response for listImageStores" 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 #Snapshot does not exist
return False 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 nfsurl = secondaryStore.url
from urllib2 import urlparse from urllib2 import urlparse