Merge "Add check for neutron extension support in utils"
This commit is contained in:
@@ -21,6 +21,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
|
||||
@validation.restricted_parameters("subnet_id",
|
||||
subdict="pool_create_args")
|
||||
@validation.required_neutron_extensions("lbaas")
|
||||
@validation.required_services(consts.Service.NEUTRON)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("network")
|
||||
@@ -40,6 +41,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
|
||||
@validation.restricted_parameters("subnet_id",
|
||||
subdict="pool_create_args")
|
||||
@validation.required_neutron_extensions("lbaas")
|
||||
@validation.required_services(consts.Service.NEUTRON)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("network")
|
||||
@@ -61,6 +63,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario):
|
||||
|
||||
@validation.restricted_parameters("subnet_id",
|
||||
subdict="pool_create_args")
|
||||
@validation.required_neutron_extensions("lbaas")
|
||||
@validation.required_services(consts.Service.NEUTRON)
|
||||
@validation.required_openstack(users=True)
|
||||
@validation.required_contexts("network")
|
||||
|
@@ -493,6 +493,21 @@ def required_services(config, clients, deployment, *required_services):
|
||||
False, _("Service is not available: %s") % service)
|
||||
|
||||
|
||||
@validator
|
||||
def required_neutron_extensions(config, clients, deployment,
|
||||
*required_extensions):
|
||||
"""Validator checks if the specified Neutron extension is available
|
||||
|
||||
:param required_extensions: list of Neutron extensions
|
||||
"""
|
||||
extensions = clients.neutron().list_extensions().get("extensions", [])
|
||||
aliases = map(lambda x: x["alias"], extensions)
|
||||
for extension in required_extensions:
|
||||
if extension not in aliases:
|
||||
msg = (_("Neutron extension %s is not configured") % extension)
|
||||
return ValidationResult(False, msg)
|
||||
|
||||
|
||||
@validator
|
||||
def required_cinder_services(config, clients, deployment, service_name):
|
||||
"""Validator checks that specified Cinder service is available.
|
||||
|
@@ -777,6 +777,24 @@ class ValidatorsTestCase(test.TestCase):
|
||||
result = validator({}, clients, {"admin": {"foo": "bar"}})
|
||||
self.assertFalse(result.is_valid, result.msg)
|
||||
|
||||
@ddt.data(
|
||||
{"ext_validate": "existing_extension",
|
||||
"validation_result": True},
|
||||
{"ext_validate": "absent_extension",
|
||||
"validation_result": False},
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_required_neutron_extensions(self, ext_validate,
|
||||
validation_result):
|
||||
validator = self._unwrap_validator(
|
||||
validation.required_neutron_extensions,
|
||||
ext_validate)
|
||||
clients = mock.Mock()
|
||||
clients.neutron.return_value.list_extensions.return_value = (
|
||||
{"extensions": [{"alias": "existing_extension"}]})
|
||||
result = validator({}, clients, {})
|
||||
self.assertEqual(result.is_valid, validation_result)
|
||||
|
||||
def test_required_cinder_services(self):
|
||||
validator = self._unwrap_validator(
|
||||
validation.required_cinder_services,
|
||||
|
Reference in New Issue
Block a user