Use object instead of object id in the drivers delete callbacks

Commit Ide4beaf73bb99be5c3b4c71c12fecef3499f45d9 updated the drivers api spec.
This patch implements the new api for the delete callbacks.

Change-Id: Icbabe8b01864175112000b2b5aa769f750a9708b
This commit is contained in:
Adit Sarfaty 2018-06-03 15:14:25 +03:00
parent 16cb3603b8
commit 1924369fc6
14 changed files with 137 additions and 70 deletions

View File

@ -63,7 +63,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.LOAD_BALANCER_ID: loadbalancer.loadbalancer_id}
self.client.cast({}, 'create_load_balancer', **payload)
def loadbalancer_delete(self, loadbalancer_id, cascade=False):
def loadbalancer_delete(self, loadbalancer, cascade=False):
loadbalancer_id = loadbalancer.loadbalancer_id
payload = {consts.LOAD_BALANCER_ID: loadbalancer_id,
'cascade': cascade}
self.client.cast({}, 'delete_load_balancer', **payload)
@ -88,7 +89,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.LISTENER_ID: listener.listener_id}
self.client.cast({}, 'create_listener', **payload)
def listener_delete(self, listener_id):
def listener_delete(self, listener):
listener_id = listener.listener_id
payload = {consts.LISTENER_ID: listener_id}
self.client.cast({}, 'delete_listener', **payload)
@ -107,7 +109,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.POOL_ID: pool.pool_id}
self.client.cast({}, 'create_pool', **payload)
def pool_delete(self, pool_id):
def pool_delete(self, pool):
pool_id = pool.pool_id
payload = {consts.POOL_ID: pool_id}
self.client.cast({}, 'delete_pool', **payload)
@ -126,7 +129,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.MEMBER_ID: member.member_id}
self.client.cast({}, 'create_member', **payload)
def member_delete(self, member_id):
def member_delete(self, member):
member_id = member.member_id
payload = {consts.MEMBER_ID: member_id}
self.client.cast({}, 'delete_member', **payload)
@ -182,7 +186,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.HEALTH_MONITOR_ID: healthmonitor.healthmonitor_id}
self.client.cast({}, 'create_health_monitor', **payload)
def health_monitor_delete(self, healthmonitor_id):
def health_monitor_delete(self, healthmonitor):
healthmonitor_id = healthmonitor.healthmonitor_id
payload = {consts.HEALTH_MONITOR_ID: healthmonitor_id}
self.client.cast({}, 'delete_health_monitor', **payload)
@ -207,7 +212,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.L7POLICY_ID: l7policy.l7policy_id}
self.client.cast({}, 'create_l7policy', **payload)
def l7policy_delete(self, l7policy_id):
def l7policy_delete(self, l7policy):
l7policy_id = l7policy.l7policy_id
payload = {consts.L7POLICY_ID: l7policy_id}
self.client.cast({}, 'delete_l7policy', **payload)
@ -226,7 +232,8 @@ class AmphoraProviderDriver(driver_base.ProviderDriver):
payload = {consts.L7RULE_ID: l7rule.l7rule_id}
self.client.cast({}, 'create_l7rule', **payload)
def l7rule_delete(self, l7rule_id):
def l7rule_delete(self, l7rule):
l7rule_id = l7rule.l7rule_id
payload = {consts.L7RULE_ID: l7rule_id}
self.client.cast({}, 'delete_l7rule', **payload)

View File

