From f6ca7618c41acb8264df298a44a2ee8c2dbd3238 Mon Sep 17 00:00:00 2001 From: Yanyan Hu Date: Tue, 2 Dec 2014 11:34:30 +0800 Subject: [PATCH] Use non-versioned auth_url for keystone keystoneclient discover can't get v3 auth_url using v2 auth_url. It accepts an url without version number. This patch fixes this issue. Change-Id: I45b4c016bd91afc39d39620920951043bb71df05 Closes-Bug: #1398254 --- os_collect_config/keystone.py | 3 ++- os_collect_config/tests/test_keystone.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/os_collect_config/keystone.py b/os_collect_config/keystone.py index 302abb4..acb3085 100644 --- a/os_collect_config/keystone.py +++ b/os_collect_config/keystone.py @@ -56,7 +56,8 @@ class Keystone(object): self.project_id = project_id self._client = None try: - discover = ks_discover.Discover(auth_url=auth_url) + auth_url_noneversion = auth_url.replace('/v2.0', '/') + discover = ks_discover.Discover(auth_url=auth_url_noneversion) v3_auth_url = discover.url_for('3.0') if v3_auth_url: self.auth_url = v3_auth_url diff --git a/os_collect_config/tests/test_keystone.py b/os_collect_config/tests/test_keystone.py index 59bbc88..9ee8c10 100644 --- a/os_collect_config/tests/test_keystone.py +++ b/os_collect_config/tests/test_keystone.py @@ -62,6 +62,17 @@ class KeystoneTest(testtools.TestCase): test_heat.FakeKeystoneClient(self)) self.assertEqual(ks.auth_url, 'http://server.test:5000/v3') + @mock.patch.object(ks_discover.Discover, '__init__') + @mock.patch.object(ks_discover.Discover, 'url_for') + def test_discover_v3_unsupported(self, mock_url_for, mock___init__): + mock___init__.return_value = None + mock_url_for.return_value = None + ks = keystone.Keystone( + 'http://server.test:5000/v2.0', 'auser', 'apassword', 'aproject', + test_heat.FakeKeystoneClient(self)) + self.assertEqual(ks.auth_url, 'http://server.test:5000/v2.0') + mock___init__.assert_called_with(auth_url='http://server.test:5000/') + @mock.patch.object(ks_discover.Discover, '__init__') @mock.patch.object(ks_discover.Discover, 'url_for') def test_cache_is_created(self, mock_url_for, mock___init__):