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:
parent
b69244f8ef
commit
cdc847d352
|
@ -460,6 +460,15 @@ class ActionPlansController(rest.RestController):
|
|||
policy.enforce(context, 'action_plan:delete', action_plan,
|
||||
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()
|
||||
|
||||
@wsme.validate(types.uuid, [ActionPlanPatchType])
|
||||
|
|
|
@ -296,6 +296,8 @@ class TestListAction(api_base.FunctionalTest):
|
|||
uuid=utils.generate_uuid())
|
||||
ap2_action_list.append(action)
|
||||
|
||||
action_plan1.state = objects.action_plan.State.CANCELLED
|
||||
action_plan1.save()
|
||||
self.delete('/action_plans/%s' % action_plan1.uuid)
|
||||
|
||||
response = self.get_json('/actions')
|
||||
|
|
|
@ -309,6 +309,13 @@ class TestDelete(api_base.FunctionalTest):
|
|||
action_plan.destroy()
|
||||
|
||||
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)
|
||||
response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
||||
expect_errors=True)
|
||||
|
@ -320,6 +327,8 @@ class TestDelete(api_base.FunctionalTest):
|
|||
action = obj_utils.create_test_action(
|
||||
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)
|
||||
ap_response = self.get_json('/action_plans/%s' % self.action_plan.uuid,
|
||||
expect_errors=True)
|
||||
|
|
Loading…
Reference in New Issue