Modify nemo-odl.py and add template.py for nemo template scenario.
[nemo.git] / nemo-impl / src / test / resources / template.py
1 #!/usr/bin/python\r
2 #Filename:servicechain.py\r
3 import requests,json\r
4 import argparse, sys\r
5 from requests.auth import HTTPBasicAuth\r
6 \r
7 USERNAME='admin'\r
8 PASSWORD='admin'\r
9 \r
10 TRANSACTION_BEGIN="http://%s:8181/restconf/operations/nemo-intent:begin-transaction"\r
11 TRANSACTION_END="http://%s:8181/restconf/operations/nemo-intent:end-transaction"\r
12 REGISTER_USER="http://%s:8181/restconf/operations/nemo-intent:register-user"\r
13 LANGUAGE_INTENT="http://%s:8181/restconf/operations/nemo-intent:language-style-nemo-request"    \r
14 \r
15 \r
16 def register_admin(contHost):\r
17         data={\r
18                         "input":{\r
19                                         "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",\r
20                                         "user-name":"admin",\r
21                                         "user-password":"abcd",\r
22                                         "user-role":"admin"\r
23                                         }\r
24                 }\r
25         post(REGISTER_USER % contHost, data)\r
26 \r
27 def transaction_begin_admin(contHost):\r
28         data={\r
29                         "input":{\r
30                                         "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"                                \r
31                                         }\r
32                 }\r
33         post(TRANSACTION_BEGIN % contHost, data)\r
34         \r
35 def transaction_end_admin(contHost):\r
36         data={\r
37                         "input":{\r
38                                         "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"                                \r
39                                         }\r
40                 }\r
41         post(TRANSACTION_END % contHost, data)\r
42         \r
43 def register_template_definition(contHost):\r
44         data={\r
45                         "input":{\r
46                           "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",\r
47                           "nemo-statement": \r
48                                 "CREATE NodeModel dmz Property string: location-fw, string: location-n2, string: ipprefix, string: gatewayip, string: srcip,string: subnodes-n2; Node fw1 Type fw Property location: location-fw, operating-mode: layer3; Node n1 Type chain-group Contain fw1; Node n2 Type l2-group Property location: location-n2, ip-prefix: ipprefix, gateway-ip: gatewayip, sub-nodes: subnodes-n2; Connection c1 Type p2p Endnodes n1,n2; Flow f1 Match dst-ip: ipprefix, src-ip: srcip, dst-port: 80; Operation o1  Target f1 Priority 0 Action deny;"\r
49                         }\r
50                 }\r
51         post(LANGUAGE_INTENT % contHost, data)\r
52         \r
53 def register_user(contHost):\r
54         data={\r
55                         "input":{\r
56                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
57                                         "user-name":"user2",\r
58                                         "user-password":"abc",\r
59                                         "user-role":"tenant"\r
60                                         }\r
61                 }\r
62         post(REGISTER_USER % contHost, data)\r
63 \r
64 def transaction_begin(contHost):\r
65         data={\r
66                         "input":{\r
67                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"                        \r
68                                         }\r
69                 }\r
70         post(TRANSACTION_BEGIN % contHost, data)\r
71 \r
72 def transaction_end(contHost):\r
73         data={\r
74                         "input":{\r
75                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"                                \r
76                                         }\r
77                 }\r
78         post(TRANSACTION_END % contHost, data)\r
79 \r
80 def add_vm2(contHost):\r
81         data={          \r
82                         "input":{\r
83                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
84                                         "nemo-statement": "CREATE Node vm2 Type host;"\r
85                                         }       \r
86         }\r
87         post(LANGUAGE_INTENT % contHost,data)\r
88 \r
89 def add_server1(contHost):\r
90         data={          \r
91                         "input":{\r
92                                         "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
93                                         "nemo-statement": "CREATE Node server1 Type host;"\r
94                                         }       \r
95                 }\r
96         post(LANGUAGE_INTENT % contHost,data)\r
97 \r
98 def add_dmz_node(contHost):\r
99         data={\r
100                         "input":{                                \r
101                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
102                                   "nemo-statement":\r
103                                         "CREATE Node dmz1 Type dmz Property location-fw: openflow:1:1, location-n2: openflow:3,ipprefix: 192.168.12.0/24, gatewayip: 192.168.12.1, srcip: 172.168.1.0/24, subnodes-n2:[vm2,server1];"\r
104                                 }\r
105                 }\r
106         post(LANGUAGE_INTENT % contHost,data)\r
107 \r
108 def add_internet_node(contHost):\r
109         data={\r
110                         "input":{                                \r
111                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
112                                   "nemo-statement":\r
113                                         "CREATE Node internet Type ext-group Property location: openflow:3:4, ac-info-network: layer3, ac-info-protocol: static, ip-prefix: 172.168.1.0/24;"\r
114                                 }\r
115                 }\r
116         post(LANGUAGE_INTENT % contHost,data)\r
117 \r
118 def add_interior_node(contHost):\r
119         data={\r
120                         "input":{                                \r
121                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
122                                   "nemo-statement":\r
123                                         "CREATE Node interior Type ext-group Property location: openflow:4:2, ac-info-network: layer3, ac-info-protocol: static, ip-prefix: 192.168.13.0/24;"\r
124                                 }\r
125         }\r
126         post(LANGUAGE_INTENT % contHost,data)\r
127         \r
128 def add_internet_dmz_connection(contHost):\r
129         data={\r
130                         "input":{                                \r
131                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
132                                   "nemo-statement":\r
133                                         "CREATE Connection c1 Type p2p Endnodes internet,dmz1.n1;"\r
134                                 }\r
135         }\r
136         post(LANGUAGE_INTENT % contHost,data)\r
137         \r
138 def add_dmz_interior_connection(contHost):\r
139         data={\r
140                         "input":{                                \r
141                                   "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
142                                   "nemo-statement":\r
143                                         "CREATE Connection c2 Type p2p Endnodes dmz1.n2,interior;"\r
144                                 }\r
145         }\r
146         post(LANGUAGE_INTENT % contHost,data)\r
147 \r
148 def post(url, data):\r
149     headers = {'Content-type': 'application/yang.data+json',\r
150                'Accept': 'application/yang.data+json'}\r
151     print "POST %s" % url\r
152     print json.dumps(data, indent=4, sort_keys=True)\r
153     r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))\r
154     print r.text\r
155     r.raise_for_status()\r
156         \r
157 if __name__ == '__main__':\r
158 \r
159         parser = argparse.ArgumentParser()\r
160         parser.add_argument('--controller', default='127.0.0.1', help='controller IP')\r
161         args=parser.parse_args()\r
162         \r
163         register_admin(args.controller)\r
164         transaction_begin_admin(args.controller)\r
165         register_template_definition(args.controller)\r
166         transaction_end_admin(args.controller)\r
167         \r
168         register_user(args.controller)\r
169         transaction_begin(args.controller)\r
170         add_vm2(args.controller)\r
171         add_server1(args.controller)\r
172         add_internet_node(args.controller)\r
173         add_dmz_node(args.controller)\r
174         add_interior_node(args.controller)\r
175         \r
176         add_internet_dmz_connection(args.controller)\r
177         add_dmz_interior_connection(args.controller)\r
178         transaction_end(args.controller)