mirror of
https://github.com/ansible/awx.git
synced 2026-01-09 23:12:08 -03:30
Allow deleting org of a running workflow job (#15374)
Old RBAC system hits DOESNOTEXIST query errors if a user deletes an org while a workflow job is active. The error is triggered by 1. starting workflow job 2. delete the org that the workflow job is a part of 3. The workflow changes status (e.g. pending to waiting) This error message would surface awx.main.models.rbac.Role.DoesNotExist: Role matching query does not exist. The fix is wrap the query in a try catch, and skip over some logic if the roles don't exist. --------- Signed-off-by: Seth Foster <fosterbseth@gmail.com>
This commit is contained in:
parent
f1448fced1
commit
853730acb9
@ -689,9 +689,15 @@ def sync_parents_to_new_rbac(instance, action, model, pk_set, reverse, **kwargs)
|
|||||||
|
|
||||||
for role_id in pk_set:
|
for role_id in pk_set:
|
||||||
if reverse:
|
if reverse:
|
||||||
child_role = Role.objects.get(id=role_id)
|
try:
|
||||||
|
child_role = Role.objects.get(id=role_id)
|
||||||
|
except Role.DoesNotExist:
|
||||||
|
continue
|
||||||
else:
|
else:
|
||||||
parent_role = Role.objects.get(id=role_id)
|
try:
|
||||||
|
parent_role = Role.objects.get(id=role_id)
|
||||||
|
except Role.DoesNotExist:
|
||||||
|
continue
|
||||||
|
|
||||||
# To a fault, we want to avoid running this if triggered from implicit_parents management
|
# To a fault, we want to avoid running this if triggered from implicit_parents management
|
||||||
# we only want to do anything if we know for sure this is a non-implicit team role
|
# we only want to do anything if we know for sure this is a non-implicit team role
|
||||||
|
|||||||
@ -48,3 +48,17 @@ def test_org_resource_role(ext_auth, organization, rando, org_admin):
|
|||||||
assert access.can_attach(organization, rando, 'member_role.members') == ext_auth
|
assert access.can_attach(organization, rando, 'member_role.members') == ext_auth
|
||||||
organization.member_role.members.add(rando)
|
organization.member_role.members.add(rando)
|
||||||
assert access.can_unattach(organization, rando, 'member_role.members') == ext_auth
|
assert access.can_unattach(organization, rando, 'member_role.members') == ext_auth
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_delete_org_while_workflow_active(workflow_job_template):
|
||||||
|
'''
|
||||||
|
Delete org while workflow job is active (i.e. changing status)
|
||||||
|
'''
|
||||||
|
assert workflow_job_template.organization # sanity check
|
||||||
|
wj = workflow_job_template.create_unified_job() # status should be new
|
||||||
|
workflow_job_template.organization.delete()
|
||||||
|
wj.refresh_from_db()
|
||||||
|
assert wj.status != 'pending' # sanity check
|
||||||
|
wj.status = 'pending' # status needs to change in order to trigger workflow_job_template.save()
|
||||||
|
wj.save(update_fields=['status'])
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user