// MarshalToolsMetadataProductsJSON marshals tools metadata to products JSON. // // updated is the time at which the JSON file was updated. func MarshalToolsMetadataProductsJSON(metadata []*ToolsMetadata, updated time.Time) (out []byte, err error) { var cloud simplestreams.CloudMetadata cloud.Updated = updated.Format(time.RFC1123Z) cloud.Format = "products:1.0" cloud.ContentId = ToolsContentId cloud.Products = make(map[string]simplestreams.MetadataCatalog) itemsversion := updated.Format("20060102") // YYYYMMDD for _, t := range metadata { id, err := t.productId() if err != nil { return nil, err } itemid := fmt.Sprintf("%s-%s-%s", t.Version, t.Release, t.Arch) if catalog, ok := cloud.Products[id]; ok { catalog.Items[itemsversion].Items[itemid] = t } else { catalog = simplestreams.MetadataCatalog{ Arch: t.Arch, Version: t.Version, Items: map[string]*simplestreams.ItemCollection{ itemsversion: &simplestreams.ItemCollection{ Items: map[string]interface{}{itemid: t}, }, }, } cloud.Products[id] = catalog } } return json.MarshalIndent(&cloud, "", " ") }
// MarshalImageMetadataProductsJSON marshals image metadata to products JSON. // // updated is the time at which the JSON file was updated. func MarshalImageMetadataProductsJSON(metadata []*ImageMetadata, updated time.Time) (out []byte, err error) { var cloud simplestreams.CloudMetadata cloud.Updated = updated.Format(time.RFC1123Z) cloud.Format = simplestreams.ProductFormat cloud.ContentId = ImageContentId cloud.Products = make(map[string]simplestreams.MetadataCatalog) itemsversion := updated.Format("20060201") // YYYYMMDD for _, t := range metadata { toWrite := &ImageMetadata{ Id: t.Id, RegionName: t.RegionName, Endpoint: t.Endpoint, VirtType: t.VirtType, } if catalog, ok := cloud.Products[t.productId()]; ok { catalog.Items[itemsversion].Items[t.Id] = toWrite } else { catalog = simplestreams.MetadataCatalog{ Arch: t.Arch, Version: t.Version, Items: map[string]*simplestreams.ItemCollection{ itemsversion: { Items: map[string]interface{}{t.Id: toWrite}, }, }, } cloud.Products[t.productId()] = catalog } } return json.MarshalIndent(&cloud, "", " ") }
// MarshalImageMetadataProductsJSON marshals image metadata to products JSON. // // updated is the time at which the JSON file was updated. func MarshalImageMetadataProductsJSON(metadata []*ImageMetadata, updated time.Time) (out []byte, err error) { var cloud simplestreams.CloudMetadata cloud.Updated = updated.Format(time.RFC1123Z) cloud.Format = simplestreams.ProductFormat cloud.ContentId = ImageContentId cloud.Products = make(map[string]simplestreams.MetadataCatalog) itemsversion := updated.Format("20060102") // YYYYMMDD for _, t := range metadata { toWrite := *t // These fields are not required in the individual // record values - they are recorded at the top level. toWrite.RegionAlias = "" toWrite.Version = "" toWrite.Arch = "" if catalog, ok := cloud.Products[t.productId()]; ok { catalog.Items[itemsversion].Items[t.Id] = toWrite } else { catalog = simplestreams.MetadataCatalog{ Arch: t.Arch, Version: t.Version, Items: map[string]*simplestreams.ItemCollection{ itemsversion: { Items: map[string]interface{}{t.Id: toWrite}, }, }, } cloud.Products[t.productId()] = catalog } } return json.MarshalIndent(&cloud, "", " ") }
// MarshalToolsMetadataProductsJSON marshals tools metadata to products JSON. // updated is the time at which the JSON file was updated. func MarshalToolsMetadataProductsJSON( streamMetadata map[string][]*ToolsMetadata, updated time.Time, ) (out map[string][]byte, err error) { out = make(map[string][]byte, len(streamMetadata)) for stream, metadata := range streamMetadata { var cloud simplestreams.CloudMetadata cloud.Updated = updated.Format(time.RFC1123Z) cloud.Format = simplestreams.ProductFormat cloud.ContentId = ToolsContentId(stream) cloud.Products = make(map[string]simplestreams.MetadataCatalog) itemsversion := updated.Format("20060102") // YYYYMMDD for _, t := range metadata { id, err := t.productId() if err != nil { if series.IsUnknownSeriesVersionError(err) { continue } return nil, err } itemid := fmt.Sprintf("%s-%s-%s", t.Version, t.Release, t.Arch) if catalog, ok := cloud.Products[id]; ok { catalog.Items[itemsversion].Items[itemid] = t } else { catalog = simplestreams.MetadataCatalog{ Arch: t.Arch, Version: t.Version, Items: map[string]*simplestreams.ItemCollection{ itemsversion: { Items: map[string]interface{}{itemid: t}, }, }, } cloud.Products[id] = catalog } } if out[stream], err = json.MarshalIndent(&cloud, "", " "); err != nil { return nil, err } } return out, nil }