mirror of
https://github.com/ansible/awx.git
synced 2026-01-14 03:10:42 -03:30
Merge pull request #6266 from AlanCoding/ig_ordering
Instance group preference order consistent with docs
This commit is contained in:
commit
22249b2625
@ -203,6 +203,19 @@ class AdHocCommand(UnifiedJob, JobNotificationMixin):
|
||||
update_fields.append('name')
|
||||
super(AdHocCommand, self).save(*args, **kwargs)
|
||||
|
||||
@property
|
||||
def preferred_instance_groups(self):
|
||||
if self.inventory is not None and self.inventory.organization is not None:
|
||||
organization_groups = [x for x in self.inventory.organization.instance_groups.all()]
|
||||
else:
|
||||
organization_groups = []
|
||||
if self.inventory is not None:
|
||||
inventory_groups = [x for x in self.inventory.instance_groups.all()]
|
||||
selected_groups = inventory_groups + organization_groups
|
||||
if not selected_groups:
|
||||
return self.global_instance_groups
|
||||
return selected_groups
|
||||
|
||||
'''
|
||||
JobNotificationMixin
|
||||
'''
|
||||
|
||||
@ -1379,7 +1379,10 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin):
|
||||
if self.inventory_source.inventory is not None:
|
||||
inventory_groups = [x for x in self.inventory_source.inventory.instance_groups.all()]
|
||||
template_groups = [x for x in super(InventoryUpdate, self).preferred_instance_groups]
|
||||
return template_groups + inventory_groups + organization_groups
|
||||
selected_groups = template_groups + inventory_groups + organization_groups
|
||||
if not selected_groups:
|
||||
return self.global_instance_groups
|
||||
return selected_groups
|
||||
|
||||
def _build_job_explanation(self):
|
||||
if not self.job_explanation:
|
||||
|
||||
@ -669,7 +669,7 @@ class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin):
|
||||
template_groups = []
|
||||
selected_groups = template_groups + inventory_groups + organization_groups
|
||||
if not selected_groups:
|
||||
return super(Job, self).preferred_instance_groups
|
||||
return self.global_instance_groups
|
||||
return selected_groups
|
||||
|
||||
# Job Credential required
|
||||
|
||||
@ -524,4 +524,7 @@ class ProjectUpdate(UnifiedJob, ProjectOptions, JobNotificationMixin):
|
||||
else:
|
||||
organization_groups = []
|
||||
template_groups = [x for x in super(ProjectUpdate, self).preferred_instance_groups]
|
||||
return template_groups + organization_groups
|
||||
selected_groups = template_groups + organization_groups
|
||||
if not selected_groups:
|
||||
return self.global_instance_groups
|
||||
return selected_groups
|
||||
|
||||
@ -1066,9 +1066,15 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
|
||||
'''
|
||||
Return Instance/Rampart Groups preferred by this unified job templates
|
||||
'''
|
||||
if not self.unified_job_template:
|
||||
return []
|
||||
template_groups = [x for x in self.unified_job_template.instance_groups.all()]
|
||||
return template_groups
|
||||
|
||||
@property
|
||||
def global_instance_groups(self):
|
||||
from awx.main.models.ha import InstanceGroup
|
||||
default_instance_group = InstanceGroup.objects.filter(name='tower')
|
||||
template_groups = [x for x in self.unified_job_template.instance_groups.all()]
|
||||
if not template_groups and default_instance_group.exists():
|
||||
if default_instance_group.exists():
|
||||
return [default_instance_group.first()]
|
||||
return template_groups
|
||||
return []
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import pytest
|
||||
|
||||
from awx.main.models import AdHocCommand, InventoryUpdate, Job, JobTemplate, ProjectUpdate
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_default_tower_instance_group(default_instance_group, job_factory):
|
||||
@ -38,3 +40,52 @@ def test_instance_group_capacity(instance_factory, instance_group_factory):
|
||||
assert ig_all.capacity == 300
|
||||
ig_single = instance_group_factory("single", instances=[i1])
|
||||
assert ig_single.capacity == 100
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestInstanceGroupOrdering:
|
||||
|
||||
def test_ad_hoc_instance_groups(self, instance_group_factory, inventory, default_instance_group):
|
||||
ad_hoc = AdHocCommand.objects.create(inventory=inventory)
|
||||
assert ad_hoc.preferred_instance_groups == [default_instance_group]
|
||||
ig_org = instance_group_factory("OrgIstGrp", [default_instance_group.instances.first()])
|
||||
ig_inv = instance_group_factory("InvIstGrp", [default_instance_group.instances.first()])
|
||||
inventory.organization.instance_groups.add(ig_org)
|
||||
assert ad_hoc.preferred_instance_groups == [ig_org]
|
||||
inventory.instance_groups.add(ig_inv)
|
||||
assert ad_hoc.preferred_instance_groups == [ig_inv, ig_org]
|
||||
|
||||
def test_inventory_update_instance_groups(self, instance_group_factory, inventory_source, default_instance_group):
|
||||
iu = InventoryUpdate.objects.create(inventory_source=inventory_source)
|
||||
assert iu.preferred_instance_groups == [default_instance_group]
|
||||
ig_org = instance_group_factory("OrgIstGrp", [default_instance_group.instances.first()])
|
||||
ig_inv = instance_group_factory("InvIstGrp", [default_instance_group.instances.first()])
|
||||
ig_tmp = instance_group_factory("TmpIstGrp", [default_instance_group.instances.first()])
|
||||
inventory_source.inventory.organization.instance_groups.add(ig_org)
|
||||
inventory_source.inventory.instance_groups.add(ig_inv)
|
||||
assert iu.preferred_instance_groups == [ig_inv, ig_org]
|
||||
inventory_source.instance_groups.add(ig_tmp)
|
||||
assert iu.preferred_instance_groups == [ig_tmp, ig_inv, ig_org]
|
||||
|
||||
def test_project_update_instance_groups(self, instance_group_factory, project, default_instance_group):
|
||||
pu = ProjectUpdate.objects.create(project=project)
|
||||
assert pu.preferred_instance_groups == [default_instance_group]
|
||||
ig_org = instance_group_factory("OrgIstGrp", [default_instance_group.instances.first()])
|
||||
ig_tmp = instance_group_factory("TmpIstGrp", [default_instance_group.instances.first()])
|
||||
project.organization.instance_groups.add(ig_org)
|
||||
assert pu.preferred_instance_groups == [ig_org]
|
||||
project.instance_groups.add(ig_tmp)
|
||||
assert pu.preferred_instance_groups == [ig_tmp, ig_org]
|
||||
|
||||
def test_job_instance_groups(self, instance_group_factory, inventory, project, default_instance_group):
|
||||
jt = JobTemplate.objects.create(inventory=inventory, project=project)
|
||||
job = Job.objects.create(inventory=inventory, job_template=jt, project=project)
|
||||
assert job.preferred_instance_groups == [default_instance_group]
|
||||
ig_org = instance_group_factory("OrgIstGrp", [default_instance_group.instances.first()])
|
||||
ig_inv = instance_group_factory("InvIstGrp", [default_instance_group.instances.first()])
|
||||
ig_tmp = instance_group_factory("TmpIstGrp", [default_instance_group.instances.first()])
|
||||
project.organization.instance_groups.add(ig_org)
|
||||
inventory.instance_groups.add(ig_inv)
|
||||
assert job.preferred_instance_groups == [ig_inv, ig_org]
|
||||
job.job_template.instance_groups.add(ig_tmp)
|
||||
assert job.preferred_instance_groups == [ig_tmp, ig_inv, ig_org]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user