2 # -*- coding: utf-8 -*-
15 def get_ip_address(ifname):
17 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
18 return socket.inet_ntoa(fcntl.ioctl(
21 struct.pack('256s', ifname[:15])
24 with open('labconfig.yaml', 'r') as labf:
26 labcfg = yaml.load(labf)
27 except yaml.YAMLError as exc:
35 def get_from_dict(dataDict, mapList):
36 return reduce(lambda d, k: d[k], mapList, dataDict)
38 # lets define the bootstrap section
39 opnfvcfg['demo-maas'] = {'juju-bootstrap': {'memory': 4096,
46 'maas': {'memory': 4096,
54 'node_group_ifaces': [],
62 'keyring_filename': "/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg",
63 'url': "http://maas.ubuntu.com/images/ephemeral-v2/releases/",
74 'settings': {'maas_name': '',
76 'main_archive': "http://archive.ubuntu.com/ubuntu"
78 'virsh': {'rsa_priv_key': '/home/ubuntu/.ssh/id_rsa',
79 'rsa_pub_key': '/home/ubuntu/.ssh/id_rsa.pub',
85 opnfvlabcfg['opnfv'] = {'ext-port': '',
86 'floating-ip-range': '',
90 'interface-enable': '',
93 'vip': {'rabbitmq': '',
106 opnfvcfg['demo-maas']['maas']['apt_sources'].append("ppa:maas/stable")
107 opnfvcfg['demo-maas']['maas']['apt_sources'].append("ppa:juju/stable")
109 # lets modify the maas general settings:
111 updns = get_from_dict(labcfg, ["lab", "racks", 0, "dns"])
112 opnfvcfg["demo-maas"]["maas"]["settings"]["upstream_dns"] = updns
114 location = get_from_dict(labcfg, ["lab", "location"])
115 rack = get_from_dict(labcfg, ["lab", "racks", 0, "rack"])
116 value = location+rack
118 opnfvcfg["demo-maas"]["maas"]["settings"]["maas_name"] = value
119 opnfvcfg["demo-maas"]["maas"]["name"] = "opnfv-"+value
128 while c < len(labcfg["opnfv"]["spaces"]):
129 brtype = get_from_dict(labcfg, ["opnfv", "spaces", c, "type"])
130 brname = get_from_dict(labcfg, ["opnfv", "spaces", c, "bridge"])
131 brcidr = get_from_dict(labcfg, ["opnfv", "spaces", c, "cidr"])
133 if brtype == "admin":
134 ethbrAdmin = get_from_dict(labcfg, ["opnfv", "spaces", c, "bridge"])
135 brgway = get_from_dict(labcfg, ["opnfv", "spaces", c, "gateway"])
136 tmpcidr = brcidr[:-4]
137 opnfvlabcfg["opnfv"]["admNetwork"] = tmpcidr+"2"
138 opnfvlabcfg["opnfv"]["admNetgway"] = brgway
140 nodegroup = {"device": "eth"+str(y),
142 "subnet_mask": "255.255.255.0",
143 "broadcast_ip": tmpcidr+"255",
145 "static_range": {"high": tmpcidr+"80",
146 "low": tmpcidr+"50"},
147 "dynamic_range": {"high": tmpcidr+"250",
148 "low": tmpcidr+"81"}}
150 ethbrAdm = ('auto lo\n'
151 ' iface lo inet loopback\n\n'
152 'auto eth'+str(y)+'\n'
153 ' iface eth'+str(y)+' inet static\n'
154 ' address '+tmpcidr+'5\n'
155 ' netmask 255.255.255.0\n'
156 ' gateway '+brgway+'\n'
157 ' dns-nameservers '+updns+' '+tmpcidr+'5 127.0.0.1\n')
159 opnfvcfg['demo-maas']['maas']['ip_address'] = tmpcidr+"5"
160 opnfvcfg['demo-maas']['maas']['interfaces'].append(
161 "bridge="+brname+",model=virtio")
162 opnfvcfg['demo-maas']['juju-bootstrap']['interfaces'].append(
163 "bridge="+brname+",model=virtio")
164 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append(nodegroup)
167 opnfvcfg["demo-maas"]["maas"]["interfaces"].append(
168 "bridge="+brname+",model=virtio")
169 brgway = get_from_dict(labcfg, ["opnfv", "spaces", c, "gateway"])
170 if brtype != "external":
171 tmpcidr = brcidr[:-4]
173 nodegroup = {"device": "eth"+str(y),
175 "subnet_mask": "255.255.255.0",
176 "broadcast_ip": tmpcidr+"255",
179 "static_range": {"high": tmpcidr+"80",
180 "low": tmpcidr+"50"},
181 "dynamic_range": {"high": tmpcidr+"250",
182 "low": tmpcidr+"81"}}
184 nodegroup = {"device": "eth"+str(y),
186 "subnet_mask": "255.255.255.0",
187 "broadcast_ip": tmpcidr+"255",
189 "static_range": {"high": tmpcidr+"80",
190 "low": tmpcidr+"50"},
191 "dynamic_range": {"high": tmpcidr+"250",
192 "low": tmpcidr+"81"}}
193 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"].append(
195 ethbrAdm = (ethbrAdm+'\n'
196 'auto eth'+str(y)+'\n'
197 ' iface eth'+str(y)+' inet static\n'
198 ' address '+tmpcidr+'5\n'
199 ' netmask 255.255.255.0\n')
201 if brtype == "public":
202 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append(
203 "bridge="+brname+",model=virtio")
204 opnfvlabcfg["opnfv"]["publicNetwork"] = brcidr
205 if brtype == "external":
206 ipaddress = get_from_dict(labcfg, ["opnfv", "spaces",
208 ethbrAdm = (ethbrAdm+'\n'
209 'auto eth'+str(y)+'\n'
210 ' iface eth'+str(y)+' inet static\n'
211 ' address '+ipaddress+'\n'
212 ' netmask 255.255.255.0\n')
213 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append(
214 "bridge="+brname+",model=virtio")
216 opnfvlabcfg["opnfv"]["dataNetwork"] = brcidr
217 if brtype == "storage":
218 opnfvlabcfg["opnfv"]["storageNetwork"] = brcidr
222 # lets modify the maas general settings:
223 value = get_ip_address(ethbrAdmin)
224 value = "qemu+ssh://"+getpass.getuser()+"@"+value+"/system"
225 opnfvcfg['demo-maas']['maas']['virsh']['uri'] = value
226 opnfvcfg['demo-maas']['maas']['network_config'] = ethbrAdm
228 if len(labcfg["lab"]["racks"][0]["nodes"]) < 1:
229 print("looks like virtual deployment where nodes were not defined")
230 opnfvcfg["demo-maas"]["maas"]["nodes"].remove()
233 # lets insert the node details here:
237 while c < len(labcfg["lab"]["racks"][0]["nodes"]):
240 # setup value of name and tags accordigly
241 noderoleslist = labcfg["lab"]["racks"][0]["nodes"][c]["roles"]
242 noderoles = " ".join(noderoleslist)
244 valuetype = get_from_dict(labcfg, ["lab", "racks", 0, "nodes",
246 namevalue = labcfg["lab"]["racks"][0]["nodes"][c]["name"]
247 valuearc = get_from_dict(labcfg, ["lab", "racks", 0,
248 "nodes", c, "architecture"])
249 # setup value of architecture
250 if valuearc == "x86_64":
251 valuearc = "amd64/generic"
253 if valuetype == "wakeonlan":
254 macvalue = get_from_dict(labcfg, ["lab", "racks", 0, "nodes",
255 c, "power", "mac_address"])
256 power = {"type": "ether_wake", "mac_address": macvalue}
257 if valuetype == "ipmi":
258 valueaddr = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
260 valueuser = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
262 valuepass = get_from_dict(labcfg, ["lab", "racks", 0, "nodes", c,
264 valuedriver = "LAN_2_0"
265 power = {"type": valuetype, "address": valueaddr, "user": valueuser,
266 "pass": valuepass, "driver": valuedriver}
268 opnfvcfg["demo-maas"]["maas"]["nodes"].append(
270 "architecture": valuearc,
277 while y < len(labcfg["lab"]["racks"][0]["nodes"][c]["nics"]):
278 valuespaces = labcfg["lab"]["racks"][0]["nodes"][c][
280 valueifname = labcfg["lab"]["racks"][0]["nodes"][c][
282 if "admin" not in valuespaces:
283 ifnamelist += [valueifname]
284 valueifmac = labcfg["lab"]["racks"][0]["nodes"][c]["nics"][y]["mac"][0]
285 valuemac += labcfg["lab"]["racks"][0]["nodes"][c]["nics"][y]["mac"]
286 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["interfaces"].append(
287 {"name": valueifname,
288 "mac_address": valueifmac,
293 opnfvcfg["demo-maas"]["maas"]["nodes"][c]['mac_addresses'] = valuemac
297 opnfvlabcfg["opnfv"]["floating-ip-range"] =\
298 labcfg["lab"]["racks"][0]["floating-ip-range"]
299 opnfvlabcfg["opnfv"]["ext-port"] =\
300 labcfg["lab"]["racks"][0]["ext-port"]
301 opnfvlabcfg["opnfv"]["ceph-disk"] =\
302 labcfg["opnfv"]["storage"][0]["disk"]
303 opnfvlabcfg["opnfv"]["interface-enable"] =\
304 ",".join(list(set(ifnamelist)))
306 # setup vip addresss for HA
307 opnfvlabcfg["opnfv"]["vip"]["rabbitmq"] =\
308 opnfvlabcfg["opnfv"]["admNetwork"]+"0"
309 opnfvlabcfg["opnfv"]["vip"]["dashboard"] =\
310 opnfvlabcfg["opnfv"]["admNetwork"]+"1"
311 opnfvlabcfg["opnfv"]["vip"]["glance"] = opnfvlabcfg["opnfv"]["admNetwork"]+"2"
312 opnfvlabcfg["opnfv"]["vip"]["keystone"] =\
313 opnfvlabcfg["opnfv"]["admNetwork"]+"3"
314 opnfvlabcfg["opnfv"]["vip"]["ceilometer"] =\
315 opnfvlabcfg["opnfv"]["admNetwork"]+"4"
316 opnfvlabcfg["opnfv"]["vip"]["mysql"] = opnfvlabcfg["opnfv"]["admNetwork"]+"5"
317 opnfvlabcfg["opnfv"]["vip"]["nova"] = opnfvlabcfg["opnfv"]["admNetwork"]+"6"
318 opnfvlabcfg["opnfv"]["vip"]["neutron"] = opnfvlabcfg["opnfv"]["admNetwork"]+"7"
319 opnfvlabcfg["opnfv"]["vip"]["heat"] = opnfvlabcfg["opnfv"]["admNetwork"]+"8"
320 opnfvlabcfg["opnfv"]["vip"]["cinder"] = opnfvlabcfg["opnfv"]["admNetwork"]+"9"
322 osdomname = labcfg["lab"]["racks"][0]["osdomainname"]
325 opnfvlabcfg["opnfv"]["os-domain-name"] =\
326 labcfg["lab"]["racks"][0]["osdomainname"]
327 opnfvlabcfg["opnfv"]["domain"] = labcfg["lab"]["racks"][0]["osdomainname"]
329 opnfvlabcfg["opnfv"]["ext_port"] = labcfg["lab"]["racks"][0]["ext-port"]
330 opnfvlabcfg["opnfv"]["units"] = len(labcfg["lab"]["racks"][0]["nodes"])
331 opnfvlabcfg["opnfv"]["admin_password"] = "openstack"
332 opnfvlabcfg["opnfv"]["storage"] = labcfg["opnfv"]["storage"]
333 opnfvlabcfg["opnfv"]["spaces"] = labcfg["opnfv"]["spaces"]
335 with open('deployment.yaml', 'wa') as opnfvf:
336 yaml.dump(opnfvcfg, opnfvf, default_flow_style=False)
338 with open('deployconfig.yaml', 'wa') as opnfvf:
339 yaml.dump(opnfvlabcfg, opnfvf, default_flow_style=False)