Change Manilaclient to use --os-region-name param
Manilaclient ignores --os-region-param now. Change client from
'manilaclient/v1/client.py' to use first endpoint with a matching region.
Closes-bug: #1450613
Change-Id: I7fd76b0d874a91952513c40b4a7bdb0c45241dad
(cherry picked from commit 0d257aedce
)
This commit is contained in:
parent
0bbd2144f7
commit
07be7c8ede
|
@ -13,14 +13,23 @@
|
|||
import uuid
|
||||
|
||||
from keystoneclient import session
|
||||
import mock
|
||||
|
||||
from manilaclient.common import constants
|
||||
from manilaclient import exceptions
|
||||
from manilaclient import httpclient
|
||||
from manilaclient.tests.unit import utils
|
||||
from manilaclient.v1 import client
|
||||
|
||||
|
||||
class ClientTest(utils.TestCase):
|
||||
def setUp(self):
|
||||
super(ClientTest, self).setUp()
|
||||
self.catalog = {
|
||||
'share': [
|
||||
{'region': 'TestRegion', 'publicURL': 'http://1.2.3.4'},
|
||||
],
|
||||
}
|
||||
|
||||
def test_adapter_properties(self):
|
||||
# sample of properties, there are many more
|
||||
|
@ -59,3 +68,65 @@ class ClientTest(utils.TestCase):
|
|||
|
||||
self.assertIsNotNone(c.client)
|
||||
self.assertIsNone(c.keystone_client)
|
||||
|
||||
@mock.patch.object(httpclient, 'HTTPClient', mock.Mock())
|
||||
@mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
|
||||
def test_valid_region_name(self):
|
||||
kc = client.Client._get_keystone_client.return_value
|
||||
kc.service_catalog = mock.Mock()
|
||||
kc.service_catalog.get_endpoints = mock.Mock(return_value=self.catalog)
|
||||
c = client.Client(api_version=constants.MAX_API_VERSION,
|
||||
region_name='TestRegion')
|
||||
self.assertTrue(client.Client._get_keystone_client.called)
|
||||
kc.service_catalog.get_endpoints.assert_called_once_with('share')
|
||||
httpclient.HTTPClient.assert_called_once_with(
|
||||
'http://1.2.3.4',
|
||||
mock.ANY,
|
||||
'python-manilaclient',
|
||||
insecure=False,
|
||||
cacert=None,
|
||||
timeout=None,
|
||||
retries=None,
|
||||
http_log_debug=False,
|
||||
api_version=constants.MAX_API_VERSION)
|
||||
self.assertIsNotNone(c.client)
|
||||
|
||||
@mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
|
||||
def test_nonexistent_region_name(self):
|
||||
kc = client.Client._get_keystone_client.return_value
|
||||
kc.service_catalog = mock.Mock()
|
||||
kc.service_catalog.get_endpoints = mock.Mock(return_value=self.catalog)
|
||||
self.assertRaises(RuntimeError, client.Client,
|
||||
api_version=constants.MAX_API_VERSION,
|
||||
region_name='FakeRegion')
|
||||
self.assertTrue(client.Client._get_keystone_client.called)
|
||||
kc.service_catalog.get_endpoints.assert_called_once_with('share')
|
||||
|
||||
@mock.patch.object(httpclient, 'HTTPClient', mock.Mock())
|
||||
@mock.patch.object(client.Client, '_get_keystone_client', mock.Mock())
|
||||
def test_regions_with_same_name(self):
|
||||
catalog = {
|
||||
'share': [
|
||||
{'region': 'FirstRegion', 'publicURL': 'http://1.2.3.4'},
|
||||
{'region': 'secondregion', 'publicURL': 'http://1.1.1.1'},
|
||||
{'region': 'SecondRegion', 'publicURL': 'http://2.2.2.2'},
|
||||
],
|
||||
}
|
||||
kc = client.Client._get_keystone_client.return_value
|
||||
kc.service_catalog = mock.Mock()
|
||||
kc.service_catalog.get_endpoints = mock.Mock(return_value=catalog)
|
||||
c = client.Client(api_version=constants.MAX_API_VERSION,
|
||||
region_name='SecondRegion')
|
||||
self.assertTrue(client.Client._get_keystone_client.called)
|
||||
kc.service_catalog.get_endpoints.assert_called_once_with('share')
|
||||
httpclient.HTTPClient.assert_called_once_with(
|
||||
'http://2.2.2.2',
|
||||
mock.ANY,
|
||||
'python-manilaclient',
|
||||
insecure=False,
|
||||
cacert=None,
|
||||
timeout=None,
|
||||
retries=None,
|
||||
http_log_debug=False,
|
||||
api_version=constants.MAX_API_VERSION)
|
||||
self.assertIsNotNone(c.client)
|
||||
|
|
|
@ -145,9 +145,16 @@ class Client(object):
|
|||
elif not service_catalog_url:
|
||||
catalog = self.keystone_client.service_catalog.get_endpoints(
|
||||
service_type)
|
||||
|
||||
if service_type in catalog:
|
||||
for e_type, endpoint in catalog.get(service_type)[0].items():
|
||||
if not region_name:
|
||||
catalog_entry = catalog.get(service_type)[0]
|
||||
else:
|
||||
for catalog_entry in catalog.get(service_type):
|
||||
if catalog_entry.get("region") == region_name:
|
||||
break
|
||||
else:
|
||||
catalog_entry = {}
|
||||
for e_type, endpoint in catalog_entry.items():
|
||||
if str(e_type).lower() == str(endpoint_type).lower():
|
||||
service_catalog_url = endpoint
|
||||
break
|
||||
|
|
Loading…
Reference in New Issue