diff --git a/awx/main/models/rbac.py b/awx/main/models/rbac.py index c93792d23a..71e719ea08 100644 --- a/awx/main/models/rbac.py +++ b/awx/main/models/rbac.py @@ -689,9 +689,15 @@ def sync_parents_to_new_rbac(instance, action, model, pk_set, reverse, **kwargs) for role_id in pk_set: if reverse: - child_role = Role.objects.get(id=role_id) + try: + child_role = Role.objects.get(id=role_id) + except Role.DoesNotExist: + continue 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 # we only want to do anything if we know for sure this is a non-implicit team role diff --git a/awx/main/tests/functional/test_rbac_organization.py b/awx/main/tests/functional/test_rbac_organization.py index ddb0692ea3..7a07225d30 100644 --- a/awx/main/tests/functional/test_rbac_organization.py +++ b/awx/main/tests/functional/test_rbac_organization.py @@ -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 organization.member_role.members.add(rando) 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'])