From d39b931377825ec754d357ddc38e996388d7d844 Mon Sep 17 00:00:00 2001 From: Rebeccah Date: Tue, 10 Sep 2019 21:27:50 -0400 Subject: [PATCH 1/3] added in logic to check if the parent workflow has a schedule and onsolidated a couple import statements --- awx/main/models/unified_jobs.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 76696deac0..dc01e6263f 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -42,9 +42,9 @@ from awx.main.utils import ( camelcase_to_underscore, get_model_for_type, encrypt_dict, decrypt_field, _inventory_updates, copy_model_by_class, copy_m2m_relationships, - get_type_for_model, parse_yaml_or_json, getattr_dne + get_type_for_model, parse_yaml_or_json, getattr_dne, + polymorphic, schedule_task_manager ) -from awx.main.utils import polymorphic, schedule_task_manager from awx.main.constants import ACTIVE_STATES, CAN_CANCEL from awx.main.redact import UriCleaner, REPLACE_STR from awx.main.consumers import emit_channel_notification @@ -1386,9 +1386,13 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique wj = self.get_workflow_job() if wj: + schedule = getattr_dne(wj, 'schedule') for name in ('awx', 'tower'): r['{}_workflow_job_id'.format(name)] = wj.pk r['{}_workflow_job_name'.format(name)] = wj.name + if schedule: + r['{}_parent_job_schedule_id'.format(name)] = wj.schedule.pk + r['{}_parent_job_schedule_name'.format(name)] = wj.schedule.name if not created_by: schedule = getattr_dne(self, 'schedule') From 5fab9e418bacafee6a449ca688f30f967ef172be Mon Sep 17 00:00:00 2001 From: Rebeccah Date: Thu, 12 Sep 2019 11:32:22 -0400 Subject: [PATCH 2/3] added functional test to test new schedule functionality --- .../functional/models/test_unified_job.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/awx/main/tests/functional/models/test_unified_job.py b/awx/main/tests/functional/models/test_unified_job.py index 0db76aac4c..4d0418c498 100644 --- a/awx/main/tests/functional/models/test_unified_job.py +++ b/awx/main/tests/functional/models/test_unified_job.py @@ -147,6 +147,39 @@ class TestMetaVars: assert data['awx_schedule_id'] == schedule.pk assert 'awx_user_name' not in data + def test_scheduled_workflow_job_node_metavars(self, workflow_job_template): + schedule = Schedule.objects.create( + name='job-schedule', + rrule='DTSTART:20171129T155939z\nFREQ=MONTHLY', + unified_job_template=workflow_job_template + ) + + workflow_job = WorkflowJob.objects.create( + name='workflow-job', + workflow_job_template=workflow_job_template, + schedule=schedule + ) + + job = Job.objects.create( + launch_type='workflow' + ) + workflow_job.workflow_nodes.create(job=job) + assert job.awx_meta_vars() == { + 'awx_job_id': job.id, + 'tower_job_id': job.id, + 'awx_job_launch_type': 'workflow', + 'tower_job_launch_type': 'workflow', + 'awx_workflow_job_name': 'workflow-job', + 'tower_workflow_job_name': 'workflow-job', + 'awx_workflow_job_id': workflow_job.id, + 'tower_workflow_job_id': workflow_job.id, + 'awx_parent_job_schedule_id': schedule.id, + 'tower_parent_job_schedule_id': schedule.id, + 'awx_parent_job_schedule_name': 'job-schedule', + 'tower_parent_job_schedule_name': 'job-schedule', + + } + @pytest.mark.django_db def test_event_processing_not_finished(): From fbf182de284e338db9e292e4d01204192a029a7c Mon Sep 17 00:00:00 2001 From: Rebeccah Date: Thu, 12 Sep 2019 14:19:32 -0400 Subject: [PATCH 3/3] removed refernce to workflow job in parent schedule naming as it is unnecessary --- awx/main/models/unified_jobs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index dc01e6263f..b8dd1d1cf8 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -1391,8 +1391,8 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique r['{}_workflow_job_id'.format(name)] = wj.pk r['{}_workflow_job_name'.format(name)] = wj.name if schedule: - r['{}_parent_job_schedule_id'.format(name)] = wj.schedule.pk - r['{}_parent_job_schedule_name'.format(name)] = wj.schedule.name + r['{}_parent_job_schedule_id'.format(name)] = schedule.pk + r['{}_parent_job_schedule_name'.format(name)] = schedule.name if not created_by: schedule = getattr_dne(self, 'schedule')