74b098f90fd9bfa27b7468ca4593c9f626d902c8
8 from lib
.util
import Util
12 logging
.basicConfig(level
=logging
.DEBUG
)
13 log
= logging
.getLogger('helper.py')
17 def __init__(self
, host
=os
.getenv('OSM_SERVER', "localhost"), so_port
=9999, so_project
='admin', **kwargs
):
20 self
._password
= 'admin'
21 # self._project = so_project
22 self
._project
= so_project
23 self
._token
_endpoint
= 'admin/v1/tokens'
24 self
._user
_endpoint
= 'admin/v1/users'
29 self
._base
_path
= "https://{0}:{1}/osm".format(self
._host
, so_port
)
32 postfields_dict
= {'username': self
._user
,
33 'password': self
._password
,
34 'project-id': self
._project
}
35 token_url
= "{0}/{1}".format(self
._base
_path
, self
._token
_endpoint
)
36 token
= self
._send
_post
(token_url
, None, postfields_dict
, headers
={"Content-Type": "application/yaml", "accept": "application/json"})
42 token
= self
.get_token()
44 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
45 self
._headers
['accept'] = 'application/json'
46 _url
= "{0}/admin/v1/vims".format(self
._base
_path
)
47 return self
._send
_get
(_url
, headers
=self
._headers
)
49 def vim_delete(self
, id):
50 token
= self
.get_token()
52 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
53 self
._headers
['accept'] = 'application/json'
54 _url
= "{0}/admin/v1/vims/{1}".format(self
._base
_path
, id)
55 return self
._send
_delete
(_url
, headers
=self
._headers
)
58 def vim_get(self
, id):
59 token
= self
.get_token()
61 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
62 self
._headers
['accept'] = 'application/json'
63 _url
= "{0}/admin/v1/vims/{1}".format(self
._base
_path
, id)
64 return self
._send
_get
(_url
, headers
=self
._headers
)
67 def vim_create(self
, vim_data
):
68 token
= self
.get_token()
71 headers
['Authorization'] = 'Bearer {}'.format(token
)
72 headers
['Content-Type'] = 'application/json'
73 headers
['accept'] = 'application/json'
75 _url
= "{0}/admin/v1/vims".format(self
._base
_path
)
76 return self
._send
_post
(_url
, headers
=headers
,
81 token
= self
.get_token()
83 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
84 self
._headers
['accept'] = 'application/json'
85 _url
= "{0}/admin/v1/sdns".format(self
._base
_path
)
86 return self
._send
_get
(_url
, headers
=self
._headers
)
88 def sdn_delete(self
, id):
89 token
= self
.get_token()
91 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
92 self
._headers
['accept'] = 'application/json'
93 _url
= "{0}/admin/v1/sdns/{1}".format(self
._base
_path
, id)
94 return self
._send
_delete
(_url
, headers
=self
._headers
)
97 def sdn_get(self
, id):
98 token
= self
.get_token()
100 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
101 self
._headers
['accept'] = 'application/json'
102 _url
= "{0}/admin/v1/sdns/{1}".format(self
._base
_path
, id)
103 return self
._send
_get
(_url
, headers
=self
._headers
)
106 def sdn_create(self
, sdn_data
):
107 token
= self
.get_token()
110 headers
['Authorization'] = 'Bearer {}'.format(token
)
111 headers
['Content-Type'] = 'application/json'
112 headers
['accept'] = 'application/json'
114 _url
= "{0}/admin/v1/sdns".format(self
._base
_path
)
115 return self
._send
_post
(_url
, headers
=headers
,
120 token
= self
.get_token()
122 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
123 self
._headers
['Content-Type'] = 'application/yaml'
124 self
._headers
['accept'] = 'application/json'
125 _url
= "{0}/nsd/v1/ns_descriptors_content".format(self
._base
_path
)
126 return self
._send
_get
(_url
, headers
=self
._headers
)
129 def nsd_get(self
, id):
130 token
= self
.get_token()
132 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
133 self
._headers
['Content-Type'] = 'application/yaml'
134 #self._headers['accept'] = 'application/json'
135 _url
= "{0}/nsd/v1/ns_descriptors/{1}/nsd".format(self
._base
_path
,id)
136 return yaml
.load(self
._send
_get
(_url
, headers
=self
._headers
))
139 def nsd_delete(self
, id):
140 token
= self
.get_token()
142 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
143 self
._headers
['Content-Type'] = 'application/yaml'
144 self
._headers
['accept'] = 'application/json'
145 _url
= "{0}/nsd/v1/ns_descriptors_content/{1}".format(self
._base
_path
, id)
146 return self
._send
_delete
(_url
, headers
=self
._headers
)
149 def _descriptor_update(self
, tarf
, data
):
150 print tarf
.getnames()
151 # extract the package on a tmp directory
152 tarf
.extractall('/tmp')
154 for name
in tarf
.getnames():
155 if name
.endswith(".yaml") or name
.endswith(".yml"):
156 with
open('/tmp/' + name
, 'w') as outfile
:
157 yaml
.safe_dump(data
, outfile
, default_flow_style
=False)
160 tarf_temp
= tarfile
.open('/tmp/' + tarf
.getnames()[0] + ".tar.gz", "w:gz")
161 # tarf_temp = tarfile.open("pippo.tar.gz", "w:gz")
162 print tarf_temp
.getnames()
163 # tarf_temp.add('/tmp/'+tarf.getnames()[0])
165 # if tarinfo.name.startswith(tarf.getnames()[0]):
166 # new_name = tarinfo.name[len(tarf.getnames()[0]):]
167 tarf_temp
.add('/tmp/' + tarinfo
.name
, tarinfo
.name
, recursive
=False)
168 print tarf_temp
.getnames()
172 def nsd_update(self
, id, data
):
173 token
= self
.get_token()
176 # get the package onboarded
177 tar_pkg
= self
.get_nsd_pkg(id)
178 tarf
= tarfile
.open(fileobj
=tar_pkg
)
180 tarf
= self
._descriptor
_update
(tarf
, data
)
181 headers
['Authorization'] = 'Bearer {}'.format(token
)
182 headers
['Content-Type'] = 'application/gzip'
183 headers
['accept'] = 'application/json'
184 headers
['Content-File-MD5'] = self
.md5(open('/tmp/' + tarf
.getnames()[0] + ".tar.gz", 'rb'))
185 #headers['Content-File-MD5'] = self.md5(open("pippo.tar.gz", 'rb'))
187 _url
= "{0}/nsd/v1/ns_descriptors/{1}/nsd_content".format(self
._base
_path
, id)
188 return self
._send
_put
(_url
, headers
=headers
, data
=open('/tmp/'+tarf
.getnames()[0] + ".tar.gz", 'rb'))
189 #return self._send_put(_url, headers=headers, data=open("pippo.tar.gz", 'rb'))
193 def nsd_onboard(self
, package
):
194 token
= self
.get_token()
198 headers
['Authorization'] = 'Bearer {}'.format(token
)
199 headers
['Content-Type'] = 'application/gzip'
200 headers
['accept'] = 'application/json'
201 with
open('/tmp/'+package
.name
, 'wb+') as destination
:
202 for chunk
in package
.chunks():
203 destination
.write(chunk
)
204 headers
['Content-File-MD5'] = self
.md5(open('/tmp/'+package
.name
, 'rb'))
206 _url
= "{0}/nsd/v1/ns_descriptors_content/".format(self
._base
_path
)
207 return self
._send
_post
(_url
, headers
=headers
,
208 data
=open('/tmp/'+package
.name
, 'rb'))
211 def nsd_artifacts(self
, id):
212 token
= self
.get_token()
214 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
215 self
._headers
['Content-Type'] = 'application/yaml'
216 self
._headers
['accept'] = 'text/plain'
217 _url
= "{0}/nsd/v1/ns_descriptors/{1}/artifacts".format(self
._base
_path
, id)
218 return self
._send
_get
(_url
, headers
=self
._headers
)
222 token
= self
.get_token()
224 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
225 self
._headers
['Content-Type'] = 'application/yaml'
226 self
._headers
['accept'] = 'application/json'
227 _url
= "{0}/nslcm/v1/ns_instances_content".format(self
._base
_path
)
228 return self
._send
_get
(_url
, headers
=self
._headers
)
231 def ns_create(self
, ns_data
):
232 token
= self
.get_token()
235 headers
['Authorization'] = 'Bearer {}'.format(token
)
236 headers
['Content-Type'] = 'application/yaml'
237 headers
['accept'] = 'application/json'
239 _url
= "{0}/nslcm/v1/ns_instances_content".format(self
._base
_path
)
240 return self
._send
_post
(_url
, headers
=headers
,
244 def ns_get(self
, id):
245 token
= self
.get_token()
247 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
248 self
._headers
['Content-Type'] = 'application/json'
249 self
._headers
['accept'] = 'application/json'
250 _url
= "{0}/nslcm/v1/ns_instances_content/{1}".format(self
._base
_path
, id)
251 return self
._send
_get
(_url
, headers
=self
._headers
)
254 def ns_delete(self
, id, force
=None):
255 token
= self
.get_token()
257 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
258 self
._headers
['accept'] = 'application/json'
261 query_path
= '?FORCE=true'
262 _url
= "{0}/nslcm/v1/ns_instances_content/{1}{2}".format(self
._base
_path
, id, query_path
)
264 return self
._send
_delete
(_url
, headers
=self
._headers
)
267 def ns_action(self
, id, action_payload
):
268 token
= self
.get_token()
271 headers
['Authorization'] = 'Bearer {}'.format(token
)
272 headers
['Content-Type'] = 'application/json'
273 headers
['accept'] = 'application/json'
275 _url
= "{0}/nslcm/v1/ns_instances/{1}/action".format(self
._base
_path
, id)
276 return self
._send
_post
(_url
, headers
=headers
,
280 def ns_op_list(self
, id):
281 token
= self
.get_token()
284 headers
['Authorization'] = 'Bearer {}'.format(token
)
285 headers
['Content-Type'] = 'application/json'
286 headers
['accept'] = 'application/json'
288 _url
= "{0}/nslcm/v1/ns_lcm_op_occs/?nsInstanceId={1}".format(self
._base
_path
, id)
289 return self
._send
_get
(_url
, headers
=headers
)
293 token
= self
.get_token()
296 headers
['Authorization'] = 'Bearer {}'.format(token
)
297 headers
['Content-Type'] = 'application/json'
298 headers
['accept'] = 'application/json'
300 _url
= "{0}/nslcm/v1/ns_lcm_op_occs/{1}".format(self
._base
_path
, id)
301 return self
._send
_get
(_url
, headers
=headers
)
304 def ns_alarm_create(self
, id, alarm_payload
):
305 token
= self
.get_token()
308 headers
['Authorization'] = 'Bearer {}'.format(token
)
309 headers
['Content-Type'] = 'application/json'
310 # headers['accept'] = 'application/json'
312 _url
= "{0}/test/message/alarm_request".format(self
._base
_path
)
313 return self
._send
_post
(_url
, headers
=headers
, json
=alarm_payload
)
316 def ns_metric_export(self
, id, metric_payload
):
318 token
= self
.get_token()
321 headers
['Authorization'] = 'Bearer {}'.format(token
)
322 headers
['Content-Type'] = 'application/json'
323 #headers['accept'] = 'application/json'
325 _url
= "{0}/test/message/metric_request".format(self
._base
_path
)
327 return self
._send
_post
(_url
, headers
=headers
, json
=metric_payload
)
332 token
= self
.get_token()
334 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
335 self
._headers
['Content-Type'] = 'application/yaml'
336 self
._headers
['accept'] = 'application/json'
337 _url
= "{0}/vnfpkgm/v1/vnf_packages_content".format(self
._base
_path
)
338 return self
._send
_get
(_url
, headers
=self
._headers
)
341 def vnfd_get(self
, id):
342 token
= self
.get_token()
344 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
345 self
._headers
['Content-Type'] = 'application/yaml'
346 #self._headers['accept'] = 'application/yaml'
347 _url
= "{0}/vnfpkgm/v1/vnf_packages/{1}/vnfd".format(self
._base
_path
, id)
348 return yaml
.load(self
._send
_get
(_url
, headers
=self
._headers
))
351 def vnfd_delete(self
, id):
352 token
= self
.get_token()
354 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
355 self
._headers
['Content-Type'] = 'application/yaml'
356 self
._headers
['accept'] = 'application/json'
357 _url
= "{0}/vnfpkgm/v1/vnf_packages_content/{1}".format(self
._base
_path
, id)
358 return self
._send
_delete
(_url
, headers
=self
._headers
)
361 def vnfd_update(self
, id, data
):
362 token
= self
.get_token()
365 # get the package onboarded
366 tar_pkg
= self
.get_vnfd_pkg(id)
367 tarf
= tarfile
.open(fileobj
=tar_pkg
)
369 tarf
= self
._descriptor
_update
(tarf
, data
)
370 headers
['Authorization'] = 'Bearer {}'.format(token
)
371 headers
['Content-Type'] = 'application/gzip'
372 headers
['accept'] = 'application/json'
373 headers
['Content-File-MD5'] = self
.md5(open('/tmp/' + tarf
.getnames()[0] + ".tar.gz", 'rb'))
374 # headers['Content-File-MD5'] = self.md5(open("pippo.tar.gz", 'rb'))
376 _url
= "{0}/vnfpkgm/v1/vnf_packages/{1}/package_content".format(self
._base
_path
, id)
377 return self
._send
_put
(_url
, headers
=headers
, data
=open('/tmp/' + tarf
.getnames()[0] + ".tar.gz", 'rb'))
378 # return self._send_put(_url, headers=headers, data=open("pippo.tar.gz", 'rb'))
382 def vnfd_onboard(self
, package
):
383 token
= self
.get_token()
386 headers
['Authorization'] = 'Bearer {}'.format(token
)
387 headers
['Content-Type'] = 'application/gzip'
388 headers
['accept'] = 'application/json'
389 with
open('/tmp/'+package
.name
, 'wb+') as destination
:
390 for chunk
in package
.chunks():
391 destination
.write(chunk
)
392 headers
['Content-File-MD5'] = self
.md5(open('/tmp/'+package
.name
, 'rb'))
393 _url
= "{0}/vnfpkgm/v1/vnf_packages_content".format(self
._base
_path
)
394 return self
._send
_post
(_url
, headers
=headers
,
395 data
=open('/tmp/' + package
.name
, 'rb'))
398 def vnf_packages_artifacts(self
, id):
399 token
= self
.get_token()
401 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
402 self
._headers
['Content-Type'] = 'application/yaml'
403 _url
= "{0}/vnfpkgm/v1/vnf_packages/{1}/artifacts".format(self
._base
_path
, id)
404 return self
._send
_get
(_url
, headers
=self
._headers
)
408 token
= self
.get_token()
410 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
411 self
._headers
['Content-Type'] = 'application/yaml'
412 self
._headers
['accept'] = 'application/json'
413 _url
= "{0}/nslcm/v1/vnfrs".format(self
._base
_path
)
414 return self
._send
_get
(_url
, headers
=self
._headers
)
417 def vnf_get(self
, id):
418 token
= self
.get_token()
420 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
421 self
._headers
['Content-Type'] = 'application/json'
422 self
._headers
['accept'] = 'application/json'
423 _url
= "{0}/nslcm/v1/vnfrs/{1}".format(self
._base
_path
, id)
424 return self
._send
_get
(_url
, headers
=self
._headers
)
427 def _upload_package(self
, filename
, package
):
428 token
= self
.get_token()
431 headers
['Authorization'] = 'Bearer {}'.format(token
)
432 headers
['Content-Type'] = 'application/gzip'
433 headers
['Content-File-MD5'] = self
.md5(package
)
434 headers
['accept'] = 'application/json'
437 def _send_post(self
, url
, data
=None, json
=None, **kwargs
):
439 r
= requests
.post(url
, data
=data
, json
=json
, verify
=False, **kwargs
)
441 except Exception as e
:
443 #print "Exception during send POST"
444 return {'error': 'error during connection to agent'}
445 if 'accept' in kwargs
['headers']:
446 accept
= kwargs
['headers']['accept']
447 if accept
== 'application/json':
449 return Util
.json_loads_byteified(r
.text
)
452 def _send_put(self
, url
, data
=None, json
=None, **kwargs
):
454 r
= requests
.put(url
, data
=data
, json
=json
, verify
=False, **kwargs
)
456 except Exception as e
:
458 #print "Exception during send PUT"
459 return {'error': 'error during connection to agent'}
463 def _send_get(self
, url
, params
=None, **kwargs
):
465 r
= requests
.get(url
, params
=None, verify
=False, stream
=True, **kwargs
)
467 except Exception as e
:
469 #print "Exception during send GET"
470 return {'error': 'error during connection to agent'}
471 if 'accept' in kwargs
['headers']:
472 accept
= kwargs
['headers']['accept']
473 if accept
== 'application/json':
475 return Util
.json_loads_byteified(r
.text
)
476 elif accept
== 'application/zip':
477 tarf
=StringIO
.StringIO(r
.content
)
478 #tarf = tarfile.open(fileobj=StringIO.StringIO(r.content))
479 # for tarinfo in tarf:
480 # #print(tarinfo.name, "is", tarinfo.size, "bytes in size and is")
481 # if tarinfo.isreg():
482 # #print("a regular file.")
483 # elif tarinfo.isdir():
484 # #print("a directory.")
486 # #print("something else.")
493 def _send_delete(self
, url
, params
=None, **kwargs
):
495 r
= requests
.delete(url
, params
=None, verify
=False, **kwargs
)
498 except Exception as e
:
500 print "Exception during send DELETE"
501 return {'error': 'error during connection to agent'}
505 hash_md5
= hashlib
.md5()
506 for chunk
in iter(lambda: f
.read(1024), b
""):
507 hash_md5
.update(chunk
)
508 return hash_md5
.hexdigest()
510 def get_nsd_pkg(self
, id):
511 token
= self
.get_token()
513 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
514 #self._headers['Content-Type'] = 'application/yaml'
515 self
._headers
['accept'] = 'application/zip'
516 _url
= "{0}/nsd/v1/ns_descriptors/{1}/nsd_content".format(self
._base
_path
, id)
517 return self
._send
_get
(_url
, headers
=self
._headers
)
520 def get_vnfd_pkg(self
, id):
521 token
= self
.get_token()
523 self
._headers
['Authorization'] = 'Bearer {}'.format(token
)
524 #self._headers['Content-Type'] = 'application/yaml'
525 self
._headers
['accept'] = 'application/zip'
526 _url
= "{0}/vnfpkgm/v1/vnf_packages/{1}/package_content".format(self
._base
_path
, id)
527 return self
._send
_get
(_url
, headers
=self
._headers
)
532 if __name__
== '__main__':
536 package
= client
.get_nsd_pkg('be489dfb-5f15-48c1-b693-67d830c591e5')
537 tarf
= tarfile
.open(fileobj
=package
)
538 tarf
.extractall('/tmp')
539 yaml_object
= yaml
.safe_dump({}, default_flow_style
=False)
540 yaml_file
= open('/tmp/cirros_2vnf_ns/cirros_2vnf_nsd.yaml', 'w')
541 yaml_object
= pyaml
.dump(yaml_object
, yaml_file
, safe
=True)
542 tarf_temp
= tarfile
.open(tarf
.getnames()[0]+".tar.gz", "w:gz")
545 tarf_temp
.add('/tmp/'+tarinfo
.name
, tarinfo
.name
)