summaryrefslogtreecommitdiffstats
path: root/ci/genmaasconfig.py
diff options
context:
space:
mode:
authorNarinder Gupta <narinder.gupta@canonical.com>2016-08-02 08:56:54 -0500
committerNarinder Gupta <narinder.gupta@canonical.com>2016-08-02 09:13:41 -0500
commit947016a2eb2be266c8eaf183ea904b2bc204776b (patch)
treea94e02f7b7eaddbd4d8d1856bbd490d3b929f083 /ci/genmaasconfig.py
parent7c92a769fd2f01bb207f8f2b4099be450d3cc07a (diff)
clenup the naming convention of the scripts and modify not to use
variable directly. Change-Id: I234b53010a32c3b1f0daef507585dde4652616eb Signed-off-by: Narinder Gupta <narinder.gupta@canonical.com>
Diffstat (limited to 'ci/genmaasconfig.py')
-rw-r--r--ci/genmaasconfig.py339
1 files changed, 339 insertions, 0 deletions
diff --git a/ci/genmaasconfig.py b/ci/genmaasconfig.py
new file mode 100644
index 00000000..0ca0b778
--- /dev/null
+++ b/ci/genmaasconfig.py
@@ -0,0 +1,339 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+Deploy JOID
+"""
+
+import yaml
+import socket
+import fcntl
+import struct
+import getpass
+
+
+def get_ip_address(ifname):
+ """Get local IP"""
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ return socket.inet_ntoa(fcntl.ioctl(
+ s.fileno(),
+ 0x8915, # SIOCGIFADDR
+ struct.pack('256s', ifname[:15])
+ )[20:24])
+
+with open('labconfig.yaml', 'r') as labf:
+ try:
+ labcfg = yaml.load(labf)
+ except yaml.YAMLError as exc:
+ print(exc)
+
+
+opnfvcfg = {}
+opnfvlabcfg = {}
+
+
+def get_from_dict(dataDict, mapList):
+ return reduce(lambda d, k: d[k], mapList, dataDict)
+
+# lets define the bootstrap section
+opnfvcfg['demo-maas'] = {'juju-bootstrap': {'memory': 4096,
+ 'name': "bootstrap",
+ 'pool': "default",
+ 'vcpus': 4,
+ 'disk_size': "60G",
+ 'arch': "amd64",
+ 'interfaces': []},
+ 'maas': {'memory': 4096,
+ 'pool': "default",
+ 'vcpus': 4,
+ 'disk_size': "160G",
+ 'arch': "amd64",
+ 'interfaces': [],
+ 'name': "",
+ 'network_config': [],
+ 'node_group_ifaces': [],
+ 'nodes': [],
+ 'password': 'ubuntu',
+ 'user': 'ubuntu',
+ 'release': 'trusty',
+ 'apt_sources': [],
+ 'ip_address': '',
+ 'boot_source': {
+ 'keyring_filename': "/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg",
+ 'url': "http://maas.ubuntu.com/images/ephemeral-v2/releases/",
+ 'selections': {
+ '1': {
+ 'arches': 'amd64',
+ 'labels': 'release',
+ 'os': 'ubuntu',
+ 'release': 'xenial',
+ 'subarches': '*'
+ }
+ }
+ },
+ 'settings': {'maas_name': '',
+ 'upstream_dns': '',
+ 'main_archive': "http://archive.ubuntu.com/ubuntu"
+ },
+ 'virsh': {'rsa_priv_key': '/home/ubuntu/.ssh/id_rsa',
+ 'rsa_pub_key': '/home/ubuntu/.ssh/id_rsa.pub',
+ 'uri': ''
+ }
+ }
+ }
+
+opnfvlabcfg['opnfv'] = {'ext-port': '',
+ 'floating-ip-range': '',
+ 'dataNetwork': '',
+ 'ceph-disk': '/srv/',
+ 'storageNetwork': '',
+ 'interface-enable': '',
+ 'publicNetwork': '',
+ 'os-domain-name': '',
+ 'vip': {'rabbitmq': '',
+ 'dashboard': '',
+ 'glance': '',
+ 'keystone': '',
+ 'ceilometer': '',
+ 'mysql': '',
+ 'nova': '',
+ 'neutron': '',
+ 'heat': '',
+ 'cinder': ''}
+ }
+
+
+opnfvcfg['demo-maas']['maas']['apt_sources'].append("ppa:maas/stable")
+opnfvcfg['demo-maas']['maas']['apt_sources'].append("ppa:juju/stable")
+
+# lets modify the maas general settings:
+
+updns = get_from_dict(labcfg, ["lab", "racks", 0, "dns"])
+opnfvcfg["demo-maas"]["maas"]["settings"]["upstream_dns"] = updns
+
+location = get_from_dict(labcfg, ["lab", "location"])
+rack = get_from_dict(labcfg, ["lab", "racks", 0, "rack"])
+value = location+rack
+
+opnfvcfg["demo-maas"]["maas"]["settings"]["maas_name"] = value
+opnfvcfg["demo-maas"]["maas"]["name"] = "opnfv-"+value
+
+ethbrAdm = ""
+ethbrAdmin = ""
+
+c = 0
+y = 0
+# z = 0
+
+while c < len(labcfg["opnfv"]["spaces"]):
+ brtype = get_from_dict(labcfg, ["opnfv", "spaces", c, "type"])
+ brname = get_from_dict(labcfg, ["opnfv", "spaces", c, "bridge"])
+ brcidr = get_from_dict(labcfg, ["opnfv", "spaces", c, "cidr"])
+#
+ if brtype == "admin":
+ ethbrAdmin = get_from_dict(labcfg, ["opnfv", "spaces", c, "bridge"])
+ brgway = get_from_dict(labcfg, ["opnfv", "spaces", c, "gateway"])
+ tmpcidr = brcidr[:-4]
+ opnfvlabcfg["opnfv"]["admNetwork"] = tmpcidr+"2"
+ opnfvlabcfg["opnfv"]["admNetgway"] = brgway
+
+ nodegroup = {"device": "eth"+str(y),
+ "ip": tmpcidr+"5",
+ "subnet_mask": "255.255.255.0",
+ "broadcast_ip": tmpcidr+"255",
+ "router_ip": brgway,
+ "static_range": {"high": tmpcidr+"80",
+ "low": tmpcidr+"50"},
+ "dynamic_range": {"high": tmpcidr+"250",
+ "low": tmpcidr+"81"}}
+
+ ethbrAdm = ('auto lo\n'
+ ' iface lo inet loopback\n\n'
+ 'auto eth'+str(y)+'\n'
+ ' iface eth'+str(y)+' inet static\n'
+ ' address '+tmpcidr+'5\n'
+ ' netmask 255.255.255.0\n'
+ ' gateway '+brgway+'\n'
+ ' dns-nameservers '+updns+' '+tmpcidr+'5 127.0.0.1\n')
+
+ opnfvcfg['demo-maas']['maas']['ip_address'] = tmpcidr+"5"
+ opnfvcfg['demo-maas']['maas']['interfaces'].append(
+ "bridge="+brname+",model=virtio")
+ opnfvcfg['demo-maas']['juju-bootstrap']['interfaces'].append(
+ "bridge="+brname+",model=virtio")
+ opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append(nodegroup)
+ y = y+1
+ elif brtype:
+ opnfvcfg["demo-maas"]["maas"]["interfaces"].append(
+ "bridge="+brname+",model=virtio")
+ brgway = get_from_dict(labcfg, ["opnfv", "spaces", c, "gateway"])
+ if brtype != "external":
+ tmpcidr = brcidr[:-4]
+ if brgway:
+ nodegroup = {"device": "eth"+str(y),
+ "ip": tmpcidr+"5",
+ "subnet_mask": "255.255.255.0",
+ "broadcast_ip": tmpcidr+"255",
+ "management": 1,
+ "router_ip": brgway,
+ "static_range": {"high": tmpcidr+"80",
+ "low": tmpcidr+"50"},
+ "dynamic_range": {"high": tmpcidr+"250",
+ "low": tmpcidr+"81"}}
+ else:
+ nodegroup = {"device": "eth"+str(y),
+ "ip": tmpcidr+"5",
+ "subnet_mask": "255.255.255.0",
+ "broadcast_ip": tmpcidr+"255",
+ "management": 1,
+ "static_range": {"high": tmpcidr+"80",
+ "low": tmpcidr+"50"},
+ "dynamic_range": {"high": tmpcidr+"250",
+ "low": tmpcidr+"81"}}
+ opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append(
+ nodegroup)
+ ethbrAdm = (ethbrAdm+'\n'
+ 'auto eth'+str(y)+'\n'
+ ' iface eth'+str(y)+' inet static\n'
+ ' address '+tmpcidr+'5\n'
+ ' netmask 255.255.255.0\n')
+ y = y+1
+ if brtype == "public":
+ opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append(
+ "bridge="+brname+",model=virtio")
+ opnfvlabcfg["opnfv"]["publicNetwork"] = brcidr
+ if brtype == "external":
+ ipaddress = get_from_dict(labcfg, ["opnfv", "spaces",
+ c, "ipaddress"])
+ ethbrAdm = (ethbrAdm+'\n'
+ 'auto eth'+str(y)+'\n'
+ ' iface eth'+str(y)+' inet static\n'
+ ' address '+ipaddress+'\n'
+ ' netmask 255.255.255.0\n')
+ opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append(
+ "bridge="+brname+",model=virtio")
+ if brtype == "data":
+ opnfvlabcfg["opnfv"]["dataNetwork"] = brcidr
+ if brtype == "storage":
+ opnfvlabcfg["opnfv"]["storageNetwork"] = brcidr
+
+ c = c+1
+
+# lets modify the maas general settings:
+value = get_ip_address(ethbrAdmin)
+value = "qemu+ssh://"+getpass.getuser()+"@"+value+"/system"
+opnfvcfg['demo-maas']['maas']['virsh']['uri'] = value
+opnfvcfg['demo-maas']['maas']['network_config'] = ethbrAdm
+
+if len(labcfg["lab"]["racks"][0]["nodes"]) < 1:
+ print("looks like virtual deployment where nodes were not defined")
+ opnfvcfg["demo-maas"]["maas"]["nodes"].remove()
+ exit()
+
+# lets insert the node details here:
+c = 0
+ifnamelist = []
+#
+while c < len(labcfg["lab"]["racks"][0]["nodes"]):
+ valuemac = []
+ y = 0
+ # setup value of name and tags accordigly
+ noderoleslist = labcfg["lab"]["racks"][0]["nodes"][c]["roles"]
+ noderoles = " ".join(noderoleslist)
+
+ valuetype = get_from_dict(labcfg, ["lab", "racks", 0, "nodes",
+ c, "power", "type"])
+ namevalue = labcfg["lab"]["racks"][0]["nodes"][c]["name"]
+ valuearc = get_from_dict(labcfg, ["lab", "racks", 0,
+ "nodes", c, "architecture"])
+ # setup value of architecture
+ if valuearc == "x86_64":
+ valuearc = "amd64/generic"
+
+ if valuetype == "wakeonlan":
+ macvalue = get_from_dict(labcfg, ["lab", "racks", 0, "nodes",
+ c, "power", "mac_address"])
+ power = {"type": "ether_wake", "mac_address": macvalue}
+ if valuetype == "ipmi":
+ valueaddr = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
+ "power", "address"])
+ valueuser = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
+ "power", "user"])
+ valuepass = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
+ "power", "pass"])
+ valuedriver = "LAN_2_0"
+ power = {"type": valuetype, "address": valueaddr, "user": valueuser,
+ "pass": valuepass, "driver": valuedriver}
+
+ opnfvcfg["demo-maas"]["maas"]["nodes"].append(
+ {"name": namevalue,
+ "architecture": valuearc,
+ "interfaces": [],
+ "mac_addresses": [],
+ "power": power,
+ 'tags': noderoles})
+
+ y = 0
+ while y < len(labcfg["lab"]["racks"][0]["nodes"][c]["nics"]):
+ valuespaces = labcfg["lab"]["racks"][0]["nodes"][c][
+ "nics"][y]["spaces"]
+ valueifname = labcfg["lab"]["racks"][0]["nodes"][c][
+ "nics"][y]["ifname"]
+ if "admin" not in valuespaces:
+ ifnamelist += [valueifname]
+ valueifmac = labcfg["lab"]["racks"][0]["nodes"][c]["nics"][y]["mac"][0]
+ valuemac += labcfg["lab"]["racks"][0]["nodes"][c]["nics"][y]["mac"]
+ opnfvcfg["demo-maas"]["maas"]["nodes"][c]["interfaces"].append(
+ {"name": valueifname,
+ "mac_address": valueifmac,
+ "mode": "auto"})
+ y = y+1
+
+ if valueifmac:
+ opnfvcfg["demo-maas"]["maas"]["nodes"][c]['mac_addresses'] = valuemac
+
+ c = c+1
+
+opnfvlabcfg["opnfv"]["floating-ip-range"] =\
+ labcfg["lab"]["racks"][0]["floating-ip-range"]
+opnfvlabcfg["opnfv"]["ext-port"] =\
+ labcfg["lab"]["racks"][0]["ext-port"]
+opnfvlabcfg["opnfv"]["ceph-disk"] =\
+ labcfg["opnfv"]["storage"][0]["disk"]
+opnfvlabcfg["opnfv"]["interface-enable"] =\
+ ",".join(list(set(ifnamelist)))
+
+# setup vip addresss for HA
+opnfvlabcfg["opnfv"]["vip"]["rabbitmq"] =\
+ opnfvlabcfg["opnfv"]["admNetwork"]+"0"
+opnfvlabcfg["opnfv"]["vip"]["dashboard"] =\
+ opnfvlabcfg["opnfv"]["admNetwork"]+"1"
+opnfvlabcfg["opnfv"]["vip"]["glance"] = opnfvlabcfg["opnfv"]["admNetwork"]+"2"
+opnfvlabcfg["opnfv"]["vip"]["keystone"] =\
+ opnfvlabcfg["opnfv"]["admNetwork"]+"3"
+opnfvlabcfg["opnfv"]["vip"]["ceilometer"] =\
+ opnfvlabcfg["opnfv"]["admNetwork"]+"4"
+opnfvlabcfg["opnfv"]["vip"]["mysql"] = opnfvlabcfg["opnfv"]["admNetwork"]+"5"
+opnfvlabcfg["opnfv"]["vip"]["nova"] = opnfvlabcfg["opnfv"]["admNetwork"]+"6"
+opnfvlabcfg["opnfv"]["vip"]["neutron"] = opnfvlabcfg["opnfv"]["admNetwork"]+"7"
+opnfvlabcfg["opnfv"]["vip"]["heat"] = opnfvlabcfg["opnfv"]["admNetwork"]+"8"
+opnfvlabcfg["opnfv"]["vip"]["cinder"] = opnfvlabcfg["opnfv"]["admNetwork"]+"9"
+
+osdomname = labcfg["lab"]["racks"][0]["osdomainname"]
+
+if osdomname:
+ opnfvlabcfg["opnfv"]["os-domain-name"] =\
+ labcfg["lab"]["racks"][0]["osdomainname"]
+ opnfvlabcfg["opnfv"]["domain"] = labcfg["lab"]["racks"][0]["osdomainname"]
+
+opnfvlabcfg["opnfv"]["ext_port"] = labcfg["lab"]["racks"][0]["ext-port"]
+opnfvlabcfg["opnfv"]["units"] = len(labcfg["lab"]["racks"][0]["nodes"])
+opnfvlabcfg["opnfv"]["admin_password"] = "openstack"
+opnfvlabcfg["opnfv"]["storage"] = labcfg["opnfv"]["storage"]
+opnfvlabcfg["opnfv"]["spaces"] = labcfg["opnfv"]["spaces"]
+
+with open('deployment.yaml', 'wa') as opnfvf:
+ yaml.dump(opnfvcfg, opnfvf, default_flow_style=False)
+
+with open('deployconfig.yaml', 'wa') as opnfvf:
+ yaml.dump(opnfvlabcfg, opnfvf, default_flow_style=False)