diff --git a/release/release.go b/release/release.go index 338cb76..16d7d8f 100644 --- a/release/release.go +++ b/release/release.go @@ -103,7 +103,7 @@ type PlatformIBMCloud struct { // PlatformKubeVirt containerDisk metadata type PlatformKubeVirt struct { PlatformBase - Image *CloudImage `json:"image"` + Image *ContainerImage `json:"image"` } // ImageFormat contains all artifacts for a single OS image @@ -127,6 +127,13 @@ 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"` diff --git a/release/translate.go b/release/translate.go index 3b20d87..27f4fe9 100644 --- a/release/translate.go +++ b/release/translate.go @@ -138,9 +138,10 @@ func (releaseArch *Arch) toStreamArch(rel *Release) stream.Arch { Formats: mapFormats(releaseArch.Media.KubeVirt.Artifacts), } if releaseArch.Media.KubeVirt.Image != nil { - cloudImages.KubeVirt = &stream.SingleImage{ - Release: rel.Release, - Image: releaseArch.Media.KubeVirt.Image.Image, + cloudImages.KubeVirt = &stream.ContainerImage{ + Release: rel.Release, + Image: releaseArch.Media.KubeVirt.Image.Image, + DigestRef: releaseArch.Media.KubeVirt.Image.DigestRef, } } } diff --git a/stream/fixtures/fcos-stream.json b/stream/fixtures/fcos-stream.json index 3db4f2a..aae1611 100644 --- a/stream/fixtures/fcos-stream.json +++ b/stream/fixtures/fcos-stream.json @@ -388,7 +388,8 @@ }, "kubevirt": { "release": "33.20211201.3.0", - "image": "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773" + "image": "quay.io/openshift-release-dev/rhcos:latest", + "digest-ref": "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773" } } } diff --git a/stream/stream.go b/stream/stream.go index 1a5fb6f..1ed9b1f 100644 --- a/stream/stream.go +++ b/stream/stream.go @@ -56,7 +56,7 @@ type Images struct { Aws *AwsImage `json:"aws,omitempty"` Gcp *GcpImage `json:"gcp,omitempty"` Ibmcloud *ReplicatedObject `json:"ibmcloud,omitempty"` - KubeVirt *SingleImage `json:"kubevirt,omitempty"` + KubeVirt *ContainerImage `json:"kubevirt,omitempty"` PowerVS *ReplicatedObject `json:"powervs,omitempty"` } @@ -72,6 +72,14 @@ type SingleImage struct { Image string `json:"image"` } +// ContainerImage represents a tagged container image +type ContainerImage struct { + Release string `json:"release"` + // Preferred way to reference the image, which might be by tag or digest + Image string `json:"image"` + DigestRef string `json:"digest-ref"` +} + // AwsImage is a typedef for backwards compatibility. type AwsImage = ReplicatedImage diff --git a/stream/stream_test.go b/stream/stream_test.go index 65d2595..210666a 100644 --- a/stream/stream_test.go +++ b/stream/stream_test.go @@ -64,6 +64,10 @@ func TestParseFCS(t *testing.T) { 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"].Images.KubeVirt, &ContainerImage{ + Release: "33.20211201.3.0", + Image: "quay.io/openshift-release-dev/rhcos@latest", + DigestRef: "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773", + }) assert.Equal(t, stream.Architectures["x86_64"].Artifacts["kubevirt"].Formats["qcow2.xz"].Disk.Sha256, "2be55c5aa1f53eb9a869826dacbab75706ee6bd59185b935ac9be546cc132a85") }