func()

in frontend/pkg/frontend/helpers.go [244:292]


func (f *Frontend) MarshalResource(ctx context.Context, resourceID *azcorearm.ResourceID, versionedInterface api.Version) ([]byte, *arm.CloudError) {
	var responseBody []byte

	logger := LoggerFromContext(ctx)

	doc, err := f.dbClient.GetResourceDoc(ctx, resourceID)
	if err != nil {
		logger.Error(err.Error())
		if errors.Is(err, database.ErrNotFound) {
			return nil, arm.NewResourceNotFoundError(resourceID)
		} else {
			return nil, arm.NewInternalServerError()
		}
	}

	switch doc.InternalID.Kind() {
	case arohcpv1alpha1.ClusterKind:
		csCluster, err := f.clusterServiceClient.GetCluster(ctx, doc.InternalID)
		if err != nil {
			logger.Error(err.Error())
			return nil, CSErrorToCloudError(err, resourceID)
		}
		tracing.SetClusterAttributes(trace.SpanFromContext(ctx), csCluster)

		responseBody, err = marshalCSCluster(csCluster, doc, versionedInterface)
		if err != nil {
			logger.Error(err.Error())
			return nil, arm.NewInternalServerError()
		}

	case arohcpv1alpha1.NodePoolKind:
		csNodePool, err := f.clusterServiceClient.GetNodePool(ctx, doc.InternalID)
		if err != nil {
			logger.Error(err.Error())
			return nil, CSErrorToCloudError(err, resourceID)
		}
		responseBody, err = marshalCSNodePool(csNodePool, doc, versionedInterface)
		if err != nil {
			logger.Error(err.Error())
			return nil, arm.NewInternalServerError()
		}

	default:
		logger.Error(fmt.Sprintf("unsupported Cluster Service path: %s", doc.InternalID))
		return nil, arm.NewInternalServerError()
	}

	return responseBody, nil
}