Make manage_images a property of ProviderConfig

The current driver API does not make it clear that a driver must
set the 'manage_images' property on the driver of the ProviderConfig
to indicate that it can manage external images. Since this is really
a function of the provider, not the driver, make this an abstract
property on the ProviderConfig that must be defined by each driver
implementation.

Change-Id: Iefe257f943aaa5740d0326ca6150632c21a2a8cf
This commit is contained in:
David Shrewsbury 2018-05-09 11:35:36 -04:00
parent 2332724205
commit 6edb78a36b
6 changed files with 25 additions and 7 deletions

View File

@ -440,7 +440,7 @@ class CleanupWorker(BaseWorker):
# (since this should be done regardless of the build
# state).
for provider in known_providers:
if not provider.driver.manage_images:
if not provider.manage_images:
# This provider doesn't manage images
continue
try:
@ -469,7 +469,7 @@ class CleanupWorker(BaseWorker):
continue
for provider in known_providers:
if not provider.driver.manage_images:
if not provider.manage_images:
# This provider doesn't manage images
continue
try:
@ -975,7 +975,7 @@ class UploadWorker(BaseWorker):
to providers, do the upload if they are available on the local disk.
'''
for provider in self._config.providers.values():
if not provider.driver.manage_images:
if not provider.manage_images:
continue
for image in provider.diskimages.values():
uploaded = False

View File

@ -211,7 +211,7 @@ class NodeRequestHandler(object):
:returns: True if it is available, False otherwise.
'''
if self.provider.driver.manage_images:
if self.provider.manage_images:
for label in self.request.node_types:
if self.pool.labels[label].cloud_image:
if not self.manager.labelReady(self.pool.labels[label]):
@ -720,7 +720,6 @@ class ProviderConfig(ConfigValue):
self.driver = Driver()
self.driver.name = provider.get('driver', 'openstack')
self.max_concurrency = provider.get('max-concurrency', -1)
self.driver.manage_images = False
def __repr__(self):
return "<Provider %s>" % self.name
@ -733,6 +732,14 @@ class ProviderConfig(ConfigValue):
'''
pass
@property
@abc.abstractmethod
def manage_images(self):
'''
Return True if provider manages external images, False otherwise.
'''
pass
@abc.abstractmethod
def __eq__(self, other):
pass

View File

@ -107,6 +107,10 @@ class OpenStackProviderConfig(ProviderConfig):
def pools(self):
return self.__pools
@property
def manage_images(self):
return True
@staticmethod
def reset():
OpenStackProviderConfig.os_client_config = None
@ -119,7 +123,6 @@ class OpenStackProviderConfig(ProviderConfig):
self.cloud_config = self.os_client_config.get_one_cloud(**cloud_kwargs)
self.image_type = self.cloud_config.config['image_format']
self.driver.manage_images = True
self.region_name = self.provider.get('region-name')
self.rate = float(self.provider.get('rate', 1.0))
self.boot_timeout = self.provider.get('boot-timeout', 60)

View File

@ -50,6 +50,10 @@ class StaticProviderConfig(ProviderConfig):
def pools(self):
return self.__pools
@property
def manage_images(self):
return False
def load(self, config):
for pool in self.provider.get('pools', []):
pp = StaticPool()

View File

@ -882,7 +882,7 @@ class NodePool(threading.Thread):
ready in at least one provider. False otherwise.
'''
for pool in label.pools:
if not pool.provider.driver.manage_images:
if not pool.provider.manage_images:
# Provider doesn't manage images, assuming label is ready
return True
for pool_label in pool.labels.values():

View File

@ -39,6 +39,10 @@ class TestConfig(ProviderConfig):
def pools(self):
return self.__pools
@property
def manage_images(self):
return False
def load(self, newconfig):
self.labels = set()
for pool in self.provider.get('pools', []):