This is an automated email from the ASF dual-hosted git repository. micafer pushed a commit to branch fix_openstak_endpoints in repository https://gitbox.apache.org/repos/asf/libcloud.git
commit d35ff68cc76f4adada2a19e5fc393f222476eb69 Author: Miguel Caballer <[email protected]> AuthorDate: Thu Jul 30 10:00:57 2026 +0200 Do not use service_name for endpoint selection. Fix: #2074 --- CHANGES.rst | 7 +++++++ libcloud/common/openstack.py | 2 +- libcloud/test/common/test_openstack.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 88b983e4b..c93121c0a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -14,6 +14,13 @@ Common Compute ~~~~~~~ +- [OpenStack] Select service catalog endpoints by service type without filtering + by the default service name. The service name is only used as a filter when + explicitly provided via ``ex_force_service_name``. + + (#2074) + [Miguel Caballer - @micafer] + - [SSH] Support paramiko 4 RSA key support has been removed as of paramiko 4, so only import it diff --git a/libcloud/common/openstack.py b/libcloud/common/openstack.py index ad3ada175..ea342e881 100644 --- a/libcloud/common/openstack.py +++ b/libcloud/common/openstack.py @@ -308,7 +308,7 @@ class OpenStackBaseConnection(ConnectionUserAndKey): :returns: url of the relevant endpoint for the driver """ service_type = self.service_type - service_name = self.service_name + service_name = None service_region = self.service_region if self._ex_force_service_type: diff --git a/libcloud/test/common/test_openstack.py b/libcloud/test/common/test_openstack.py index 2bfeb7640..b2a99fb9e 100644 --- a/libcloud/test/common/test_openstack.py +++ b/libcloud/test/common/test_openstack.py @@ -57,6 +57,39 @@ class OpenStackBaseConnectionTest(unittest.TestCase): headers = self.connection.add_default_headers({}) self.assertEqual(headers["OpenStack-API-Version"], "volume 2.67") + def test_get_endpoint_does_not_filter_by_default_service_name(self): + self.connection.service_catalog = Mock() + self.connection.service_catalog.get_endpoint.return_value.url = ( + "https://compute.example.com" + ) + self.connection.service_type = "compute" + self.connection.service_name = "nova" + self.connection.service_region = "RegionOne" + + endpoint = self.connection.get_endpoint() + + self.assertEqual(endpoint, "https://compute.example.com") + self.connection.service_catalog.get_endpoint.assert_called_once_with( + service_type="compute", name=None, region="RegionOne" + ) + + def test_get_endpoint_filters_by_explicit_service_name(self): + self.connection.service_catalog = Mock() + self.connection.service_catalog.get_endpoint.return_value.url = ( + "https://compute.example.com" + ) + self.connection.service_type = "compute" + self.connection.service_name = "nova" + self.connection.service_region = "RegionOne" + self.connection._ex_force_service_name = "custom-nova" + + endpoint = self.connection.get_endpoint() + + self.assertEqual(endpoint, "https://compute.example.com") + self.connection.service_catalog.get_endpoint.assert_called_once_with( + service_type="compute", name="custom-nova", region="RegionOne" + ) + @patch("libcloud.common.base.ConnectionUserAndKey.request") def test_request(self, mock_request): OpenStackBaseConnection.conn_class._raw_data = ""
