Code Coverage

Cobertura Coverage Report > osmclient.v1 >

client.py

Trend

Classes100%
 
Lines83%
   
Conditionals100%
 

File Coverage summary

NameClassesLinesConditionals
client.py
100%
1/1
83%
45/54
100%
0/0

Coverage Breakdown by Class

NameLinesConditionals
client.py
83%
45/54
N/A

Source

osmclient/v1/client.py
1 # Copyright 2017 Sandvine
2 #
3 # All Rights Reserved.
4 #
5 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
6 #    not use this file except in compliance with the License. You may obtain
7 #    a copy of the License at
8 #
9 #         http://www.apache.org/licenses/LICENSE-2.0
10 #
11 #    Unless required by applicable law or agreed to in writing, software
12 #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 #    License for the specific language governing permissions and limitations
15 #    under the License.
16
17 1 """
18 OSM v1 client API
19 """
20
21 1 from osmclient.v1 import vnf
22 1 from osmclient.v1 import vnfd
23 1 from osmclient.v1 import ns
24 1 from osmclient.v1 import nsd
25 1 from osmclient.v1 import vim
26 1 from osmclient.v1 import package
27 1 from osmclient.v1 import utils
28 1 from osmclient.common import http
29 1 from osmclient.common import package_tool
30
31
32 1 class Client(object):
33 1     def __init__(
34         self,
35         host=None,
36         so_port=8008,
37         so_project="default",
38         ro_host=None,
39         ro_port=9090,
40         upload_port=8443,
41         **kwargs
42     ):
43 1         self._user = "admin"
44 1         self._password = "admin"
45
46 1         if len(host.split(":")) > 1:
47             # backwards compatible, port provided as part of host
48 0             self._host = host.split(":")[0]
49 0             self._so_port = host.split(":")[1]
50         else:
51 1             self._host = host
52 1             self._so_port = so_port
53
54 1         self._so_project = so_project
55
56 1         http_client = http.Http("https://{}:{}/".format(self._host, self._so_port))
57 1         http_client.set_http_header(
58             ["Accept: application/vnd.yand.data+json", "Content-Type: application/json"]
59         )
60
61 1         self._so_version = self.get_so_version(http_client)
62
63 1         if ro_host is None:
64 1             ro_host = host
65 1         ro_http_client = http.Http("http://{}:{}/".format(ro_host, ro_port))
66 1         ro_http_client.set_http_header(
67             ["Accept: application/vnd.yand.data+json", "Content-Type: application/json"]
68         )
69
70 1         upload_client_url = "https://{}:{}/composer/upload?api_server={}{}".format(
71             self._host,
72             upload_port,
73             "https://localhost&upload_server=https://",
74             self._host,
75         )
76
77 1         if self._so_version == "v3":
78 0             upload_client_url = (
79                 "https://{}:{}/composer/upload?api_server={}{}&project_name={}".format(
80                     self._host,
81                     upload_port,
82                     "https://localhost&upload_server=https://",
83                     self._host,
84                     self._so_project,
85                 )
86             )
87
88 1         upload_client = http.Http(upload_client_url)
89
90 1         self.vnf = vnf.Vnf(http_client, client=self, **kwargs)
91 1         self.vnfd = vnfd.Vnfd(http_client, client=self, **kwargs)
92 1         self.ns = ns.Ns(http=http_client, client=self, **kwargs)
93 1         self.nsd = nsd.Nsd(http_client, client=self, **kwargs)
94 1         self.vim = vim.Vim(
95             http=http_client, ro_http=ro_http_client, client=self, **kwargs
96         )
97 1         self.package = package.Package(
98             http=http_client, upload_http=upload_client, client=self, **kwargs
99         )
100 1         self.utils = utils.Utils(http_client, **kwargs)
101 1         self.package_tool = package_tool.PackageTool(client=self)
102
103 1     @property
104 1     def so_rbac_project_path(self):
105 1         if self._so_version == "v3":
106 0             return "project/{}/".format(self._so_project)
107         else:
108 1             return ""
109
110 1     def get_so_version(self, http_client):
111 1         try:
112 1             resp = http_client.get_cmd("api/operational/version")
113 0             if not resp or "rw-base:version" not in resp:
114 0                 return "v2"
115
116 0             if resp["rw-base:version"]["version"].split(".")[0] == "5":
117                 # SO Version 5.x.x.x.x translates to OSM V3
118 0                 return "v3"
119 0             return "v2"
120 1         except Exception:
121 1             return "v2"