diff --git a/awx/api/serializers.py b/awx/api/serializers.py index b4a9f33dd9..4059df26d6 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -3068,11 +3068,7 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): res['project_update'] = self.reverse('api:project_update_detail', kwargs={'pk': obj.project_update.pk}) except ObjectDoesNotExist: pass - try: - if obj.instance_groups: - res['instance_groups'] = self.reverse('api:job_instance_group_list', kwargs={'pk': obj.pk}) - except ObjectDoesNotExist: - pass + res['instance_groups'] = self.reverse('api:job_instance_group_list', kwargs={'pk': obj.pk}) res['relaunch'] = self.reverse('api:job_relaunch', kwargs={'pk': obj.pk}) return res @@ -3224,6 +3220,8 @@ class JobCreateScheduleSerializer(LabelsListMixin, BaseSerializer): 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 @@ -3636,7 +3634,6 @@ class LaunchConfigurationBaseSerializer(BaseSerializer): skip_tags = serializers.CharField(allow_blank=True, allow_null=True, required=False, default=None) diff_mode = serializers.BooleanField(required=False, allow_null=True, default=None) verbosity = serializers.ChoiceField(allow_null=True, required=False, default=None, choices=VERBOSITY_CHOICES) - execution_environment = serializers.PrimaryKeyRelatedField(queryset=ExecutionEnvironment.objects.all(), required=False, allow_null=True, default=None) forks = serializers.IntegerField(required=False, allow_null=True, default=None) job_slice_count = serializers.IntegerField(required=False, allow_null=True, default=None) timeout = serializers.IntegerField(required=False, allow_null=True, default=None) @@ -3665,11 +3662,11 @@ class LaunchConfigurationBaseSerializer(BaseSerializer): res = super(LaunchConfigurationBaseSerializer, self).get_related(obj) if obj.inventory_id: res['inventory'] = self.reverse('api:inventory_detail', kwargs={'pk': obj.inventory_id}) - res['credentials'] = self.reverse('api:{}_credentials_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) - res['labels'] = self.reverse('api:{}_labels_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) - res['instance_groups'] = self.reverse('api:{}_instance_groups_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) if obj.execution_environment_id: res['execution_environment'] = self.reverse('api:execution_environment_detail', kwargs={'pk': obj.execution_environment_id}) + res['labels'] = self.reverse('api:{}_labels_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) + res['credentials'] = self.reverse('api:{}_credentials_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) + res['instance_groups'] = self.reverse('api:{}_instance_groups_list'.format(get_type_for_model(self.Meta.model)), kwargs={'pk': obj.pk}) return res def _build_mock_obj(self, attrs): @@ -3679,11 +3676,7 @@ class LaunchConfigurationBaseSerializer(BaseSerializer): setattr(mock_obj, field.name, getattr(self.instance, field.name)) field_names = set(field.name for field in self.Meta.model._meta.fields) for field_name, value in list(attrs.items()): - if field_name == 'execution_environment': - if value: - setattr(mock_obj, field_name, value) - else: - setattr(mock_obj, field_name, value) + setattr(mock_obj, field_name, value) if field_name not in field_names: attrs.pop(field_name) return mock_obj diff --git a/awx/main/migrations/0168_jt_prompt_everything_on_launch.py b/awx/main/migrations/0168_jt_prompt_everything_on_launch.py index 7d94a4ea40..46f254f780 100644 --- a/awx/main/migrations/0168_jt_prompt_everything_on_launch.py +++ b/awx/main/migrations/0168_jt_prompt_everything_on_launch.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.13 on 2022-09-13 14:04 +# Generated by Django 3.2.13 on 2022-09-15 14:07 import awx.main.fields import awx.main.utils.polymorphic @@ -19,6 +19,7 @@ class Migration(migrations.Migration): field=models.ForeignKey( blank=True, default=None, + help_text='The container image to be used for execution.', null=True, on_delete=awx.main.utils.polymorphic.SET_NULL, related_name='joblaunchconfig_as_prompt', @@ -66,6 +67,7 @@ class Migration(migrations.Migration): field=models.ForeignKey( blank=True, default=None, + help_text='The container image to be used for execution.', null=True, on_delete=awx.main.utils.polymorphic.SET_NULL, related_name='schedule_as_prompt', @@ -83,6 +85,7 @@ class Migration(migrations.Migration): field=models.ForeignKey( blank=True, default=None, + help_text='The container image to be used for execution.', null=True, on_delete=awx.main.utils.polymorphic.SET_NULL, related_name='workflowjobnode_as_prompt', @@ -115,6 +118,7 @@ class Migration(migrations.Migration): field=models.ForeignKey( blank=True, default=None, + help_text='The container image to be used for execution.', null=True, on_delete=awx.main.utils.polymorphic.SET_NULL, related_name='workflowjobtemplatenode_as_prompt', diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 4316b968bc..aa88cc533e 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -1021,7 +1021,13 @@ class LaunchTimeConfig(LaunchTimeConfigBase): credentials = models.ManyToManyField('Credential', related_name='%(class)ss') labels = models.ManyToManyField('Label', related_name='%(class)s_labels') execution_environment = models.ForeignKey( - 'ExecutionEnvironment', null=True, blank=True, default=None, on_delete=polymorphic.SET_NULL, related_name='%(class)s_as_prompt' + 'ExecutionEnvironment', + null=True, + blank=True, + default=None, + on_delete=polymorphic.SET_NULL, + related_name='%(class)s_as_prompt', + help_text="The container image to be used for execution.", ) @property