X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fv1%2Fclient.py;h=7d01cfad64ad62516ffd98bb49cd98d3c1d270f4;hb=refs%2Fheads%2Fv11.0;hp=6d5e4a1833c0d88d77d9e72771a34b7e852e44e5;hpb=e84eb31aded0cb62a5523422ddc4524f6e615209;p=osm%2Fosmclient.git diff --git a/osmclient/v1/client.py b/osmclient/v1/client.py index 6d5e4a1..7d01cfa 100644 --- a/osmclient/v1/client.py +++ b/osmclient/v1/client.py @@ -24,33 +24,98 @@ from osmclient.v1 import ns from osmclient.v1 import nsd from osmclient.v1 import vim from osmclient.v1 import package -from osmclient.v1 import vca from osmclient.v1 import utils from osmclient.common import http -import pycurl +from osmclient.common import package_tool class Client(object): + def __init__( + self, + host=None, + so_port=8008, + so_project="default", + ro_host=None, + ro_port=9090, + upload_port=8443, + **kwargs + ): + self._user = "admin" + self._password = "admin" - def __init__(self, host=None,ro_port=9090,upload_port=8443,**kwargs): - self._user='admin' - self._password='admin' - self._host = host.split(':')[0] - self._so_port = host.split(':')[1] + if len(host.split(":")) > 1: + # backwards compatible, port provided as part of host + self._host = host.split(":")[0] + self._so_port = host.split(":")[1] + else: + self._host = host + self._so_port = so_port - http_client = http.Http('https://{}:{}/'.format(self._host,self._so_port)) - http_client.set_http_header( ['Accept: application/vnd.yand.data+json','Content-Type: application/json']) + self._so_project = so_project - ro_http_client = http.Http('http://{}:{}/'.format(self._host,ro_port)) - ro_http_client.set_http_header( ['Accept: application/vnd.yand.data+json','Content-Type: application/json']) + http_client = http.Http("https://{}:{}/".format(self._host, self._so_port)) + http_client.set_http_header( + ["Accept: application/vnd.yand.data+json", "Content-Type: application/json"] + ) - upload_client = http.Http('https://{}:{}/composer/upload?api_server=https://localhost&upload_server=https://{}'.format(self._host,upload_port,self._host)) + self._so_version = self.get_so_version(http_client) - self.vnf = vnf.Vnf(http_client,**kwargs) - self.vnfd = vnfd.Vnfd(http_client,**kwargs) - self.ns = ns.Ns(http=http_client,client=self,**kwargs) - self.nsd = nsd.Nsd(http_client,**kwargs) - self.vim = vim.Vim(http=http_client,ro_http=ro_http_client,client=self,**kwargs) - self.package = package.Package(http=http_client,upload_http=upload_client,client=self,**kwargs) - self.vca = vca.Vca(http_client,**kwargs) - self.utils = utils.Utils(http_client,**kwargs) + if ro_host is None: + ro_host = host + ro_http_client = http.Http("http://{}:{}/".format(ro_host, ro_port)) + ro_http_client.set_http_header( + ["Accept: application/vnd.yand.data+json", "Content-Type: application/json"] + ) + + upload_client_url = "https://{}:{}/composer/upload?api_server={}{}".format( + self._host, + upload_port, + "https://localhost&upload_server=https://", + self._host, + ) + + if self._so_version == "v3": + upload_client_url = ( + "https://{}:{}/composer/upload?api_server={}{}&project_name={}".format( + self._host, + upload_port, + "https://localhost&upload_server=https://", + self._host, + self._so_project, + ) + ) + + upload_client = http.Http(upload_client_url) + + self.vnf = vnf.Vnf(http_client, client=self, **kwargs) + self.vnfd = vnfd.Vnfd(http_client, client=self, **kwargs) + self.ns = ns.Ns(http=http_client, client=self, **kwargs) + self.nsd = nsd.Nsd(http_client, client=self, **kwargs) + self.vim = vim.Vim( + http=http_client, ro_http=ro_http_client, client=self, **kwargs + ) + self.package = package.Package( + http=http_client, upload_http=upload_client, client=self, **kwargs + ) + self.utils = utils.Utils(http_client, **kwargs) + self.package_tool = package_tool.PackageTool(client=self) + + @property + def so_rbac_project_path(self): + if self._so_version == "v3": + return "project/{}/".format(self._so_project) + else: + return "" + + def get_so_version(self, http_client): + try: + resp = http_client.get_cmd("api/operational/version") + if not resp or "rw-base:version" not in resp: + return "v2" + + if resp["rw-base:version"]["version"].split(".")[0] == "5": + # SO Version 5.x.x.x.x translates to OSM V3 + return "v3" + return "v2" + except Exception: + return "v2"