Merge "Fix openstack region handling"

This commit is contained in:
Zuul
2024-10-25 06:44:13 +00:00
committed by Gerrit Code Review
5 changed files with 18 additions and 3 deletions

View File

@@ -147,6 +147,7 @@ class FakeOpenstackConnection:
self.config = FakeOpenstackConfig()
self.config.config = {}
self.config.config['image_format'] = 'qcow2'
self.config.config['region_name'] = 'region1'
def _needs_floating_ip(self, server, nat_destination):
return self.cloud._fake_needs_floating_ip

View File

@@ -43,3 +43,4 @@ secret_access_key=fake
[connection openstack]
driver=openstack
cloud=fakecloud

View File

@@ -77,6 +77,11 @@ class BaseOpenstackDriverTest(ZuulTestCase):
class TestOpenstackDriver(BaseOpenstackDriverTest, BaseCloudDriverTest):
def _assertProviderNodeAttributes(self, pnode):
super()._assertProviderNodeAttributes(pnode)
self.assertEqual('fakecloud', pnode.cloud)
self.assertEqual('region1', pnode.region)
@simple_layout('layouts/openstack/nodepool.yaml', enable_nodepool=True)
def test_openstack_node_lifecycle(self):
self._test_node_lifecycle('debian-normal')

View File

@@ -32,8 +32,10 @@ class OpenstackConnection(BaseConnection):
'client_config_file',
os.getenv('OS_CLIENT_CONFIG_FILE', None))
if 'cloud' not in self.connection_config:
raise Exception('The "cloud" parameter is required for '
f'OpenStack connections in {self.connection_name}')
self.cloud_name = self.connection_config.get('cloud')
self.region_name = self.connection_config.get('region')
# Rate limit: requests/second
self.rate = self.connection_config.get('rate', 2)

View File

@@ -564,7 +564,7 @@ class OpenstackProviderEndpoint(BaseProviderEndpoint):
def _getInstance(self, server, quota):
return OpenstackInstance(
self.connection.cloud_name,
self.connection.region_name,
self.getRegionName(),
server, quota)
def _getClient(self):
@@ -574,7 +574,7 @@ class OpenstackProviderEndpoint(BaseProviderEndpoint):
app_name='zuul',
)
region = config.get_one(cloud=self.connection.cloud_name,
region_name=self.connection.region_name)
region_name=self.region)
return openstack.connection.Connection(
config=region,
use_direct_get=False,
@@ -584,6 +584,12 @@ class OpenstackProviderEndpoint(BaseProviderEndpoint):
def getImageFormat(self):
return self._client.config.config['image_format']
def getRegionName(self):
# With OpenStackSDK, users can omit the region and the SDK may
# supply a default region. This helper method will return the
# actual region in use regardless of what the user supplied.
return self._client.config.config['region_name']
def _submitApi(self, api, *args, **kw):
return self.api_executor.submit(
api, *args, **kw)