diff --git a/ironicclient/osc/plugin.py b/ironicclient/osc/plugin.py index 7d5c0a6b9..f0d84fded 100644 --- a/ironicclient/osc/plugin.py +++ b/ironicclient/osc/plugin.py @@ -43,6 +43,12 @@ def make_client(instance): os_ironic_api_version=instance._api_version[API_NAME], session=instance.session, region_name=instance._region_name, + # NOTE(vdrok): This will be set as endpoint_override, and the Client + # class will be able to do the version stripping if needed + endpoint=instance.get_endpoint_for_service_type( + API_NAME, interface=instance.interface, + region_name=instance._region_name + ) ) return client diff --git a/ironicclient/tests/unit/osc/fakes.py b/ironicclient/tests/unit/osc/fakes.py index 0831cea3a..cd9731bb9 100644 --- a/ironicclient/tests/unit/osc/fakes.py +++ b/ironicclient/tests/unit/osc/fakes.py @@ -35,6 +35,10 @@ class FakeClientManager(object): def __init__(self): self.identity = None self.auth_ref = None + self.interface = 'public' + self._region_name = 'RegionOne' + self.session = 'fake session' + self._api_version = {'baremetal': '1.6'} class FakeResource(object): diff --git a/ironicclient/tests/unit/osc/test_plugin.py b/ironicclient/tests/unit/osc/test_plugin.py new file mode 100644 index 000000000..a08e35f7d --- /dev/null +++ b/ironicclient/tests/unit/osc/test_plugin.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import mock +import testtools + +from ironicclient.osc import plugin +from ironicclient.tests.unit.osc import fakes +from ironicclient.v1 import client + + +class MakeClientTest(testtools.TestCase): + + @mock.patch.object(client, 'Client', autospec=True) + def test_make_client(self, mock_client): + instance = fakes.FakeClientManager() + instance.get_endpoint_for_service_type = mock.Mock( + return_value='endpoint') + plugin.make_client(instance) + mock_client.assert_called_once_with(os_ironic_api_version='1.6', + session=instance.session, + region_name=instance._region_name, + endpoint='endpoint') + instance.get_endpoint_for_service_type.assert_called_once_with( + 'baremetal', region_name=instance._region_name, + interface=instance.interface) diff --git a/releasenotes/notes/osc-versioned-endpoint-fix-08f6b7af2f47a5d6.yaml b/releasenotes/notes/osc-versioned-endpoint-fix-08f6b7af2f47a5d6.yaml new file mode 100644 index 000000000..1b161be47 --- /dev/null +++ b/releasenotes/notes/osc-versioned-endpoint-fix-08f6b7af2f47a5d6.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Fixes an issue with OpenStackClient plugin not being able to work with + versioned ironic endpoints.