You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2012/07/02 15:08:42 UTC

[1/2] git commit: Applying patch from Prasanna Santhanam Marvin sandbox example scripts for generating one host configurations https://reviews.apache.org/r/5656

Updated Branches:
  refs/heads/master 1a2f354f4 -> 91fd3b772


Applying patch from Prasanna Santhanam
Marvin sandbox example scripts for generating one host configurations
https://reviews.apache.org/r/5656


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

Branch: refs/heads/master
Commit: 91fd3b772e338b7cf4f2ecc15ed81af82f939329
Parents: ad3ae75
Author: David Nalley <da...@gnsa.us>
Authored: Mon Jul 2 09:08:51 2012 -0400
Committer: David Nalley <da...@gnsa.us>
Committed: Mon Jul 2 09:08:51 2012 -0400

----------------------------------------------------------------------
 tools/marvin/marvin/deployDataCenter.py            |   22 ++--
 .../marvin/marvin/sandbox/advanced/advanced_env.py |   41 +++--
 .../marvin/sandbox/advanced/setup.properties       |   22 ++-
 tools/marvin/marvin/sandbox/basic/basic_env.py     |  134 +++++++++++++++
 tools/marvin/setup.py                              |    2 +-
 5 files changed, 190 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/91fd3b77/tools/marvin/marvin/deployDataCenter.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py
index 39b5e4e..5c7880e 100644
--- a/tools/marvin/marvin/deployDataCenter.py
+++ b/tools/marvin/marvin/deployDataCenter.py
@@ -83,7 +83,7 @@ class deployDataCenters():
             primarycmd.clusterid = clusterId
             self.apiClient.createStoragePool(primarycmd)
 
-    def createpods(self, pods, zone, zoneId):
+    def createpods(self, pods, zone, zoneId, networkId=None):
         if pods is None:
             return
         for pod in pods:
@@ -97,9 +97,9 @@ class deployDataCenters():
             createpodResponse = self.apiClient.createPod(createpod)
             podId = createpodResponse.id
 
-            if pod.guestIpRanges is not None:
+            if pod.guestIpRanges is not None and networkId is not None:
                 self.createVlanIpRanges("Basic", pod.guestIpRanges, zoneId,\
-                                        podId)
+                                        podId, networkId)
 
             self.createClusters(pod.clusters, zoneId, podId)
 
@@ -155,8 +155,7 @@ class deployDataCenters():
 
             networkcmdresponse = self.apiClient.createNetwork(networkcmd)
             networkId = networkcmdresponse.id
-
-            self.createVlanIpRanges(mode, ipranges, zoneId, networkId)
+            return networkId
 
     def createPhysicalNetwork(self, name, zoneid, vlan=None):
         phynet = createPhysicalNetwork.createPhysicalNetworkCmd()
@@ -249,13 +248,12 @@ class deployDataCenters():
             phynetwrk = self.createPhysicalNetwork(zone.name + "-pnet", \
                                                    zoneId)
 
-            self.addTrafficTypes(phynetwrk.id, ["Guest", "Public", \
-                                                    "Management"])
-
             self.configureProviders(phynetwrk, zone)
             self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=zone.vlan)
 
             if zone.networktype == "Basic":
+                self.addTrafficTypes(phynetwrk.id, ["Guest", "Management"])
+                
                 listnetworkoffering = \
                 listNetworkOfferings.listNetworkOfferingsCmd()
 
@@ -271,11 +269,13 @@ class deployDataCenters():
                 guestntwrk.zoneid = zoneId
                 guestntwrk.networkofferingid = \
                         listnetworkofferingresponse[0].id
-                self.createnetworks([guestntwrk], zoneId, zone.networktype)
-
-            self.createpods(zone.pods, zone, zoneId)
+                networkid = self.createnetworks([guestntwrk], zoneId, zone.networktype)
+                self.createpods(zone.pods, zone, zoneId, networkid)
 
             if zone.networktype == "Advanced":
+                self.createpods(zone.pods, zone, zoneId)
+                self.addTrafficTypes(phynetwrk.id, ["Guest", "Public", \
+                                                    "Management"])
                 self.createVlanIpRanges(zone.networktype, zone.ipranges, \
                                         zoneId)
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/91fd3b77/tools/marvin/marvin/sandbox/advanced/advanced_env.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/advanced/advanced_env.py b/tools/marvin/marvin/sandbox/advanced/advanced_env.py
index 25e83db..fa504c3 100644
--- a/tools/marvin/marvin/sandbox/advanced/advanced_env.py
+++ b/tools/marvin/marvin/sandbox/advanced/advanced_env.py
@@ -1,5 +1,20 @@
 #!/usr/bin/env python
-
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with 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.
 '''
 ############################################################
 # Experimental state of scripts 
@@ -7,11 +22,11 @@
 #    * Only a sandbox
 ############################################################
 '''
-
+import random
+import marvin
 from ConfigParser import SafeConfigParser
 from optparse import OptionParser
-from configGenerator import *
-import random
+from marvin.configGenerator import *
 
 
 def getGlobalSettings(config):
