From 943a83ac552121d599476661634d250a44be590b Mon Sep 17 00:00:00 2001 From: Narinder Gupta Date: Mon, 16 May 2016 12:16:00 -0500 Subject: added new labconfig file for each lab also the default config file. User can send the url also to deployment.yaml file to the script. If can not copy the file then will use the file from labconfig directory. Change-Id: I4edce4d291782462a483f6840b1de36b13174720 Signed-off-by: Narinder Gupta --- ci/deploy.py | 173 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 140 insertions(+), 33 deletions(-) (limited to 'ci/deploy.py') diff --git a/ci/deploy.py b/ci/deploy.py index d52bd609..c1a714d8 100644 --- a/ci/deploy.py +++ b/ci/deploy.py @@ -1,12 +1,24 @@ import yaml import pprint - -with open('example.yaml', 'r') as f: - doc = yaml.load(f) -txt = doc["nodes"][0]["power"] - -with open('deployment.yaml', 'r') as ft: - doc1 = yaml.load(ft) +import socket +import fcntl +import struct +import os +import getpass + +def get_ip_address(ifname): + 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: + labcfg = yaml.load(labf) + +with open('deployment.yaml', 'r') as opnfvf: + opnfvcfg = yaml.load(opnfvf) def setInDict(dataDict, mapList, value): getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value @@ -14,46 +26,141 @@ def setInDict(dataDict, mapList, value): def getFromDict(dataDict, mapList): return reduce(lambda d, k: d[k], mapList, dataDict) -if len(doc["nodes"]) > len(doc1["demo-maas"]["maas"]["nodes"]): - exit 0 +if len(labcfg["labconfig"]["nodes"]) < 3: + print("minimum three nodes are needed for opnfv architecture deployment") + exit() + +# lets modify the maas general settings: + +updns = getFromDict(labcfg, ["labconfig","labsettings","upstream_dns"]) +setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "upstream_dns"], updns) +value = getFromDict(labcfg, ["labconfig","lab_location"]) +setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "maas_name"], value) +setInDict(opnfvcfg, ["demo-maas", "maas", "name"], "opnfv-"+value) + +#lets figure out the interfaces data + +ethbrAdm="" +ethbrAdmin="" c=0 -while c < len(doc["nodes"]): +y=0 +z=0 + +while c < len(labcfg["labconfig"]["bridges"]): + brtype = getFromDict(labcfg, ["labconfig","bridges",c,"type"]) + brname = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"]) + brcidr = getFromDict(labcfg, ["labconfig","bridges",c,"cidr"]) + if brtype == "admin": + ethbrAdmin = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"]) + brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"]) + tmpcidr = brcidr[:-4] + setInDict(opnfvcfg, ["demo-maas", "maas", "ip_address"], tmpcidr+"5") + opnfvcfg["demo-maas"]["maas"]["interfaces"][y] = "bridge="+brname+",model=virtio" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["device"] = "eth"+str(y) + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["ip"] = tmpcidr+"5" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["subnet_mask"] = "255.255.255.0" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["broadcast_ip"] = tmpcidr+"255" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["router_ip"] = brgway + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["low"] = tmpcidr+"50" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["high"] = tmpcidr+"80" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["low"] = tmpcidr+"81" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["high"] = tmpcidr+"250" + opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"][z] = "bridge="+brname+",model=virtio" + 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') + z=z+1 + y=y+1 + elif brtype: + opnfvcfg["demo-maas"]["maas"]["interfaces"].append("bridge="+brname+",model=virtio") + brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"]) + if brtype != "external": + tmpcidr = brcidr[:-4] + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["device"] = "eth"+str(y) + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["ip"] = tmpcidr+"5" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["subnet_mask"] = "255.255.255.0" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["broadcast_ip"] = tmpcidr+"255" + if brgway: + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["router_ip"] = brgway + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["management"] = 1 + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["low"] = tmpcidr+"20" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["high"] = tmpcidr+"150" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["low"] = tmpcidr+"151" + opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["high"] = tmpcidr+"200" + 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') + if brtype == "public": + opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append("bridge="+brname+",model=virtio") + z=z+1 + if brtype == "external": + ipaddress = getFromDict(labcfg, ["labconfig","bridges",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") + z=z+1 + y=y+1 + - value = getFromDict(doc, ["nodes",c, "name"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "name"], value) + c=c+1 - value = getFromDict(doc, ["nodes",c, "tags"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "tags"], value) +setInDict(opnfvcfg, ["demo-maas", "maas", "network_config"], ethbrAdm) - value = getFromDict(doc, ["nodes",c, "arch"]) - if value == "x86_64": - value="amd64/generic" - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "architecture"], value) +# lets modify the maas general settings: +value = get_ip_address(ethbrAdmin) +value = "qemu+ssh://"+getpass.getuser()+"@"+value+"/system" +setInDict(opnfvcfg, ["demo-maas", "maas", "virsh", "uri"], value) - value = getFromDict(doc, ["nodes",c, "mac_address"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "mac_addresses"], value) +#lets insert the node details here: +c=0 - value = getFromDict(doc, ["nodes",c, "power", "type"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "power", "type"], value) +while c < len(labcfg["labconfig"]["nodes"]): + # setup value of name and tags accordigly + value = getFromDict(labcfg, ["labconfig","nodes",c, "type"]) + namevalue = "node" + str(c+1) + "-" + value + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["name"] = namevalue + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["tags"] = value + # setup value of architecture + value = getFromDict(labcfg, ["labconfig","nodes",c, "architecture"]) + if value == "x86_64": + value="amd64/generic" + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["architecture"] = value + + # setup mac_addresses + value = getFromDict(labcfg, ["labconfig","nodes",c, "pxe_mac_address"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["mac_addresses"] = value + + value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "type"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["type"] = value if value == "wakeonlan": - value = getFromDict(doc, ["nodes",c, "power", "mac_address"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "power", "mac_address"], value) + value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "mac_address"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["mac_address"] = value if value == "ipmi": - value = getFromDict(doc, ["nodes",c, "power", "address"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "power", "address"], value) - - value = getFromDict(doc, ["nodes",c, "power", "user"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "power", "user"], value) + value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "address"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["address"] = value + value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "user"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["user"] = value + value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "pass"]) + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["pass"] = value + opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["driver"] = "LAN_2_0" - value = getFromDict(doc, ["nodes",c, "power", "pass"]) - setInDict(doc1, ["demo-maas", "maas", "nodes", c, "power", "pass"], value) c=c+1 -with open('deployment.yaml', 'w') as ft: - yaml.dump(doc1, ft) +with open('deployment.yaml', 'w') as opnfvf: + yaml.dump(opnfvcfg, opnfvf, default_flow_style=False) -- cgit 1.2.3-korg