#!/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 describeDevcloudKvmResources(config): zs = cloudstackConfiguration() z = zone() z.dns1 = config.get('environment', 'dns') z.internaldns1 = config.get('environment', 'dns') z.name = 'Devcloud-%s'%(config.get('cloudstack', 'hypervisor')) z.networktype = 'Advanced' z.guestcidraddress = '10.1.1.0/24' z.localstorageenabled = 'true' vpcprovider = provider() vpcprovider.name = 'VpcVirtualRouter' pn = physical_network() pn.name = "eth0" pn.vlan = config.get('cloudstack', 'pnet.vlan') pn.tags = ["devcloud-guest"] pn.traffictypes = [traffictype("Guest", {"kvm" :"kvm-guest" }), traffictype("Management")] pn.providers.append(vpcprovider) pn2 = physical_network() pn2.name = "eth1" pn2.vlan = config.get('cloudstack', 'pnet2.vlan') pn2.tags = ["devcloud-public"] pn2.traffictypes = [traffictype("Public", {"kvm" : "kvm-public"})] pn2.providers.append(vpcprovider) z.physical_networks.append(pn) z.physical_networks.append(pn2) 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') v.vlan = config.get('cloudstack', 'public.vlan') z.ipranges.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') mgt.user = config.get('environment', 'mshost.user') mgt.passwd = config.get('environment', 'mshost.passwd') 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 = 'testclient.log' testCaseLogger = logger() testCaseLogger.name = 'TestCase' testCaseLogger.file = '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='./devcloud-kvm-advanced.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 = describeDevcloudKvmResources(cfg_parser) generate_setup_config(cfg, opts.output)