// marshalToolsMetadataIndexJSON marshals tools metadata to index JSON. // updated is the time at which the JSON file was updated. func marshalToolsMetadataIndexJSON(streamMetadata map[string][]*ToolsMetadata, updated time.Time) (out, outlegacy []byte, err error) { var indices simplestreams.Indices indices.Updated = updated.Format(time.RFC1123Z) indices.Format = simplestreams.IndexFormat indices.Indexes = make(map[string]*simplestreams.IndexMetadata, len(streamMetadata)) var indicesLegacy simplestreams.Indices indicesLegacy.Updated = updated.Format(time.RFC1123Z) indicesLegacy.Format = simplestreams.IndexFormat for stream, metadata := range streamMetadata { var productIds []string for _, t := range metadata { id, err := t.productId() if err != nil { if series.IsUnknownSeriesVersionError(err) { logger.Infof("ignoring tools metadata with unknown series %q", t.Release) continue } return nil, nil, err } productIds = append(productIds, id) } indexMetadata := &simplestreams.IndexMetadata{ Updated: indices.Updated, Format: simplestreams.ProductFormat, DataType: ContentDownload, ProductsFilePath: ProductMetadataPath(stream), ProductIds: set.NewStrings(productIds...).SortedValues(), } indices.Indexes[ToolsContentId(stream)] = indexMetadata if stream == ReleasedStream { indicesLegacy.Indexes = make(map[string]*simplestreams.IndexMetadata, 1) indicesLegacy.Indexes[ToolsContentId(stream)] = indexMetadata } } out, err = json.MarshalIndent(&indices, "", " ") if len(indicesLegacy.Indexes) == 0 { return out, nil, err } outlegacy, err = json.MarshalIndent(&indicesLegacy, "", " ") if err != nil { return nil, nil, err } return out, outlegacy, nil }
// MarshalToolsMetadataIndexJSON marshals tools metadata to index JSON. // // updated is the time at which the JSON file was updated. func MarshalToolsMetadataIndexJSON(metadata []*ToolsMetadata, updated time.Time) (out []byte, err error) { productIds := make([]string, len(metadata)) for i, t := range metadata { productIds[i], err = t.productId() if err != nil { return nil, err } } var indices simplestreams.Indices indices.Updated = updated.Format(time.RFC1123Z) indices.Format = "index:1.0" indices.Indexes = map[string]*simplestreams.IndexMetadata{ ToolsContentId: &simplestreams.IndexMetadata{ Updated: indices.Updated, Format: "products:1.0", DataType: "content-download", ProductsFilePath: ProductMetadataPath, ProductIds: set.NewStrings(productIds...).SortedValues(), }, } return json.MarshalIndent(&indices, "", " ") }
// MarshalImageMetadataIndexJSON marshals image metadata to index JSON. // // updated is the time at which the JSON file was updated. func MarshalImageMetadataIndexJSON(metadata []*ImageMetadata, cloudSpec []simplestreams.CloudSpec, updated time.Time) (out []byte, err error) { productIds := make([]string, len(metadata)) for i, t := range metadata { productIds[i] = t.productId() } var indices simplestreams.Indices indices.Updated = updated.Format(time.RFC1123Z) indices.Format = simplestreams.IndexFormat indices.Indexes = map[string]*simplestreams.IndexMetadata{ ImageContentId: { CloudName: "custom", Updated: indices.Updated, Format: simplestreams.ProductFormat, DataType: "image-ids", ProductsFilePath: ProductMetadataPath, ProductIds: set.NewStrings(productIds...).SortedValues(), Clouds: cloudSpec, }, } return json.MarshalIndent(&indices, "", " ") }