@ -55,7 +55,8 @@ class NoopManager(object):
self.driverconfig[loadbalancer.loadbalancer_id] = (
loadbalancer, 'loadbalancer_create')
def loadbalancer_delete(self, loadbalancer_id, cascade=False):
def loadbalancer_delete(self, loadbalancer, cascade=False):
loadbalancer_id = loadbalancer.loadbalancer_id
LOG.debug('Provider %s no-op, loadbalancer_delete loadbalancer %s',
self.__class__.__name__, loadbalancer_id)
@ -83,7 +84,8 @@ class NoopManager(object):
self.driverconfig[listener.listener_id] = (listener, 'listener_create')
def listener_delete(self, listener_id):
def listener_delete(self, listener):
listener_id = listener.listener_id
LOG.debug('Provider %s no-op, listener_delete listener %s',
self.__class__.__name__, listener_id)
@ -102,7 +104,8 @@ class NoopManager(object):
self.driverconfig[pool.pool_id] = (pool, 'pool_create')
def pool_delete(self, pool_id):
def pool_delete(self, pool):
pool_id = pool.pool_id
LOG.debug('Provider %s no-op, pool_delete pool %s',
self.__class__.__name__, pool_id)
@ -121,7 +124,8 @@ class NoopManager(object):
self.driverconfig[member.member_id] = (member, 'member_create')
def member_delete(self, member_id):
def member_delete(self, member):
member_id = member.member_id
LOG.debug('Provider %s no-op, member_delete member %s',
self.__class__.__name__, member_id)
@ -149,7 +153,8 @@ class NoopManager(object):
self.driverconfig[healthmonitor.healthmonitor_id] = (
healthmonitor, 'health_monitor_create')
def health_monitor_delete(self, healthmonitor_id):
def health_monitor_delete(self, healthmonitor):
healthmonitor_id = healthmonitor.healthmonitor_id
LOG.debug('Provider %s no-op, health_monitor_delete healthmonitor %s',
self.__class__.__name__, healthmonitor_id)
@ -170,7 +175,8 @@ class NoopManager(object):
self.driverconfig[l7policy.l7policy_id] = (l7policy, 'l7policy_create')
def l7policy_delete(self, l7policy_id):
def l7policy_delete(self, l7policy):
l7policy_id = l7policy.l7policy_id
LOG.debug('Provider %s no-op, l7policy_delete l7policy %s',
self.__class__.__name__, l7policy_id)
@ -189,7 +195,8 @@ class NoopManager(object):
self.driverconfig[l7rule.l7rule_id] = (l7rule, 'l7rule_create')
def l7rule_delete(self, l7rule_id):
def l7rule_delete(self, l7rule):
l7rule_id = l7rule.l7rule_id
LOG.debug('Provider %s no-op, l7rule_delete l7rule %s',
self.__class__.__name__, l7rule_id)
@ -230,8 +237,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def loadbalancer_create(self, loadbalancer):
self.driver.loadbalancer_create(loadbalancer)
def loadbalancer_delete(self, loadbalancer_id, cascade=False):
self.driver.loadbalancer_delete(loadbalancer_id, cascade)
def loadbalancer_delete(self, loadbalancer, cascade=False):
self.driver.loadbalancer_delete(loadbalancer, cascade)
def loadbalancer_failover(self, loadbalancer_id):
self.driver.loadbalancer_failover(loadbalancer_id)
@ -243,8 +250,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def listener_create(self, listener):
self.driver.listener_create(listener)
def listener_delete(self, listener_id):
self.driver.listener_delete(listener_id)
def listener_delete(self, listener):
self.driver.listener_delete(listener)
def listener_update(self, listener):
self.driver.listener_update(listener)
@ -253,8 +260,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def pool_create(self, pool):
self.driver.pool_create(pool)
def pool_delete(self, pool_id):
self.driver.pool_delete(pool_id)
def pool_delete(self, pool):
self.driver.pool_delete(pool)
def pool_update(self, pool):
self.driver.pool_update(pool)
@ -263,8 +270,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def member_create(self, member):
self.driver.member_create(member)
def member_delete(self, member_id):
self.driver.member_delete(member_id)
def member_delete(self, member):
self.driver.member_delete(member)
def member_update(self, member):
self.driver.member_update(member)
@ -276,8 +283,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def health_monitor_create(self, healthmonitor):
self.driver.health_monitor_create(healthmonitor)
def health_monitor_delete(self, healthmonitor_id):
self.driver.health_monitor_delete(healthmonitor_id)
def health_monitor_delete(self, healthmonitor):
self.driver.health_monitor_delete(healthmonitor)
def health_monitor_update(self, healthmonitor):
self.driver.health_monitor_update(healthmonitor)
@ -286,8 +293,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def l7policy_create(self, l7policy):
self.driver.l7policy_create(l7policy)
def l7policy_delete(self, l7policy_id):
self.driver.l7policy_delete(l7policy_id)
def l7policy_delete(self, l7policy):
self.driver.l7policy_delete(l7policy)
def l7policy_update(self, l7policy):
self.driver.l7policy_update(l7policy)
@ -296,8 +303,8 @@ class NoopProviderDriver(driver_base.ProviderDriver):
def l7rule_create(self, l7rule):
self.driver.l7rule_create(l7rule)
def l7rule_delete(self, l7rule_id):
self.driver.l7rule_delete(l7rule_id)
def l7rule_delete(self, l7rule):
self.driver.l7rule_delete(l7rule)
def l7rule_update(self, l7rule):
self.driver.l7rule_update(l7rule)

