mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 18:07:36 -02:30
Implement a flag that allows simulteanous job launches on job templates
This commit is contained in:
@@ -1755,7 +1755,7 @@ class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer):
|
|||||||
model = JobTemplate
|
model = JobTemplate
|
||||||
fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'ask_limit_on_launch',
|
fields = ('*', 'host_config_key', 'ask_variables_on_launch', 'ask_limit_on_launch',
|
||||||
'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch',
|
'ask_tags_on_launch', 'ask_job_type_on_launch', 'ask_inventory_on_launch',
|
||||||
'ask_credential_on_launch', 'survey_enabled', 'become_enabled')
|
'ask_credential_on_launch', 'survey_enabled', 'become_enabled', 'allow_simultaneous')
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
res = super(JobTemplateSerializer, self).get_related(obj)
|
res = super(JobTemplateSerializer, self).get_related(obj)
|
||||||
|
|||||||
19
awx/main/migrations/0024_v300_jobtemplate_allow_simul.py
Normal file
19
awx/main/migrations/0024_v300_jobtemplate_allow_simul.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('main', '0023_v300_activity_stream_ordering'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='jobtemplate',
|
||||||
|
name='allow_simultaneous',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -229,6 +229,10 @@ class JobTemplate(UnifiedJobTemplate, JobOptions, ResourceMixin):
|
|||||||
read_role = ImplicitRoleField(
|
read_role = ImplicitRoleField(
|
||||||
parent_role=['project.organization.auditor_role', 'inventory.organization.auditor_role', 'execute_role', 'admin_role'],
|
parent_role=['project.organization.auditor_role', 'inventory.organization.auditor_role', 'execute_role', 'admin_role'],
|
||||||
)
|
)
|
||||||
|
allow_simultaneous = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _get_unified_job_class(cls):
|
def _get_unified_job_class(cls):
|
||||||
@@ -580,6 +584,8 @@ class Job(UnifiedJob, JobOptions):
|
|||||||
if obj.job_template is not None and obj.inventory is not None:
|
if obj.job_template is not None and obj.inventory is not None:
|
||||||
if obj.job_template == self.job_template and \
|
if obj.job_template == self.job_template and \
|
||||||
obj.inventory == self.inventory:
|
obj.inventory == self.inventory:
|
||||||
|
if self.job_template.allow_simultaneous:
|
||||||
|
return False
|
||||||
if obj.launch_type == 'callback' and self.launch_type == 'callback' and \
|
if obj.launch_type == 'callback' and self.launch_type == 'callback' and \
|
||||||
obj.limit != self.limit:
|
obj.limit != self.limit:
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -22,3 +22,16 @@ def test_job_blocking(get, post, job_template, inventory, inventory_factory):
|
|||||||
assert j_callback_1.is_blocked_by(j_callback_2)
|
assert j_callback_1.is_blocked_by(j_callback_2)
|
||||||
j_callback_2.limit = 'b'
|
j_callback_2.limit = 'b'
|
||||||
assert not j_callback_1.is_blocked_by(j_callback_2)
|
assert not j_callback_1.is_blocked_by(j_callback_2)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_job_blocking_allow_simul(get, post, job_template, inventory):
|
||||||
|
job_template.allow_simultaneous = True
|
||||||
|
j1 = Job.objects.create(job_template=job_template,
|
||||||
|
inventory=inventory)
|
||||||
|
j2 = Job.objects.create(job_template=job_template,
|
||||||
|
inventory=inventory)
|
||||||
|
assert not j1.is_blocked_by(j2)
|
||||||
|
assert not j2.is_blocked_by(j1)
|
||||||
|
job_template.allow_simultaneous = False
|
||||||
|
assert j1.is_blocked_by(j2)
|
||||||
|
assert j2.is_blocked_by(j1)
|
||||||
|
|||||||
Reference in New Issue
Block a user