diff --git a/release/fixtures/fcos-release.json b/release/fixtures/fcos-release.json index a2f8c4e..a33e7fb 100644 --- a/release/fixtures/fcos-release.json +++ b/release/fixtures/fcos-release.json @@ -201,6 +201,20 @@ } } }, + "kubevirt": { + "artifacts": { + "qcow2.xz": { + "disk": { + "location": "https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/33.20201201.3.0/x86_64/fedora-coreos-33.20201201.3.0-kubevirt.x86_64.qcow2.xz", + "signature": "https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/33.20201201.3.0/x86_64/fedora-coreos-33.20201201.3.0-kubevirt.x86_64.qcow2.xz.sig", + "sha256": "2be55c5aa1f53eb9a869826dacbab75706ee6bd59185b935ac9be546cc132a85" + } + } + }, + "image": { + "image": "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773" + } + }, "qemu": { "artifacts": { "qcow2.xz": { diff --git a/release/release.go b/release/release.go index f3100b1..f1be9bb 100644 --- a/release/release.go +++ b/release/release.go @@ -60,6 +60,7 @@ type Media struct { Exoscale *PlatformBase `json:"exoscale"` Gcp *PlatformGcp `json:"gcp"` Ibmcloud *PlatformIBMCloud `json:"ibmcloud"` + KubeVirt *PlatformKubeVirt `json:"kubevirt"` Metal *PlatformBase `json:"metal"` Nutanix *PlatformBase `json:"nutanix"` Openstack *PlatformBase `json:"openstack"` @@ -98,6 +99,12 @@ type PlatformIBMCloud struct { Images map[string]IBMCloudImage `json:"images"` } +// PlatformKubeVirt containerDisk metadata +type PlatformKubeVirt struct { + PlatformBase + Image *KubeVirtContainerDisk `json:"image"` +} + // ImageFormat contains all artifacts for a single OS image type ImageFormat struct { Disk *Artifact `json:"disk,omitempty"` @@ -132,3 +139,8 @@ type IBMCloudImage struct { Bucket string `json:"bucket"` Url string `json:"url"` } + +// KubeVirtContainerDisk describes a disk image inside a container which can be consumed by a KubeVirt based platform +type KubeVirtContainerDisk struct { + Image string `json:"image,omitempty"` +} diff --git a/release/release_test.go b/release/release_test.go index 91ddf59..182c405 100644 --- a/release/release_test.go +++ b/release/release_test.go @@ -50,4 +50,7 @@ func TestTranslate(t *testing.T) { Architectures: arches, } assert.Equal(t, st.Architectures["x86_64"].Images.Aws.Regions["us-east-2"].Image, usEast2Ami) + + // KubeVirt + assert.Equal(t, st.Architectures["x86_64"].Images.KubeVirt.Image, "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773") } diff --git a/release/translate.go b/release/translate.go index 211fc84..a8ea4ba 100644 --- a/release/translate.go +++ b/release/translate.go @@ -132,6 +132,18 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch { } } + if releaseArch.Media.KubeVirt != nil { + artifacts["kubevirt"] = stream.PlatformArtifacts{ + Release: rel.Release, + Formats: mapFormats(releaseArch.Media.KubeVirt.Artifacts), + } + if releaseArch.Media.KubeVirt.Image != nil { + cloudImages.KubeVirt = &stream.KubeVirtContainerDisk{ + Image: releaseArch.Media.KubeVirt.Image.Image, + } + } + } + if releaseArch.Media.Digitalocean != nil { artifacts["digitalocean"] = stream.PlatformArtifacts{ Release: rel.Release, diff --git a/stream/fixtures/fcos-stream.json b/stream/fixtures/fcos-stream.json index 11bc1f0..1116e07 100644 --- a/stream/fixtures/fcos-stream.json +++ b/stream/fixtures/fcos-stream.json @@ -146,6 +146,18 @@ } } }, + "kubevirt": { + "release": "33.20201201.3.0", + "formats": { + "qcow2.xz": { + "disk": { + "location": "https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/33.20201201.3.0/x86_64/fedora-coreos-33.20201201.3.0-kubevirt.x86_64.qcow2.xz", + "signature": "https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/33.20201201.3.0/x86_64/fedora-coreos-33.20201201.3.0-kubevirt.x86_64.qcow2.xz.sig", + "sha256": "2be55c5aa1f53eb9a869826dacbab75706ee6bd59185b935ac9be546cc132a85" + } + } + } + }, "qemu": { "release": "33.20201201.3.0", "formats": { @@ -372,6 +384,9 @@ "project": "fedora-coreos-cloud", "family": "fedora-coreos-stable", "name": "fedora-coreos-33-20201201-3-0-gcp-x86-64" + }, + "kubevirt": { + "image": "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773" } } } diff --git a/stream/stream.go b/stream/stream.go index 2001c66..b8e0125 100644 --- a/stream/stream.go +++ b/stream/stream.go @@ -50,13 +50,18 @@ type Artifact struct { UncompressedSha256 string `json:"uncompressed-sha256,omitempty"` } +type KubeVirtContainerDisk struct { + Image string `json:"image,omitempty"` +} + // Images contains images available in cloud providers type Images struct { - Aliyun *ReplicatedImage `json:"aliyun,omitempty"` - Aws *AwsImage `json:"aws,omitempty"` - Gcp *GcpImage `json:"gcp,omitempty"` - Ibmcloud *ReplicatedObject `json:"ibmcloud,omitempty"` - PowerVS *ReplicatedObject `json:"powervs,omitempty"` + Aliyun *ReplicatedImage `json:"aliyun,omitempty"` + Aws *AwsImage `json:"aws,omitempty"` + Gcp *GcpImage `json:"gcp,omitempty"` + Ibmcloud *ReplicatedObject `json:"ibmcloud,omitempty"` + PowerVS *ReplicatedObject `json:"powervs,omitempty"` + KubeVirt *KubeVirtContainerDisk `json:"kubevirt,omitempty"` } // ReplicatedImage represents an image in all regions of an AWS-like cloud diff --git a/stream/stream_test.go b/stream/stream_test.go index 738d45a..65d2595 100644 --- a/stream/stream_test.go +++ b/stream/stream_test.go @@ -63,4 +63,7 @@ func TestParseFCS(t *testing.T) { _, err = stream.QueryDisk("nonarch", "", "nosuchthing") assert.NotNil(t, err) assert.Contains(t, err.Error(), "does not have architecture 'nonarch'") + + assert.Equal(t, stream.Architectures["x86_64"].Images.KubeVirt.Image, "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773") + assert.Equal(t, stream.Architectures["x86_64"].Artifacts["kubevirt"].Formats["qcow2.xz"].Disk.Sha256, "2be55c5aa1f53eb9a869826dacbab75706ee6bd59185b935ac9be546cc132a85") }