b5d4e5c0fe
Implement an LBaaS v2 driver for VMWare NSXv Edge appliances loadbalancer. Includes support for TLS termination. Depends-On: I60093c0186cce3e99fb26e1fc6bd5175cbd1a560 Closes-Bug: #1526436 Change-Id: Iba1ae36342032e23f43c0a1fc3e7bbc40327ce91
135 lines
4.3 KiB
Python
135 lines
4.3 KiB
Python
# Copyright 2015 VMware, Inc.
|
|
# All Rights Reserved
|
|
#
|
|
# 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.
|
|
|
|
from oslo_log.helpers import log_method_call as call_log
|
|
from oslo_log import log as logging
|
|
|
|
from neutron_lbaas.common import cert_manager
|
|
from neutron_lbaas.drivers import driver_base
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class EdgeDriverBaseManager(object):
|
|
@property
|
|
def nsxv_driver(self):
|
|
return self.driver.plugin.db._core_plugin.nsx_v
|
|
|
|
|
|
class EdgeLoadBalancerDriverV2(driver_base.LoadBalancerBaseDriver):
|
|
@call_log
|
|
def __init__(self, plugin):
|
|
self.plugin = plugin
|
|
super(EdgeLoadBalancerDriverV2, self).__init__(plugin)
|
|
self.load_balancer = EdgeLoadBalancerManager(self)
|
|
self.listener = EdgeListenerManager(self)
|
|
self.pool = EdgePoolManager(self)
|
|
self.member = EdgeMemberManager(self)
|
|
self.health_monitor = EdgeHealthMonitorManager(self)
|
|
|
|
|
|
class EdgeLoadBalancerManager(driver_base.BaseLoadBalancerManager,
|
|
EdgeDriverBaseManager):
|
|
@call_log
|
|
def create(self, context, lb):
|
|
self.nsxv_driver.loadbalancer.create(context, lb)
|
|
|
|
@call_log
|
|
def update(self, context, old_lb, new_lb):
|
|
self.nsxv_driver.loadbalancer.update(context, old_lb, new_lb)
|
|
|
|
@call_log
|
|
def delete(self, context, lb):
|
|
self.nsxv_driver.loadbalancer.delete(context, lb)
|
|
|
|
@call_log
|
|
def refresh(self, context, lb):
|
|
return self.nsxv_driver.loadbalancer.refresh(context, lb)
|
|
|
|
@call_log
|
|
def stats(self, context, lb):
|
|
return self.nsxv_driver.loadbalancer.stats(context, lb)
|
|
|
|
|
|
class EdgeListenerManager(driver_base.BaseListenerManager,
|
|
EdgeDriverBaseManager):
|
|
|
|
def _get_default_cert(self, listener):
|
|
if listener.default_tls_container_id:
|
|
cert_backend = cert_manager.get_backend()
|
|
if cert_backend:
|
|
return cert_backend.CertManager.get_cert(
|
|
listener.default_tls_container_id)
|
|
|
|
@call_log
|
|
def create(self, context, listener):
|
|
self.nsxv_driver.listener.create(
|
|
context, listener, certificate=self._get_default_cert(listener))
|
|
|
|
@call_log
|
|
def update(self, context, old_listener, new_listener):
|
|
self.nsxv_driver.listener.update(
|
|
context, old_listener, new_listener,
|
|
certificate=self._get_default_cert(new_listener))
|
|
|
|
@call_log
|
|
def delete(self, context, listener):
|
|
self.nsxv_driver.listener.delete(context, listener)
|
|
|
|
|
|
class EdgePoolManager(driver_base.BasePoolManager,
|
|
EdgeDriverBaseManager):
|
|
@call_log
|
|
def create(self, context, pool):
|
|
self.nsxv_driver.pool.create(context, pool)
|
|
|
|
@call_log
|
|
def update(self, context, old_pool, new_pool):
|
|
self.nsxv_driver.pool.update(context, old_pool, new_pool)
|
|
|
|
@call_log
|
|
def delete(self, context, pool):
|
|
self.nsxv_driver.pool.delete(context, pool)
|
|
|
|
|
|
class EdgeMemberManager(driver_base.BaseMemberManager,
|
|
EdgeDriverBaseManager):
|
|
@call_log
|
|
def create(self, context, member):
|
|
self.nsxv_driver.member.create(context, member)
|
|
|
|
@call_log
|
|
def update(self, context, old_member, new_member):
|
|
self.nsxv_driver.member.update(context, old_member, new_member)
|
|
|
|
@call_log
|
|
def delete(self, context, member):
|
|
self.nsxv_driver.member.delete(context, member)
|
|
|
|
|
|
class EdgeHealthMonitorManager(driver_base.BaseHealthMonitorManager,
|
|
EdgeDriverBaseManager):
|
|
@call_log
|
|
def create(self, context, hm):
|
|
self.nsxv_driver.healthmonitor.create(context, hm)
|
|
|
|
@call_log
|
|
def update(self, context, old_hm, new_hm):
|
|
self.nsxv_driver.healthmonitor.update(context, old_hm, new_hm)
|
|
|
|
@call_log
|
|
def delete(self, context, hm):
|
|
self.nsxv_driver.healthmonitor.delete(context, hm)
|