Adding nemo engine.
[nemo.git] / nemo-impl / src / test / resources / bod-2.py
1 #!/usr/bin/python
2 #Filename:servicechain.py
3 import requests,json
4 import argparse, sys
5 from requests.auth import HTTPBasicAuth
6
7 USERNAME='admin'
8 PASSWORD='admin'
9
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
15 def register_user(contHost):
16         data={
17                         "input":{
18                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
19                                         "user-name":"user2",
20                                         "user-password":"abc",
21                                         "user-role":"tenant"
22                                         }
23                 }
24         post(REGISTER_USER % contHost, data)
25
26 def transaction_begin(contHost):
27         data={
28                         "input":{
29                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
30                                         "user-name":"user2",
31                                         "user-password":"abc",
32                                         "user-role":"tenant"
33                                         }
34                 }
35         post(TRANSACTION_BEGIN % contHost, data)
36
37 def transaction_end(contHost):
38         data={
39                         "input":{
40                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
41                                         "user-name":"user2",
42                                         "user-password":"abc",
43                                         "user-role":"tenant"
44                                         }
45                 }
46         post(TRANSACTION_END % contHost, data)
47
48 def add_server1_host(contHost):
49         data={
50                         "input":{
51                                  "user-name": "user2",
52                                   "user-role": "tenant",
53                                   "user-password": "abc",
54                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
55                                   "objects":{
56                                                 "node":[
57                                                                 {
58                                                                         "node-name": "server1",
59                                                                         "node-type": "host",
60                                                                         "node-id":"7b796915-adf4-4356-b5ca-de005ac410c1"
61                                                                 }
62                                                         ]
63                                                 }
64                                         }
65                 }
66         post(STRUCTURE_UPDATE_USERS % contHost, data)
67
68 def add_server2_host(contHost):
69         data={
70                         "input":{
71                                  "user-name": "user2",
72                                   "user-role": "tenant",
73                                   "user-password": "abc",
74                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
75                                   "objects":{
76                                                 "node":[
77                                                                 {
78                                                                         "node-name": "server2",
79                                                                         "node-type": "host",
80                                                                         "node-id":"22282cca-9a13-4d0c-a67e-a933ebb0b0ae"
81                                                                 }
82                                                         ]
83                                                 }
84                                         }
85                 }
86         post(STRUCTURE_UPDATE_USERS % contHost, data)
87
88 def add_vm1_host(contHost):
89         data={
90                         "input":{
91                                  "user-name": "user2",
92                                   "user-role": "tenant",
93                                   "user-password": "abc",
94                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
95                                   "objects":{
96                                                 "node":[
97                                                                 {
98                                                                         "node-name": "vm1",
99                                                                         "node-type": "host",
100                                                                         "node-id":"1eaf9a67-a171-42a8-9282-71cf702f61dd"
101                                                                 }
102                                                         ]
103                                                 }
104                                         }
105                 }
106         post(STRUCTURE_UPDATE_USERS % contHost, data)
107
108 def add_vm2_host(contHost):
109         data={
110                         "input":{
111                                  "user-name": "user2",
112                                   "user-role": "tenant",
113                                   "user-password": "abc",
114                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
115                                   "objects":{
116                                                 "node":[
117                                                                 {
118                                                                         "node-name": "vm2",
119                                                                         "node-type": "host",
120                                                                         "node-id":"6c787caa-156a-49ed-8546-547bdccf283c"
121                                                                 }
122                                                         ]
123                                                 }
124                                         }
125                 }
126         post(STRUCTURE_UPDATE_USERS % contHost, data)
127
128 def add_enterpise_node(contHost):
129         data={
130                   "input":{
131                           "user-name": "user2",
132                           "user-role": "tenant",
133                           "user-password": "abc",
134                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
135                           "objects":{
136                           "node":[
137                                           {
138                                                         "node-name": "enterprise",
139                                                         "node-type": "ext-group",
140                                                         "property": [
141                                                                                   {
142                                                                                         "property-name": "location",
143                                                                                         "property-values": {
144                                                                                                           "string-value": [
145                                                                                                                         {
146                                                                                                                           "order": "0",
147                                                                                                                           "value": "openflow:4:2"
148                                                                                                                         }
149                                                                                                                 ]
150                                                                                                         }
151                                                                                   },
152                                                                                   {
153                                                                                         "property-name": "ac-info-network",
154                                                                                         "property-values": {
155                                                                                                           "string-value": [
156                                                                                                                         {
157                                                                                                                           "order": "0",
158                                                                                                                           "value": "layer3"
159                                                                                                                         }
160                                                                                                                 ]
161                                                                                                         }
162                                                                                   },
163                                                                                   {
164                                                                                         "property-name": "ac-info-protocol",
165                                                                                         "property-values": {
166                                                                                                           "string-value": [
167                                                                                                                         {
168                                                                                                                           "order": "0",
169                                                                                                                           "value": "static"
170                                                                                                                         }
171                                                                                                                 ]
172                                                                                                         }
173                                                                                   },
174                                                                                   {
175                                                                                         "property-name": "ip-prefix",
176                                                                                         "property-values": {
177                                                                                                           "string-value": [
178                                                                                                                         {
179                                                                                                                           "order": "0",
180                                                                                                                           "value": "192.168.13.0/24"
181                                                                                                                         }
182                                                                                                                 ]
183                                                                                                         }
184                                                                                   }
185                                                                                 ],
186                                                         "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
187                                                   }
188                                         ]
189                           }
190                   }
191                 }
192         post(STRUCTURE_UPDATE_USERS % contHost, data)
193
194 def add_internet_node(contHost):
195         data={
196                   "input":{
197                           "user-name": "user2",
198                           "user-role": "tenant",
199                           "user-password": "abc",
200                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
201                           "objects":{
202                           "node":[
203                                           {
204                                                         "node-name": "internet",
205                                                         "node-type": "ext-group",
206                                                         "property": [
207                                                                                   {
208                                                                                         "property-name": "location",
209                                                                                         "property-values": {
210                                                                                                           "string-value": [
211                                                                                                                         {
212                                                                                                                           "order": "0",
213                                                                                                                           "value": "openflow:3:4"
214                                                                                                                         }
215                                                                                                                 ]
216                                                                                                         }
217                                                                                   },
218                                                                                   {
219                                                                                         "property-name": "ac-info-network",
220                                                                                         "property-values": {
221                                                                                                           "string-value": [
222                                                                                                                         {
223                                                                                                                           "order": "0",
224                                                                                                                           "value": "layer3"
225                                                                                                                         }
226                                                                                                                 ]
227                                                                                                         }
228                                                                                   },
229                                                                                   {
230                                                                                         "property-name": "ac-info-protocol",
231                                                                                         "property-values": {
232                                                                                                                 "string-value": [
233                                                                                                                         {
234                                                                                                                                 "order": "0",
235                                                                                                                                 "value": "static"
236                                                                                                                         }
237                                                                                                                 ]
238                                                                                                         }
239                                                                                   },
240                                                                                   {
241                                                                                         "property-name": "ip-prefix",
242                                                                                         "property-values": {
243                                                                                                           "string-value": [
244                                                                                                                         {
245                                                                                                                           "order": "0",
246                                                                                                                           #wait for external network ip
247                                                                                                                           "value": "172.168.1.0/24"
248                                                                                                                         }
249                                                                                                                 ]
250                                                                                                         }
251                                                                                   }
252                                                                                 ],
253                                                         "node-id": "d463232f-363f-491c-a6f5-097ed0a794d3"
254                                                   }
255                                         ]
256                           }
257                   }
258                 }
259         post(STRUCTURE_UPDATE_USERS % contHost, data)
260
261 def add_dmz_node(contHost):
262         data={
263                   "input":{
264                           "user-name": "user2",
265                           "user-role": "tenant",
266                           "user-password": "abc",
267                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
268                           "objects":{
269                           "node":[
270                                           {
271                                                         "node-name": "dmz",
272                                                         "node-type": "l2-group",
273                                                         "sub-node": [
274                                                                                   {
275                                                                                         "node-id":"7b796915-adf4-4356-b5ca-de005ac410c1",
276                                                                                         "order":"0"
277                                                                                   }
278                                                                 ],
279                                                         "property": [
280                                                                                   {
281                                                                                         "property-name": "location",
282                                                                                         "property-values": {
283                                                                                                           "string-value": [
284                                                                                                                         {
285                                                                                                                           "order": "0",
286                                                                                                                           "value": "openflow:3"
287                                                                                                                         }
288                                                                                                                 ]
289                                                                                                         }
290                                                                                   },
291                                                                                   {
292                                                                                         "property-name": "ip-prefix",
293                                                                                         "property-values": {
294                                                                                                           "string-value": [
295                                                                                                                         {
296                                                                                                                           "order": "0",
297                                                                                                                           "value": "192.168.11.0/24"
298                                                                                                                         }
299                                                                                                                 ]
300                                                                                                         }
301                                                                                   },
302                                                                                   {
303                                                                                         "property-name": "gateway-ip",
304                                                                                         "property-values": {
305                                                                                                           "string-value": [
306                                                                                                                         {
307                                                                                                                           "order": "0",
308                                                                                                                           "value": "192.168.11.1"
309                                                                                                                         }
310                                                                                                                 ]
311                                                                                                         }
312                                                                                   }
313                                                                                 ],
314                                                         "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
315                                                   }
316                                         ]
317                           }
318                   }
319                 }
320         post(STRUCTURE_UPDATE_USERS % contHost, data)
321
322 def add_interior_node(contHost):
323         data={
324                   "input":{
325                           "user-name": "user2",
326                           "user-role": "tenant",
327                           "user-password": "abc",
328                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
329                           "objects":{
330                           "node":[
331                                           {
332                                                         "node-name": "interior",
333                                                         "node-type": "l2-group",
334                                                         "sub-node": [
335                                                                                   {
336                                                                                         "node-id":"22282cca-9a13-4d0c-a67e-a933ebb0b0ae",
337                                                                                         "order":"0"
338                                                                                   },
339                                                                                   {
340                                                                                         "node-id":"1eaf9a67-a171-42a8-9282-71cf702f61dd",
341                                                                                         "order":"0"
342                                                                                   },
343                                                                                   {
344                                                                                         "node-id":"6c787caa-156a-49ed-8546-547bdccf283c",
345                                                                                         "order":"0"
346                                                                                   }
347                                                                 ],
348                                                         "property": [
349                                                                                   {
350                                                                                         "property-name": "location",
351                                                                                         "property-values": {
352                                                                                                           "string-value": [
353                                                                                                                         {
354                                                                                                                           "order": "0",
355                                                                                                                           "value": "openflow:3"
356                                                                                                                         }
357                                                                                                                 ]
358                                                                                                         }
359                                                                                   },
360                                                                                   {
361                                                                                         "property-name": "ip-prefix",
362                                                                                         "property-values": {
363                                                                                                           "string-value": [
364                                                                                                                         {
365                                                                                                                           "order": "0",
366                                                                                                                           "value": "192.168.12.0/24"
367                                                                                                                         }
368                                                                                                                 ]
369                                                                                                         }
370                                                                                   },
371                                                                                   {
372                                                                                         "property-name": "gateway-ip",
373                                                                                         "property-values": {
374                                                                                                           "string-value": [
375                                                                                                                         {
376                                                                                                                           "order": "0",
377                                                                                                                           "value": "192.168.12.1"
378                                                                                                                         }
379                                                                                                                 ]
380                                                                                                         }
381                                                                                   }
382                                                                                 ],
383                                                         "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
384                                                   }
385                                         ]
386                           }
387                   }
388                 }
389         post(STRUCTURE_UPDATE_USERS % contHost, data)
390
391 def add_enterprise_interior_connection(contHost):
392         data={
393                  "input": {
394                           "user-name": "user2",
395                           "user-role": "tenant",
396                           "user-password": "abc",
397                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
398                           "objects":{
399                                   "connection": [
400                                                   {
401                                                         "connection-name": "c1",
402                                                         "connection-id": "30da6667-608e-4d2f-bb50-79e5cabcc523",
403                                                         "end-node": [
404                                                           {
405                                                                 "order": "0",
406                                                                 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
407                                                           },
408                                                           {
409                                                                 "order": "0",
410                                                                 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
411                                                           }
412                                                         ],
413                                                         "connection-type": "p2p",
414                                                         "property": [
415                                                                 {
416                                                                         "property-name": "bandwidth",
417                                                                         "property-values": {
418                                                                                                           "int-value": [
419                                                                                                                         {
420                                                                                                                           "order": "0",
421                                                                                                                           "value": "128"
422                                                                                                                         }
423                                                                                                                 ]
424                                                                                                         }
425                                                                 }
426                                                         ]
427                                                 }
428                                         ]
429                                 }
430                   }
431         }
432         post(STRUCTURE_UPDATE_USERS % contHost, data)
433
434 def add_interior_dmz_connection(contHost):
435         data={
436                  "input": {
437                           "user-name": "user2",
438                           "user-role": "tenant",
439                           "user-password": "abc",
440                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
441                           "objects":{
442                                   "connection": [
443                                                   {
444                                                         "connection-name": "c2",
445                                                         "connection-id": "b49e3960-c08d-4fff-b9fc-08b65ebcde2c",
446                                                         "end-node": [
447                                                           {
448                                                                 "order": "0",
449                                                                 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
450                                                           },
451                                                           {
452                                                                 "order": "0",
453                                                                 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
454                                                           }
455                                                         ],
456                                                         "connection-type": "p2p"
457                                                 }
458                                         ]
459                                 }
460                   }
461         }
462         post(STRUCTURE_UPDATE_USERS % contHost, data)
463
464 def add_dmz_internet_connection(contHost):
465         data={
466                  "input": {
467                           "user-name": "user2",
468                           "user-role": "tenant",
469                           "user-password": "abc",
470                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
471                           "objects":{
472                                   "connection": [
473                                                   {
474                                                         "connection-name": "c3",
475                                                         "connection-id": "e0d56fee-7235-4748-a2a1-eb5e3733d866",
476                                                         "end-node": [
477                                                           {
478                                                                 "order": "0",
479                                                                 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
480                                                           },
481                                                           {
482                                                                 "order": "0",
483                                                                 "node-id": "d463232f-363f-491c-a6f5-097ed0a794d3"
484                                                           }
485                                                         ],
486                                                         "connection-type": "p2p"
487                                                 }
488                                         ]
489                                 }
490                   }
491         }
492         post(STRUCTURE_UPDATE_USERS % contHost, data)
493
494 def update_enterprise_interior_connection(contHost):
495         data={
496                  "input": {
497                           "user-name": "user2",
498                           "user-role": "tenant",
499                           "user-password": "abc",
500                           "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
501                           "objects":{
502                                   "connection": [
503                                                   {
504                                                         "connection-name": "c1",
505                                                         "connection-id": "30da6667-608e-4d2f-bb50-79e5cabcc523",
506                                                         "end-node": [
507                                                           {
508                                                                 "order": "0",
509                                                                 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
510                                                           },
511                                                           {
512                                                                 "order": "0",
513                                                                 "node-id": "175425f7-c9c9-474a-962c-70cb6c180d4d"
514                                                           }
515                                                         ],
516                                                         "connection-type": "p2p",
517                                                         "property": [
518                                                                 {
519                                                                         "property-name": "bandwidth",
520                                                                         "property-values": {
521                                                                                                           "int-value": [
522                                                                                                                         {
523                                                                                                                           "order": "0",
524                                                                                                                           "value": "1024"
525                                                                                                                         }
526                                                                                                                 ]
527                                                                                                         }
528                                                                 }
529                                                         ]
530                                                 }
531                                         ]
532                                 }
533                   }
534         }
535         post(STRUCTURE_UPDATE_USERS % contHost, data)
536
537 def post(url, data):
538     headers = {'Content-type': 'application/yang.data+json',
539                'Accept': 'application/yang.data+json'}
540     print "POST %s" % url
541     print json.dumps(data, indent=4, sort_keys=True)
542     r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))
543     print r.text
544     r.raise_for_status()
545
546 if __name__ == '__main__':
547
548         parser = argparse.ArgumentParser()
549         parser.add_argument('--controller', default='127.0.0.1', help='controller IP')
550         args=parser.parse_args()
551
552         # CREATE User;
553         #register_user(args.controller)
554
555         # IMPORT Node server1 Type host;
556         #transaction_begin(args.controller)
557         #add_server1_host(args.controller)
558         #transaction_end(args.controller)
559
560         # IMPORT Node server2 Type host;
561         #transaction_begin(args.controller)
562         #add_server2_host(args.controller)
563         #transaction_end(args.controller)
564
565         # IMPORT Node vm1 Type host;
566         #transaction_begin(args.controller)
567         #add_vm1_host(args.controller)
568         #transaction_end(args.controller)
569
570         # IMPORT Node vm2 Type host;
571         #transaction_begin(args.controller)
572         #add_vm2_host(args.controller)
573         #transaction_end(args.controller)
574
575         # IMPORT Node enterprise Type ext-group Property location:openflow:4:2, ip-prefix:192.18.13.0/24;
576         #transaction_begin(args.controller)
577         #add_enterpise_node(args.controller)
578         #transaction_end(args.controller)
579
580         # CREATE Node interior Type l2-group Contain server1,vm1,vm2;
581         #transaction_begin(args.controller)
582         #add_interior_node(args.controller)
583         #transaction_end(args.controller)
584
585         # CREATE Node dmz Type l2-group Contain server2;
586         #transaction_begin(args.controller)
587         #add_dmz_node(args.controller)
588         #transaction_end(args.controller)
589
590         # IMPORT Node internet Type ext-group Property location:openflow:3:4, ip-prefix:172.168.1.0/24;
591         #transaction_begin(args.controller)
592         #add_internet_node(args.controller)
593         #transaction_end(args.controller)
594
595         # CREATE Connection c1 Endnodes enterprise,interior Property bandwidth:128(kbps);
596         #transaction_begin(args.controller)
597         #add_enterprise_interior_connection(args.controller)
598         #transaction_end(args.controller)
599
600         # CREATE Connection c2 Endnodes interior,dmz;
601         #transaction_begin(args.controller)
602         #add_interior_dmz_connection(args.controller)
603         #transaction_end(args.controller)
604
605         # CREATE Connection c3 Endnodes dmz,internet;
606         #transaction_begin(args.controller)
607         #add_dmz_internet_connection(args.controller)
608         #transaction_end(args.controller)
609
610         # UPDATE Connection c1 Endnodes enterprise,interior Property bandwidth:1024(kbps);
611         transaction_begin(args.controller)
612         update_enterprise_interior_connection(args.controller)
613         transaction_end(args.controller)