Adding nemo engine.
[nemo.git] / nemo-impl / src / test / resources / servicechain.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":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
19                                         "user-name":"user1",
20                                         "user-password":"abcd",
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":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
30                                         "user-name":"user1",
31                                         "user-password":"abcd",
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":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
41                                         "user-name":"user1",
42                                         "user-password":"abcd",
43                                         "user-role":"tenant"
44                                         }
45                 }
46         post(TRANSACTION_END % contHost, data)
47
48
49 def add_headquarter_node(contHost):
50         data={
51                   "input":{
52                           "user-name": "user1",
53                           "user-role": "tenant",
54                           "user-password": "abcd",
55                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
56                           "objects":{
57                           "node":[
58                                           {
59                                                         "node-name": "headquarter",
60                                                         "node-type": "ext-group",
61                                                         "property": [
62                                                                                   {
63                                                                                         "property-name": "location",
64                                                                                         "property-values": {
65                                                                                                           "string-value": [
66                                                                                                                         {
67                                                                                                                           "order": "0",
68                                                                                                                           "value": "openflow:4:2"
69                                                                                                                         }
70                                                                                                                 ]
71                                                                                                         }
72                                                                                   },
73                                                                                   {
74                                                                                         "property-name": "ac-info-network",
75                                                                                         "property-values": {
76                                                                                                           "string-value": [
77                                                                                                                         {
78                                                                                                                           "order": "0",
79                                                                                                                           "value": "layer3"
80                                                                                                                         }
81                                                                                                                 ]
82                                                                                                         }
83                                                                                   },
84                                                                                   {
85                                                                                         "property-name": "ac-info-protocol",
86                                                                                         "property-values": {
87                                                                                                                 "string-value": [
88                                                                                                                         {
89                                                                                                                                 "order": "0",
90                                                                                                                                 "value": "static"
91                                                                                                                         }
92                                                                                                                 ]
93                                                                                                         }
94                                                                                   },
95                                                                                   {
96                                                                                         "property-name": "ip-prefix",
97                                                                                         "property-values": {
98                                                                                                           "string-value": [
99                                                                                                                         {
100                                                                                                                           "order": "0",
101                                                                                                                           "value": "192.168.11.0/24"
102                                                                                                                         }
103                                                                                                                 ]
104                                                                                                         }
105                                                                                   }
106                                                                                 ],
107                                                         "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
108                                                   }
109                                         ]
110                           }
111                   }
112                 }
113         post(STRUCTURE_UPDATE_USERS % contHost, data)
114
115 def add_site_node(contHost):
116         data={
117                           "input":{
118                               "user-name": "user1",
119                                   "user-role": "tenant",
120                                   "user-password": "abcd",
121                                   "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
122                                   "objects":{
123                                   "node":[
124                                                   {
125                                                                 "node-name": "branch",
126                                                                 "node-type": "ext-group",
127                                                                 "property": [
128                                                                                   {
129                                                                                         "property-name": "location",
130                                                                                         "property-values": {
131                                                                                                           "string-value": [
132                                                                                                                         {
133                                                                                                                           "order": "0",
134                                                                                                                           "value": "openflow:3:4"
135                                                                                                                         }
136                                                                                                                 ]
137                                                                                                         }
138                                                                                   },
139                                                                                   {
140                                                                                         "property-name": "ac-info-network",
141                                                                                         "property-values": {
142                                                                                                           "string-value": [
143                                                                                                                         {
144                                                                                                                           "order": "0",
145                                                                                                                           "value": "layer3"
146                                                                                                                         }
147                                                                                                                 ]
148                                                                                                         }
149                                                                                   },
150                                                                                   {
151                                                                                         "property-name": "ac-info-protocol",
152                                                                                         "property-values": {
153                                                                                                                 "string-value": [
154                                                                                                                         {
155                                                                                                                                 "order": "0",
156                                                                                                                                 "value": "static"
157                                                                                                                         }
158                                                                                                                 ]
159                                                                                                         }
160                                                                                   },
161                                                                                   {
162                                                                                         "property-name": "ip-prefix",
163                                                                                         "property-values": {
164                                                                                                           "string-value": [
165                                                                                                                         {
166                                                                                                                           "order": "0",
167                                                                                                                           "value": "192.168.12.0/24"
168                                                                                                                         }
169                                                                                                                 ]
170                                                                                                         }
171                                                                                   }
172                                                                                 ],
173                                                                 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
174                                                           }
175                                                 ]
176                                   }
177                           }
178                 }
179         post(STRUCTURE_UPDATE_USERS % contHost, data)
180
181 def add_firewall_node(contHost):
182         data={
183                           "input":{
184                               "user-name": "user1",
185                                   "user-role": "tenant",
186                                   "user-password": "abcd",
187                                   "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
188                                   "objects":{
189                                   "node":[
190                                                   {
191                                                                 "node-name": "fw1",
192                                                                 "node-type": "fw",
193                                                                 "property": [
194                                                                                           {
195                                                                                                 "property-name": "location",
196                                                                                                 "property-values": {
197                                                                                                                   "string-value": [
198                                                                                                                                 {
199                                                                                                                                   "order": "0",
200                                                                                                                                   "value": "openflow:1:1"
201                                                                                                                                 }
202                                                                                                                         ]
203                                                                                                                 }
204                                                                                           },
205                                                                                           {
206                                                                                                 "property-name": "operating-mode",
207                                                                                                 "property-values": {
208                                                                                                                         "string-value": [
209                                                                                                                                 {
210                                                                                                                                         "order": "0",
211                                                                                                                                         "value": "layer3"
212                                                                                                                                 }
213                                                                                                                         ]
214                                                                                                                 }
215                                                                                           }
216                                                                                         ],
217                                                                 "node-id": "c2cd9de6-ab25-4d3f-bff2-c4d785a41995"
218                                                           }
219                                                 ]
220                                   }
221                           }
222                 }
223         post(STRUCTURE_UPDATE_USERS % contHost, data)
224
225 def add_cache_node(contHost):
226         data={
227                           "input":{
228                               "user-name": "user1",
229                                   "user-role": "tenant",
230                                   "user-password": "abcd",
231                                   "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
232                                   "objects":{
233                                   "node":[
234                                                   {
235                                                                 "node-name": "cache2",
236                                                                 "node-type": "cache",
237                                                                 "property": [
238                                                                                           {
239                                                                                                 "property-name": "location",
240                                                                                                 "property-values": {
241                                                                                                                   "string-value": [
242                                                                                                                                 {
243                                                                                                                                   "order": "0",
244                                                                                                                                   "value": "openflow:2:2"
245                                                                                                                                 }
246                                                                                                                         ]
247                                                                                                                 }
248                                                                                           },
249                                                                                           {
250                                                                                                 "property-name": "operating-mode",
251                                                                                                 "property-values": {
252                                                                                                                         "string-value": [
253                                                                                                                                 {
254                                                                                                                                         "order": "0",
255                                                                                                                                         "value": "layer3"
256                                                                                                                                 }
257                                                                                                                         ]
258                                                                                                                 }
259                                                                                           }
260                                                                                         ],
261                                                                 "node-id": "a5a96dc7-51dd-44a5-802b-7e67a309fb36"
262                                                           }
263                                                 ]
264                                   }
265                           }
266                 }
267         post(STRUCTURE_UPDATE_USERS % contHost, data)
268
269 def add_chain_node(contHost):
270         data={
271                   "input":{
272                       "user-name": "user1",
273                           "user-role": "tenant",
274                           "user-password": "abcd",
275                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
276                           "objects":{
277                           "node":[
278                                           {     "sub-node": [
279                                                                 {
280                                                                         "order": "0",
281                                                                         "node-id": "c2cd9de6-ab25-4d3f-bff2-c4d785a41995"
282                                                                 },
283                                                                 {
284                                                                         "order": "1",
285                                                                         "node-id": "a5a96dc7-51dd-44a5-802b-7e67a309fb36"
286                                                                 }
287                                                         ],
288                                                         "node-name": "chain1",
289                                                         "node-type": "chain-group",
290                                                         "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
291                                                   }
292                                         ]
293                           }
294                   }
295                 }
296         post(STRUCTURE_UPDATE_USERS % contHost, data)
297
298 def add_head_site_connection(contHost):
299         data={
300                  "input": {
301                           "user-name": "user1",
302                           "user-role": "tenant",
303                           "user-password": "abcd",
304                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
305                           "objects":{
306                                   "connection": [
307                                                   {
308                                                         "connection-name": "c1",
309                                                         "connection-id": "7175bac3-b785-2278-90ed-613480e354e8",
310                                                         "end-node": [
311                                                           {
312                                                                 "order": "0",
313                                                                 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
314                                                           },
315                                                           {
316                                                                 "order": "0",
317                                                                 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
318                                                           }
319                                                         ],
320                                                         "connection-type": "p2p"
321                                                 }
322                                         ]
323                                 }
324                   }
325         }
326         post(STRUCTURE_UPDATE_USERS % contHost, data)
327
328 def add_head_chain_connection(contHost):
329         data={
330                  "input": {
331                           "user-name": "user1",
332                           "user-role": "tenant",
333                           "user-password": "abcd",
334                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
335                           "objects":{
336                                   "connection": [
337                                                   {
338                                                         "connection-name": "c2",
339                                                         "connection-id": "9397bac3-d9a7-449a-b20f-8356a2f3760a",
340                                                         "end-node": [
341                                                           {
342                                                                 "order": "0",
343                                                                 "node-id": "94a6fb90-b425-4ffd-9515-c0684aa4c37f"
344                                                           },
345                                                           {
346                                                                 "order": "0",
347                                                                 "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
348                                                           }
349                                                         ],
350                                                         "connection-type": "p2p"
351                                                 }
352                                         ]
353                                 }
354                   }
355         }
356         post(STRUCTURE_UPDATE_USERS % contHost, data)
357
358 def add_site_chain_connection(contHost):
359         data={
360                  "input": {
361                           "user-name": "user1",
362                           "user-role": "tenant",
363                           "user-password": "abcd",
364                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
365                           "objects":{
366                                   "connection": [
367                                                   {
368                                                         "connection-name": "c3",
369                                                         "connection-id": "fed2b570-2e80-4914-a5af-040594b651b9",
370                                                         "end-node": [
371                                                           {
372                                                                 "order": "0",
373                                                                 "node-id": "41ee9aad-5f61-469d-99a9-e691d2a1de05"
374                                                           },
375                                                           {
376                                                                 "order": "0",
377                                                                 "node-id": "b46cfa7f-93a3-43f4-ac20-09307c75feca"
378                                                           }
379                                                         ],
380                                                         "connection-type": "p2p"
381                                                 }
382                                         ]
383                                 }
384                   }
385         }
386         post(STRUCTURE_UPDATE_USERS % contHost, data)
387
388 def add_flow(contHost):
389         data={
390                  "input": {
391                           "user-name": "user1",
392                           "user-role": "tenant",
393                           "user-password": "abcd",
394                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
395                           "objects":{
396                                   "flow": [
397                                                   {
398                                                         "match-item": [
399                                                                 {
400                                                                         "match-item-value": {
401                                                                                 "string-value": "192.168.12.0/24"
402                                                                         },
403                                                                         "match-item-name": "src-ip"
404                                                                 },
405                                                                 {
406                                                                         "match-item-value": {
407                                                                                 "string-value": "192.168.11.0/24"
408                                                                         },
409                                                                         "match-item-name": "dst-ip"
410                                                                 },
411                                                         ],
412                                                         "flow-id": "cf48eeee-882e-435a-adf4-ea22ba88331f",
413                                                         "flow-name": "f1"
414                                                 }
415                                         ]
416                                 }
417                   }
418         }
419         post(STRUCTURE_UPDATE_USERS % contHost, data)
420
421 def add_operation(contHost):
422         data={
423                  "input": {
424                           "user-name": "user1",
425                           "user-role": "tenant",
426                           "user-password": "abcd",
427                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
428                           "operations":{
429                                   "operation": [
430                                                   {
431                                                         "operation-name": "o1",
432                                                         "target-object": "cf48eeee-882e-435a-adf4-ea22ba88331f",
433                                                         "priority":"0",
434                                                         "operation-id": "619ee3bb-1e40-480f-b0fa-a331820a5518",
435                                                         "action":[
436                                                                                 {
437                                                                                         "action-name":"go-through",
438                                                                                         "parameter-values":{
439                                                                                                 "string-value": [
440                                                                                                         {"value": "41ee9aad-5f61-469d-99a9-e691d2a1de05",
441                                                                                                          "order":"0"}
442                                                                                                 ]
443                                                                                         },
444                                                                                         "order":"0"
445                                                                                 }
446                                                                         ]
447                                                 }
448                                         ]
449                                 }
450                   }
451         }
452         post(STRUCTURE_UPDATE_USERS % contHost, data)
453
454
455 def post(url, 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))
461     print r.text
462     r.raise_for_status()
463
464
465 if __name__ == '__main__':
466
467         parser = argparse.ArgumentParser()
468         parser.add_argument('--controller', default='127.0.0.1', help='controller IP')
469         args=parser.parse_args()
470
471         # CREATE User;
472         register_user(args.controller)
473
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)
478
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)
483
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)
488
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)
493
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)
498
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)
503
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)
508
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)
513
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)
518
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)
523
524