Fix for pools with different labels

Pools within the same provider that have different labels are
attempting to handle requests for ALL labels defined within the provider.
This is due to change I61263f51be5e957de71d1e2dabaa7391bbe7bddf which
incorrectly changed from getting supported labels from per-pool to
per-provider. This modifies the getSupportedLabels() API to support
pools.

Change-Id: I7a0d472928c6b528f6faa6dd3b9cf1479874cb22
This commit is contained in:
David Shrewsbury 2018-06-28 10:43:11 -04:00
parent 3e0a822bf6
commit c08eb291f7
4 changed files with 11 additions and 7 deletions

View File

@ -373,7 +373,7 @@ class NodeRequestHandler(NodeRequestHandlerNotifications,
list if all are valid.
'''
invalid = []
valid = self.provider.getSupportedLabels()
valid = self.provider.getSupportedLabels(self.pool.name)
for ntype in self.request.node_types:
if ntype not in valid:
invalid.append(ntype)
@ -859,8 +859,10 @@ class ProviderConfig(ConfigValue, metaclass=abc.ABCMeta):
pass
@abc.abstractmethod
def getSupportedLabels(self):
def getSupportedLabels(self, pool_name=None):
'''
Return a set of label names supported by this provider.
:param str pool_name: If provided, get labels for the given pool only.
'''
pass

View File

@ -385,8 +385,9 @@ class OpenStackProviderConfig(ProviderConfig):
'cloud-images': [provider_cloud_images],
})
def getSupportedLabels(self):
def getSupportedLabels(self, pool_name=None):
labels = set()
for pool in self.pools.values():
labels.update(pool.labels.keys())
if not pool_name or (pool.name == pool_name):
labels.update(pool.labels.keys())
return labels

View File

@ -109,8 +109,9 @@ class StaticProviderConfig(ProviderConfig):
}
return v.Schema({'pools': [pool]})
def getSupportedLabels(self):
def getSupportedLabels(self, pool_name=None):
labels = set()
for pool in self.pools.values():
labels.update(pool.labels)
if not pool_name or (pool.name == pool_name):
labels.update(pool.labels)
return labels

View File

@ -57,5 +57,5 @@ class TestConfig(ProviderConfig):
'labels': [str]}
return v.Schema({'pools': [pool]})
def getSupportedLabels(self):
def getSupportedLabels(self, pool_name=None):
return self.labels