You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2012/12/12 20:09:46 UTC

git commit: marvin lib: changes for accomodating vpc related apis

Updated Branches:
  refs/heads/master 432ea9c7d -> 864ab37e1


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.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/864ab37e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/864ab37e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/864ab37e

Branch: refs/heads/master
Commit: 864ab37e13476d8c58b19a004a68fe7e5b2c5955
Parents: 432ea9c
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Wed Dec 12 11:07:28 2012 -0800
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Dec 12 11:07:28 2012 -0800

----------------------------------------------------------------------
 tools/marvin/marvin/integration/lib/base.py   |  207 ++++++++++++++++++--
 tools/marvin/marvin/integration/lib/common.py |    7 +
 tools/marvin/marvin/integration/lib/utils.py  |    7 +-
 3 files changed, 200 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/864ab37e/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index 149a47c..e8c3b25 100644
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -203,16 +203,19 @@ class VirtualMachine:
 
     def __init__(self, items, services):
         self.__dict__.update(items)
-        self.username = services["username"]
-        self.password = services["password"]
-        self.ssh_port = services["ssh_port"]
+        if "username" in services:
+            self.username = services["username"]
+        if "password" in services:
+            self.password = services["password"]
+        if "ssh_port" in services:
+            self.ssh_port = services["ssh_port"]
         self.ssh_client = None
         #extract out the ipaddress
         self.ipaddress = self.nic[0].ipaddress
 
     @classmethod
     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,
                     diskofferingid=None, hostid=None, mode='basic'):
         """Create the instance"""
@@ -224,7 +227,10 @@ class VirtualMachine:
         elif "serviceoffering" in services:
             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"]
 
         if accountid:
@@ -838,7 +844,7 @@ class PublicIPAddress:
 
     @classmethod
     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"""
         cmd = associateIpAddress.associateIpAddressCmd()
 
@@ -860,6 +866,9 @@ class PublicIPAddress:
 
         if projectid:
             cmd.projectid = projectid
+
+        if vpcid:
+            cmd.vpcid = vpcid
         return PublicIPAddress(apiclient.associateIpAddress(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -886,7 +895,7 @@ class NATRule:
 
     @classmethod
     def create(cls, apiclient, virtual_machine, services, ipaddressid=None,
-                                                            projectid=None):
+                                                            projectid=None, networkid=None):
         """Create Port forwarding rule"""
         cmd = createPortForwardingRule.createPortForwardingRuleCmd()
 
@@ -903,6 +912,9 @@ class NATRule:
         if projectid:
             cmd.projectid = projectid
 
+        if networkid:
+            cmd.networkid = networkid
+
         return NATRule(apiclient.createPortForwardingRule(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -928,7 +940,7 @@ class StaticNATRule:
         self.__dict__.update(items)
 
     @classmethod
-    def create(cls, apiclient, services, ipaddressid=None):
+    def create(cls, apiclient, services, ipaddressid=None, vpcid=None):
         """Creates static ip forwarding rule"""
 
         cmd = createIpForwardingRule.createIpForwardingRuleCmd()
@@ -946,6 +958,9 @@ class StaticNATRule:
         elif "ipaddressid" in services:
             cmd.ipaddressid = services["ipaddressid"]
 
+        if vpcid:
+            cmd.vpcid = vpcid
+
         return StaticNATRule(apiclient.createIpForwardingRule(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -991,7 +1006,7 @@ class FireWallRule:
 
     @classmethod
     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"""
         cmd = createFirewallRule.createFirewallRuleCmd()
         cmd.ipaddressid = ipaddressid
@@ -1006,6 +1021,9 @@ class FireWallRule:
         if projectid:
             cmd.projectid = projectid
 
