blob: 9dd7f19b6974ee0fe667703780283741b79cf42c [file] [log] [blame]
Frank Brydene570b102020-09-07 08:45:54 +00001# Copyright 2020 ETSI OSM
2#
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
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
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
12# implied.
13# See the License for the specific language governing permissions and
14# limitations under the License
15
16from subprocess import run, PIPE
17import requests
veleza6be83cf2021-11-16 11:23:47 +000018import time
19import os
Frank Brydene570b102020-09-07 08:45:54 +000020
21class OSMException(Exception):
22 """A base class for MyProject exceptions."""
23
24class ResourceException(OSMException):
25 def __init__(self, *args, **kwargs):
26 super().__init__(*args)
27 self.message = kwargs.get('message')
28
29class OSM:
veleza6be83cf2021-11-16 11:23:47 +000030 def __init__(self, osm_hostname, port):
Frank Brydene570b102020-09-07 08:45:54 +000031 self.osm_hostname = osm_hostname
veleza6be83cf2021-11-16 11:23:47 +000032 self.port = port
Frank Brydene570b102020-09-07 08:45:54 +000033
34 def run_command(self, command):
35 p = run(["osm {}".format(command)], shell=True, stdout=PIPE, stderr=PIPE)
36 if p.returncode != 0:
37 print(p.stdout)
38 print(p.stderr)
39 raise ResourceException(message=p.stdout)
40 else:
41 return self.clean_output(p.stdout)
42
43 def get_auth_token(self):
veleza6be83cf2021-11-16 11:23:47 +000044
45 r = requests.post("https://{}:{}/osm/admin/v1/tokens".format(self.osm_hostname, self.port), verify=False, headers={"Accept":"application/json"}, json={
Frank Brydene570b102020-09-07 08:45:54 +000046 "username": "admin",
47 "password": "admin",
48 "project": "admin"
49 })
50 return r.json()["id"]
51
52 def clean_output(self, output):
53 return output.decode("utf-8").strip()
54
55 def create_nsd(self, filename):
56 return self.run_command("nsd-create {}".format(filename))
57
58 def create_vnfd(self, filename):
59 return self.run_command("vnfd-create {}".format(filename))
60
veleza6be83cf2021-11-16 11:23:47 +000061 def create_ns(self, name, nsd, vim):
62 return self.run_command("ns-create --ns_name {} --nsd_name {} --vim_account {}".format(name, nsd, vim))
63
Frank Brydene570b102020-09-07 08:45:54 +000064 def delete_nsd(self, id):
65 return self.run_command("nsd-delete {}".format(id))
66
67 def delete_vnfd(self, id):
veleza6be83cf2021-11-16 11:23:47 +000068 return self.run_command("vnfd-delete {}".format(id))
69
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...")
74 time.sleep(5)