Modify nemo-odl.py and add template.py for nemo template scenario. 92/31892/1
authorZhang Yali <zhangyali369@huawei.com>
Sat, 26 Dec 2015 07:38:07 +0000 (15:38 +0800)
committerZhang Yali <zhangyali369@huawei.com>
Sat, 26 Dec 2015 07:38:07 +0000 (15:38 +0800)
Change-Id: Ib5835c6eb4fde92282353e99f07f63a0b25156a3
Signed-off-by: Zhang Yali <zhangyali369@huawei.com>
nemo-impl/src/main/resources/nemo-odl.py
nemo-impl/src/test/resources/template.py [new file with mode: 0644]

index 2c32cbd86a59febdde57cc9b1f42d3b299a456f5..77733b96b7960862dc9b2310df0fbdcf152200a7 100644 (file)
@@ -26,7 +26,11 @@ def add_predefined_userrole(contHost):
                                                        {
                                                                "role-name": "tenant",
                                                                "role-description": "It's a non-administor user"
-                                                       }
+                                                       },
+                                                       {
+                                "role-name": "admin",
+                               "role-description": "It's a administor user"
+                            }
                                                ]
                                        }
                }
@@ -75,7 +79,11 @@ def add_predefined_nodetypes(contHost):
                                                                        {
                                                                                "property-name": "location",
                                                                                "property-value-type": "string"
-                                                                       }
+                                                                       },
+                                                                       {
+                                       "property-name": "sub-nodes",
+                                               "property-value-type": "string"
+                                       }
                                                                ]
                                                },
                                                {
diff --git a/nemo-impl/src/test/resources/template.py b/nemo-impl/src/test/resources/template.py
new file mode 100644 (file)
index 0000000..be1e77c
--- /dev/null
@@ -0,0 +1,178 @@
+#!/usr/bin/python\r
+#Filename:servicechain.py\r
+import requests,json\r
+import argparse, sys\r
+from requests.auth import HTTPBasicAuth\r
+\r
+USERNAME='admin'\r
+PASSWORD='admin'\r
+\r
+TRANSACTION_BEGIN="http://%s:8181/restconf/operations/nemo-intent:begin-transaction"\r
+TRANSACTION_END="http://%s:8181/restconf/operations/nemo-intent:end-transaction"\r
+REGISTER_USER="http://%s:8181/restconf/operations/nemo-intent:register-user"\r
+LANGUAGE_INTENT="http://%s:8181/restconf/operations/nemo-intent:language-style-nemo-request"   \r
+\r
+\r
+def register_admin(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",\r
+                                       "user-name":"admin",\r
+                                       "user-password":"abcd",\r
+                                       "user-role":"admin"\r
+                                       }\r
+               }\r
+       post(REGISTER_USER % contHost, data)\r
+\r
+def transaction_begin_admin(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"                                \r
+                                       }\r
+               }\r
+       post(TRANSACTION_BEGIN % contHost, data)\r
+       \r
+def transaction_end_admin(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"                                \r
+                                       }\r
+               }\r
+       post(TRANSACTION_END % contHost, data)\r
+       \r
+def register_template_definition(contHost):\r
+       data={\r
+                       "input":{\r
+                         "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",\r
+                         "nemo-statement": \r
+                               "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
+                       }\r
+               }\r
+       post(LANGUAGE_INTENT % contHost, data)\r
+       \r
+def register_user(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                       "user-name":"user2",\r
+                                       "user-password":"abc",\r
+                                       "user-role":"tenant"\r
+                                       }\r
+               }\r
+       post(REGISTER_USER % contHost, data)\r
+\r
+def transaction_begin(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"                        \r
+                                       }\r
+               }\r
+       post(TRANSACTION_BEGIN % contHost, data)\r
+\r
+def transaction_end(contHost):\r
+       data={\r
+                       "input":{\r
+                                       "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"                                \r
+                                       }\r
+               }\r
+       post(TRANSACTION_END % contHost, data)\r
+\r
+def add_vm2(contHost):\r
+       data={          \r
+                       "input":{\r
+                                       "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                       "nemo-statement": "CREATE Node vm2 Type host;"\r
+                                       }       \r
+       }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+\r
+def add_server1(contHost):\r
+       data={          \r
+                       "input":{\r
+                                       "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                       "nemo-statement": "CREATE Node server1 Type host;"\r
+                                       }       \r
+               }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+\r
+def add_dmz_node(contHost):\r
+       data={\r
+                       "input":{                                \r
+                                 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                 "nemo-statement":\r
+                                       "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
+                               }\r
+               }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+\r
+def add_internet_node(contHost):\r
+       data={\r
+                       "input":{                                \r
+                                 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                 "nemo-statement":\r
+                                       "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
+                               }\r
+               }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+\r
+def add_interior_node(contHost):\r
+       data={\r
+                       "input":{                                \r
+                                 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                 "nemo-statement":\r
+                                       "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
+                               }\r
+       }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+       \r
+def add_internet_dmz_connection(contHost):\r
+       data={\r
+                       "input":{                                \r
+                                 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                 "nemo-statement":\r
+                                       "CREATE Connection c1 Type p2p Endnodes internet,dmz1.n1;"\r
+                               }\r
+       }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+       \r
+def add_dmz_interior_connection(contHost):\r
+       data={\r
+                       "input":{                                \r
+                                 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",\r
+                                 "nemo-statement":\r
+                                       "CREATE Connection c2 Type p2p Endnodes dmz1.n2,interior;"\r
+                               }\r
+       }\r
+       post(LANGUAGE_INTENT % contHost,data)\r
+\r
+def post(url, data):\r
+    headers = {'Content-type': 'application/yang.data+json',\r
+               'Accept': 'application/yang.data+json'}\r
+    print "POST %s" % url\r
+    print json.dumps(data, indent=4, sort_keys=True)\r
+    r = requests.post(url, data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD))\r
+    print r.text\r
+    r.raise_for_status()\r
+       \r
+if __name__ == '__main__':\r
+\r
+       parser = argparse.ArgumentParser()\r
+       parser.add_argument('--controller', default='127.0.0.1', help='controller IP')\r
+       args=parser.parse_args()\r
+       \r
+       register_admin(args.controller)\r
+       transaction_begin_admin(args.controller)\r
+       register_template_definition(args.controller)\r
+       transaction_end_admin(args.controller)\r
+       \r
+       register_user(args.controller)\r
+       transaction_begin(args.controller)\r
+       add_vm2(args.controller)\r
+       add_server1(args.controller)\r
+       add_internet_node(args.controller)\r
+       add_dmz_node(args.controller)\r
+       add_interior_node(args.controller)\r
+       \r
+       add_internet_dmz_connection(args.controller)\r
+       add_dmz_interior_connection(args.controller)\r
+       transaction_end(args.controller)
\ No newline at end of file