The imagemetadata package supports locating, parsing, and filtering Ubuntu image metadata in simplestreams format. See and in particular the doc/README file in that project for more information about the file formats.



    View Source
    const (
    	ProductMetadataPath = "streams/v1/"
    	ImageContentId      = ""
    View Source
    const (
    	// ImageIds is the simplestreams image content type.
    	ImageIds = "image-ids"
    	// StreamsVersionV1 is used to construct the path for accessing streams data.
    	StreamsVersionV1 = "v1"
    	// IndexFileVersion is used to construct the streams index file.
    	IndexFileVersion = 1
    View Source
    const (
    	// The location where Ubuntu cloud image metadata is published for
    	// public consumption.
    	UbuntuCloudImagesURL = ""
    	// The path where released image metadata is found.
    	ReleasedImagesPath = "releases"
    View Source
    const (
    	// Used to specify the released image metadata.
    	ReleasedStream = "released"


    View Source
    var DefaultBaseURL = UbuntuCloudImagesURL

      This needs to be a var so we can override it for testing and in bootstrap.

      View Source
      var PrivateMetadataDir string

        PrivateMetadataDir is a directory possibly containing private image metadata, used during bootstrap.


        func ImageMetadataURL

        func ImageMetadataURL(source, stream string) (string, error)

          ImageMetadataURL returns a valid image metadata URL constructed from source. source may be a directory, or a URL like file://foo or http://foo.

          func IndexStoragePath

          func IndexStoragePath() string

            IndexStoragePath returns the storage path for the image metadata index file.

            func MarshalImageMetadataIndexJSON

            func MarshalImageMetadataIndexJSON(metadata []*ImageMetadata, cloudSpec []simplestreams.CloudSpec,
            	updated time.Time) (out []byte, err error)

              MarshalImageMetadataIndexJSON marshals image metadata to index JSON.

              updated is the time at which the JSON file was updated.

              func MarshalImageMetadataJSON

              func MarshalImageMetadataJSON(metadata []*ImageMetadata, cloudSpec []simplestreams.CloudSpec,
              	updated time.Time) (index, products []byte, err error)

                MarshalImageMetadataJSON marshals image metadata to index and products JSON.

                updated is the time at which the JSON file was updated.

                func MarshalImageMetadataProductsJSON

                func MarshalImageMetadataProductsJSON(metadata []*ImageMetadata, updated time.Time) (out []byte, err error)

                  MarshalImageMetadataProductsJSON marshals image metadata to products JSON.

                  updated is the time at which the JSON file was updated.

                  func MergeAndWriteMetadata

                  func MergeAndWriteMetadata(ser string, metadata []*ImageMetadata, cloudSpec *simplestreams.CloudSpec,
                  	metadataStore storage.Storage) error

                    MergeAndWriteMetadata reads the existing metadata from storage (if any), and merges it with supplied metadata, writing the resulting metadata is written to storage.

                    func ProductMetadataStoragePath

                    func ProductMetadataStoragePath() string

                      ProductMetadataStoragePath returns the storage path for the image metadata products file.

                      func Sort

                      func Sort(metadata []*ImageMetadata)

                        Sort sorts a slice of ImageMetadata in ascending order of their id in order to ensure the results of Fetch are ordered deterministically.

                        func ValidateImageMetadata

                        func ValidateImageMetadata(params *simplestreams.MetadataLookupParams) ([]string, *simplestreams.ResolveInfo, error)

                          ValidateImageMetadata attempts to load image metadata for the specified cloud attributes and stream and returns any image ids found, or an error if the metadata could not be loaded.


                          type ImageConstraint

                          type ImageConstraint struct {

                            ImageConstraint defines criteria used to find an image metadata record.

                            func NewImageConstraint

                            func NewImageConstraint(params simplestreams.LookupParams) *ImageConstraint

                            func (*ImageConstraint) IndexIds

                            func (ic *ImageConstraint) IndexIds() []string

                              IndexIds generates a string array representing product ids formed similarly to an ISCSI qualified name (IQN).

                              func (*ImageConstraint) ProductIds

                              func (ic *ImageConstraint) ProductIds() ([]string, error)

                                ProductIds generates a string array representing product ids formed similarly to an ISCSI qualified name (IQN).

                                type ImageMetadata

                                type ImageMetadata struct {
                                	Id          string `json:"id"`
                                	Storage     string `json:"root_store,omitempty"`
                                	VirtType    string `json:"virt,omitempty"`
                                	Arch        string `json:"arch,omitempty"`
                                	Version     string `json:"version,omitempty"`
                                	RegionAlias string `json:"crsn,omitempty"`
                                	RegionName  string `json:"region,omitempty"`
                                	Endpoint    string `json:"endpoint,omitempty"`
                                	Stream      string `json:"-"`

                                  ImageMetadata holds information about a particular cloud image.

                                  func Fetch

                                  func Fetch(
                                  	sources []simplestreams.DataSource, cons *ImageConstraint,
                                  	onlySigned bool) ([]*ImageMetadata, *simplestreams.ResolveInfo, error)

                                    Fetch returns a list of images for the specified cloud matching the constraint. The base URL locations are as specified - the first location which has a file is the one used. Signed data is preferred, but if there is no signed data available and onlySigned is false, then unsigned data is used.

                                    func GetLatestImageIdMetadata

                                    func GetLatestImageIdMetadata(data []byte, source simplestreams.DataSource, cons *ImageConstraint) ([]*ImageMetadata, error)

                                      GetLatestImageIdMetadata is provided so it can be call by tests outside the imagemetadata package.

                                      func (*ImageMetadata) String

                                      func (im *ImageMetadata) String() string

                                      type MetadataFile

                                      type MetadataFile struct {
                                      	Path string
                                      	Data []byte


                                      Path Synopsis