Validation check for missing openstack diskimages

Having a diskimage in an openstack provider which isn't defined as a
top-level diskimage causes nodepool-builder to fail. Check for this
condition in the config-validator.

Change-Id: I2862386e20292fd370635b5ff45086937482dfde
This commit is contained in:
Dr. Jens Harbott
2022-08-05 14:00:01 +02:00
committed by Jeremy Stanley
parent b2d4e3c356
commit 0293064ed9
3 changed files with 26 additions and 0 deletions

View File

@@ -124,10 +124,18 @@ class ConfigValidator:
# Ensure in openstack provider sections, diskimages have
# top-level labels
diskimages = [x['name'] for x in config.get('diskimages', [])]
labels = [x['name'] for x in config.get('labels', [])]
for provider in config.get('providers', []):
if provider.get('driver', 'openstack') != 'openstack':
continue
for diskimage in provider.get('diskimages', []):
if diskimage['name'] not in diskimages:
errors = True
log.error("diskimage %s in provider %s is not defined in "
"the main diskimages list" %
(diskimage['name'], provider['name']))
for pool in provider.get('pools', []):
for label in pool.get('labels', []):
if label['name'] not in labels:

View File

@@ -0,0 +1,9 @@
providers:
- name: cloud1
driver: openstack
cloud: vanilla-cloud
diskimages:
- name: wrong
diskimages:
- name: right

View File

@@ -76,6 +76,15 @@ class TestConfigValidation(tests.BaseTestCase):
ret = validator.validate()
self.assertEqual(ret, 1)
def test_missing_diskimage_provider(self):
config = os.path.join(os.path.dirname(tests.__file__),
'fixtures', 'config_validate',
'missing_diskimage_provider.yaml')
validator = ConfigValidator(config)
ret = validator.validate()
self.assertEqual(ret, 1)
def test_schema(self):
config = os.path.join(os.path.dirname(tests.__file__),
'fixtures', 'config_validate',