Add support for instance_groups and labels on schedule create

This commit is contained in:
Alan Rominger
2022-09-15 14:12:45 -04:00
parent 2369dc9621
commit 64dad61b29
2 changed files with 13 additions and 9 deletions

View File

@@ -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

View File

@@ -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