Support for Keystone V3 51/69451/2
authorAh <Ashwini.Ah@arris.com>
Fri, 28 Sep 2018 06:59:38 +0000 (12:29 +0530)
committerAh <Ashwini.Ah@arris.com>
Mon, 1 Oct 2018 11:08:08 +0000 (16:38 +0530)
Issue-ID: TEST-39
Change-Id: Ife059f312e6c1195c36a50f8daaaaaef80429fa4
Signed-off-by: Ah <Ashwini.Ah@arris.com>
eteutils/OpenstackLibrary.py

index 99aba87..1be497c 100644 (file)
@@ -12,10 +12,13 @@ class OpenstackLibrary:
         self._cache = robot.utils.ConnectionCache('No connections created')
         self.builtin = BuiltIn()
 
-    def save_openstack_auth(self, alias, response):
+    def save_openstack_auth(self, alias, response,token, version):
         """Save Openstack Auth takes in an openstack auth response and saves it to allow easy retrival of token and service catalog"""
         self.builtin.log('Creating connection: %s' % alias, 'DEBUG')
-        self._cache.register(response, alias=alias)
+        jsonResponse = json.loads(response);
+        jsonResponse['auth_token'] = token
+        jsonResponse['keystone_api_version'] = version
+        self._cache.register(jsonResponse, alias=alias)
 
     def get_openstack_token(self, alias):
         """Get Openstack auth token from the current alias"""
@@ -24,7 +27,10 @@ class OpenstackLibrary:
             jsonResponse = json.loads(response);
         else:
             jsonResponse = response;
-        return  jsonResponse['access']['token']['id']
+        if jsonResponse['keystone_api_version'] == 'v2.0':
+            return  jsonResponse['access']['token']['id']
+        else:
+            return  jsonResponse['auth_token']
 
     def get_openstack_catalog(self, alias):
         """Get Openstack service catalog from the current alias"""
@@ -33,7 +39,11 @@ class OpenstackLibrary:
             jsonResponse = json.loads(response);
         else:
             jsonResponse = response;
-        return  jsonResponse['access']['serviceCatalog']
+        if jsonResponse['keystone_api_version'] == 'v2.0':
+            return  jsonResponse['access']['serviceCatalog']
+        else:
+            return  jsonResponse['token']['catalog']
 
     def get_current_openstack_tenant(self, alias):
         """Get Openstack tenant from the current alias"""
@@ -42,7 +52,10 @@ class OpenstackLibrary:
             jsonResponse = json.loads(response);
         else:
             jsonResponse = response;
-        return  jsonResponse['access']['token']['tenant']
+        if jsonResponse['keystone_api_version'] == 'v2.0':
+            return  jsonResponse['access']['token']['tenant']
+        else:
+            return  jsonResponse['token']['project']
 
     def get_current_openstack_tenant_id(self, alias):
         """Get Openstack tenant id from the current alias"""
@@ -57,7 +70,11 @@ class OpenstackLibrary:
         else:
             jsonResponse = response;
         regions = [];
-        for catalogEntry in jsonResponse['access']['serviceCatalog']:
+        if jsonResponse['keystone_api_version'] == 'v2.0':
+            resp = jsonResponse['access']['serviceCatalog']
+        else:
+            resp = jsonResponse['token']['catalog']
+        for catalogEntry in resp:
             listOfEndpoints = catalogEntry['endpoints'];
             for endpoint in listOfEndpoints:
                 if 'region'in endpoint:
@@ -73,7 +90,11 @@ class OpenstackLibrary:
         else:
             jsonResponse = response;
         endPoint = None;
-        for catalogEntry in jsonResponse['access']['serviceCatalog']:
+        if jsonResponse['keystone_api_version'] == 'v2.0':
+            resp = jsonResponse['access']['serviceCatalog']
+        else:
+            resp = jsonResponse['token']['catalog']
+        for catalogEntry in resp:    
             if self.__determine_match(catalogEntry['type'], servicetype):
                 listOfEndpoints = catalogEntry['endpoints'];
                 # filter out non matching regions if provided
@@ -83,8 +104,13 @@ class OpenstackLibrary:
                 # WindRiver does not return the tenantId on the endpoint in this case.
                 if tenant_id is not None:
                        listOfEndpoints[:] = [y for y in listOfEndpoints if self.__determine_match(y['tenantId'], tenant_id)];
+                if jsonResponse['keystone_api_version'] == 'v3':
+                        listOfEndpoints[:] = [z for z in listOfEndpoints if self.__determine_match(z['interface'], 'public')];
                 if len(listOfEndpoints) > 0:
-                    endPoint = listOfEndpoints[0]['publicURL'];
+                    if jsonResponse['keystone_api_version'] == 'v2.0':
+                        endPoint = listOfEndpoints[0]['publicURL'];
+                    else:
+                        endPoint = listOfEndpoints[0]['url'];
         if endPoint == None:
             self.builtin.should_not_be_empty("", "Service Endpoint Url should not be empty")
         return endPoint;