A10 Networks LBaaS v2 Driver
Change-Id: I05fc66493b3fc9f9a4f2048c86c0b1ff01319d61 Implements: blueprint a10-lbaas-v2-driver
This commit is contained in:
parent
53ef6171c6
commit
6fa0839dd9
|
@ -54,9 +54,11 @@ service_provider=LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.driver
|
|||
# service_provider=LOADBALANCER:NetScaler:neutron_lbaas.services.loadbalancer.drivers.netscaler.netscaler_driver.NetScalerPluginDriver
|
||||
# service_provider=LOADBALANCER:Embrane:neutron_lbaas.services.loadbalancer.drivers.embrane.driver.EmbraneLbaas:default
|
||||
# service_provider = LOADBALANCER:A10Networks:neutron_lbaas.services.loadbalancer.drivers.a10networks.driver_v1.ThunderDriver:default
|
||||
|
||||
# LBaaS v2 drivers
|
||||
# service_provider = LOADBALANCERV2:LoggingNoop:neutron_lbaas.drivers.logging_noop.driver.LoggingNoopLoadBalancerDriver:default
|
||||
# service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
|
||||
# service_provider = LOADBALANCERV2:A10Networks:neutron_lbaas.drivers.a10networks.driver_v2.ThunderDriver:default
|
||||
|
||||
[certificates]
|
||||
# cert_manager_class = neutron_lbaas.common.cert_manager.local_cert_manager
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
# Copyright 2015, Doug Wiegley (dougwig), A10 Networks
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import a10_neutron_lbaas
|
||||
from oslo_log import log as logging
|
||||
|
||||
from neutron_lbaas.drivers import driver_base
|
||||
|
||||
VERSION = "2.0.0"
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ThunderDriver(driver_base.LoadBalancerBaseDriver):
|
||||
|
||||
def __init__(self, plugin):
|
||||
super(ThunderDriver, self).__init__(plugin)
|
||||
|
||||
self.load_balancer = LoadBalancerManager(self)
|
||||
self.listener = ListenerManager(self)
|
||||
self.pool = PoolManager(self)
|
||||
self.member = MemberManager(self)
|
||||
self.health_monitor = HealthMonitorManager(self)
|
||||
|
||||
LOG.debug("A10Driver: v2 initializing, version=%s, lbaas_manager=%s",
|
||||
VERSION, a10_neutron_lbaas.VERSION)
|
||||
|
||||
self.a10 = a10_neutron_lbaas.A10OpenstackLBV2(self)
|
||||
|
||||
|
||||
class LoadBalancerManager(driver_base.BaseLoadBalancerManager):
|
||||
|
||||
def create(self, context, lb):
|
||||
self.driver.a10.lb.create(context, lb)
|
||||
|
||||
def update(self, context, old_lb, lb):
|
||||
self.driver.a10.lb.update(context, old_lb, lb)
|
||||
|
||||
def delete(self, context, lb):
|
||||
self.driver.a10.lb.delete(context, lb)
|
||||
|
||||
def refresh(self, context, lb):
|
||||
self.driver.a10.lb.refresh(context, lb)
|
||||
|
||||
def stats(self, context, lb):
|
||||
return self.driver.a10.lb.stats(context, lb)
|
||||
|
||||
|
||||
class ListenerManager(driver_base.BaseListenerManager):
|
||||
|
||||
def create(self, context, listener):
|
||||
self.driver.a10.listener.create(context, listener)
|
||||
|
||||
def update(self, context, old_listener, listener):
|
||||
self.driver.a10.listener.update(context, old_listener, listener)
|
||||
|
||||
def delete(self, context, listener):
|
||||
self.driver.a10.listener.delete(context, listener)
|
||||
|
||||
|
||||
class PoolManager(driver_base.BasePoolManager):
|
||||
|
||||
def create(self, context, pool):
|
||||
self.driver.a10.pool.create(context, pool)
|
||||
|
||||
def update(self, context, old_pool, pool):
|
||||
self.driver.a10.pool.update(context, old_pool, pool)
|
||||
|
||||
def delete(self, context, pool):
|
||||
self.driver.a10.pool.delete(context, pool)
|
||||
|
||||
|
||||
class MemberManager(driver_base.BaseMemberManager):
|
||||
|
||||
def create(self, context, member):
|
||||
self.driver.a10.member.create(context, member)
|
||||
|
||||
def update(self, context, old_member, member):
|
||||
self.driver.a10.member.update(context, old_member, member)
|
||||
|
||||
def delete(self, context, member):
|
||||
self.driver.a10.member.delete(context, member)
|
||||
|
||||
|
||||
class HealthMonitorManager(driver_base.BaseHealthMonitorManager):
|
||||
|
||||
def create(self, context, hm):
|
||||
self.driver.a10.hm.create(context, hm)
|
||||
|
||||
def update(self, context, old_hm, hm):
|
||||
self.driver.a10.hm.update(context, old_hm, hm)
|
||||
|
||||
def delete(self, context, hm):
|
||||
self.driver.a10.hm.delete(context, hm)
|
|
@ -0,0 +1,97 @@
|
|||
# Copyright 2015, Doug Wiegley (dougwig), A10 Networks
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
import mock
|
||||
from neutron import context
|
||||
|
||||
from neutron_lbaas.tests.unit.db.loadbalancer import test_db_loadbalancerv2
|
||||
|
||||
with mock.patch.dict(sys.modules, {'a10_neutron_lbaas': mock.Mock()}):
|
||||
from neutron_lbaas.drivers.a10networks import driver_v2
|
||||
|
||||
|
||||
class FakeModel(object):
|
||||
def __init__(self, id):
|
||||
self.id = id
|
||||
self.address = '1.1.1.1'
|
||||
self.tenant_id = "tennant-was-a-great-doctor"
|
||||
|
||||
|
||||
class ManagerTest(object):
|
||||
def __init__(self, parent, manager, model, mocked_root):
|
||||
self.parent = parent
|
||||
self.context = parent.context
|
||||
self.driver = parent.driver
|
||||
self.manager = manager
|
||||
self.model = model
|
||||
self.mocked_root = mocked_root
|
||||
|
||||
self.create(model)
|
||||
self.update(model, model)
|
||||
self.delete(model)
|
||||
|
||||
def create(self, model):
|
||||
self.manager.create(self.context, model)
|
||||
self.mocked_root.create.assert_called_with(self.context, model)
|
||||
|
||||
def update(self, old_model, model):
|
||||
self.manager.update(self.context, old_model, model)
|
||||
self.mocked_root.update.assert_called_with(self.context,
|
||||
old_model, model)
|
||||
|
||||
def delete(self, model):
|
||||
self.manager.delete(self.context, model)
|
||||
self.mocked_root.delete.assert_called_with(self.context, model)
|
||||
|
||||
def refresh(self):
|
||||
self.manager.refresh(self.context, self.model)
|
||||
self.mocked_root.refresh.assert_called_with(self.context, self.model)
|
||||
|
||||
def stats(self):
|
||||
self.manager.stats(self.context, self.model)
|
||||
self.mocked_root.stats.assert_called_with(self.context, self.model)
|
||||
|
||||
|
||||
class TestA10ThunderDriver(test_db_loadbalancerv2.LbaasPluginDbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestA10ThunderDriver, self).setUp()
|
||||
self.context = context.get_admin_context()
|
||||
self.plugin = mock.Mock()
|
||||
self.driver = driver_v2.ThunderDriver(self.plugin)
|
||||
self.driver.a10 = mock.Mock()
|
||||
|
||||
def test_load_balancer_ops(self):
|
||||
m = ManagerTest(self, self.driver.load_balancer,
|
||||
FakeModel("loadbalancer-a10"), self.driver.a10.lb)
|
||||
m.refresh()
|
||||
m.stats()
|
||||
|
||||
def test_listener_ops(self):
|
||||
ManagerTest(self, self.driver.listener, FakeModel("listener-a10"),
|
||||
self.driver.a10.listener)
|
||||
|
||||
def test_pool_ops(self):
|
||||
ManagerTest(self, self.driver.pool, FakeModel("pool-10"),
|
||||
self.driver.a10.pool)
|
||||
|
||||
def test_member_ops(self):
|
||||
ManagerTest(self, self.driver.member, FakeModel("member-a10"),
|
||||
self.driver.a10.member)
|
||||
|
||||
def test_health_monitor_ops(self):
|
||||
ManagerTest(self, self.driver.health_monitor, FakeModel("hm-a10"),
|
||||
self.driver.a10.hm)
|
Loading…
Reference in New Issue