2 #Filename:servicechain.py
\r
5 from requests.auth import HTTPBasicAuth
\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
16 def register_admin(contHost):
\r
19 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
\r
20 "user-name":"admin",
\r
21 "user-password":"abcd",
\r
25 post(REGISTER_USER % contHost, data)
\r
27 def transaction_begin_admin(contHost):
\r
30 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"
\r
33 post(TRANSACTION_BEGIN % contHost, data)
\r
35 def transaction_end_admin(contHost):
\r
38 "user-id":"af4fc2be-e3f4-4388-a8ef-3aabae872f2b"
\r
41 post(TRANSACTION_END % contHost, data)
\r
43 def register_template_definition(contHost):
\r
46 "user-id": "af4fc2be-e3f4-4388-a8ef-3aabae872f2b",
\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
51 post(LANGUAGE_INTENT % contHost, data)
\r
53 def register_user(contHost):
\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
62 post(REGISTER_USER % contHost, data)
\r
64 def transaction_begin(contHost):
\r
67 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"
\r
70 post(TRANSACTION_BEGIN % contHost, data)
\r
72 def transaction_end(contHost):
\r
75 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b"
\r
78 post(TRANSACTION_END % contHost, data)
\r
80 def add_vm2(contHost):
\r
83 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\r
84 "nemo-statement": "CREATE Node vm2 Type host;"
\r
87 post(LANGUAGE_INTENT % contHost,data)
\r
89 def add_server1(contHost):
\r
92 "user-id":"14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\r
93 "nemo-statement": "CREATE Node server1 Type host;"
\r
96 post(LANGUAGE_INTENT % contHost,data)
\r
98 def add_dmz_node(contHost):
\r
101 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\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
106 post(LANGUAGE_INTENT % contHost,data)
\r
108 def add_internet_node(contHost):
\r
111 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\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
116 post(LANGUAGE_INTENT % contHost,data)
\r
118 def add_interior_node(contHost):
\r
121 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\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
126 post(LANGUAGE_INTENT % contHost,data)
\r
128 def add_internet_dmz_connection(contHost):
\r
131 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\r
133 "CREATE Connection c1 Type p2p Endnodes internet,dmz1.n1;"
\r
136 post(LANGUAGE_INTENT % contHost,data)
\r
138 def add_dmz_interior_connection(contHost):
\r
141 "user-id": "14ce424a-3e50-4a2a-ad5c-b29845158c8b",
\r
143 "CREATE Connection c2 Type p2p Endnodes dmz1.n2,interior;"
\r
146 post(LANGUAGE_INTENT % contHost,data)
\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
155 r.raise_for_status()
\r
157 if __name__ == '__main__':
\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
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
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
176 add_internet_dmz_connection(args.controller)
\r
177 add_dmz_interior_connection(args.controller)
\r
178 transaction_end(args.controller)