mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
472 lines
16 KiB
Python
472 lines
16 KiB
Python
# -*- encoding: utf-8 -*-
|
|
# Copyright 2012 Citrix Systems, Inc. Licensed under the
|
|
# Apache License, Version 2.0 (the "License"); you may not use this
|
|
# file except in compliance with the License. Citrix Systems, Inc.
|
|
# reserves all rights not expressly granted by the License.
|
|
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Automatically generated by addcopyright.py at 04/03/2012
|
|
"""Common functions
|
|
"""
|
|
|
|
#Import Local Modules
|
|
import marvin
|
|
from marvin.cloudstackTestCase import *
|
|
from marvin.cloudstackAPI import *
|
|
from marvin.remoteSSHClient import remoteSSHClient
|
|
from utils import *
|
|
from base import *
|
|
|
|
#Import System modules
|
|
import time
|
|
|
|
def get_domain(apiclient, services=None):
|
|
"Returns a default domain"
|
|
|
|
cmd = listDomains.listDomainsCmd()
|
|
if services:
|
|
if "domainid" in services:
|
|
cmd.id = services["domainid"]
|
|
|
|
domains = apiclient.listDomains(cmd)
|
|
|
|
if isinstance(domains, list):
|
|
return domains[0]
|
|
else:
|
|
raise Exception("Failed to find specified domain.")
|
|
|
|
def get_zone(apiclient, services=None):
|
|
"Returns a default zone"
|
|
|
|
cmd = listZones.listZonesCmd()
|
|
if services:
|
|
if "zoneid" in services:
|
|
cmd.id = services["zoneid"]
|
|
|
|
zones = apiclient.listZones(cmd)
|
|
|
|
if isinstance(zones, list):
|
|
return zones[0]
|
|
else:
|
|
raise Exception("Failed to find specified zone.")
|
|
|
|
def get_pod(apiclient, zoneid, services=None):
|
|
"Returns a default pod for specified zone"
|
|
|
|
cmd = listPods.listPodsCmd()
|
|
cmd.zoneid = zoneid
|
|
|
|
if services:
|
|
if "podid" in services:
|
|
cmd.id = services["podid"]
|
|
|
|
pods = apiclient.listPods(cmd)
|
|
|
|
if isinstance(pods, list):
|
|
return pods[0]
|
|
else:
|
|
raise Exception("Exception: Failed to find specified pod.")
|
|
|
|
def get_template(apiclient, zoneid, ostypeid=12, services=None):
|
|
"Returns a template"
|
|
|
|
cmd = listTemplates.listTemplatesCmd()
|
|
cmd.templatefilter = 'featured'
|
|
cmd.zoneid = zoneid
|
|
|
|
if services:
|
|
if "template" in services:
|
|
cmd.id = services["template"]
|
|
|
|
list_templates = apiclient.listTemplates(cmd)
|
|
|
|
for template in list_templates:
|
|
if template.ostypeid == ostypeid:
|
|
return template
|
|
|
|
raise Exception("Exception: Failed to find template with OSTypeID: %s" %
|
|
ostypeid)
|
|
return
|
|
|
|
def download_systemplates_sec_storage(server, services):
|
|
"""Download System templates on sec storage"""
|
|
|
|
try:
|
|
# Login to management server
|
|
ssh = remoteSSHClient.remoteSSHClient(
|
|
server["ipaddress"],
|
|
server["port"],
|
|
server["username"],
|
|
server["password"]
|
|
)
|
|
except Exception as e:
|
|
raise Exception("SSH access failted for server with IP address: %s" %
|
|
server["ipaddess"])
|
|
# Mount Secondary Storage on Management Server
|
|
cmds = [
|
|
"mkdir -p %s" % services["mnt_dir"],
|
|
"mount -t nfs %s:/%s %s" % (
|
|
services["sec_storage"],
|
|
services["path"],
|
|
services["mnt_dir"]
|
|
),
|
|
"%s -m %s -u %s -h %s -F" % (
|
|
services["command"],
|
|
services["mnt_dir"],
|
|
services["download_url"],
|
|
services["hypervisor"]
|
|
)
|
|
]
|
|
for c in cmds:
|
|
result = ssh.execute(c)
|
|
|
|
res = str(result)
|
|
|
|
# Unmount the Secondary storage
|
|
ssh.execute("umount %s" % (services["mnt_dir"]))
|
|
|
|
if res.count("Successfully installed system VM template") == 1:
|
|
return
|
|
else:
|
|
raise Exception("Failed to download System Templates on Sec Storage")
|
|
return
|
|
|
|
def wait_for_ssvms(apiclient, zoneid, podid, interval=60):
|
|
"""After setup wait for SSVMs to come Up"""
|
|
|
|
time.sleep(interval)
|
|
timeout = 40
|
|
while True:
|
|
list_ssvm_response = list_ssvms(
|
|
apiclient,
|
|
systemvmtype='secondarystoragevm',
|
|
zoneid=zoneid,
|
|
podid=podid
|
|
)
|
|
ssvm = list_ssvm_response[0]
|
|
if ssvm.state != 'Running':
|
|
# Sleep to ensure SSVMs are Up and Running
|
|
time.sleep(interval)
|
|
timeout = timeout - 1
|
|
elif ssvm.state == 'Running':
|
|
break
|
|
elif timeout == 0:
|
|
raise Exception("SSVM failed to come up")
|
|
break
|
|
|
|
timeout = 40
|
|
while True:
|
|
list_ssvm_response = list_ssvms(
|
|
apiclient,
|
|
systemvmtype='consoleproxy',
|
|
zoneid=zoneid,
|
|
podid=podid
|
|
)
|
|
cpvm = list_ssvm_response[0]
|
|
if cpvm.state != 'Running':
|
|
# Sleep to ensure SSVMs are Up and Running
|
|
time.sleep(interval)
|
|
timeout = timeout - 1
|
|
elif cpvm.state == 'Running':
|
|
break
|
|
elif timeout == 0:
|
|
raise Exception("CPVM failed to come up")
|
|
break
|
|
return
|
|
|
|
def download_builtin_templates(apiclient, zoneid, hypervisor, host, linklocalip, interval=60):
|
|
"""After setup wait till builtin templates are downloaded"""
|
|
|
|
# Change IPTABLES Rules
|
|
result = get_process_status(
|
|
host["ipaddress"],
|
|
host["port"],
|
|
host["username"],
|
|
host["password"],
|
|
linklocalip,
|
|
"iptables -P INPUT ACCEPT"
|
|
)
|
|
time.sleep(interval)
|
|
# Find the BUILTIN Templates for given Zone, Hypervisor
|
|
list_template_response = list_templates(
|
|
apiclient,
|
|
hypervisor=hypervisor,
|
|
zoneid=zoneid,
|
|
templatefilter='self'
|
|
)
|
|
|
|
if not isinstance(list_template_response, list):
|
|
raise Exception("Failed to download BUILTIN templates")
|
|
|
|
# Ensure all BUILTIN templates are downloaded
|
|
templateid = None
|
|
for template in list_template_response:
|
|
if template.templatetype == "BUILTIN":
|
|
templateid = template.id
|
|
|
|
# Sleep to ensure that template is in downloading state after adding
|
|
# Sec storage
|
|
time.sleep(interval)
|
|
while True:
|
|
template_response = list_templates(
|
|
apiclient,
|
|
id=templateid,
|
|
zoneid=zoneid,
|
|
templatefilter='self'
|
|
)
|
|
template = template_response[0]
|
|
# If template is ready,
|
|
# template.status = Download Complete
|
|
# Downloading - x% Downloaded
|
|
# Error - Any other string
|
|
if template.status == 'Download Complete':
|
|
break
|
|
|
|
elif 'Downloaded' in template.status:
|
|
time.sleep(interval)
|
|
|
|
elif 'Installing' not in template.status:
|
|
raise Exception("ErrorInDownload")
|
|
|
|
return
|
|
|
|
def update_resource_limit(apiclient, resourcetype, account=None, domainid=None,
|
|
max=None, projectid=None):
|
|
"""Updates the resource limit to 'max' for given account"""
|
|
|
|
cmd = updateResourceLimit.updateResourceLimitCmd()
|
|
cmd.resourcetype = resourcetype
|
|
if account:
|
|
cmd.account = account
|
|
if domainid:
|
|
cmd.domainid = domainid
|
|
if max:
|
|
cmd.max = max
|
|
if projectid:
|
|
cmd.projectid = projectid
|
|
apiclient.updateResourceLimit(cmd)
|
|
return
|
|
|
|
def list_routers(apiclient, **kwargs):
|
|
"""List all Routers matching criteria"""
|
|
|
|
cmd = listRouters.listRoutersCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listRouters(cmd))
|
|
|
|
def list_zones(apiclient, **kwargs):
|
|
"""List all Zones matching criteria"""
|
|
|
|
cmd = listZones.listZonesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listZones(cmd))
|
|
|
|
def list_networks(apiclient, **kwargs):
|
|
"""List all Networks matching criteria"""
|
|
|
|
cmd = listNetworks.listNetworksCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listNetworks(cmd))
|
|
|
|
def list_clusters(apiclient, **kwargs):
|
|
"""List all Clusters matching criteria"""
|
|
|
|
cmd = listClusters.listClustersCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listClusters(cmd))
|
|
|
|
def list_ssvms(apiclient, **kwargs):
|
|
"""List all SSVMs matching criteria"""
|
|
|
|
cmd = listSystemVms.listSystemVmsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listSystemVms(cmd))
|
|
|
|
def list_storage_pools(apiclient, **kwargs):
|
|
"""List all storage pools matching criteria"""
|
|
|
|
cmd = listStoragePools.listStoragePoolsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listStoragePools(cmd))
|
|
|
|
def list_virtual_machines(apiclient, **kwargs):
|
|
"""List all VMs matching criteria"""
|
|
|
|
cmd = listVirtualMachines.listVirtualMachinesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listVirtualMachines(cmd))
|
|
|
|
def list_hosts(apiclient, **kwargs):
|
|
"""List all Hosts matching criteria"""
|
|
|
|
cmd = listHosts.listHostsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listHosts(cmd))
|
|
|
|
def list_configurations(apiclient, **kwargs):
|
|
"""List configuration with specified name"""
|
|
|
|
cmd = listConfigurations.listConfigurationsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listConfigurations(cmd))
|
|
|
|
def list_publicIP(apiclient, **kwargs):
|
|
"""List all Public IPs matching criteria"""
|
|
|
|
cmd = listPublicIpAddresses.listPublicIpAddressesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listPublicIpAddresses(cmd))
|
|
|
|
def list_nat_rules(apiclient, **kwargs):
|
|
"""List all NAT rules matching criteria"""
|
|
|
|
cmd = listPortForwardingRules.listPortForwardingRulesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listPortForwardingRules(cmd))
|
|
|
|
def list_lb_rules(apiclient, **kwargs):
|
|
"""List all Load balancing rules matching criteria"""
|
|
|
|
cmd = listLoadBalancerRules.listLoadBalancerRulesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listLoadBalancerRules(cmd))
|
|
|
|
def list_lb_instances(apiclient, **kwargs):
|
|
"""List all Load balancing instances matching criteria"""
|
|
|
|
cmd = listLoadBalancerRuleInstances.listLoadBalancerRuleInstancesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listLoadBalancerRuleInstances(cmd))
|
|
|
|
def list_firewall_rules(apiclient, **kwargs):
|
|
"""List all Firewall Rules matching criteria"""
|
|
|
|
cmd = listFirewallRules.listFirewallRulesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listFirewallRules(cmd))
|
|
|
|
def list_volumes(apiclient, **kwargs):
|
|
"""List all volumes matching criteria"""
|
|
|
|
cmd = listVolumes.listVolumesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listVolumes(cmd))
|
|
|
|
def list_isos(apiclient, **kwargs):
|
|
"""Lists all available ISO files."""
|
|
|
|
cmd = listIsos.listIsosCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listIsos(cmd))
|
|
|
|
def list_snapshots(apiclient, **kwargs):
|
|
"""List all snapshots matching criteria"""
|
|
|
|
cmd = listSnapshots.listSnapshotsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listSnapshots(cmd))
|
|
|
|
def list_templates(apiclient, **kwargs):
|
|
"""List all templates matching criteria"""
|
|
|
|
cmd = listTemplates.listTemplatesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listTemplates(cmd))
|
|
|
|
def list_domains(apiclient, **kwargs):
|
|
"""Lists domains"""
|
|
|
|
cmd = listDomains.listDomainsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listDomains(cmd))
|
|
|
|
def list_accounts(apiclient, **kwargs):
|
|
"""Lists accounts and provides detailed account information for
|
|
listed accounts"""
|
|
|
|
cmd = listAccounts.listAccountsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listAccounts(cmd))
|
|
|
|
def list_users(apiclient, **kwargs):
|
|
"""Lists users and provides detailed account information for
|
|
listed users"""
|
|
|
|
cmd = listUsers.listUsersCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listUsers(cmd))
|
|
|
|
def list_snapshot_policy(apiclient, **kwargs):
|
|
"""Lists snapshot policies."""
|
|
|
|
cmd = listSnapshotPolicies.listSnapshotPoliciesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listSnapshotPolicies(cmd))
|
|
|
|
def list_events(apiclient, **kwargs):
|
|
"""Lists events"""
|
|
|
|
cmd = listEvents.listEventsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listEvents(cmd))
|
|
|
|
def list_disk_offering(apiclient, **kwargs):
|
|
"""Lists all available disk offerings."""
|
|
|
|
cmd = listDiskOfferings.listDiskOfferingsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listDiskOfferings(cmd))
|
|
|
|
def list_service_offering(apiclient, **kwargs):
|
|
"""Lists all available service offerings."""
|
|
|
|
cmd = listServiceOfferings.listServiceOfferingsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listServiceOfferings(cmd))
|
|
|
|
def list_vlan_ipranges(apiclient, **kwargs):
|
|
"""Lists all VLAN IP ranges."""
|
|
|
|
cmd = listVlanIpRanges.listVlanIpRangesCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listVlanIpRanges(cmd))
|
|
|
|
def list_usage_records(apiclient, **kwargs):
|
|
"""Lists usage records for accounts"""
|
|
|
|
cmd = listUsageRecords.listUsageRecordsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listUsageRecords(cmd))
|
|
|
|
def list_nw_service_prividers(apiclient, **kwargs):
|
|
"""Lists Network service providers"""
|
|
|
|
cmd = listNetworkServiceProviders.listNetworkServiceProvidersCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listNetworkServiceProviders(cmd))
|
|
|
|
def list_virtual_router_elements(apiclient, **kwargs):
|
|
"""Lists Virtual Router elements"""
|
|
|
|
cmd = listVirtualRouterElements.listVirtualRouterElementsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listVirtualRouterElements(cmd))
|
|
|
|
def list_network_offerings(apiclient, **kwargs):
|
|
"""Lists network offerings"""
|
|
|
|
cmd = listNetworkOfferings.listNetworkOfferingsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listNetworkOfferings(cmd))
|
|
|
|
def list_resource_limits(apiclient, **kwargs):
|
|
"""Lists resource limits"""
|
|
|
|
cmd = listResourceLimits.listResourceLimitsCmd()
|
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
|
return(apiclient.listResourceLimits(cmd)) |