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"
14 PHYSICAL_NETWORK="http://%s:8181/restconf/config/generic-physical-network:physical-network"
15 NIC_INTENTS="http://%s:8181/restconf/config/intent:intents"
16 NIC_INTENT="http://%s:8181/restconf/config/intent:intents/intent/14ce424a-3e50-4a2a-ad5c-b29845158c8b"
18 def create_physical_network(contHost):
24 "host-id": "22282cca-9a13-4d0c-a67e-a933ebb0b0ae",
25 "node-id": "openflow:2",
26 "host-name": "video-server2",
27 "mac-address": "00:00:00:00:00:04",
28 "port-id": "openflow:2:2",
36 "host-id": "7b796915-adf4-4356-b5ca-de005ac410c1",
37 "node-id": "openflow:1",
38 "host-name": "video-server1",
39 "mac-address": "00:00:00:00:00:01",
40 "port-id": "openflow:1:1",
48 "host-id": "6c787caa-156a-49ed-8546-547bdccf283c",
49 "node-id": "openflow:2",
51 "mac-address": "00:00:00:00:00:03",
52 "port-id": "openflow:2:1",
60 "host-id": "1eaf9a67-a171-42a8-9282-71cf702f61dd",
61 "node-id": "openflow:1",
63 "mac-address": "00:00:00:00:00:02",
64 "port-id": "openflow:1:2",
76 "node-id": "openflow:3",
79 "attribute-name": "location",
81 "string-value": "openflow:3"
85 "node-type": "router",
88 "port-id": "openflow:3:1",
91 "attribute-name": "location",
93 "string-value": "openflow:3:1"
97 "port-type": "internal",
98 "mac-address": "BE:DB:79:24:0A:B1",
102 "port-id": "openflow:3:2",
105 "attribute-name": "location",
107 "string-value": "openflow:3:2"
111 "port-type": "internal",
112 "mac-address": "06:E7:27:6D:C2:A5",
116 "port-id": "openflow:3:3",
119 "attribute-name": "location",
121 "string-value": "openflow:3:3"
125 "port-type": "internal",
126 "mac-address": "9E:00:76:D7:0C:1D",
130 "port-id": "openflow:3:4",
133 "attribute-name": "location",
135 "string-value": "openflow:3:4"
139 "port-type": "external",
140 "mac-address": "00:00:00:00:03:04",
146 "node-id": "openflow:4",
149 "attribute-name": "location",
151 "string-value": "openflow:4"
155 "node-type": "router",
158 "port-id": "openflow:4:2",
161 "attribute-name": "location",
163 "string-value": "openflow:4:2"
167 "port-type": "external",
168 "mac-address": "00:00:00:00:04:02",
172 "port-id": "openflow:4:1",
175 "attribute-name": "location",
177 "string-value": "openflow:4:1"
181 "port-type": "internal",
182 "mac-address": "4E:93:BE:EF:99:35",
188 "node-id": "openflow:1",
191 "attribute-name": "location",
193 "string-value": "openflow:1"
197 "node-type": "switch",
200 "port-id": "openflow:1:1",
203 "attribute-name": "location",
205 "string-value": "openflow:1:1"
209 "port-type": "external",
210 "mac-address": "BA:8C:1F:60:2C:FC",
214 "port-id": "openflow:1:2",
217 "attribute-name": "location",
219 "string-value": "openflow:1:2"
223 "port-type": "external",
224 "mac-address": "82:ED:57:DE:28:F0",
228 "port-id": "openflow:1:3",
231 "attribute-name": "location",
233 "string-value": "openflow:1:3"
237 "port-type": "internal",
238 "mac-address": "62:D3:F1:80:06:F0",
244 "node-id": "openflow:2",
247 "attribute-name": "location",
249 "string-value": "openflow:2"
253 "node-type": "switch",
256 "port-id": "openflow:2:3",
259 "attribute-name": "location",
261 "string-value": "openflow:2:3"
265 "port-type": "internal",
266 "mac-address": "42:33:22:43:EF:02",
270 "port-id": "openflow:2:2",
273 "attribute-name": "location",
275 "string-value": "openflow:2:2"
279 "port-type": "external",
280 "mac-address": "32:7C:45:B9:ED:18",
284 "port-id": "openflow:2:1",
287 "attribute-name": "location",
289 "string-value": "openflow:2:1"
293 "port-type": "external",
294 "mac-address": "D6:86:A8:54:2B:32",
304 "link-id": "openflow:4:1",
307 "src-port-id": "openflow:4:1",
308 "dest-node-id": "openflow:3",
310 "dest-port-id": "openflow:3:3",
312 "src-node-id": "openflow:4"
315 "link-id": "openflow:2:3",
318 "src-port-id": "openflow:2:3",
319 "dest-node-id": "openflow:3",
321 "dest-port-id": "openflow:3:2",
323 "src-node-id": "openflow:2"
326 "link-id": "openflow:3:1",
329 "src-port-id": "openflow:3:1",
330 "dest-node-id": "openflow:1",
332 "dest-port-id": "openflow:1:3",
334 "src-node-id": "openflow:3"
337 "link-id": "openflow:1:3",
340 "src-port-id": "openflow:1:3",
341 "dest-node-id": "openflow:3",
343 "dest-port-id": "openflow:3:1",
345 "src-node-id": "openflow:1"
348 "link-id": "openflow:3:3",
351 "src-port-id": "openflow:3:3",
352 "dest-node-id": "openflow:4",
354 "dest-port-id": "openflow:4:1",
356 "src-node-id": "openflow:3"
359 "link-id": "openflow:3:2",
362 "src-port-id": "openflow:3:2",
363 "dest-node-id": "openflow:2",
365 "dest-port-id": "openflow:2:3",
367 "src-node-id": "openflow:3"
373 put(PHYSICAL_NETWORK % contHost, data)
376 def register_user(contHost):
379 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
381 "user-password":"abc",
385 post(REGISTER_USER % contHost, data)
387 def transaction_begin(contHost):
390 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"
393 post(TRANSACTION_BEGIN % contHost, data)
395 def transaction_end(contHost):
398 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"
401 post(TRANSACTION_END % contHost, data)
403 def add_server1_host(contHost):
406 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
410 "node-name": "server1",
412 "node-id":"7b796915-adf4-4356-b5ca-de005ac410c1"
418 post(STRUCTURE_UPDATE_USERS % contHost, data)
420 def add_server2_host(contHost):
423 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
427 "node-name": "server2",
429 "node-id":"22282cca-9a13-4d0c-a67e-a933ebb0b0ae"
435 post(STRUCTURE_UPDATE_USERS % contHost, data)
437 def add_vm1_host(contHost):
440 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
446 "node-id":"1eaf9a67-a171-42a8-9282-71cf702f61dd"
452 post(STRUCTURE_UPDATE_USERS % contHost, data)
454 def add_vm2_host(contHost):
457 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
463 "node-id":"6c787caa-156a-49ed-8546-547bdccf283c"
469 post(STRUCTURE_UPDATE_USERS % contHost, data)
471 def add_enterpise_node(contHost):
474 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
478 "node-name": "enterprise",
479 "node-type": "ext-group",
482 "property-name": "location",
487 "value": "openflow:4:2"
493 "property-name": "ac-info-network",
504 "property-name": "ac-info-protocol",
515 "property-name": "ip-prefix",
520 "value": "192.168.13.0/24"
526 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
532 post(STRUCTURE_UPDATE_USERS % contHost, data)
534 def add_internet_node(contHost):
537 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
541 "node-name": "internet",
542 "node-type": "ext-group",
545 "property-name": "location",
550 "value": "openflow:3:4"
556 "property-name": "ac-info-network",
567 "property-name": "ac-info-protocol",
578 "property-name": "ip-prefix",
583 #wait for external network ip
584 "value": "172.168.1.0/24"
590 "node-id": "d463232f-363f-491c-a6f5-097ed0a794d3"
596 post(STRUCTURE_UPDATE_USERS % contHost, data)
598 def add_dmz_node(contHost):
601 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
606 "node-type": "l2-group",
609 "node-id":"7b796915-adf4-4356-b5ca-de005ac410c1",
615 "property-name": "location",
620 "value": "openflow:3"
626 "property-name": "ip-prefix",
631 "value": "192.168.11.0/24"
637 "property-name": "gateway-ip",
642 "value": "192.168.11.1"
648 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
654 post(STRUCTURE_UPDATE_USERS % contHost, data)
656 def add_interior_node(contHost):
659 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
663 "node-name": "interior",
664 "node-type": "l2-group",
667 "node-id":"22282cca-9a13-4d0c-a67e-a933ebb0b0ae",
671 "node-id":"1eaf9a67-a171-42a8-9282-71cf702f61dd",
675 "node-id":"6c787caa-156a-49ed-8546-547bdccf283c",
681 "property-name": "location",
686 "value": "openflow:3"
692 "property-name": "ip-prefix",
697 "value": "192.168.12.0/24"
703 "property-name": "gateway-ip",
708 "value": "192.168.12.1"
714 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
720 post(STRUCTURE_UPDATE_USERS % contHost, data)
722 def add_enterprise_interior_connection(contHost):
725 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
729 "connection-name": "c1",
730 "connection-id": "30da6667-608e-4d2f-bb50-79e5cabcc523",
734 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
738 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
741 "connection-type": "p2p",
744 "property-name": "bandwidth",
760 post(STRUCTURE_UPDATE_USERS % contHost, data)
762 def add_interior_dmz_connection(contHost):
765 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
769 "connection-name": "c2",
770 "connection-id": "b49e3960-c08d-4fff-b9fc-08b65ebcde2c",
774 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
778 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
781 "connection-type": "p2p"
787 post(STRUCTURE_UPDATE_USERS % contHost, data)
789 def add_dmz_internet_connection(contHost):
792 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
796 "connection-name": "c3",
797 "connection-id": "e0d56fee-7235-4748-a2a1-eb5e3733d866",
801 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
805 "node-id": "d463232f-363f-491c-a6f5-097ed0a794d3"
808 "connection-type": "p2p"
814 post(STRUCTURE_UPDATE_USERS % contHost, data)
816 def update_enterprise_interior_connection(contHost):
819 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
823 "connection-name": "c1",
824 "connection-id": "30da6667-608e-4d2f-bb50-79e5cabcc523",
828 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
832 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
835 "connection-type": "p2p",
838 "property-name": "bandwidth",
854 post(STRUCTURE_UPDATE_USERS % contHost, data)
856 def delete_nic_intents(contHost):
857 delete(NIC_INTENTS % contHost)
859 def create_nic_intent(contHost):
862 "id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
872 "end-point-group": { "name": "dmz" }
875 "end-point-group": { "name": "interior" }
881 "bandwidth-constraint": { "bandwidth": "10G" }
887 "daily": { "start-time": "08:00:00Z", "duration": "10h" }
892 put(NIC_INTENT % contHost, data)
896 headers = {'Content-type': 'application/yang.data+json',
897 'Accept': 'application/yang.data+json'}
898 print "POST %s" % url
899 print json.dumps(data, indent=4, sort_keys=True)
900 r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
905 headers = {'Content-type': 'application/yang.data+json',
906 'Accept': 'application/yang.data+json'}
908 print json.dumps(data, indent=4, sort_keys=True)
909 r = requests.put(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
914 headers = {'Content-type': 'application/yang.data+json',
915 'Accept': 'application/yang.data+json'}
916 print "DELETE %s" % url
917 r = requests.delete(url, headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
922 if __name__ == '__main__':
924 parser = argparse.ArgumentParser()
925 parser.add_argument('--controller', default='127.0.0.1', help='controller IP')
926 args=parser.parse_args()
929 create_physical_network(args.controller)
932 register_user(args.controller)
934 # IMPORT Node server1 Type host;
935 transaction_begin(args.controller)
936 add_server1_host(args.controller)
937 #transaction_end(args.controller)
939 # IMPORT Node server2 Type host;
940 #transaction_begin(args.controller)
941 add_server2_host(args.controller)
942 #transaction_end(args.controller)
944 # IMPORT Node vm1 Type host;
945 #transaction_begin(args.controller)
946 add_vm1_host(args.controller)
947 #transaction_end(args.controller)
949 # IMPORT Node vm2 Type host;
950 #transaction_begin(args.controller)
951 add_vm2_host(args.controller)
952 #transaction_end(args.controller)
954 # IMPORT Node enterprise Type ext-group Property location:openflow:4:2, ip-prefix:192.18.13.0/24;
955 #transaction_begin(args.controller)
956 add_enterpise_node(args.controller)
957 #transaction_end(args.controller)
959 # CREATE Node interior Type l2-group Contain server1,vm1,vm2;
960 #transaction_begin(args.controller)
961 add_interior_node(args.controller)
962 #transaction_end(args.controller)
964 # CREATE Node dmz Type l2-group Contain server2;
965 #transaction_begin(args.controller)
966 add_dmz_node(args.controller)
967 #transaction_end(args.controller)
969 # IMPORT Node internet Type ext-group Property location:openflow:3:4, ip-prefix:172.168.1.0/24;
970 #transaction_begin(args.controller)
971 add_internet_node(args.controller)
972 #transaction_end(args.controller)
974 # CREATE Connection c1 Endnodes enterprise,interior Property bandwidth:128(kbps);
975 #transaction_begin(args.controller)
976 #add_enterprise_interior_connection(args.controller)
977 #transaction_end(args.controller)
979 # CREATE Connection c2 Endnodes interior,dmz;
980 #transaction_begin(args.controller)
981 #add_interior_dmz_connection(args.controller)
982 #transaction_end(args.controller)
984 # CREATE Connection c3 Endnodes dmz,internet;
985 #transaction_begin(args.controller)
986 #add_dmz_internet_connection(args.controller)
987 #transaction_end(args.controller)
989 # UPDATE Connection c1 Endnodes enterprise,interior Property bandwidth:512(kbps);
990 #transaction_begin(args.controller)
991 #update_enterprise_interior_connection(args.controller)
992 #transaction_end(args.controller)
994 transaction_end(args.controller)
996 delete_nic_intents(args.controller)
997 create_nic_intent(args.controller)