From 64dad61b2921181440cf360f32102fbb6ccd8348 Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Thu, 15 Sep 2022 14:12:45 -0400 Subject: [PATCH] Add support for instance_groups and labels on schedule create --- awx/api/serializers.py | 13 ++++++------- awx/api/views/__init__.py | 9 +++++++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 4059df26d6..cd3ef7a63a 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -3218,13 +3218,12 @@ class JobCreateScheduleSerializer(LabelsListMixin, BaseSerializer): try: config = obj.launch_config ret = config.prompts_dict(display=True) - if 'inventory' in ret: - ret['inventory'] = self._summarize('inventory', ret['inventory']) - if 'execution_environment' in ret: - ret['execution_environment'] = self._summarize('execution_environment', ret['execution_environment']) - if 'credentials' in ret: - all_creds = [self._summarize('credential', cred) for cred in ret['credentials']] - ret['credentials'] = all_creds + for field_name in ('inventory', 'execution_environment'): + if field_name in ret: + ret[field_name] = self._summarize(field_name, ret[field_name]) + for field_name, singular in (('credentials', 'credential'), ('instance_groups', 'instance_group')): + if field_name in ret: + ret[field_name] = [self._summarize(singular, cred) for cred in ret[field_name]] if 'labels' in ret: ret['labels'] = self._summary_field_labels(obj) return ret diff --git a/awx/api/views/__init__.py b/awx/api/views/__init__.py index 1a43a0bc2d..1b6e8eadde 100644 --- a/awx/api/views/__init__.py +++ b/awx/api/views/__init__.py @@ -3728,13 +3728,18 @@ class JobCreateSchedule(RetrieveAPIView): inventory=config.inventory, char_prompts=config.char_prompts, credentials=set(config.credentials.all()), + labels=set(config.labels.all()), + instance_groups=list(config.instance_groups.all()), ) if not request.user.can_access(models.Schedule, 'add', schedule_data): raise PermissionDenied() - creds_list = schedule_data.pop('credentials') + related_fields = ('credentials', 'labels', 'instance_groups') + related = [schedule_data.pop(relationship) for relationship in related_fields] schedule = models.Schedule.objects.create(**schedule_data) - schedule.credentials.add(*creds_list) + for relationship, items in zip(related_fields, related): + for item in items: + getattr(schedule, relationship).add(item) data = serializers.ScheduleSerializer(schedule, context=self.get_serializer_context()).data data.serializer.instance = None # hack to avoid permissions.py assuming this is Job model