9 def get_ip_address(ifname):
10 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
11 return socket.inet_ntoa(fcntl.ioctl(
14 struct.pack('256s', ifname[:15])
17 with open('labconfig.yaml', 'r') as labf:
18 labcfg = yaml.load(labf)
20 with open('deployment.yaml', 'r') as opnfvf:
21 opnfvcfg = yaml.load(opnfvf)
23 def setInDict(dataDict, mapList, value):
24 getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
26 def getFromDict(dataDict, mapList):
27 return reduce(lambda d, k: d[k], mapList, dataDict)
30 # lets modify the maas general settings:
32 updns = getFromDict(labcfg, ["labconfig","labsettings","upstream_dns"])
33 setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "upstream_dns"], updns)
34 value = getFromDict(labcfg, ["labconfig","lab_location"])
35 setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "maas_name"], value)
36 setInDict(opnfvcfg, ["demo-maas", "maas", "name"], "opnfv-"+value)
38 #lets figure out the interfaces data
47 while c < len(labcfg["labconfig"]["bridges"]):
48 brtype = getFromDict(labcfg, ["labconfig","bridges",c,"type"])
49 brname = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"])
50 brcidr = getFromDict(labcfg, ["labconfig","bridges",c,"cidr"])
53 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append({})
54 ethbrAdmin = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"])
55 brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
57 setInDict(opnfvcfg, ["demo-maas", "maas", "ip_address"], tmpcidr+"5")
58 opnfvcfg["demo-maas"]["maas"]["interfaces"][y] = "bridge="+brname+",model=virtio"
60 nodegroup={"device": "eth"+str(y), "ip": tmpcidr+"5","subnet_mask": "255.255.255.0", \
61 "broadcast_ip": tmpcidr+"255", "router_ip": brgway,\
62 "static_range":{"high":tmpcidr+"80","low":tmpcidr+"50"},\
63 "dynamic_range":{"high":tmpcidr+"250","low":tmpcidr+"81"}}
65 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y] = nodegroup
67 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"][z] = "bridge="+brname+",model=virtio"
69 ethbrAdm = ('auto lo\n'
70 ' iface lo inet loopback\n\n'
71 'auto eth'+str(y)+'\n'
72 ' iface eth'+str(y)+' inet static\n'
73 ' address '+tmpcidr+'5\n'
74 ' netmask 255.255.255.0\n'
75 ' gateway '+brgway+'\n'
76 ' dns-nameservers '+updns+' '+tmpcidr+'5 127.0.0.1\n')
80 opnfvcfg["demo-maas"]["maas"]["interfaces"].append("bridge="+brname+",model=virtio")
81 brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
82 if brtype != "external":
84 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append({})
87 nodegroup={"device": "eth"+str(y), "ip": tmpcidr+"5","subnet_mask": "255.255.255.0", \
88 "broadcast_ip": tmpcidr+"255", "management": 1, "router_ip": brgway,\
89 "static_range":{"high":tmpcidr+"80","low":tmpcidr+"50"},\
90 "dynamic_range":{"high":tmpcidr+"250","low":tmpcidr+"81"}}
92 nodegroup={"device": "eth"+str(y), "ip": tmpcidr+"5","subnet_mask": "255.255.255.0", \
93 "broadcast_ip": tmpcidr+"255", "management": 1, \
94 "static_range":{"high":tmpcidr+"80","low":tmpcidr+"50"},\
95 "dynamic_range":{"high":tmpcidr+"250","low":tmpcidr+"81"}}
97 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y] = nodegroup
98 ethbrAdm = (ethbrAdm+'\n'
99 'auto eth'+str(y)+'\n'
100 ' iface eth'+str(y)+' inet static\n'
101 ' address '+tmpcidr+'5\n'
102 ' netmask 255.255.255.0\n')
103 if brtype == "public":
104 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append("bridge="+brname+",model=virtio")
106 if brtype == "external":
107 ipaddress = getFromDict(labcfg, ["labconfig","bridges",c,"ipaddress"])
108 ethbrAdm = (ethbrAdm+'\n'
109 'auto eth'+str(y)+'\n'
110 ' iface eth'+str(y)+' inet static\n'
111 ' address '+ipaddress+'\n'
112 ' netmask 255.255.255.0\n')
113 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append("bridge="+brname+",model=virtio")
120 setInDict(opnfvcfg, ["demo-maas", "maas", "network_config"], ethbrAdm)
122 # lets modify the maas general settings:
123 value = get_ip_address(ethbrAdmin)
124 value = "qemu+ssh://"+getpass.getuser()+"@"+value+"/system"
125 setInDict(opnfvcfg, ["demo-maas", "maas", "virsh", "uri"], value)
127 if len(labcfg["labconfig"]["nodes"]) < 1:
128 print("looks like virtual deployment where nodes were not defined")
129 opnfvcfg["demo-maas"]["maas"]["nodes"].remove()
132 #lets insert the node details here:
135 while c < len(labcfg["labconfig"]["nodes"]):
136 # setup value of name and tags accordigly
137 value = getFromDict(labcfg, ["labconfig","nodes",c, "type"])
138 namevalue = "node" + str(c+1) + "-" + value
140 opnfvcfg["demo-maas"]["maas"]["nodes"].append({})
142 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["name"] = namevalue
143 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["tags"] = value
145 # setup value of architecture
146 value = getFromDict(labcfg, ["labconfig","nodes",c, "architecture"])
147 if value == "x86_64":
148 value="amd64/generic"
149 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["architecture"] = value
151 # setup mac_addresses
152 value = getFromDict(labcfg, ["labconfig","nodes",c, "pxe_mac_address"])
153 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["mac_addresses"] = value
154 valuetype = getFromDict(labcfg, ["labconfig","nodes",c, "power", "type"])
156 if valuetype == "wakeonlan":
157 macvalue = getFromDict(labcfg, ["labconfig","nodes",c, "power", "mac_address"])
158 power={"type": "ether_wake", "mac_address": macvalue}
159 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"] = power
160 if valuetype == "ipmi":
161 valueaddr = getFromDict(labcfg, ["labconfig","nodes",c, "power", "address"])
162 valueuser = getFromDict(labcfg, ["labconfig","nodes",c, "power", "user"])
163 valuepass = getFromDict(labcfg, ["labconfig","nodes",c, "power", "pass"])
164 valuedriver = "LAN_2_0"
165 power={"type": valuetype, "address": valueaddr,"user": valueuser, "pass": valuepass, "driver": valuedriver}
166 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"] = power
171 with open('deployment.yaml', 'w') as opnfvf:
172 yaml.dump(opnfvcfg, opnfvf, default_flow_style=False)