diff options
Diffstat (limited to 'release/release.go')
-rw-r--r-- | release/release.go | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/release/release.go b/release/release.go new file mode 100644 index 0000000..5864260 --- /dev/null +++ b/release/release.go @@ -0,0 +1,151 @@ +// Package release contains APIs for interacting with a +// particular "release". Avoid this unless you are sure +// you need it. It's expected that CoreOS users interact +// with streams instead. +package release + +import ( + relrhcos "github.com/coreos/stream-metadata-go/release/rhcos" +) + +// Index models the release index: +// https://github.com/coreos/fedora-coreos-tracker/tree/main/metadata/release-index +type Index struct { + Note string `json:"note"` // used to note to users not to consume the release metadata index + Releases []IndexRelease `json:"releases"` + Metadata Metadata `json:"metadata"` + Stream string `json:"stream"` +} + +// IndexRelease is a "release pointer" from a release index +type IndexRelease struct { + Commits []IndexReleaseCommit `json:"commits"` + Version string `json:"version"` + MetadataURL string `json:"metadata"` +} + +// IndexReleaseCommit describes an ostree commit plus architecture +type IndexReleaseCommit struct { + Architecture string `json:"architecture"` + Checksum string `json:"checksum"` +} + +// Release contains details from release.json +type Release struct { + Release string `json:"release"` + Stream string `json:"stream"` + Metadata Metadata `json:"metadata"` + Architectures map[string]Arch `json:"architectures"` +} + +// Metadata is common metadata that contains last-modified +type Metadata struct { + LastModified string `json:"last-modified"` +} + +// Arch release details +type Arch struct { + Commit string `json:"commit"` + Media Media `json:"media"` + RHELCoreOSExtensions *relrhcos.Extensions `json:"rhel-coreos-extensions,omitempty"` +} + +// Media contains release details for various platforms +type Media struct { + Aliyun *PlatformAliyun `json:"aliyun"` + Aws *PlatformAws `json:"aws"` + Azure *PlatformBase `json:"azure"` + AzureStack *PlatformBase `json:"azurestack"` + Digitalocean *PlatformBase `json:"digitalocean"` + Exoscale *PlatformBase `json:"exoscale"` + Gcp *PlatformGcp `json:"gcp"` + HyperV *PlatformBase `json:"hyperv"` + Ibmcloud *PlatformIBMCloud `json:"ibmcloud"` + KubeVirt *PlatformKubeVirt `json:"kubevirt"` + Metal *PlatformBase `json:"metal"` + Nutanix *PlatformBase `json:"nutanix"` + Openstack *PlatformBase `json:"openstack"` + PowerVS *PlatformIBMCloud `json:"powervs"` + Qemu *PlatformBase `json:"qemu"` + QemuSecex *PlatformBase `json:"qemu-secex"` + VirtualBox *PlatformBase `json:"virtualbox"` + Vmware *PlatformBase `json:"vmware"` + Vultr *PlatformBase `json:"vultr"` +} + +// PlatformBase with no cloud images +type PlatformBase struct { + Artifacts map[string]ImageFormat `json:"artifacts"` +} + +// PlatformAliyun contains Aliyun image information +type PlatformAliyun struct { + PlatformBase + Images map[string]CloudImage `json:"images"` +} + +// PlatformAws contains AWS image information +type PlatformAws struct { + PlatformBase + Images map[string]CloudImage `json:"images"` +} + +// PlatformGcp GCP image detail +type PlatformGcp struct { + PlatformBase + Image *GcpImage `json:"image"` +} + +// PlatformIBMCloud IBMCloud/PowerVS image detail +type PlatformIBMCloud struct { + PlatformBase + Images map[string]IBMCloudImage `json:"images"` +} + +// PlatformKubeVirt containerDisk metadata +type PlatformKubeVirt struct { + PlatformBase + Image *ContainerImage `json:"image"` +} + +// ImageFormat contains all artifacts for a single OS image +type ImageFormat struct { + Disk *Artifact `json:"disk,omitempty"` + Kernel *Artifact `json:"kernel,omitempty"` + Initramfs *Artifact `json:"initramfs,omitempty"` + Rootfs *Artifact `json:"rootfs,omitempty"` +} + +// Artifact represents one image file, plus its metadata +type Artifact struct { + Location string `json:"location"` + Signature string `json:"signature"` + Sha256 string `json:"sha256"` + UncompressedSha256 string `json:"uncompressed-sha256,omitempty"` +} + +// CloudImage generic image detail +type CloudImage struct { + Image string `json:"image"` +} + +// ContainerImage represents a tagged container image +type ContainerImage struct { + // Preferred way to reference the image, which might be by tag or digest + Image string `json:"image"` + DigestRef string `json:"digest-ref"` +} + +// GcpImage represents a GCP cloud image +type GcpImage struct { + Project string `json:"project"` + Family string `json:"family,omitempty"` + Name string `json:"name"` +} + +// IBMCloudImage represents an IBMCloud/PowerVS cloud object - which is an ova image for PowerVS and a qcow for IBMCloud in the cloud object storage bucket +type IBMCloudImage struct { + Object string `json:"object"` + Bucket string `json:"bucket"` + Url string `json:"url"` +} |