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)
29 if len(labcfg["labconfig"]["nodes"]) < 3:
30 print("minimum three nodes are needed for opnfv architecture deployment")
33 # lets modify the maas general settings:
35 updns = getFromDict(labcfg, ["labconfig","labsettings","upstream_dns"])
36 setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "upstream_dns"], updns)
37 value = getFromDict(labcfg, ["labconfig","lab_location"])
38 setInDict(opnfvcfg, ["demo-maas", "maas", "settings", "maas_name"], value)
39 setInDict(opnfvcfg, ["demo-maas", "maas", "name"], "opnfv-"+value)
41 #lets figure out the interfaces data
50 while c < len(labcfg["labconfig"]["bridges"]):
51 brtype = getFromDict(labcfg, ["labconfig","bridges",c,"type"])
52 brname = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"])
53 brcidr = getFromDict(labcfg, ["labconfig","bridges",c,"cidr"])
55 ethbrAdmin = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"])
56 brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
58 setInDict(opnfvcfg, ["demo-maas", "maas", "ip_address"], tmpcidr+"5")
59 opnfvcfg["demo-maas"]["maas"]["interfaces"][y] = "bridge="+brname+",model=virtio"
60 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["device"] = "eth"+str(y)
61 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["ip"] = tmpcidr+"5"
62 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["subnet_mask"] = "255.255.255.0"
63 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["broadcast_ip"] = tmpcidr+"255"
64 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["router_ip"] = brgway
65 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["low"] = tmpcidr+"50"
66 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["high"] = tmpcidr+"80"
67 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["low"] = tmpcidr+"81"
68 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["high"] = tmpcidr+"250"
69 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"][z] = "bridge="+brname+",model=virtio"
70 ethbrAdm = ('auto lo\n'
71 ' iface lo inet loopback\n\n'
72 'auto eth'+str(y)+'\n'
73 ' iface eth'+str(y)+' inet static\n'
74 ' address '+tmpcidr+'5\n'
75 ' netmask 255.255.255.0\n'
76 ' gateway '+brgway+'\n'
77 ' dns-nameservers '+updns+' '+tmpcidr+'5 127.0.0.1\n')
81 opnfvcfg["demo-maas"]["maas"]["interfaces"].append("bridge="+brname+",model=virtio")
82 brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
83 if brtype != "external":
85 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["device"] = "eth"+str(y)
86 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["ip"] = tmpcidr+"5"
87 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["subnet_mask"] = "255.255.255.0"
88 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["broadcast_ip"] = tmpcidr+"255"
90 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["router_ip"] = brgway
91 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["management"] = 1
92 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["low"] = tmpcidr+"20"
93 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["static_range"]["high"] = tmpcidr+"150"
94 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["low"] = tmpcidr+"151"
95 opnfvcfg["demo-maas"]["maas"]["node_group_ifaces"][y]["dynamic_range"]["high"] = tmpcidr+"200"
96 ethbrAdm = (ethbrAdm+'\n'
97 'auto eth'+str(y)+'\n'
98 ' iface eth'+str(y)+' inet static\n'
99 ' address '+tmpcidr+'5\n'
100 ' netmask 255.255.255.0\n')
101 if brtype == "public":
102 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append("bridge="+brname+",model=virtio")
104 if brtype == "external":
105 ipaddress = getFromDict(labcfg, ["labconfig","bridges",c,"ipaddress"])
106 ethbrAdm = (ethbrAdm+'\n'
107 'auto eth'+str(y)+'\n'
108 ' iface eth'+str(y)+' inet static\n'
109 ' address '+ipaddress+'\n'
110 ' netmask 255.255.255.0\n')
111 opnfvcfg["demo-maas"]["juju-bootstrap"]["interfaces"].append("bridge="+brname+",model=virtio")
118 setInDict(opnfvcfg, ["demo-maas", "maas", "network_config"], ethbrAdm)
120 # lets modify the maas general settings:
121 value = get_ip_address(ethbrAdmin)
122 value = "qemu+ssh://"+getpass.getuser()+"@"+value+"/system"
123 setInDict(opnfvcfg, ["demo-maas", "maas", "virsh", "uri"], value)
125 #lets insert the node details here:
128 while c < len(labcfg["labconfig"]["nodes"]):
129 # setup value of name and tags accordigly
130 value = getFromDict(labcfg, ["labconfig","nodes",c, "type"])
131 namevalue = "node" + str(c+1) + "-" + value
132 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["name"] = namevalue
133 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["tags"] = value
135 # setup value of architecture
136 value = getFromDict(labcfg, ["labconfig","nodes",c, "architecture"])
137 if value == "x86_64":
138 value="amd64/generic"
139 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["architecture"] = value
141 # setup mac_addresses
142 value = getFromDict(labcfg, ["labconfig","nodes",c, "pxe_mac_address"])
143 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["mac_addresses"] = value
145 value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "type"])
146 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["type"] = value
147 if value == "wakeonlan":
148 value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "mac_address"])
149 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["mac_address"] = value
152 value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "address"])
153 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["address"] = value
154 value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "user"])
155 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["user"] = value
156 value = getFromDict(labcfg, ["labconfig","nodes",c, "power", "pass"])
157 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["pass"] = value
158 opnfvcfg["demo-maas"]["maas"]["nodes"][c]["power"]["driver"] = "LAN_2_0"
163 with open('deployment.yaml', 'w') as opnfvf:
164 yaml.dump(opnfvcfg, opnfvf, default_flow_style=False)