Reformat auth_url based on the ID API version. 63/38363/2
authorspisarski <s.pisarski@cablelabs.com>
Fri, 28 Jul 2017 20:41:25 +0000 (14:41 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Mon, 31 Jul 2017 19:36:54 +0000 (13:36 -0600)
No longer raising an OSCredsError when the auth_url does
not end with a 'v' + some number. Additionally, the auth_url
will be massaged to remove any 'v' + num from the end of
the URL and generate its own version value based on the ID
API version configured.

JIRA: SNAPS-144

Change-Id: I3a7844025324105576da59b1516d0f541281e6bf
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
snaps/openstack/os_credentials.py
snaps/openstack/tests/conf/os_credentials_tests.py

index fbecbfe..db8d18c 100644 (file)
@@ -128,13 +128,34 @@ class OSCreds:
             raise OSCredsError('username, password, auth_url, and project_name'
                                ' are required')
 
-        auth_url_tokens = self.auth_url.split('/')
+        self.auth_url = self.__scrub_auth_url()
+
+    def __scrub_auth_url(self):
+        """
+        As the Python APIs are have more stringent requirements around how the
+        auth_url is formed than the CLI, this method will scrub any version
+        from the end of
+        :return:
+        """
+        auth_url_tokens = self.auth_url.rstrip('/').split('/')
         last_token = auth_url_tokens[len(auth_url_tokens) - 1]
-        if len(last_token) == 0:
-            last_token = auth_url_tokens[len(auth_url_tokens) - 2]
+        token_iters = len(auth_url_tokens)
+        if last_token.startswith('v'):
+            token_iters -= 1
+        if self.identity_api_version == keystone_utils.V2_VERSION_NUM:
+            last_token = keystone_utils.V2_VERSION_STR
+        else:
+            last_token = 'v' + str(int(self.identity_api_version))
+
+        new_url = None
+        for ctr in range(0, token_iters):
+            if new_url:
+                new_url += '/' + auth_url_tokens[ctr]
+            else:
+                new_url = auth_url_tokens[ctr]
+        new_url += '/' + last_token
 
-        if not last_token.startswith('v'):
-            raise OSCredsError('auth_url last toke must start with \'v\'')
+        return new_url
 
     @property
     def __str__(self):
index 9c6fcdc..578fa93 100644 (file)
@@ -135,23 +135,13 @@ class OSCredsUnitTests(unittest.TestCase):
         with self.assertRaises(OSCredsError):
             OSCreds(**{'project_name': 'foo'})
 
-    def test_invalid_auth_url(self):
-        with self.assertRaises(OSCredsError):
-            OSCreds(username='foo', password='bar',
-                    auth_url='http://foo.bar', project_name='hello')
-
-    def test_invalid_auth_url_kwargs(self):
-        with self.assertRaises(OSCredsError):
-            OSCreds(**{'username': 'foo', 'password': 'bar',
-                    'auth_url': 'http://foo.bar', 'project_name': 'hello'})
-
     def test_minimal(self):
         os_creds = OSCreds(
             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
             project_name='hello')
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)
@@ -172,7 +162,7 @@ class OSCredsUnitTests(unittest.TestCase):
                               'project_name': 'hello'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)
@@ -196,7 +186,7 @@ class OSCredsUnitTests(unittest.TestCase):
                'cacert': 'true', 'region_name': 'test_region'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v5', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(5, os_creds.identity_api_version)
         self.assertEqual(6, os_creds.image_api_version)
@@ -220,7 +210,7 @@ class OSCredsUnitTests(unittest.TestCase):
                'cacert': True, 'region_name': 'test_region'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v5', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(5, os_creds.identity_api_version)
         self.assertEqual(6, os_creds.image_api_version)
@@ -238,11 +228,11 @@ class OSCredsUnitTests(unittest.TestCase):
     def test_proxy_settings_obj(self):
         proxy_settings = ProxySettings(host='foo', port=1234)
         os_creds = OSCreds(
-            username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
+            username='foo', password='bar', auth_url='http://foo.bar:5000/',
             project_name='hello', proxy_settings=proxy_settings)
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)
@@ -270,7 +260,7 @@ class OSCredsUnitTests(unittest.TestCase):
                'project_domain_name': 'domain4'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)
@@ -295,7 +285,7 @@ class OSCredsUnitTests(unittest.TestCase):
             project_domain_id='domain3', project_domain_name='domain4')
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)
@@ -319,7 +309,7 @@ class OSCredsUnitTests(unittest.TestCase):
                'region_name': 'test_region'})
         self.assertEqual('foo', os_creds.username)
         self.assertEqual('bar', os_creds.password)
-        self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
+        self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
         self.assertEqual('hello', os_creds.project_name)
         self.assertEqual(2, os_creds.identity_api_version)
         self.assertEqual(2, os_creds.image_api_version)