@@ -28,7 +43,7 @@ def describeResources(config):
     z = zone()
     z.dns1 = config.get('environment', 'dns')
     z.internaldns1 = config.get('environment', 'dns')
-    z.name = 'Sandbox-%s'%(config.get('environment', 'hypervisor'))
+    z.name = 'Sandbox-%s'%(config.get('cloudstack', 'hypervisor'))
     z.networktype = 'Advanced'
     z.guestcidraddress = '10.1.1.0/24'
 
@@ -37,37 +52,37 @@ def describeResources(config):
     p.gateway = config.get('cloudstack', 'private.gateway')
     p.startip =  config.get('cloudstack', 'private.pod.startip')
     p.endip =  config.get('cloudstack', 'private.pod.endip')
-    p.netmask = '255.255.255.0'
+    p.netmask = config.get('cloudstack', 'private.netmask')
 
     v = iprange()
     v.gateway = config.get('cloudstack', 'public.gateway')
     v.startip = config.get('cloudstack', 'public.vlan.startip')
     v.endip = config.get('cloudstack', 'public.vlan.endip') 
-    v.netmask = '255.255.255.0'
+    v.netmask = config.get('cloudstack', 'public.netmask')
     v.vlan = config.get('cloudstack', 'public.vlan')
     z.ipranges.append(v)
 
     c = cluster()
     c.clustername = 'C0'
-    c.hypervisor = config.get('environment', 'hypervisor')
+    c.hypervisor = config.get('cloudstack', 'hypervisor')
     c.clustertype = 'CloudManaged'
 
     h = host()
     h.username = 'root'
-    h.password = 'password'
+    h.password = config.get('cloudstack', 'host.password')
     h.url = 'http://%s'%(config.get('cloudstack', 'host'))
     c.hosts.append(h)
 
     ps = primaryStorage()
     ps.name = 'PS0'
-    ps.url = config.get('cloudstack', 'pool')
+    ps.url = config.get('cloudstack', 'primary.pool')
     c.primaryStorages.append(ps)
 
     p.clusters.append(c)
     z.pods.append(p)
 
     secondary = secondaryStorage()
-    secondary.url = config.get('cloudstack', 'secondary')
+    secondary.url = config.get('cloudstack', 'secondary.pool')
     z.secondaryStorages.append(secondary)
 
     '''Add zone'''
@@ -80,7 +95,9 @@ def describeResources(config):
 
     '''Add a database'''
     db = dbServer()
-    db.dbSvr = config.get('environment', 'database')
+    db.dbSvr = config.get('environment', 'mysql.host')
+    db.user = config.get('environment', 'mysql.cloud.user')
+    db.passwd = config.get('environment', 'mysql.cloud.passwd')
     zs.dbSvr = db
 
     '''Add some configuration'''

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/91fd3b77/tools/marvin/marvin/sandbox/advanced/setup.properties
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/advanced/setup.properties b/tools/marvin/marvin/sandbox/advanced/setup.properties
index 48b082e..9c025f5 100644
--- a/tools/marvin/marvin/sandbox/advanced/setup.properties
+++ b/tools/marvin/marvin/sandbox/advanced/setup.properties
@@ -1,4 +1,5 @@
 [globals]
+#global settings in cloudstack
 expunge.delay=60
 expunge.interval=60
 storage.cleanup.interval=300
@@ -17,20 +18,27 @@ secstorage.allowed.internal.sites=10.147.28.0/24
 [environment]
 dns=10.147.28.6
 mshost=10.147.29.111
-database=10.147.29.111
+mysql.host=10.147.29.111
+mysql.cloud.user=cloud
+mysql.cloud.passwd=cloud
 [cloudstack]
+#guest VLAN
 zone.vlan=675-679
-#pod configuration
+#management network
 private.gateway=10.147.29.1
 private.pod.startip=10.147.29.150
 private.pod.endip=10.147.29.159
-#public vlan range
+private.netmask=255.255.255.0
+#public network
 public.gateway=10.147.31.1
 public.vlan=31
 public.vlan.startip=10.147.31.150
 public.vlan.endip=10.147.31.159
-#hosts
+public.netmask=255.255.255.0
+#hypervisor host information
+hypervisor=XenServer
 host=10.147.29.58
