LBaaS: add delete_health_monitor() to driver API
Currently there is create_health_monitor() in the driver API so a driver may create an object on device but there is no delete_health_monitor() and monitor objects will remain on device forever. Driver should at least call plugin to delete a db object. Fixes bug 1198996 Change-Id: Idcdaea0636e01381064983d8de5bfe3936357fb9
This commit is contained in:
parent
5294b8a90c
commit
4bd7bea0db
@ -120,6 +120,13 @@ class LoadBalancerAbstractDriver(object):
|
||||
pool_id):
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def delete_health_monitor(self, context, health_monitor):
|
||||
"""Driver may call the code below in order to delete the monitor.
|
||||
self.plugin._delete_db_health_monitor(context, health_monitor["id"])
|
||||
"""
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def create_pool_health_monitor(self, context,
|
||||
health_monitor,
|
||||
|
@ -357,5 +357,8 @@ class HaproxyOnHostPluginDriver(abstract_driver.LoadBalancerAbstractDriver):
|
||||
def create_health_monitor(self, context, health_monitor):
|
||||
pass
|
||||
|
||||
def delete_health_monitor(self, context, health_monitor):
|
||||
self.plugin._delete_db_health_monitor(context, health_monitor["id"])
|
||||
|
||||
def stats(self, context, pool_id):
|
||||
pass
|
||||
|
@ -89,6 +89,10 @@ class NoopLbaaSDriver(abstract_driver.LoadBalancerAbstractDriver):
|
||||
pool_association):
|
||||
pass
|
||||
|
||||
@log.log
|
||||
def delete_health_monitor(self, context, health_monitor):
|
||||
self.plugin._delete_db_health_monitor(context, health_monitor["id"])
|
||||
|
||||
@log.log
|
||||
def create_pool_health_monitor(self, context,
|
||||
health_monitor, pool_id):
|
||||
|
@ -185,6 +185,9 @@ class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,
|
||||
hm_id,
|
||||
pool_id)
|
||||
|
||||
def _delete_db_health_monitor(self, context, id):
|
||||
super(LoadBalancerPlugin, self).delete_health_monitor(context, id)
|
||||
|
||||
def delete_health_monitor(self, context, id):
|
||||
with context.session.begin(subtransactions=True):
|
||||
hm = self.get_health_monitor(context, id)
|
||||
@ -195,6 +198,7 @@ class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,
|
||||
self.driver.delete_pool_health_monitor(context,
|
||||
hm,
|
||||
assoc['pool_id'])
|
||||
self.driver.delete_health_monitor(context, hm)
|
||||
|
||||
def create_pool_health_monitor(self, context, health_monitor, pool_id):
|
||||
retval = super(LoadBalancerPlugin, self).create_pool_health_monitor(
|
||||
|
@ -859,10 +859,18 @@ class TestLoadBalancer(LoadBalancerPluginDbTestCase):
|
||||
|
||||
def test_delete_healthmonitor(self):
|
||||
with self.health_monitor(no_delete=True) as monitor:
|
||||
ctx = context.get_admin_context()
|
||||
qry = ctx.session.query(ldb.HealthMonitor)
|
||||
qry = qry.filter_by(id=monitor['health_monitor']['id'])
|
||||
self.assertIsNotNone(qry.first())
|
||||
|
||||
req = self.new_delete_request('health_monitors',
|
||||
monitor['health_monitor']['id'])
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, 204)
|
||||
qry = ctx.session.query(ldb.HealthMonitor)
|
||||
qry = qry.filter_by(id=monitor['health_monitor']['id'])
|
||||
self.assertIsNone(qry.first())
|
||||
|
||||
def test_delete_healthmonitor_cascade_deletion_of_associations(self):
|
||||
with self.health_monitor(type='HTTP', no_delete=True) as monitor:
|
||||
|
Loading…
Reference in New Issue
Block a user