Fix #1063 flake tests
[osm/osmclient.git] / osmclient / v1 / client.py
index cfaf15a..ba765e1 100644 (file)
@@ -27,6 +27,7 @@ from osmclient.v1 import package
 from osmclient.v1 import vca
 from osmclient.v1 import utils
 from osmclient.common import http
+from osmclient.common import package_tool
 
 
 class Client(object):
@@ -35,6 +36,7 @@ class Client(object):
         self,
         host=None,
         so_port=8008,
+        so_project='default',
         ro_host=None,
         ro_port=9090,
         upload_port=8443,
@@ -50,6 +52,8 @@ class Client(object):
             self._host = host
             self._so_port = so_port
 
+        self._so_project = so_project
+
         http_client = http.Http(
             'https://{}:{}/'.format(
                 self._host,
@@ -58,6 +62,8 @@ class Client(object):
             ['Accept: application/vnd.yand.data+json',
              'Content-Type: application/json'])
 
+        self._so_version = self.get_so_version(http_client)
+
         if ro_host is None:
             ro_host = host
         ro_http_client = http.Http('http://{}:{}/'.format(ro_host, ro_port))
@@ -65,17 +71,26 @@ class Client(object):
             ['Accept: application/vnd.yand.data+json',
              'Content-Type: application/json'])
 
-        upload_client = http.Http(
-            'https://{}:{}/composer/upload?api_server={}{}'.format(
+        upload_client_url = 'https://{}:{}/composer/upload?api_server={}{}'.format(
                 self._host,
                 upload_port,
                 'https://localhost&upload_server=https://',
-                self._host))
+                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)
 
-        self.vnf = vnf.Vnf(http_client, **kwargs)
-        self.vnfd = vnfd.Vnfd(http_client, **kwargs)
+        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, **kwargs)
+        self.nsd = nsd.Nsd(http_client, client=self, **kwargs)
         self.vim = vim.Vim(
             http=http_client,
             ro_http=ro_http_client,
@@ -86,5 +101,28 @@ class Client(object):
             upload_http=upload_client,
             client=self,
             **kwargs)
-        self.vca = vca.Vca(http_client, **kwargs)
+        self.vca = vca.Vca(http_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'
+
+