+        if vpcid:
+            cmd.vpcid = vpcid
+
         return FireWallRule(apiclient.createFirewallRule(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -1039,7 +1057,7 @@ class ServiceOffering:
         cmd.displaytext = services["displaytext"]
         cmd.memory = services["memory"]
         cmd.name = services["name"]
-        if hasattr(cmd, "storagetype"):
+        if "storagetype" in services:
             cmd.storagetype = services["storagetype"]
 
         # Service Offering private to that domain
@@ -1505,7 +1523,8 @@ class Network:
 
     @classmethod
     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"""
         cmd = createNetwork.createNetworkCmd()
         cmd.name = services["name"]
@@ -1521,9 +1540,13 @@ class Network:
         elif "zoneid" in services:
             cmd.zoneid = services["zoneid"]
 
-        if "gateway" in services:
+        if gateway:
+            cmd.gateway = gateway
+        elif "gateway" in services:
             cmd.gateway = services["gateway"]
-        if "netmask" in services:
+        if netmask:
+            cmd.netmask = netmask
+        elif "netmask" in services:
             cmd.netmask = services["netmask"]
         if "startip" in services:
             cmd.startip = services["startip"]
@@ -1540,7 +1563,10 @@ class Network:
             cmd.domainid = domainid
         if projectid:
             cmd.projectid = projectid
-
+        if guestcidr:
+            cmd.guestcidr = guestcidr
+        if vpcid:
+            cmd.vpcid = vpcid
         return Network(apiclient.createNetwork(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -1564,7 +1590,7 @@ class Network:
         cmd = restartNetwork.restartNetworkCmd()
         cmd.id = self.id
         if cleanup:
-            cmd.cleanup = cleanup 
+            cmd.cleanup = cleanup
         return(apiclient.restartNetwork(cmd))
 
     @classmethod
@@ -1576,6 +1602,50 @@ class Network:
         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:
     """Manage VPN life cycle"""
 
@@ -1584,7 +1654,7 @@ class Vpn:
 
     @classmethod
     def create(cls, apiclient, publicipid, account=None, domainid=None,
-                                                            projectid=None):
+                                                            projectid=None, vpcid=None):
         """Create VPN for Public IP address"""
         cmd = createRemoteAccessVpn.createRemoteAccessVpnCmd()
         cmd.publicipid = publicipid
@@ -1594,6 +1664,8 @@ class Vpn:
             cmd.domainid = domainid
         if projectid:
             cmd.projectid = projectid
+        if vpcid:
+            cmd.vpcid = vpcid
         return Vpn(apiclient.createRemoteAccessVpn(cmd).__dict__)
 
     def delete(self, apiclient):
@@ -2211,3 +2283,106 @@ class NetworkServiceProvider:
         cmd = listNetworkServiceProviders.listNetworkServiceProvidersCmd()
         [setattr(cmd, k, v) for k, v in kwargs.items()]
         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))

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/864ab37e/tools/marvin/marvin/integration/lib/common.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/common.py b/tools/marvin/marvin/integration/lib/common.py
index cc9e6cb..5f90110 100644
--- a/tools/marvin/marvin/integration/lib/common.py
+++ b/tools/marvin/marvin/integration/lib/common.py
@@ -559,3 +559,10 @@ def list_resource_limits(apiclient, **kwargs):
     cmd = listResourceLimits.listResourceLimitsCmd()
     [setattr(cmd, k, v) for k, v in kwargs.items()]
     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))
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/864ab37e/tools/marvin/marvin/integration/lib/utils.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/utils.py b/tools/marvin/marvin/integration/lib/utils.py
index 05aed79..cff24a1 100644
--- a/tools/marvin/marvin/integration/lib/utils.py
+++ b/tools/marvin/marvin/integration/lib/utils.py
@@ -21,9 +21,6 @@ import marvin
 import time
 from marvin.remoteSSHClient import remoteSSHClient
 from marvin.cloudstackAPI import *
-from marvin import cloudstackConnection
-#from cloudstackConnection import cloudConnection
-from marvin import configGenerator
 import logging
 import string
 import random
@@ -136,12 +133,12 @@ def format_volume_to_ext3(ssh_client, device="/dev/sda"):
 
 def fetch_api_client(config_file='datacenterCfg'):
     """Fetch the Cloudstack API Client"""
-    config = configGenerator.get_setup_config(config_file)
+    config = marvin.configGenerator.get_setup_config(config_file)
     mgt = config.mgtSvr[0]
     testClientLogger = logging.getLogger("testClient")
     asyncTimeout = 3600
     return cloudstackAPIClient.CloudStackAPIClient(
-            cloudstackConnection.cloudConnection(
+            marvin.cloudstackConnection.cloudConnection(
                                                 mgt.mgtSvrIp,
                                                 mgt.port,
                                                 mgt.apiKey,