View File

@ -65,11 +65,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'load balancers. What?')
def loadbalancer_delete(self, loadbalancer_id, cascade=False):
def loadbalancer_delete(self, loadbalancer, cascade=False):
"""Deletes a load balancer.
:param loadbalancer_id: ID of the load balancer to delete.
:type loadbalancer_id: string
:param loadbalancer: The load balancer to delete.
:type loadbalancer: object
:param cascade: If True, deletes all child objects (listeners,
pools, etc.) in addition to the load balancer.
:type cascade: bool
@ -133,11 +133,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'listeners.')
def listener_delete(self, listener_id):
def listener_delete(self, listener):
"""Deletes a listener.
:param listener_id: ID of the listener to delete.
:type listener_id: string
:param listener: The listener to delete.
:type listener: object
:return: Nothing if the delete request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.
@ -183,11 +183,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'pools.')
def pool_delete(self, pool_id):
def pool_delete(self, pool):
"""Deletes a pool and its members.
:param pool_id: ID of the pool to delete.
:type pool_id: string
:param pool: The pool to delete.
:type pool: object
:return: Nothing if the create request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.
@ -233,11 +233,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'members.')
def member_delete(self, member_id):
def member_delete(self, member):
"""Deletes a pool member.
:param member_id: ID of the member to delete.
:type member_id: string
:param member: The member to delete.
:type member: object
:return: Nothing if the create request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.
@ -300,11 +300,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'health monitors.')
def health_monitor_delete(self, healthmonitor_id):
def health_monitor_delete(self, healthmonitor):
"""Deletes a healthmonitor_id.
:param healthmonitor_id: ID of the monitor to delete.
:type healthmonitor_id: string
:param healthmonitor: The monitor to delete.
:type healthmonitor: object
:return: Nothing if the create request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.
@ -350,11 +350,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'l7policies.')
def l7policy_delete(self, l7policy_id):
def l7policy_delete(self, l7policy):
"""Deletes an L7 policy.
:param l7policy_id: ID of the L7 policy to delete.
:type l7policy_id: string
:param l7policy: The L7 policy to delete.
:type l7policy: object
:return: Nothing if the delete request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.
@ -400,11 +400,11 @@ class ProviderDriver(object):
operator_fault_string='This provider does not support creating '
'l7rules.')
def l7rule_delete(self, l7rule_id):
def l7rule_delete(self, l7rule):
"""Deletes an L7 rule.
:param l7rule_id: ID of the L7 rule to delete.
:type l7rule_id: string
:param l7rule: The L7 rule to delete.
:type l7rule: object
:return: Nothing if the delete request was accepted.
:raises DriverError: An unexpected error occurred in the driver.
:raises NotImplementedError: if driver does not support request.

View File

@ -110,6 +110,19 @@ def lb_dict_to_provider_dict(lb_dict, vip=None,
return new_lb_dict
def db_loadbalancer_to_provider_loadbalancer(db_loadbalancer):
new_loadbalancer_dict = lb_dict_to_provider_dict(
db_loadbalancer.to_dict(recurse=True),
db_pools=db_loadbalancer.pools,
db_listeners=db_loadbalancer.listeners)
for unsupported_field in ['server_group_id', 'amphorae',
'vrrp_group', 'topology', 'vip']:
del new_loadbalancer_dict[unsupported_field]
provider_loadbalancer = driver_dm.LoadBalancer.from_dict(
new_loadbalancer_dict)
return provider_loadbalancer
def db_listeners_to_provider_listeners(db_listeners):
provider_listeners = []
for listener in db_listeners:

View File

@ -317,5 +317,6 @@ class HealthMonitorController(base.BaseController):
LOG.info("Sending delete Health Monitor %s to provider %s",
id, driver.name)
provider_healthmon = driver_utils.db_HM_to_provider_HM(db_hm)
driver_utils.call_provider(
driver.name, driver.health_monitor_delete, id)
driver.name, driver.health_monitor_delete, provider_healthmon)

View File

@ -288,7 +288,10 @@ class L7PolicyController(base.BaseController):
LOG.info("Sending delete L7 Policy %s to provider %s",
id, driver.name)
driver_utils.call_provider(driver.name, driver.l7policy_delete, id)
provider_l7policy = driver_utils.db_l7policy_to_provider_l7policy(
db_l7policy)
driver_utils.call_provider(driver.name, driver.l7policy_delete,
provider_l7policy)
@pecan.expose()
def _lookup(self, l7policy_id, *remainder):

View File

@ -287,4 +287,7 @@ class L7RuleController(base.BaseController):
LOG.info("Sending delete L7 Rule %s to provider %s", id,
driver.name)
driver_utils.call_provider(driver.name, driver.l7rule_delete, id)
provider_l7rule = (
driver_utils.db_l7rule_to_provider_l7rule(db_l7rule))
driver_utils.call_provider(driver.name, driver.l7rule_delete,
provider_l7rule)

View File

@ -368,7 +368,10 @@ class ListenersController(base.BaseController):
LOG.info("Sending delete Listener %s to provider %s", id,
driver.name)
driver_utils.call_provider(driver.name, driver.listener_delete, id)
provider_listener = (
driver_utils.db_listener_to_provider_listener(db_listener))
driver_utils.call_provider(driver.name, driver.listener_delete,
provider_listener)
@pecan.expose()
def _lookup(self, id, *remainder):

View File

@ -522,8 +522,10 @@ class LoadBalancersController(base.BaseController):
LOG.info("Sending delete Load Balancer %s to provider %s",
id, driver.name)
provider_loadbalancer = (
driver_utils.db_loadbalancer_to_provider_loadbalancer(db_lb))
driver_utils.call_provider(driver.name, driver.loadbalancer_delete,
id, cascade)
provider_loadbalancer, cascade)
@pecan.expose()
def _lookup(self, id, *remainder):

View File

@ -269,7 +269,10 @@ class MemberController(base.BaseController):
LOG.info("Sending delete Member %s to provider %s", id,
driver.name)
driver_utils.call_provider(driver.name, driver.member_delete, id)
provider_member = (
driver_utils.db_member_to_provider_member(db_member))
driver_utils.call_provider(driver.name, driver.member_delete,
provider_member)
class MembersController(MemberController):

View File

@ -327,7 +327,10 @@ class PoolsController(base.BaseController):
provisioning_status=constants.PENDING_DELETE)
LOG.info("Sending delete Pool %s to provider %s", id, driver.name)
driver_utils.call_provider(driver.name, driver.pool_delete, id)
provider_pool = (
driver_utils.db_pool_to_provider_pool(db_pool))
driver_utils.call_provider(driver.name, driver.pool_delete,
provider_pool)
@pecan.expose()
def _lookup(self, pool_id, *remainder):

View File

@ -64,7 +64,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_loadbalancer_delete(self, mock_cast):
self.amp_driver.loadbalancer_delete(self.sample_data.lb_id)
provider_lb = driver_dm.LoadBalancer(
loadbalancer_id=self.sample_data.lb_id)
self.amp_driver.loadbalancer_delete(provider_lb)
payload = {consts.LOAD_BALANCER_ID: self.sample_data.lb_id,
'cascade': False}
mock_cast.assert_called_with({}, 'delete_load_balancer', **payload)
@ -106,7 +108,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_listener_delete(self, mock_cast):
self.amp_driver.listener_delete(self.sample_data.listener1_id)
provider_listener = driver_dm.Listener(
listener_id=self.sample_data.listener1_id)
self.amp_driver.listener_delete(provider_listener)
payload = {consts.LISTENER_ID: self.sample_data.listener1_id}
mock_cast.assert_called_with({}, 'delete_listener', **payload)
@ -141,7 +145,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_pool_delete(self, mock_cast):
self.amp_driver.pool_delete(self.sample_data.pool1_id)
provider_pool = driver_dm.Pool(
pool_id=self.sample_data.pool1_id)
self.amp_driver.pool_delete(provider_pool)
payload = {consts.POOL_ID: self.sample_data.pool1_id}
mock_cast.assert_called_with({}, 'delete_pool', **payload)
@ -176,7 +182,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_member_delete(self, mock_cast):
self.amp_driver.member_delete(self.sample_data.member1_id)
provider_member = driver_dm.Member(
member_id=self.sample_data.member1_id)
self.amp_driver.member_delete(provider_member)
payload = {consts.MEMBER_ID: self.sample_data.member1_id}
mock_cast.assert_called_with({}, 'delete_member', **payload)
@ -280,7 +288,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_health_monitor_delete(self, mock_cast):
self.amp_driver.health_monitor_delete(self.sample_data.hm1_id)
provider_HM = driver_dm.HealthMonitor(
healthmonitor_id=self.sample_data.hm1_id)
self.amp_driver.health_monitor_delete(provider_HM)
payload = {consts.HEALTH_MONITOR_ID: self.sample_data.hm1_id}
mock_cast.assert_called_with({}, 'delete_health_monitor', **payload)
@ -316,7 +326,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_l7policy_delete(self, mock_cast):
self.amp_driver.l7policy_delete(self.sample_data.l7policy1_id)
provider_l7policy = driver_dm.L7Policy(
l7policy_id=self.sample_data.l7policy1_id)
self.amp_driver.l7policy_delete(provider_l7policy)
payload = {consts.L7POLICY_ID: self.sample_data.l7policy1_id}
mock_cast.assert_called_with({}, 'delete_l7policy', **payload)
@ -351,7 +363,9 @@ class TestAmphoraDriver(base.TestCase):
@mock.patch('oslo_messaging.RPCClient.cast')
def test_l7rule_delete(self, mock_cast):
self.amp_driver.l7rule_delete(self.sample_data.l7rule1_id)
provider_l7rule = driver_dm.L7Rule(
l7rule_id=self.sample_data.l7rule1_id)
self.amp_driver.l7rule_delete(provider_l7rule)
payload = {consts.L7RULE_ID: self.sample_data.l7rule1_id}
mock_cast.assert_called_with({}, 'delete_l7rule', **payload)

View File

@ -158,7 +158,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.loadbalancer_id])
def test_loadbalancer_delete(self):
self.driver.loadbalancer_delete(self.loadbalancer_id, cascade=True)
self.driver.loadbalancer_delete(self.ref_lb, cascade=True)
self.assertEqual((self.loadbalancer_id, True, 'loadbalancer_delete'),
self.driver.driver.driverconfig[self.loadbalancer_id])
@ -182,7 +182,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.listener_id])
def test_listener_delete(self):
self.driver.listener_delete(self.listener_id)
self.driver.listener_delete(self.ref_listener)
self.assertEqual((self.listener_id, 'listener_delete'),
self.driver.driver.driverconfig[self.listener_id])
@ -200,7 +200,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.pool_id])
def test_pool_delete(self):
self.driver.pool_delete(self.pool_id)
self.driver.pool_delete(self.ref_pool)
self.assertEqual((self.pool_id, 'pool_delete'),
self.driver.driver.driverconfig[self.pool_id])
@ -218,7 +218,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.member_id])
def test_member_delete(self):
self.driver.member_delete(self.member_id)
self.driver.member_delete(self.ref_member)
self.assertEqual((self.member_id, 'member_delete'),
self.driver.driver.driverconfig[self.member_id])
@ -243,7 +243,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.healthmonitor_id])
def test_health_monitor_delete(self):
self.driver.health_monitor_delete(self.healthmonitor_id)
self.driver.health_monitor_delete(self.ref_healthmonitor)
self.assertEqual(
(self.healthmonitor_id, 'health_monitor_delete'),
@ -263,7 +263,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.l7policy_id])
def test_l7policy_delete(self):
self.driver.l7policy_delete(self.l7policy_id)
self.driver.l7policy_delete(self.ref_l7policy)
self.assertEqual((self.l7policy_id, 'l7policy_delete'),
self.driver.driver.driverconfig[self.l7policy_id])
@ -281,7 +281,7 @@ class TestNoopProviderDriver(base.TestCase):
self.driver.driver.driverconfig[self.l7rule_id])
def test_l7rule_delete(self):
self.driver.l7rule_delete(self.l7rule_id)
self.driver.l7rule_delete(self.ref_l7rule)
self.assertEqual((self.l7rule_id, 'l7rule_delete'),
self.driver.driver.driverconfig[self.l7rule_id])

View File

@ -132,6 +132,14 @@ class TestUtils(base.TestCase):
self.assertEqual(ref_prov_lb_dict, provider_lb_dict)
def test_db_loadbalancer_to_provider_loadbalancer(self):
test_db_lb = data_models.LoadBalancer(id=1)
provider_lb = utils.db_loadbalancer_to_provider_loadbalancer(
test_db_lb)
ref_provider_lb = driver_dm.LoadBalancer(loadbalancer_id=1)
self.assertEqual(ref_provider_lb.to_dict(render_unsets=True),
provider_lb.to_dict(render_unsets=True))
def test_db_listener_to_provider_listener(self):
test_db_list = data_models.Listener(id=1)
provider_list = utils.db_listener_to_provider_listener(test_db_list)