v0.0.0-...-4d6ece0 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2024 License: AGPL-3.0 Imports: 13 Imported by: 200



Package imagemetadata 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 generic 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 (
	DefaultUbuntuBaseURL = UbuntuCloudImagesURL

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

View Source
var SimplestreamsImagesPublicKey = `` /* 3210-byte string literal not displayed */

simplestreamsImagesPublicKey is the public key required to authenticate the simple streams data on Declared as a var so it can be overidden for testing. See


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 ImageRelease

func ImageRelease(base corebase.Base) (string, error)

ImageRelease maps a base to an image version.

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(fetcher SimplestreamsFetcher,
	base corebase.Base,
	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 OfficialDataSources

func OfficialDataSources(dataSourceFactory simplestreams.DataSourceFactory, stream string) ([]simplestreams.DataSource, error)

OfficialDataSources returns the simplestreams datasources where official image metadata can be found.

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(fetcher SimplestreamsFetcher, 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, error)

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

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

type SimplestreamsFetcher

type SimplestreamsFetcher interface {
	NewDataSource(simplestreams.Config) simplestreams.DataSource
	GetMetadata([]simplestreams.DataSource, simplestreams.GetMetadataParams) ([]interface{}, *simplestreams.ResolveInfo, error)

SimplestreamsFetcher defines a way to fetch metadata from the simplestreams server.


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL