3 from requests.auth import HTTPBasicAuth
7 REGISTER_EP_URL="http://%s:8181/restconf/operations/endpoint:register-endpoint"
8 REGISTER_TENANTS_URL="http://%s:8181/restconf/config/policy:tenants"
9 REGISTER_NODES_URL="http://%s:8181/restconf/config/opendaylight-inventory:nodes"
13 def get_epg(tenantId, epgId):
14 k = "{}|{}".format(tenantId,epgId)
15 if k in endpointGroups:
16 return endpointGroups[k]
17 tenant = get_tenant(tenantId);
20 "consumer-named-selector": [],
21 "provider-named-selector": []
23 tenant["endpoint-group"].append(data)
24 endpointGroups[k] = data
29 def get_tenant(tenantId):
30 if tenantId in tenants:
31 return tenants[tenantId]
35 "l2-bridge-domain": [],
36 "l2-flood-domain": [],
40 "subject-feature-instances": {
41 "classifier-instance": [
43 "classifier-definition-id": "4250ab32-e8b8-445a-aebb-e1bd2cdd291f",
46 "string-value": "TCP"},
51 "classifier-definition-id": "4250ab32-e8b8-445a-aebb-e1bd2cdd291f",
54 "string-value": "TCP"},
55 {"name": "sourceport",
59 "classifier-definition-id": "79c6fdb2-1e1a-4832-af57-c65baf5c2335",
67 tenants[tenantId] = data
72 def get_fd(tenantId, fdId, parent):
73 tenant = get_tenant(tenantId)
76 tenant["l2-flood-domain"].append(data)
79 def get_bd(tenantId, bdId, parent):
80 tenant = get_tenant(tenantId)
83 tenant["l2-bridge-domain"].append(data)
86 def get_l3c(tenantId, l3cId):
87 tenant = get_tenant(tenantId)
89 tenant["l3-context"].append(data)
92 def get_subnet(tenantId, subnetId, parent, prefix, router):
93 k = "{}|{}".format(tenantId, subnetId)
96 tenant = get_tenant(tenantId)
97 data = {"id": subnetId,
100 "virtual-router-ip": router}
101 tenant["subnet"].append(data)
106 def get_ep(tenantId, groupId, l3ctx, ip, l2ctx, mac, sw, port):
107 group = get_epg(tenantId, groupId)
108 data = {"tenant": tenantId,
109 "endpoint-group": groupId,
112 "l3-address": [{"l3-context": l3ctx,
114 "ofoverlay:node-id": "openflow:{}".format(sw),
115 "ofoverlay:node-connector-id": "openflow:{}:{}".format(sw, port)
117 endpoints.append(data)
122 def get_node_config(sw, tun_ip):
124 "id": "openflow:{}".format(sw),
125 "ofoverlay:tunnel-ip": tun_ip
130 def get_contract(tenantId, pgroupId, cgroupId, contractId):
131 tenant = get_tenant(tenantId)
132 pgroup = get_epg(tenantId, pgroupId)
133 cgroup = get_epg(tenantId, cgroupId)
136 "subject": [{"name": "allow-http-subject",
138 {"name": "allow-http-rule",
140 {"name": "http-dest",
146 {"name": "allow-icmp-subject",
148 {"name": "allow-icmp-rule",
153 "clause": [{"name": "allow-http-clause",
154 "subject-refs": ["allow-http-subject",
155 "allow-icmp-subject"]}]
157 tenant["contract"].append(data)
158 cgroup["consumer-named-selector"].append({
159 "name": "{}-{}-{}".format(pgroupId, cgroupId, contractId),
160 "contract": [contractId]
162 pgroup["provider-named-selector"].append({
163 "name": "{}-{}-{}".format(pgroupId, cgroupId, contractId),
164 "contract": [contractId]
170 headers = {'Content-type': 'application/yang.data+json',
171 'Accept': 'application/yang.data+json'}
172 print "POST %s" % url
173 print json.dumps(data, indent=4, sort_keys=True)
174 r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
179 headers = {'Content-type': 'application/yang.data+json',
180 'Accept': 'application/yang.data+json'}
182 print json.dumps(data, indent=4, sort_keys=True)
183 r = requests.put(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
187 def register_tenants(contHost):
188 data = {"policy:tenants": {"tenant": tenants.values()}}
189 put(REGISTER_TENANTS_URL % contHost, data)
191 def register_eps(contHost):
194 post(REGISTER_EP_URL % contHost, data)
196 def register_nodes(contHost):
197 data = {"opendaylight-inventory:nodes": {"node": nodes}}
198 put(REGISTER_NODES_URL % contHost, data)