From ce19be8891ef3f3e24800924a40f4480dec24bec Mon Sep 17 00:00:00 2001 From: spisarski Date: Fri, 28 Jul 2017 14:41:25 -0600 Subject: Reformat auth_url based on the ID API version. 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 --- snaps/openstack/os_credentials.py | 31 ++++++++++++++++++---- snaps/openstack/tests/conf/os_credentials_tests.py | 28 +++++++------------ 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/snaps/openstack/os_credentials.py b/snaps/openstack/os_credentials.py index fbecbfe..db8d18c 100644 --- a/snaps/openstack/os_credentials.py +++ b/snaps/openstack/os_credentials.py @@ -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): diff --git a/snaps/openstack/tests/conf/os_credentials_tests.py b/snaps/openstack/tests/conf/os_credentials_tests.py index 9c6fcdc..578fa93 100644 --- a/snaps/openstack/tests/conf/os_credentials_tests.py +++ b/snaps/openstack/tests/conf/os_credentials_tests.py @@ -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) -- cgit 1.2.3-korg