Adds Cascade Delete for LoadBalancers to Octavia Driver

This implements the cascade delete functionality for the
Octavia reference driver.

Change-Id: I9127826ef72a1e144d3005e68d4307ee7efb3e79
Depends-On: I0fd88923dc76e573b92d83f68d292ded913b13a6
This commit is contained in:
German Eichberger 2016-02-24 10:33:25 -08:00
parent a38bdab02e
commit 3d0535f376
4 changed files with 19 additions and 5 deletions

View File

@ -242,8 +242,10 @@ class LoadBalancerPluginDbv2(base_db.CommonDbMixin,
if cascade:
lb = self.get_loadbalancer(context, id)
for pool in lb.pools:
self.delete_healthmonitor(context, pool.healthmonitor_id)
self.delete_pool(pool.id)
if pool.healthmonitor_id:
self.delete_healthmonitor(
context, pool.healthmonitor_id)
self.delete_pool(context, pool.id)
for listener in lb.listeners:
# todo (xgerman): delete L7
self.delete_listener(context, listener.id)

View File

@ -94,7 +94,7 @@ class BaseLoadBalancerManager(driver_mixins.BaseRefreshMixin,
@property
def deletes_cascade(self):
"""Does this driver need to allocate its own virtual IPs"""
"""Does this driver cascade delete LB"""
return False
def create_and_allocate_vip(self, context, obj):

View File

@ -101,7 +101,7 @@ def thread_op(manager, entity, delete=False, lb_create=False):
def async_op(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
d = (func.__name__ == 'delete')
d = (func.__name__ == 'delete' or func.__name__ == 'delete_cascade')
lb_create = ((func.__name__ == 'create') and
isinstance(args[0], LoadBalancerManager))
try:
@ -196,6 +196,10 @@ class LoadBalancerManager(driver_base.BaseLoadBalancerManager):
def allocates_vip(self):
return cfg.CONF.octavia.allocates_vip
@property
def deletes_cascade(self):
return True
def create_and_allocate_vip(self, context, lb):
self.create(context, lb)
@ -238,6 +242,10 @@ class LoadBalancerManager(driver_base.BaseLoadBalancerManager):
def get(self, lb):
return self.driver.req.get(self._url(lb, lb.id))
@async_op
def delete_cascade(self, context, lb):
self.driver.req.delete(self._url(lb, lb.id) + '/delete_cascade')
class ListenerManager(driver_base.BaseListenerManager):

View File

@ -43,6 +43,10 @@ class ManagerTest(object):
self.manager.delete(self.context, model)
self.mocked_req.delete.assert_called_with(url)
def delete_cascade(self, model, url):
self.manager.delete_cascade(self.context, model)
self.mocked_req.delete.assert_called_with(url)
# TODO(Banashankar) : Complete refresh function. Need more info.
def refresh(self):
pass
@ -137,7 +141,7 @@ class TestOctaviaDriver(BaseOctaviaDriverTest):
m.update(lb, lb, lb_url_id, args)
# delete LB test
m.delete(lb, lb_url_id)
m.delete_cascade(lb, lb_url_id + '/delete_cascade')
# TODO(Banashankar) : refresh n stats fucntions are not yet done.
#m.refresh()