mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
marvin lib: changes for accomodating vpc related apis
new apis for the integration lib for VPCOffering, VPC, NetworkACL Apis. Also some extra checks from for avoiding KeyErrors in the Services dict.
This commit is contained in:
parent
432ea9c7d4
commit
864ab37e13
@ -203,16 +203,19 @@ class VirtualMachine:
|
|||||||
|
|
||||||
def __init__(self, items, services):
|
def __init__(self, items, services):
|
||||||
self.__dict__.update(items)
|
self.__dict__.update(items)
|
||||||
self.username = services["username"]
|
if "username" in services:
|
||||||
self.password = services["password"]
|
self.username = services["username"]
|
||||||
self.ssh_port = services["ssh_port"]
|
if "password" in services:
|
||||||
|
self.password = services["password"]
|
||||||
|
if "ssh_port" in services:
|
||||||
|
self.ssh_port = services["ssh_port"]
|
||||||
self.ssh_client = None
|
self.ssh_client = None
|
||||||
#extract out the ipaddress
|
#extract out the ipaddress
|
||||||
self.ipaddress = self.nic[0].ipaddress
|
self.ipaddress = self.nic[0].ipaddress
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, templateid=None, accountid=None,
|
def create(cls, apiclient, services, templateid=None, accountid=None,
|
||||||
domainid=None, networkids=None, serviceofferingid=None,
|
domainid=None, zoneid=None, networkids=None, serviceofferingid=None,
|
||||||
securitygroupids=None, projectid=None, startvm=None,
|
securitygroupids=None, projectid=None, startvm=None,
|
||||||
diskofferingid=None, hostid=None, mode='basic'):
|
diskofferingid=None, hostid=None, mode='basic'):
|
||||||
"""Create the instance"""
|
"""Create the instance"""
|
||||||
@ -224,7 +227,10 @@ class VirtualMachine:
|
|||||||
elif "serviceoffering" in services:
|
elif "serviceoffering" in services:
|
||||||
cmd.serviceofferingid = services["serviceoffering"]
|
cmd.serviceofferingid = services["serviceoffering"]
|
||||||
|
|
||||||
cmd.zoneid = services["zoneid"]
|
if zoneid:
|
||||||
|
cmd.zoneid = zoneid
|
||||||
|
elif "zoneid" in services:
|
||||||
|
cmd.zoneid = services["zoneid"]
|
||||||
cmd.hypervisor = services["hypervisor"]
|
cmd.hypervisor = services["hypervisor"]
|
||||||
|
|
||||||
if accountid:
|
if accountid:
|
||||||
@ -838,7 +844,7 @@ class PublicIPAddress:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, accountid=None, zoneid=None, domainid=None,
|
def create(cls, apiclient, accountid=None, zoneid=None, domainid=None,
|
||||||
services=None, networkid=None, projectid=None):
|
services=None, networkid=None, projectid=None, vpcid=None):
|
||||||
"""Associate Public IP address"""
|
"""Associate Public IP address"""
|
||||||
cmd = associateIpAddress.associateIpAddressCmd()
|
cmd = associateIpAddress.associateIpAddressCmd()
|
||||||
|
|
||||||
@ -860,6 +866,9 @@ class PublicIPAddress:
|
|||||||
|
|
||||||
if projectid:
|
if projectid:
|
||||||
cmd.projectid = projectid
|
cmd.projectid = projectid
|
||||||
|
|
||||||
|
if vpcid:
|
||||||
|
cmd.vpcid = vpcid
|
||||||
return PublicIPAddress(apiclient.associateIpAddress(cmd).__dict__)
|
return PublicIPAddress(apiclient.associateIpAddress(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -886,7 +895,7 @@ class NATRule:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, virtual_machine, services, ipaddressid=None,
|
def create(cls, apiclient, virtual_machine, services, ipaddressid=None,
|
||||||
projectid=None):
|
projectid=None, networkid=None):
|
||||||
"""Create Port forwarding rule"""
|
"""Create Port forwarding rule"""
|
||||||
cmd = createPortForwardingRule.createPortForwardingRuleCmd()
|
cmd = createPortForwardingRule.createPortForwardingRuleCmd()
|
||||||
|
|
||||||
@ -903,6 +912,9 @@ class NATRule:
|
|||||||
if projectid:
|
if projectid:
|
||||||
cmd.projectid = projectid
|
cmd.projectid = projectid
|
||||||
|
|
||||||
|
if networkid:
|
||||||
|
cmd.networkid = networkid
|
||||||
|
|
||||||
return NATRule(apiclient.createPortForwardingRule(cmd).__dict__)
|
return NATRule(apiclient.createPortForwardingRule(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -928,7 +940,7 @@ class StaticNATRule:
|
|||||||
self.__dict__.update(items)
|
self.__dict__.update(items)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, ipaddressid=None):
|
def create(cls, apiclient, services, ipaddressid=None, vpcid=None):
|
||||||
"""Creates static ip forwarding rule"""
|
"""Creates static ip forwarding rule"""
|
||||||
|
|
||||||
cmd = createIpForwardingRule.createIpForwardingRuleCmd()
|
cmd = createIpForwardingRule.createIpForwardingRuleCmd()
|
||||||
@ -946,6 +958,9 @@ class StaticNATRule:
|
|||||||
elif "ipaddressid" in services:
|
elif "ipaddressid" in services:
|
||||||
cmd.ipaddressid = services["ipaddressid"]
|
cmd.ipaddressid = services["ipaddressid"]
|
||||||
|
|
||||||
|
if vpcid:
|
||||||
|
cmd.vpcid = vpcid
|
||||||
|
|
||||||
return StaticNATRule(apiclient.createIpForwardingRule(cmd).__dict__)
|
return StaticNATRule(apiclient.createIpForwardingRule(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -991,7 +1006,7 @@ class FireWallRule:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, ipaddressid, protocol, cidrlist=None,
|
def create(cls, apiclient, ipaddressid, protocol, cidrlist=None,
|
||||||
startport=None, endport=None, projectid=None):
|
startport=None, endport=None, projectid=None, vpcid=None):
|
||||||
"""Create Firewall Rule"""
|
"""Create Firewall Rule"""
|
||||||
cmd = createFirewallRule.createFirewallRuleCmd()
|
cmd = createFirewallRule.createFirewallRuleCmd()
|
||||||
cmd.ipaddressid = ipaddressid
|
cmd.ipaddressid = ipaddressid
|
||||||
@ -1006,6 +1021,9 @@ class FireWallRule:
|
|||||||
if projectid:
|
if projectid:
|
||||||
cmd.projectid = projectid
|
cmd.projectid = projectid
|
||||||
|
|
||||||
|
if vpcid:
|
||||||
|
cmd.vpcid = vpcid
|
||||||
|
|
||||||
return FireWallRule(apiclient.createFirewallRule(cmd).__dict__)
|
return FireWallRule(apiclient.createFirewallRule(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -1039,7 +1057,7 @@ class ServiceOffering:
|
|||||||
cmd.displaytext = services["displaytext"]
|
cmd.displaytext = services["displaytext"]
|
||||||
cmd.memory = services["memory"]
|
cmd.memory = services["memory"]
|
||||||
cmd.name = services["name"]
|
cmd.name = services["name"]
|
||||||
if hasattr(cmd, "storagetype"):
|
if "storagetype" in services:
|
||||||
cmd.storagetype = services["storagetype"]
|
cmd.storagetype = services["storagetype"]
|
||||||
|
|
||||||
# Service Offering private to that domain
|
# Service Offering private to that domain
|
||||||
@ -1505,7 +1523,8 @@ class Network:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, accountid=None, domainid=None,
|
def create(cls, apiclient, services, accountid=None, domainid=None,
|
||||||
networkofferingid=None, projectid=None, zoneid=None):
|
networkofferingid=None, projectid=None, zoneid=None,
|
||||||
|
gateway=None, netmask=None, vpcid=None, guestcidr=None):
|
||||||
"""Create Network for account"""
|
"""Create Network for account"""
|
||||||
cmd = createNetwork.createNetworkCmd()
|
cmd = createNetwork.createNetworkCmd()
|
||||||
cmd.name = services["name"]
|
cmd.name = services["name"]
|
||||||
@ -1521,9 +1540,13 @@ class Network:
|
|||||||
elif "zoneid" in services:
|
elif "zoneid" in services:
|
||||||
cmd.zoneid = services["zoneid"]
|
cmd.zoneid = services["zoneid"]
|
||||||
|
|
||||||
if "gateway" in services:
|
if gateway:
|
||||||
|
cmd.gateway = gateway
|
||||||
|
elif "gateway" in services:
|
||||||
cmd.gateway = services["gateway"]
|
cmd.gateway = services["gateway"]
|
||||||
if "netmask" in services:
|
if netmask:
|
||||||
|
cmd.netmask = netmask
|
||||||
|
elif "netmask" in services:
|
||||||
cmd.netmask = services["netmask"]
|
cmd.netmask = services["netmask"]
|
||||||
if "startip" in services:
|
if "startip" in services:
|
||||||
cmd.startip = services["startip"]
|
cmd.startip = services["startip"]
|
||||||
@ -1540,7 +1563,10 @@ class Network:
|
|||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
if projectid:
|
if projectid:
|
||||||
cmd.projectid = projectid
|
cmd.projectid = projectid
|
||||||
|
if guestcidr:
|
||||||
|
cmd.guestcidr = guestcidr
|
||||||
|
if vpcid:
|
||||||
|
cmd.vpcid = vpcid
|
||||||
return Network(apiclient.createNetwork(cmd).__dict__)
|
return Network(apiclient.createNetwork(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -1576,6 +1602,50 @@ class Network:
|
|||||||
return(apiclient.listNetworks(cmd))
|
return(apiclient.listNetworks(cmd))
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkACL:
|
||||||
|
"""Manage Network ACL lifecycle"""
|
||||||
|
|
||||||
|
def __init__(self, items):
|
||||||
|
self.__dict__.update(items)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create(cls, apiclient, networkid, services, traffictype=None):
|
||||||
|
"""Create network ACL rules(Ingress/Egress)"""
|
||||||
|
|
||||||
|
cmd = createNetworkACL.createNetworkACLCmd()
|
||||||
|
cmd.networkid = networkid
|
||||||
|
if "protocol" in services:
|
||||||
|
cmd.protocol = services["protocol"]
|
||||||
|
|
||||||
|
if services["protocol"] == 'ICMP':
|
||||||
|
cmd.icmptype = -1
|
||||||
|
cmd.icmpcode = -1
|
||||||
|
else:
|
||||||
|
cmd.startport = services["startport"]
|
||||||
|
cmd.endport = services["endport"]
|
||||||
|
|
||||||
|
cmd.cidrlist = services["cidrlist"]
|
||||||
|
if traffictype:
|
||||||
|
cmd.traffictype = traffictype
|
||||||
|
# Defaulted to Ingress
|
||||||
|
return NetworkACL(apiclient.createNetworkACL(cmd).__dict__)
|
||||||
|
|
||||||
|
def delete(self, apiclient):
|
||||||
|
"""Delete network acl"""
|
||||||
|
|
||||||
|
cmd = deleteNetworkACL.deleteNetworkACLCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
return apiclient.deleteNetworkACL(cmd)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def list(cls, apiclient, **kwargs):
|
||||||
|
"""List Network ACLs"""
|
||||||
|
|
||||||
|
cmd = listNetworkACLs.listNetworkACLsCmd()
|
||||||
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
|
return(apiclient.listNetworkACLs(cmd))
|
||||||
|
|
||||||
|
|
||||||
class Vpn:
|
class Vpn:
|
||||||
"""Manage VPN life cycle"""
|
"""Manage VPN life cycle"""
|
||||||
|
|
||||||
@ -1584,7 +1654,7 @@ class Vpn:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, publicipid, account=None, domainid=None,
|
def create(cls, apiclient, publicipid, account=None, domainid=None,
|
||||||
projectid=None):
|
projectid=None, vpcid=None):
|
||||||
"""Create VPN for Public IP address"""
|
"""Create VPN for Public IP address"""
|
||||||
cmd = createRemoteAccessVpn.createRemoteAccessVpnCmd()
|
cmd = createRemoteAccessVpn.createRemoteAccessVpnCmd()
|
||||||
cmd.publicipid = publicipid
|
cmd.publicipid = publicipid
|
||||||
@ -1594,6 +1664,8 @@ class Vpn:
|
|||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
if projectid:
|
if projectid:
|
||||||
cmd.projectid = projectid
|
cmd.projectid = projectid
|
||||||
|
if vpcid:
|
||||||
|
cmd.vpcid = vpcid
|
||||||
return Vpn(apiclient.createRemoteAccessVpn(cmd).__dict__)
|
return Vpn(apiclient.createRemoteAccessVpn(cmd).__dict__)
|
||||||
|
|
||||||
def delete(self, apiclient):
|
def delete(self, apiclient):
|
||||||
@ -2211,3 +2283,106 @@ class NetworkServiceProvider:
|
|||||||
cmd = listNetworkServiceProviders.listNetworkServiceProvidersCmd()
|
cmd = listNetworkServiceProviders.listNetworkServiceProvidersCmd()
|
||||||
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
return(apiclient.listNetworkServiceProviders(cmd))
|
return(apiclient.listNetworkServiceProviders(cmd))
|
||||||
|
|
||||||
|
class VpcOffering:
|
||||||
|
"""Manage VPC offerings"""
|
||||||
|
|
||||||
|
def __init__(self, items):
|
||||||
|
self.__dict__.update(items)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create(cls, apiclient, services):
|
||||||
|
"""Create vpc offering"""
|
||||||
|
|
||||||
|
cmd = createVPCOffering.createVPCOfferingCmd()
|
||||||
|
cmd.name = "-".join([services["name"], random_gen()])
|
||||||
|
cmd.displaytext = services["displaytext"]
|
||||||
|
cmd.supportedServices = services["supportedservices"]
|
||||||
|
return VpcOffering(apiclient.createVPCOffering(cmd).__dict__)
|
||||||
|
|
||||||
|
def update(self, apiclient, name=None, displaytext=None, state=None):
|
||||||
|
"""Updates existing VPC offering"""
|
||||||
|
|
||||||
|
cmd = updateVPCOffering.updateVPCOfferingCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
if name:
|
||||||
|
cmd.name = name
|
||||||
|
if displaytext:
|
||||||
|
cmd.displaytext = displaytext
|
||||||
|
if state:
|
||||||
|
cmd.state = state
|
||||||
|
return apiclient.updateVPCOffering(cmd)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def list(cls, apiclient, **kwargs):
|
||||||
|
"""List the VPC offerings based on criteria specified"""
|
||||||
|
|
||||||
|
cmd = listVPCOfferings.listVPCOfferingsCmd()
|
||||||
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
|
return(apiclient.listVPCOfferings(cmd))
|
||||||
|
|
||||||
|
def delete(self, apiclient):
|
||||||
|
"""Deletes existing VPC offering"""
|
||||||
|
|
||||||
|
cmd = deleteVPCOffering.deleteVPCOfferingCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
return apiclient.deleteVPCOffering(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
class VPC:
|
||||||
|
"""Manage Virtual Private Connection"""
|
||||||
|
|
||||||
|
def __init__(self, items):
|
||||||
|
self.__dict__.update(items)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create(cls, apiclient, services, vpcofferingid,
|
||||||
|
zoneid, networkDomain=None, account=None, domainid=None):
|
||||||
|
"""Creates the virtual private connection (VPC)"""
|
||||||
|
|
||||||
|
cmd = createVPC.createVPCCmd()
|
||||||
|
cmd.name = "-".join([services["name"], random_gen()])
|
||||||
|
cmd.displaytext = "-".join([services["displaytext"], random_gen()])
|
||||||
|
cmd.vpcofferingid = vpcofferingid
|
||||||
|
cmd.zoneid = zoneid
|
||||||
|
cmd.cidr = services["cidr"]
|
||||||
|
if account:
|
||||||
|
cmd.account = account
|
||||||
|
if domainid:
|
||||||
|
cmd.domainid = domainid
|
||||||
|
if networkDomain:
|
||||||
|
cmd.networkDomain = networkDomain
|
||||||
|
return VPC(apiclient.createVPC(cmd).__dict__)
|
||||||
|
|
||||||
|
def update(self, apiclient, name=None, displaytext=None):
|
||||||
|
"""Updates VPC configurations"""
|
||||||
|
|
||||||
|
cmd = updateVPC.updateVPCCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
if name:
|
||||||
|
cmd.name = name
|
||||||
|
if displaytext:
|
||||||
|
cmd.displaytext = displaytext
|
||||||
|
return (apiclient.updateVPC(cmd))
|
||||||
|
|
||||||
|
def delete(self, apiclient):
|
||||||
|
"""Delete VPC network"""
|
||||||
|
|
||||||
|
cmd = deleteVPC.deleteVPCCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
return apiclient.deleteVPC(cmd)
|
||||||
|
|
||||||
|
def restart(self, apiclient):
|
||||||
|
"""Restarts the VPC connections"""
|
||||||
|
|
||||||
|
cmd = restartVPC.restartVPCCmd()
|
||||||
|
cmd.id = self.id
|
||||||
|
return apiclient.restartVPC(cmd)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def list(cls, apiclient, **kwargs):
|
||||||
|
"""List VPCs"""
|
||||||
|
|
||||||
|
cmd = listVPCs.listVPCsCmd()
|
||||||
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
|
return(apiclient.listVPCs(cmd))
|
||||||
|
|||||||
@ -559,3 +559,10 @@ def list_resource_limits(apiclient, **kwargs):
|
|||||||
cmd = listResourceLimits.listResourceLimitsCmd()
|
cmd = listResourceLimits.listResourceLimitsCmd()
|
||||||
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
return(apiclient.listResourceLimits(cmd))
|
return(apiclient.listResourceLimits(cmd))
|
||||||
|
|
||||||
|
def list_vpc_offerings(apiclient, **kwargs):
|
||||||
|
""" Lists VPC offerings """
|
||||||
|
|
||||||
|
cmd = listVPCOfferings.listVPCOfferingsCmd()
|
||||||
|
[setattr(cmd, k, v) for k, v in kwargs.items()]
|
||||||
|
return(apiclient.listVPCOfferings(cmd))
|
||||||
@ -21,9 +21,6 @@ import marvin
|
|||||||
import time
|
import time
|
||||||
from marvin.remoteSSHClient import remoteSSHClient
|
from marvin.remoteSSHClient import remoteSSHClient
|
||||||
from marvin.cloudstackAPI import *
|
from marvin.cloudstackAPI import *
|
||||||
from marvin import cloudstackConnection
|
|
||||||
#from cloudstackConnection import cloudConnection
|
|
||||||
from marvin import configGenerator
|
|
||||||
import logging
|
import logging
|
||||||
import string
|
import string
|
||||||
import random
|
import random
|
||||||
@ -136,12 +133,12 @@ def format_volume_to_ext3(ssh_client, device="/dev/sda"):
|
|||||||
|
|
||||||
def fetch_api_client(config_file='datacenterCfg'):
|
def fetch_api_client(config_file='datacenterCfg'):
|
||||||
"""Fetch the Cloudstack API Client"""
|
"""Fetch the Cloudstack API Client"""
|
||||||
config = configGenerator.get_setup_config(config_file)
|
config = marvin.configGenerator.get_setup_config(config_file)
|
||||||
mgt = config.mgtSvr[0]
|
mgt = config.mgtSvr[0]
|
||||||
testClientLogger = logging.getLogger("testClient")
|
testClientLogger = logging.getLogger("testClient")
|
||||||
asyncTimeout = 3600
|
asyncTimeout = 3600
|
||||||
return cloudstackAPIClient.CloudStackAPIClient(
|
return cloudstackAPIClient.CloudStackAPIClient(
|
||||||
cloudstackConnection.cloudConnection(
|
marvin.cloudstackConnection.cloudConnection(
|
||||||
mgt.mgtSvrIp,
|
mgt.mgtSvrIp,
|
||||||
mgt.port,
|
mgt.port,
|
||||||
mgt.apiKey,
|
mgt.apiKey,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user