Merge "Add check for neutron extension support in utils"

This commit is contained in:
Jenkins
2015-09-08 10:10:03 +00:00
committed by Gerrit Code Review
3 changed files with 36 additions and 0 deletions

View File

@@ -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")

View File

@@ -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.

View File

@@ -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,