Merge "Check subnetpool extension support"

This commit is contained in:
Jenkins 2015-11-11 01:57:42 +00:00 committed by Gerrit Code Review
commit 964a8ea19c
4 changed files with 44 additions and 3 deletions

View File

@ -26,8 +26,16 @@ class BindingFailure(KuryrException):
class DuplicatedResourceException(KuryrException): class DuplicatedResourceException(KuryrException):
"""Exception represents there're multiple resources for the ID. """Exception represents there're multiple resources for the ID.
This exception is thrown when you query the Neutron resouce associated with For example, this exception is thrown when you query the Neutron resource
the ID and you get multiple resources. associated with the ID and you get multiple resources.
"""
class MandatoryApiMissing(KuryrException):
"""Exception represents that mandatory api is not found.
For example, this exception is thrown when expected neutron
extension(subnetpools) APIs are not found.
""" """

View File

@ -28,6 +28,8 @@ from kuryr.common import exceptions
from kuryr import schemata from kuryr import schemata
from kuryr import utils from kuryr import utils
MANDATORY_NEUTRON_EXTENSION = "subnet_allocation"
cfg.CONF.import_group('neutron_client', 'kuryr.common.config') cfg.CONF.import_group('neutron_client', 'kuryr.common.config')
cfg.CONF.import_group('keystone_client', 'kuryr.common.config') cfg.CONF.import_group('keystone_client', 'kuryr.common.config')
@ -49,6 +51,19 @@ else:
app.neutron = utils.get_neutron_client_simple( app.neutron = utils.get_neutron_client_simple(
url=neutron_uri, token=auth_token) url=neutron_uri, token=auth_token)
def check_for_neutron_ext_support():
"""Validates for mandatory extension support availability in neutron.
"""
try:
app.neutron.show_extension(MANDATORY_NEUTRON_EXTENSION)
except n_exceptions.NeutronClientException as e:
if e.status_code == n_exceptions.NotFound.status_code:
raise exceptions.MandatoryApiMissing(
"Neutron extension with alias '{0}' not found"
.format(MANDATORY_NEUTRON_EXTENSION))
# TODO(tfukushima): Retrieve the following subnet names from the config file. # TODO(tfukushima): Retrieve the following subnet names from the config file.
SUBNET_POOLS_V4 = [ SUBNET_POOLS_V4 = [
p.strip() for p in os.environ.get('SUBNET_POOLS_V4', 'kuryr').split(',')] p.strip() for p in os.environ.get('SUBNET_POOLS_V4', 'kuryr').split(',')]

View File

@ -12,11 +12,15 @@
import os import os
from neutronclient.common import exceptions as n_exceptions
from kuryr.common import config from kuryr.common import config
from kuryr.common import exceptions
from kuryr import controllers
from kuryr.tests import base from kuryr.tests import base
class ConfigurationTest(base.TestCase): class ConfigurationTest(base.TestKuryrBase):
def test_defaults(self): def test_defaults(self):
basepath = os.path.abspath(os.path.join(os.path.dirname(__file__), basepath = os.path.abspath(os.path.join(os.path.dirname(__file__),
@ -33,3 +37,15 @@ class ConfigurationTest(base.TestCase):
self.assertEqual('http://127.0.0.1:35357', self.assertEqual('http://127.0.0.1:35357',
config.CONF.keystone_client.auth_uri) config.CONF.keystone_client.auth_uri)
def test_check_for_neutron_ext_support_with_ex(self):
ext_alias = "subnet_allocation"
self.mox.StubOutWithMock(controllers.app.neutron, "show_extension")
err = n_exceptions.NotFound.status_code
ext_not_found_ex = n_exceptions.NeutronClientException(status_code=err,
message="")
neutron = controllers.app.neutron
neutron.show_extension(ext_alias).AndRaise(ext_not_found_ex)
self.mox.ReplayAll()
ex = exceptions.MandatoryApiMissing
self.assertRaises(ex, controllers.check_for_neutron_ext_support)

View File

@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from kuryr import controllers
from kuryr import server from kuryr import server
controllers.check_for_neutron_ext_support()
server.start() server.start()