summaryrefslogtreecommitdiffstats
path: root/release/release.go
diff options
context:
space:
mode:
Diffstat (limited to 'release/release.go')
-rw-r--r--release/release.go151
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"`
+}