Force driver provider configs to define pool attr

There is currently nothing forcing a driver's ProviderConfig
to define a 'pools' attribute, yet the code clearly expects
it to be defined (e.g., PoolWorker.getPoolConfig() method).
Force this by defining an abstract property, which helps define
the interface more clearly, too.

Change-Id: I2d6a0ee98076540cc722835ab6b5c3a077f83edc
This commit is contained in:
David Shrewsbury 2018-05-08 14:07:19 -04:00
parent cf920b86b4
commit 2332724205
4 changed files with 32 additions and 3 deletions

View File

@ -725,6 +725,14 @@ class ProviderConfig(ConfigValue):
def __repr__(self):
return "<Provider %s>" % self.name
@property
@abc.abstractmethod
def pools(self):
'''
Return a dict of ConfigPool-based objects, indexed by pool name.
'''
pass
@abc.abstractmethod
def __eq__(self, other):
pass

View File

@ -79,6 +79,10 @@ class ProviderPool(ConfigPool):
class OpenStackProviderConfig(ProviderConfig):
os_client_config = None
def __init__(self, *args, **kwargs):
self.__pools = {}
super().__init__(*args, **kwargs)
def __eq__(self, other):
if (other.cloud_config != self.cloud_config or
other.pools != self.pools or
@ -99,6 +103,10 @@ class OpenStackProviderConfig(ProviderConfig):
cloud_kwargs[arg] = self.provider[arg]
return cloud_kwargs
@property
def pools(self):
return self.__pools
@staticmethod
def reset():
OpenStackProviderConfig.os_client_config = None
@ -174,7 +182,6 @@ class OpenStackProviderConfig(ProviderConfig):
default_port_mapping.get(i.connection_type, 22))
self.cloud_images[i.name] = i
self.pools = {}
for pool in self.provider.get('pools', []):
pp = ProviderPool()
pp.name = pool['name']

View File

@ -33,6 +33,10 @@ class StaticPool(ConfigPool):
class StaticProviderConfig(ProviderConfig):
def __init__(self, *args, **kwargs):
self.__pools = {}
super().__init__(*args, **kwargs)
def __eq__(self, other):
if other.pools != self.pools:
return False
@ -42,8 +46,11 @@ class StaticProviderConfig(ProviderConfig):
def reset():
pass
@property
def pools(self):
return self.__pools
def load(self, config):
self.pools = {}
for pool in self.provider.get('pools', []):
pp = StaticPool()
pp.name = pool['name']

View File

@ -24,6 +24,10 @@ class TestPool(ConfigPool):
class TestConfig(ProviderConfig):
def __init__(self, *args, **kwargs):
self.__pools = {}
super().__init__(*args, **kwargs)
def __eq__(self, other):
return self.name == other.name
@ -31,8 +35,11 @@ class TestConfig(ProviderConfig):
def reset():
pass
@property
def pools(self):
return self.__pools
def load(self, newconfig):
self.pools = {}
self.labels = set()
for pool in self.provider.get('pools', []):
testpool = TestPool()