check actionplan state when deleting actionplan
If actionplan is 'ONGOING' or 'PENDING', don't delete it. Change-Id: I8bfa31a70bba0a7adb1bfd09fc22e6a66b9ebf3a Closes-Bug: #1738360
This commit is contained in:
@@ -460,6 +460,15 @@ class ActionPlansController(rest.RestController):
|
|||||||
policy.enforce(context, 'action_plan:delete', action_plan,
|
policy.enforce(context, 'action_plan:delete', action_plan,
|
||||||
action='action_plan:delete')
|
action='action_plan:delete')
|
||||||
|
|
||||||
|
allowed_states = (ap_objects.State.SUCCEEDED,
|
||||||
|
ap_objects.State.RECOMMENDED,
|
||||||
|
ap_objects.State.FAILED,
|
||||||
|
ap_objects.State.SUPERSEDED,
|
||||||
|
ap_objects.State.CANCELLED)
|
||||||
|
if action_plan.state not in allowed_states:
|
||||||
|
raise exception.DeleteError(
|
||||||
|
state=action_plan.state)
|
||||||
|
|
||||||
action_plan.soft_delete()
|
action_plan.soft_delete()
|
||||||
|
|
||||||
@wsme.validate(types.uuid, [ActionPlanPatchType])
|
@wsme.validate(types.uuid, [ActionPlanPatchType])
|
||||||
|
|||||||
@@ -296,6 +296,8 @@ class TestListAction(api_base.FunctionalTest):
|
|||||||
uuid=utils.generate_uuid())
|
uuid=utils.generate_uuid())
|
||||||
ap2_action_list.append(action)
|
ap2_action_list.append(action)
|
||||||
|
|
||||||
|
action_plan1.state = objects.action_plan.State.CANCELLED
|
||||||
|
action_plan1.save()
|
||||||
self.delete('/action_plans/%s' % action_plan1.uuid)
|
self.delete('/action_plans/%s' % action_plan1.uuid)
|
||||||
|
|
||||||
response = self.get_json('/actions')
|
response = self.get_json('/actions')
|
||||||
|
|||||||
@@ -309,6 +309,13 @@ class TestDelete(api_base.FunctionalTest):
|
|||||||
action_plan.destroy()
|
action_plan.destroy()
|
||||||
|
|
||||||
def test_delete_action_plan_without_action(self):
|
def test_delete_action_plan_without_action(self):
|
||||||
|
response = self.delete('/action_plans/%s' % self.action_plan.uuid,
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual(400, response.status_int)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertTrue(response.json['error_message'])
|
||||||
|
self.action_plan.state = objects.action_plan.State.SUCCEEDED
|
||||||
|
self.action_plan.save()
|
||||||
self.delete('/action_plans/%s' % self.action_plan.uuid)
|
self.delete('/action_plans/%s' % self.action_plan.uuid)
|
||||||
response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
||||||
expect_errors=True)
|
expect_errors=True)
|
||||||
@@ -320,6 +327,8 @@ class TestDelete(api_base.FunctionalTest):
|
|||||||
action = obj_utils.create_test_action(
|
action = obj_utils.create_test_action(
|
||||||
self.context, id=1)
|
self.context, id=1)
|
||||||
|
|
||||||
|
self.action_plan.state = objects.action_plan.State.SUCCEEDED
|
||||||
|
self.action_plan.save()
|
||||||
self.delete('/action_plans/%s' % self.action_plan.uuid)
|
self.delete('/action_plans/%s' % self.action_plan.uuid)
|
||||||
ap_response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
ap_response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
||||||
expect_errors=True)
|
expect_errors=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user