added new labconfig file for each lab also the default config file.
[joid.git] / ci / deploy.py
1 import yaml
2 import pprint
3 import socket
4 import fcntl
5 import struct
6 import os
7 import getpass
8
9 def get_ip_address(ifname):
10     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
11     return socket.inet_ntoa(fcntl.ioctl(
12         s.fileno(),
13         0x8915,  # SIOCGIFADDR
14         struct.pack('256s', ifname[:15])
15     )[20:24])
16
17 with open('labconfig.yaml', 'r') as labf:
18     labcfg = yaml.load(labf)
19
20 with open('deployment.yaml', 'r') as opnfvf:
21     opnfvcfg = yaml.load(opnfvf)
22
23 def setInDict(dataDict, mapList, value):
24     getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
25
26 def getFromDict(dataDict, mapList):
27     return reduce(lambda d, k: d[k], mapList, dataDict)
28
29 if len(labcfg["labconfig"]["nodes"]) < 3:
30     print("minimum three nodes are needed for opnfv architecture deployment")
31     exit() 
32
33 # lets modify the maas general settings:
34
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)
40
41 #lets figure out the interfaces data
42
43 ethbrAdm=""
44 ethbrAdmin=""
45
46 c=0
47 y=0
48 z=0
49
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"])
54     if brtype == "admin":
55         ethbrAdmin = getFromDict(labcfg, ["labconfig","bridges",c,"bridge"])
56         brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
57         tmpcidr = brcidr[:-4]
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')
78         z=z+1
79         y=y+1
80     elif brtype:
81         opnfvcfg["demo-maas"]["maas"]["interfaces"].append("bridge="+brname+",model=virtio")
82         brgway = getFromDict(labcfg, ["labconfig","bridges",c,"gateway"])
83         if brtype != "external":
84             tmpcidr = brcidr[:-4]
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" 
89             if brgway:
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")
103             z=z+1
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")
112             z=z+1
113         y=y+1
114
115
116     c=c+1
117
118 setInDict(opnfvcfg, ["demo-maas", "maas", "network_config"], ethbrAdm)
119
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)
124
125 #lets insert the node details here:
126 c=0
127
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
134
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
140     
141     # setup mac_addresses
142     value = getFromDict(labcfg, ["labconfig","nodes",c, "pxe_mac_address"])
143     opnfvcfg["demo-maas"]["maas"]["nodes"][c]["mac_addresses"] = value
144
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
150
151     if value == "ipmi":
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"
159
160
161     c=c+1
162
163 with open('deployment.yaml', 'w') as opnfvf:
164    yaml.dump(opnfvcfg, opnfvf, default_flow_style=False)
165
166