diff --git a/octavia/controller/queue/v2/endpoints.py b/octavia/controller/queue/v2/endpoints.py index 008cd2a44d..991985e102 100644 --- a/octavia/controller/queue/v2/endpoints.py +++ b/octavia/controller/queue/v2/endpoints.py @@ -168,3 +168,7 @@ class Endpoints(object): LOG.info('Updating amphora \'%s\' agent configuration...', amphora_id) self.worker.update_amphora_agent_config(amphora_id) + + def delete_amphora(self, context, amphora_id): + LOG.info('Deleting amphora \'%s\'...', amphora_id) + self.worker.delete_amphora(amphora_id) diff --git a/octavia/controller/worker/v2/controller_worker.py b/octavia/controller/worker/v2/controller_worker.py index 1d2d68602f..70e78ebca1 100644 --- a/octavia/controller/worker/v2/controller_worker.py +++ b/octavia/controller/worker/v2/controller_worker.py @@ -137,12 +137,18 @@ class ControllerWorker(object): :returns: None :raises AmphoraNotFound: The referenced Amphora was not found """ - amphora = self._amphora_repo.get(db_apis.get_session(), - id=amphora_id) - store = {constants.AMPHORA: amphora.to_dict()} - self.run_flow( - flow_utils.get_delete_amphora_flow, - store=store) + try: + amphora = self._amphora_repo.get(db_apis.get_session(), + id=amphora_id) + store = {constants.AMPHORA: amphora.to_dict()} + self.run_flow( + flow_utils.get_delete_amphora_flow, + store=store) + except Exception as e: + LOG.error('Failed to delete a amphora {0} due to: {1}'.format( + amphora_id, str(e))) + return + LOG.info('Finished deleting amphora %s.', amphora_id) @tenacity.retry( retry=tenacity.retry_if_exception_type(db_exceptions.NoResultFound), diff --git a/octavia/tests/unit/controller/queue/v2/test_endpoints.py b/octavia/tests/unit/controller/queue/v2/test_endpoints.py index 6f066004e4..c871139039 100644 --- a/octavia/tests/unit/controller/queue/v2/test_endpoints.py +++ b/octavia/tests/unit/controller/queue/v2/test_endpoints.py @@ -189,3 +189,8 @@ class TestEndpoints(base.TestCase): self.ep.update_amphora_agent_config(self.context, self.resource) self.ep.worker.update_amphora_agent_config.assert_called_once_with( self.resource) + + def test_delete_amphora(self): + self.ep.delete_amphora(self.context, self.resource_id) + self.ep.worker.delete_amphora.assert_called_once_with( + self.resource_id) diff --git a/octavia/tests/unit/controller/worker/v2/test_controller_worker.py b/octavia/tests/unit/controller/worker/v2/test_controller_worker.py index e502142c09..c5042cfc13 100644 --- a/octavia/tests/unit/controller/worker/v2/test_controller_worker.py +++ b/octavia/tests/unit/controller/worker/v2/test_controller_worker.py @@ -197,6 +197,33 @@ class TestControllerWorker(base.TestCase): constants.SERVER_GROUP_ID: None, constants.AVAILABILITY_ZONE: None})) + @mock.patch('octavia.controller.worker.v2.flows.' + 'amphora_flows.AmphoraFlows.get_delete_amphora_flow', + return_value='TEST') + def test_delete_amphora(self, + mock_get_delete_amp_flow, + mock_api_get_session, + mock_dyn_log_listener, + mock_taskflow_load, + mock_pool_repo_get, + mock_member_repo_get, + mock_l7rule_repo_get, + mock_l7policy_repo_get, + mock_listener_repo_get, + mock_lb_repo_get, + mock_health_mon_repo_get, + mock_amp_repo_get): + + _flow_mock.reset_mock() + + cw = controller_worker.ControllerWorker() + cw.delete_amphora(AMP_ID) + + (cw.services_controller.run_poster. + assert_called_once_with( + flow_utils.get_delete_amphora_flow, + store={constants.AMPHORA: _db_amphora_mock.to_dict()})) + @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.' 'get_availability_zone_metadata_dict') @mock.patch('octavia.controller.worker.v2.flows.'