diff --git a/release/fixtures/fcos-release.json b/release/fixtures/fcos-release.json index a2f8c4e..f9b61ef 100644 --- a/release/fixtures/fcos-release.json +++ b/release/fixtures/fcos-release.json @@ -201,6 +201,17 @@ } } }, + "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" + } + } + } + }, "qemu": { "artifacts": { "qcow2.xz": { diff --git a/release/release.go b/release/release.go index f3100b1..47c3998 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,11 @@ type PlatformIBMCloud struct { Images map[string]IBMCloudImage `json:"images"` } +// PlatformKubeVirt containerDisk metadata +type PlatformKubeVirt struct { + PlatformBase +} + // ImageFormat contains all artifacts for a single OS image type ImageFormat struct { Disk *Artifact `json:"disk,omitempty"` diff --git a/stream/fixtures/fcos-stream.json b/stream/fixtures/fcos-stream.json index 11bc1f0..03aa52b 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,11 @@ "project": "fedora-coreos-cloud", "family": "fedora-coreos-stable", "name": "fedora-coreos-33-20201201-3-0-gcp-x86-64" + }, + "kubevirt": { + "registry": "quay.io/openshift-release-dev/rhcos", + "image": "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773", + "digest": "sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773" } } } diff --git a/stream/stream.go b/stream/stream.go index 2001c66..32dbe56 100644 --- a/stream/stream.go +++ b/stream/stream.go @@ -50,13 +50,20 @@ type Artifact struct { UncompressedSha256 string `json:"uncompressed-sha256,omitempty"` } +type KubeVirtContainerDisk struct { + Registry string `json:"registry,omitempty"` + Digest string `json:"digest,omitempty"` + 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..16ce637 100644 --- a/stream/stream_test.go +++ b/stream/stream_test.go @@ -63,4 +63,13 @@ func TestParseFCS(t *testing.T) { _, err = stream.QueryDisk("nonarch", "", "nosuchthing") assert.NotNil(t, err) assert.Contains(t, err.Error(), "does not have architecture 'nonarch'") + + disk, err := stream.GetKubeVirtContainerDisk("x86_64") + assert.Nil(t, err) + assert.Equal(t, disk.Image, "quay.io/openshift-release-dev/rhcos@sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773") + assert.Equal(t, disk.Digest, "sha256:67a81539946ec0397196c145394553b8e0241acf27b14ae9de43bc56e167f773") + assert.Equal(t, disk.Registry, "quay.io/openshift-release-dev/rhcos") + _, err = stream.GetKubeVirtContainerDisk("unknown") + assert.NotNil(t, err) + assert.Equal(t, stream.Architectures["x86_64"].Artifacts["kubevirt"].Formats["qcow2.xz"].Disk.Sha256, "2be55c5aa1f53eb9a869826dacbab75706ee6bd59185b935ac9be546cc132a85") } diff --git a/stream/stream_utils.go b/stream/stream_utils.go index 081572c..c4b7912 100644 --- a/stream/stream_utils.go +++ b/stream/stream_utils.go @@ -66,6 +66,20 @@ func (st *Stream) GetAwsRegionImage(archname, region string) (*AwsRegionImage, e return ®ionVal, nil } +// GetKubeVirtContainerDisk returns the containerdisk infos for a particular +// architecture. +func (st *Stream) GetKubeVirtContainerDisk(archname string) (*KubeVirtContainerDisk, error) { + starch, err := st.GetArchitecture(archname) + if err != nil { + return nil, err + } + containerDisk := starch.Images.KubeVirt + if containerDisk == nil { + return nil, fmt.Errorf("%s: No containerDisk", st.FormatPrefix(archname)) + } + return containerDisk, nil +} + // GetAMI returns the AWS machine image for a particular architecture and region. func (st *Stream) GetAMI(archname, region string) (string, error) { regionVal, err := st.GetAwsRegionImage(archname, region)