diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 018301f63f..f8cec32e6f 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4753,7 +4753,7 @@ class ScheduleSerializer(LaunchConfigurationBaseSerializer, SchedulePreviewSeria class InstanceLinkSerializer(BaseSerializer): class Meta: model = InstanceLink - fields = ('source', 'target') + fields = ('source', 'target', 'link_state') source = serializers.SlugRelatedField(slug_field="hostname", read_only=True) target = serializers.SlugRelatedField(slug_field="hostname", read_only=True) @@ -4762,31 +4762,25 @@ class InstanceLinkSerializer(BaseSerializer): class InstanceNodeSerializer(BaseSerializer): class Meta: model = Instance - fields = ('id', 'hostname', 'node_type', 'node_state') - - node_state = serializers.SerializerMethodField() - - def get_node_state(self, obj): - if not obj.enabled: - return "disabled" - return "error" if obj.errors else "healthy" + fields = ('id', 'hostname', 'node_type', 'node_state', 'enabled') class InstanceSerializer(BaseSerializer): consumed_capacity = serializers.SerializerMethodField() percent_capacity_remaining = serializers.SerializerMethodField() - jobs_running = serializers.IntegerField(help_text=_('Count of jobs in the running or waiting state that ' 'are targeted for this instance'), read_only=True) + jobs_running = serializers.IntegerField(help_text=_('Count of jobs in the running or waiting state that are targeted for this instance'), read_only=True) jobs_total = serializers.IntegerField(help_text=_('Count of all jobs that target this instance'), read_only=True) class Meta: model = Instance - read_only_fields = ('uuid', 'hostname', 'version', 'node_type') + read_only_fields = ('uuid', 'hostname', 'version', 'node_type', 'node_state') fields = ( "id", "type", "url", "related", + "summary_fields", "uuid", "hostname", "created", @@ -4808,6 +4802,7 @@ class InstanceSerializer(BaseSerializer): "enabled", "managed_by_policy", "node_type", + "node_state", ) def get_related(self, obj): @@ -4819,6 +4814,14 @@ class InstanceSerializer(BaseSerializer): res['health_check'] = self.reverse('api:instance_health_check', kwargs={'pk': obj.pk}) return res + def get_summary_fields(self, obj): + summary = super().get_summary_fields(obj) + + if self.is_detail_view: + summary['links'] = InstanceLinkSerializer(InstanceLink.objects.select_related('target', 'source').filter(source=obj), many=True).data + + return summary + def get_consumed_capacity(self, obj): return obj.consumed_capacity