1 # Copyright 2020 ETSI OSM
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13 # See the License for the specific language governing permissions and
14 # limitations under the License
16 from subprocess
import run
, PIPE
21 class OSMException(Exception):
22 """A base class for MyProject exceptions."""
24 class ResourceException(OSMException
):
25 def __init__(self
, *args
, **kwargs
):
26 super().__init
__(*args
)
27 self
.message
= kwargs
.get('message')
30 def __init__(self
, osm_hostname
, port
):
31 self
.osm_hostname
= osm_hostname
34 def run_command(self
, command
):
35 p
= run(["osm {}".format(command
)], shell
=True, stdout
=PIPE
, stderr
=PIPE
)
39 raise ResourceException(message
=p
.stdout
)
41 return self
.clean_output(p
.stdout
)
43 def get_auth_token(self
):
45 r
= requests
.post("https://{}:{}/osm/admin/v1/tokens".format(self
.osm_hostname
, self
.port
), verify
=False, headers
={"Accept":"application/json"}, json
={
52 def clean_output(self
, output
):
53 return output
.decode("utf-8").strip()
55 def create_nsd(self
, filename
):
56 return self
.run_command("nsd-create {}".format(filename
))
58 def create_vnfd(self
, filename
):
59 return self
.run_command("vnfd-create {}".format(filename
))
61 def create_ns(self
, name
, nsd
, vim
):
62 return self
.run_command("ns-create --ns_name {} --nsd_name {} --vim_account {}".format(name
, nsd
, vim
))
64 def delete_nsd(self
, id):
65 return self
.run_command("nsd-delete {}".format(id))
67 def delete_vnfd(self
, id):
68 return self
.run_command("vnfd-delete {}".format(id))
70 def delete_ns(self
, id):
71 self
.run_command("ns-delete {}".format(id))
72 while (requests
.get("https://{}:{}/osm/nslcm/v1/ns_instances/{}".format(self
.osm_hostname
, self
.port
, id), verify
=False, headers
={"Accept":"application/json", "Authorization":"Bearer {}".format(os
.environ
["AUTH_TOKEN"])}).status_code
!= 404):
73 print("Deleting NS...")