-#pools
-pool=nfs://10.147.28.6:/export/home/sandbox/kamakura
-secondary=nfs://10.147.28.6:/export/home/sandbox/sstor
+host.password=password
+#storage pools
+primary.pool=nfs://10.147.28.6:/export/home/sandbox/kamakura
+secondary.pool=nfs://10.147.28.6:/export/home/sandbox/sstor

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/91fd3b77/tools/marvin/marvin/sandbox/basic/basic_env.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/basic/basic_env.py b/tools/marvin/marvin/sandbox/basic/basic_env.py
index e69de29..6274a2b 100644
--- a/tools/marvin/marvin/sandbox/basic/basic_env.py
+++ b/tools/marvin/marvin/sandbox/basic/basic_env.py
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with 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.
+
+'''
+############################################################
+# Experimental state of scripts 
+#    * Need to be reviewed
+#    * Only a sandbox
+############################################################
+'''
+import random
+import marvin
+from ConfigParser import SafeConfigParser
+from optparse import OptionParser
+from marvin.configGenerator import *
+
+
+def getGlobalSettings(config):
+   for k, v in dict(config.items('globals')).iteritems():
+        cfg = configuration()
+        cfg.name = k
+        cfg.value = v
+        yield cfg
+
+
+def describeResources(config):
+    zs = cloudstackConfiguration()
+
+    z = zone()
+    z.dns1 = config.get('environment', 'dns')
+    z.internaldns1 = config.get('environment', 'dns')
+    z.name = 'Sandbox-%s'%(config.get('cloudstack', 'hypervisor'))
+    z.networktype = 'Basic'
+    z.securitygroupenabled = 'true'
+
+    p = pod()
+    p.name = 'POD0'
+    p.gateway = config.get('cloudstack', 'private.gateway')
+    p.startip =  config.get('cloudstack', 'private.pod.startip')
+    p.endip =  config.get('cloudstack', 'private.pod.endip')
+    p.netmask = config.get('cloudstack', 'private.netmask')
+
+    v = iprange()
+    v.gateway = config.get('cloudstack', 'public.gateway')
+    v.startip = config.get('cloudstack', 'public.vlan.startip')
+    v.endip = config.get('cloudstack', 'public.vlan.endip') 
+    v.netmask = config.get('cloudstack', 'public.netmask')
+    p.guestIpRanges.append(v)
+
+    c = cluster()
+    c.clustername = 'C0'
+    c.hypervisor = config.get('cloudstack', 'hypervisor')
+    c.clustertype = 'CloudManaged'
+
+    h = host()
+    h.username = 'root'
+    h.password = config.get('cloudstack', 'host.password')
+    h.url = 'http://%s'%(config.get('cloudstack', 'host'))
+    c.hosts.append(h)
+
+    ps = primaryStorage()
+    ps.name = 'PS0'
+    ps.url = config.get('cloudstack', 'primary.pool')
+    c.primaryStorages.append(ps)
+
+    p.clusters.append(c)
+    z.pods.append(p)
+
+    secondary = secondaryStorage()
+    secondary.url = config.get('cloudstack', 'secondary.pool')
+    z.secondaryStorages.append(secondary)
+
+    '''Add zone'''
+    zs.zones.append(z)
+
+    '''Add mgt server'''
+    mgt = managementServer()
+    mgt.mgtSvrIp = config.get('environment', 'mshost')
+    zs.mgtSvr.append(mgt)
+
+    '''Add a database'''
+    db = dbServer()
+    db.dbSvr = config.get('environment', 'mysql.host')
+    db.user = config.get('environment', 'mysql.cloud.user')
+    db.passwd = config.get('environment', 'mysql.cloud.passwd')
+    zs.dbSvr = db
+
+    '''Add some configuration'''
+    [zs.globalConfig.append(cfg) for cfg in getGlobalSettings(config)]
+
+    ''''add loggers'''
+    testClientLogger = logger()
+    testClientLogger.name = 'TestClient'
+    testClientLogger.file = '/var/log/testclient.log'
+
+    testCaseLogger = logger()
+    testCaseLogger.name = 'TestCase'
+    testCaseLogger.file = '/var/log/testcase.log'
+
+    zs.logger.append(testClientLogger)
+    zs.logger.append(testCaseLogger)
+    return zs
+
+
+if __name__ == '__main__':
+    parser = OptionParser()
+    parser.add_option('-i', '--input', action='store', default='setup.properties', \
+                      dest='input', help='file containing environment setup information')
+    parser.add_option('-o', '--output', action='store', default='./sandbox.cfg', \
+                      dest='output', help='path where environment json will be generated')
+
+
+    (opts, args) = parser.parse_args()
+
+    cfg_parser = SafeConfigParser()
+    cfg_parser.read(opts.input)
+
+    cfg = describeResources(cfg_parser)
+    generate_setup_config(cfg, opts.output)

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/91fd3b77/tools/marvin/setup.py
----------------------------------------------------------------------
diff --git a/tools/marvin/setup.py b/tools/marvin/setup.py
index 83c9c8a..af40771 100644
--- a/tools/marvin/setup.py
+++ b/tools/marvin/setup.py
@@ -20,7 +20,7 @@ setup(name="Marvin",
       long_description="Marvin is the cloudstack testclient written around the python unittest framework",
       platforms=("Any",),
       url="http://jenkins.cloudstack.org:8080/job/marvin",
-      packages=["marvin", "marvin.cloudstackAPI", "marvin.sandbox", "marvin.pymysql", "marvin.pymysql.constants", "marvin.pymysql.tests"],
+      packages=["marvin", "marvin.cloudstackAPI", "marvin.sandbox", "marvin.sandbox.advanced", "marvin.sandbox.basic", "marvin.pymysql", "marvin.pymysql.constants", "marvin.pymysql.tests"],
       license="LICENSE.txt",
       install_requires=[
           "Python>=2.7",