diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index f9f5d0a133..2cb2fd28af 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -1435,9 +1435,13 @@ class UnifiedJob( if not settings.IS_K8S: default_instance_group_names.append(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME) - default_instance_groups = InstanceGroup.objects.filter(name__in=default_instance_group_names) + default_instance_groups = list(InstanceGroup.objects.filter(name__in=default_instance_group_names)) - return list(default_instance_groups) + # assure deterministic precedence by making sure the default group is first + if (not settings.IS_K8S) and default_instance_groups and default_instance_groups[0].name != settings.DEFAULT_EXECUTION_QUEUE_NAME: + default_instance_groups.reverse() + + return default_instance_groups def awx_meta_vars(self): """ diff --git a/awx/main/tests/functional/test_instances.py b/awx/main/tests/functional/test_instances.py index bac6259694..a0a06b4ae5 100644 --- a/awx/main/tests/functional/test_instances.py +++ b/awx/main/tests/functional/test_instances.py @@ -301,6 +301,12 @@ def test_inherited_instance_group_membership(instance_group_factory, default_ins assert default_instance_group not in j.preferred_instance_groups +@pytest.mark.django_db +def test_global_instance_groups_as_defaults(controlplane_instance_group, default_instance_group, job_factory): + j = job_factory() + assert j.preferred_instance_groups == [default_instance_group, controlplane_instance_group] + + @pytest.mark.django_db def test_mixed_group_membership(instance_factory, instance_group_factory): for i in range(5):