2 #Filename:servicechain.py
5 from requests.auth import HTTPBasicAuth
10 TRANSACTION_BEGIN="http://%s:8181/restconf/operations/nemo-intent:begin-transaction/"
11 TRANSACTION_END="http://%s:8181/restconf/operations/nemo-intent:end-transaction/"
12 REGISTER_USER="http://%s:8181/restconf/operations/nemo-intent:register-user/"
13 STRUCTURE_UPDATE_USERS="http://%s:8181/restconf/operations/nemo-intent:structure-style-nemo-update/"
15 def register_user(contHost):
18 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
20 "user-password":"abcd",
24 post(REGISTER_USER % contHost, data)
26 def transaction_begin(contHost):
29 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
31 "user-password":"abcd",
35 post(TRANSACTION_BEGIN % contHost, data)
37 def transaction_end(contHost):
40 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
42 "user-password":"abcd",
46 post(TRANSACTION_END % contHost, data)
49 def add_headquarter_node(contHost):
53 "user-role": "tenant",
54 "user-password": "abcd",
55 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
59 "node-name": "headquarter",
60 "node-type": "ext-group",
63 "property-name": "location",
68 "value": "openflow:4:2"
74 "property-name": "ac-info-network",
85 "property-name": "ac-info-protocol",
96 "property-name": "ip-prefix",
101 "value": "192.168.11.0/24"
107 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
113 post(STRUCTURE_UPDATE_USERS % contHost, data)
115 def add_site_node(contHost):
118 "user-name": "user1",
119 "user-role": "tenant",
120 "user-password": "abcd",
121 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
125 "node-name": "branch",
126 "node-type": "ext-group",
129 "property-name": "location",
134 "value": "openflow:3:4"
140 "property-name": "ac-info-network",
151 "property-name": "ac-info-protocol",
162 "property-name": "ip-prefix",
167 "value": "192.168.12.0/24"
173 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
179 post(STRUCTURE_UPDATE_USERS % contHost, data)
181 def add_firewall_node(contHost):
184 "user-name": "user1",
185 "user-role": "tenant",
186 "user-password": "abcd",
187 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
195 "property-name": "location",
200 "value": "openflow:1:1"
206 "property-name": "operating-mode",
217 "node-id": "c2cd9de6-ab25-4d3f-bff2-c4d785a41995"
223 post(STRUCTURE_UPDATE_USERS % contHost, data)
225 def add_cache_node(contHost):
228 "user-name": "user1",
229 "user-role": "tenant",
230 "user-password": "abcd",
231 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
235 "node-name": "cache2",
236 "node-type": "cache",
239 "property-name": "location",
244 "value": "openflow:2:2"
250 "property-name": "operating-mode",
261 "node-id": "a5a96dc7-51dd-44a5-802b-7e67a309fb36"
267 post(STRUCTURE_UPDATE_USERS % contHost, data)
269 def add_chain_node(contHost):
272 "user-name": "user1",
273 "user-role": "tenant",
274 "user-password": "abcd",
275 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
281 "node-id": "c2cd9de6-ab25-4d3f-bff2-c4d785a41995"
285 "node-id": "a5a96dc7-51dd-44a5-802b-7e67a309fb36"
288 "node-name": "chain1",
289 "node-type": "chain-group",
290 "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
296 post(STRUCTURE_UPDATE_USERS % contHost, data)
298 def add_head_site_connection(contHost):
301 "user-name": "user1",
302 "user-role": "tenant",
303 "user-password": "abcd",
304 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
308 "connection-name": "c1",
309 "connection-id": "7175bac3-b785-2278-90ed-613480e354e8",
313 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
317 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
320 "connection-type": "p2p"
326 post(STRUCTURE_UPDATE_USERS % contHost, data)
328 def add_head_chain_connection(contHost):
331 "user-name": "user1",
332 "user-role": "tenant",
333 "user-password": "abcd",
334 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
338 "connection-name": "c2",
339 "connection-id": "9397bac3-d9a7-449a-b20f-8356a2f3760a",
343 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
347 "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
350 "connection-type": "p2p"
356 post(STRUCTURE_UPDATE_USERS % contHost, data)
358 def add_site_chain_connection(contHost):
361 "user-name": "user1",
362 "user-role": "tenant",
363 "user-password": "abcd",
364 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
368 "connection-name": "c3",
369 "connection-id": "fed2b570-2e80-4914-a5af-040594b651b9",
373 "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
377 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
380 "connection-type": "p2p"
386 post(STRUCTURE_UPDATE_USERS % contHost, data)
388 def add_flow(contHost):
391 "user-name": "user1",
392 "user-role": "tenant",
393 "user-password": "abcd",
394 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
400 "match-item-value": {
401 "string-value": "192.168.12.0/24"
403 "match-item-name": "src-ip"
406 "match-item-value": {
407 "string-value": "192.168.11.0/24"
409 "match-item-name": "dst-ip"
412 "flow-id": "cf48eeee-882e-435a-adf4-ea22ba88331f",
419 post(STRUCTURE_UPDATE_USERS % contHost, data)
421 def add_operation(contHost):
424 "user-name": "user1",
425 "user-role": "tenant",
426 "user-password": "abcd",
427 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
431 "operation-name": "o1",
432 "target-object": "cf48eeee-882e-435a-adf4-ea22ba88331f",
434 "operation-id": "619ee3bb-1e40-480f-b0fa-a331820a5518",
437 "action-name":"go-through",
440 {"value": "41ee9aad-5f61-469d-99a9-e691d2a1de05",
452 post(STRUCTURE_UPDATE_USERS % contHost, data)
456 headers = {'Content-type': 'application/yang.data+json',
457 'Accept': 'application/yang.data+json'}
458 print "POST %s" % url
459 print json.dumps(data, indent=4, sort_keys=True)
460 r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
465 if __name__ == '__main__':
467 parser = argparse.ArgumentParser()
468 parser.add_argument('--controller', default='127.0.0.1', help='controller IP')
469 args=parser.parse_args()
472 register_user(args.controller)
474 # CREATE Node headquarter Type ext-group Property location:openflow:4:2, ip-prefix:192.168.11.0/24;
475 transaction_begin(args.controller)
476 add_headquarter_node(args.controller)
477 #transaction_end(args.controller)
479 # CREATE Node headquarter Type ext-group Property location:openflow:3:4,ip-prefix:192.168.12.0/24;
480 #transaction_begin(args.controller)
481 add_site_node(args.controller)
482 #transaction_end(args.controller)
484 # IMPORT Node fw1 Type fw Property location:openflow:1:1;
485 #transaction_begin(args.controller)
486 add_firewall_node(args.controller)
487 #transaction_end(args.controller)
489 # IMPORT Node Cache2 Type cache Property location:openflow:2:2;
490 #transaction_begin(args.controller)
491 add_cache_node(args.controller)
492 #transaction_end(args.controller)
494 # CREATE Node chain1 Type chain-group Contain fw1,cache2;
495 #transaction_begin(args.controller)
496 add_chain_node(args.controller)
497 #transaction_end(args.controller)
499 # CREATE Connection c1 Type p2p Endnodes headquarter,site;
500 #transaction_begin(args.controller)
501 add_head_site_connection(args.controller)
502 #transaction_end(args.controller)
504 # CREATE Connection c2 Type p2p Endnodes headquarter,chain1;
505 #transaction_begin(args.controller)
506 add_head_chain_connection(args.controller)
507 #transaction_end(args.controller)
509 # CREATE Connection c3 Type p2p Endnodes site,chain1;
510 #transaction_begin(args.controller)
511 add_site_chain_connection(args.controller)
512 #transaction_end(args.controller)
514 # CREATE Flow f1 Match src-ip:192.168.12.0/24, dst-ip:192.168.11.0/24;
515 #transaction_begin(args.controller)
516 add_flow(args.controller)
517 #transaction_end(args.controller)
519 # CREATE Operation o1 Priority 0 Target f1 Action go-through: chain1;
520 #transaction_begin(args.controller)
521 add_operation(args.controller)
522 transaction_end(args.controller)