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 = ""

Reply via email to