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:
parent
a38bdab02e
commit
3d0535f376
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue