diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 4e3a22a774..4821223a3f 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -331,11 +331,17 @@ class JobTemplate(UnifiedJobTemplate, JobOptions, SurveyJobTemplateMixin, Resour kwargs['_unified_job_field_names'] = WorkflowJobTemplate._get_unified_job_field_names() job = self.create_unified_job(**kwargs) if self.job_shard_count > 1: - for idx in xrange(self.job_shard_count): + if 'inventory' in kwargs: + actual_inventory = kwargs['inventory'] + else: + actual_inventory = self.inventory + for idx in xrange(min(self.job_shard_count, + actual_inventory.hosts.count())): create_kwargs = dict(workflow_job=job, unified_job_template=self, #survey_passwords=self.survey_passwords, - inventory=self.inventory) + inventory=actual_inventory, + ancestor_artifacts=dict(job_shard=idx)) #char_prompts=self.char_prompts) wfjn = WorkflowJobNode.objects.create(**create_kwargs) for cred in self.credentials.all(): diff --git a/awx/main/scheduler/task_manager.py b/awx/main/scheduler/task_manager.py index 08cb6cd247..a5bfccb967 100644 --- a/awx/main/scheduler/task_manager.py +++ b/awx/main/scheduler/task_manager.py @@ -117,6 +117,9 @@ class TaskManager(): continue kv = spawn_node.get_job_kwargs() job = spawn_node.unified_job_template.create_unified_job(**kv) + if 'job_shard' in spawn_node.ancestor_artifacts: + job.name = "{} - {}".format(job.name, spawn_node.ancestor_artifacts['job_shard'] + 1) + job.save() spawn_node.job = job spawn_node.save() logger.info('Spawned %s in %s for node %s', job.log_format, workflow_job.log_format, spawn_node.pk)