diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 830f17ac5c7d..29744342eb44 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -13035,14 +13035,6 @@ "$ref": "#/definitions/v1.VirtualMachineInstanceNetworkInterface" } }, - "isoSizes": { - "description": "Reprensents the size of the cloud-init isos associated with the VMI", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int64" - } - }, "launcherContainerImageVersion": { "description": "LauncherContainerImageVersion indicates what container image is currently active for the vmi.", "type": "string" @@ -13400,6 +13392,11 @@ "description": "Reason is a brief description of why we are in the current hotplug volume phase", "type": "string" }, + "size": { + "description": "Represents the size of the volume", + "type": "integer", + "format": "int64" + }, "target": { "description": "Target is the target name used when adding the volume to the VM, eg: vda", "type": "string" diff --git a/pkg/cloud-init/cloud-init.go b/pkg/cloud-init/cloud-init.go index 56f871902541..4951971a916d 100644 --- a/pkg/cloud-init/cloud-init.go +++ b/pkg/cloud-init/cloud-init.go @@ -68,6 +68,7 @@ type CloudInitData struct { UserData string NetworkData string DevicesData *[]DeviceData + VolumeName string } type PublicSSHKey struct { @@ -118,6 +119,7 @@ func ReadCloudInitVolumeDataSource(vmi *v1.VirtualMachineInstance, secretSourceD cloudInitData, err = readCloudInitNoCloudSource(volume.CloudInitNoCloud) cloudInitData.NoCloudMetaData = readCloudInitNoCloudMetaData(vmi.Name, hostname, vmi.Namespace) + cloudInitData.VolumeName = volume.Name return cloudInitData, err } if volume.CloudInitConfigDrive != nil { @@ -129,6 +131,7 @@ func ReadCloudInitVolumeDataSource(vmi *v1.VirtualMachineInstance, secretSourceD cloudInitData, err = readCloudInitConfigDriveSource(volume.CloudInitConfigDrive) cloudInitData.ConfigDriveMetaData = readCloudInitConfigDriveMetaData(string(vmi.UID), vmi.Name, hostname, vmi.Namespace, keys) + cloudInitData.VolumeName = volume.Name return cloudInitData, err } } @@ -466,10 +469,9 @@ func removeLocalData(domain string, namespace string) error { return err } -func GenerateEmptyIso(vmiName string, namespace string, data *CloudInitData, sizes *v1.VirtualMachineInstanceIsoSizes) error { +func GenerateEmptyIso(vmiName string, namespace string, data *CloudInitData, size int64) error { precond.MustNotBeEmpty(vmiName) precond.MustNotBeNil(data) - precond.MustNotBeNil(sizes) var err error var isoStaging, iso string @@ -498,12 +500,7 @@ func GenerateEmptyIso(vmiName string, namespace string, data *CloudInitData, siz return fmt.Errorf("failed to create empty iso: '%s'", isoStaging) } - isoSize, exists := (*sizes)[path.Base(iso)] - if !exists { - f.Close() - return fmt.Errorf("failed to find the size for empty iso: '%s'", iso) - } - err = f.Truncate(isoSize) + err = f.Truncate(size) if err != nil { f.Close() return fmt.Errorf("failed to inflate empty iso: '%s'", isoStaging) diff --git a/pkg/cloud-init/cloud-init_test.go b/pkg/cloud-init/cloud-init_test.go index de8b7edd1dc7..6eb8dbb1e2e7 100644 --- a/pkg/cloud-init/cloud-init_test.go +++ b/pkg/cloud-init/cloud-init_test.go @@ -520,38 +520,6 @@ var _ = Describe("CloudInit", func() { }) }) - Describe("GenerateEmptyIso", func() { - It("should error when size is missing", func() { - namespace := "fake-namespace" - domain := "fake-domain" - userData := "fake\nuser\ndata\n" - source := &v1.CloudInitNoCloudSource{ - UserDataBase64: base64.StdEncoding.EncodeToString([]byte(userData)), - } - cloudInitData, err := readCloudInitNoCloudSource(source) - Expect(err).NotTo(HaveOccurred()) - - var sizes v1.VirtualMachineInstanceIsoSizes = make(v1.VirtualMachineInstanceIsoSizes) - err = GenerateEmptyIso(domain, namespace, cloudInitData, &sizes) - Expect(err.Error()).To(ContainSubstring("failed to find the size for empty iso: ")) - }) - It("should succeed when size is present", func() { - namespace := "fake-namespace" - domain := "fake-domain" - userData := "fake\nuser\ndata\n" - source := &v1.CloudInitNoCloudSource{ - UserDataBase64: base64.StdEncoding.EncodeToString([]byte(userData)), - } - cloudInitData, err := readCloudInitNoCloudSource(source) - Expect(err).NotTo(HaveOccurred()) - - var sizes v1.VirtualMachineInstanceIsoSizes = make(v1.VirtualMachineInstanceIsoSizes) - sizes[noCloudFile] = 42 - err = GenerateEmptyIso(domain, namespace, cloudInitData, &sizes) - Expect(err).NotTo(HaveOccurred()) - }) - }) - Describe("PrepareLocalPath", func() { It("should create the correct directory structure", func() { namespace := "fake-namespace" diff --git a/pkg/config/config-map.go b/pkg/config/config-map.go index cb8f55777860..42a42af10a59 100644 --- a/pkg/config/config-map.go +++ b/pkg/config/config-map.go @@ -47,11 +47,11 @@ func CreateConfigMapDisks(vmi *v1.VirtualMachineInstance, emptyIso bool) error { } disk := GetConfigMapDiskPath(volume.Name) - var vmiIsoSizes *v1.VirtualMachineInstanceIsoSizes - if emptyIso { - vmiIsoSizes = &vmi.Status.IsoSizes + vmiIsoSize, err := findIsoSize(vmi, &volume, emptyIso) + if err != nil { + return err } - if err := createIsoConfigImage(disk, volume.ConfigMap.VolumeLabel, filesPath, vmiIsoSizes); err != nil { + if err := createIsoConfigImage(disk, volume.ConfigMap.VolumeLabel, filesPath, vmiIsoSize); err != nil { return err } diff --git a/pkg/config/config.go b/pkg/config/config.go index f8b1bc3ad496..706cc86ddada 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -23,7 +23,6 @@ import ( "fmt" "os" "os/exec" - "path" "path/filepath" v1 "kubevirt.io/client-go/api/v1" @@ -153,15 +152,11 @@ func defaultCreateEmptyIsoImage(output string, size int64) error { return nil } -func createIsoConfigImage(output string, volID string, files []string, sizes *v1.VirtualMachineInstanceIsoSizes) error { +func createIsoConfigImage(output string, volID string, files []string, size int64) error { var err error - if sizes == nil { + if size == 0 { err = createISOImage(output, volID, files) } else { - size, exists := (*sizes)[path.Base(output)] - if !exists { - return fmt.Errorf("no size is defined for iso '%s", output) - } err = createEmptyISOImage(output, size) } if err != nil { @@ -169,3 +164,15 @@ func createIsoConfigImage(output string, volID string, files []string, sizes *v1 } return nil } + +func findIsoSize(vmi *v1.VirtualMachineInstance, volume *v1.Volume, emptyIso bool) (int64, error) { + if emptyIso { + for _, vs := range vmi.Status.VolumeStatus { + if vs.Name == volume.Name { + return vs.Size, nil + } + } + return 0, fmt.Errorf("failed to find the status of volume %s", volume.Name) + } + return 0, nil +} diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 7721d69131b8..67f8f52e26fb 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -73,7 +73,7 @@ var _ = Describe("Creating config images", func() { It("Should create an iso image", func() { imgPath := filepath.Join(tempISODir, "volume1.iso") - err := createIsoConfigImage(imgPath, "", expectedLayout, nil) + err := createIsoConfigImage(imgPath, "", expectedLayout, 0) Expect(err).NotTo(HaveOccurred()) _, err = os.Stat(imgPath) Expect(err).NotTo(HaveOccurred()) diff --git a/pkg/config/downwardapi.go b/pkg/config/downwardapi.go index 452c8d4816cc..4f0dca2df00b 100644 --- a/pkg/config/downwardapi.go +++ b/pkg/config/downwardapi.go @@ -48,11 +48,11 @@ func CreateDownwardAPIDisks(vmi *v1.VirtualMachineInstance, emptyIso bool) error } disk := GetDownwardAPIDiskPath(volume.Name) - var vmiIsoSizes *v1.VirtualMachineInstanceIsoSizes - if emptyIso { - vmiIsoSizes = &vmi.Status.IsoSizes + vmiIsoSize, err := findIsoSize(vmi, &volume, emptyIso) + if err != nil { + return err } - if err := createIsoConfigImage(disk, volume.DownwardAPI.VolumeLabel, filesPath, vmiIsoSizes); err != nil { + if err := createIsoConfigImage(disk, volume.DownwardAPI.VolumeLabel, filesPath, vmiIsoSize); err != nil { return err } diff --git a/pkg/config/secret.go b/pkg/config/secret.go index 71619680a54b..77c1b866fc66 100644 --- a/pkg/config/secret.go +++ b/pkg/config/secret.go @@ -48,11 +48,11 @@ func CreateSecretDisks(vmi *v1.VirtualMachineInstance, emptyIso bool) error { } disk := GetSecretDiskPath(volume.Name) - var vmiIsoSizes *v1.VirtualMachineInstanceIsoSizes - if emptyIso { - vmiIsoSizes = &vmi.Status.IsoSizes + vmiIsoSize, err := findIsoSize(vmi, &volume, emptyIso) + if err != nil { + return err } - if err := createIsoConfigImage(disk, volume.Secret.VolumeLabel, filesPath, vmiIsoSizes); err != nil { + if err := createIsoConfigImage(disk, volume.Secret.VolumeLabel, filesPath, vmiIsoSize); err != nil { return err } diff --git a/pkg/config/service-account.go b/pkg/config/service-account.go index d1b5a568a625..f33fc05c447a 100644 --- a/pkg/config/service-account.go +++ b/pkg/config/service-account.go @@ -42,11 +42,11 @@ func CreateServiceAccountDisk(vmi *v1.VirtualMachineInstance, emptyIso bool) err } disk := GetServiceAccountDiskPath() - var vmiIsoSizes *v1.VirtualMachineInstanceIsoSizes - if emptyIso { - vmiIsoSizes = &vmi.Status.IsoSizes + vmiIsoSize, err := findIsoSize(vmi, &volume, emptyIso) + if err != nil { + return err } - if err := createIsoConfigImage(disk, "", filesPath, vmiIsoSizes); err != nil { + if err := createIsoConfigImage(disk, "", filesPath, vmiIsoSize); err != nil { return err } diff --git a/pkg/config/sysprep.go b/pkg/config/sysprep.go index 3596226bf04d..ab4ac863228f 100644 --- a/pkg/config/sysprep.go +++ b/pkg/config/sysprep.go @@ -69,11 +69,11 @@ func CreateSysprepDisks(vmi *v1.VirtualMachineInstance, emptyIso bool) error { if !shouldCreateSysprepDisk(volume.Sysprep) { continue } - var vmiIsoSizes *v1.VirtualMachineInstanceIsoSizes - if emptyIso { - vmiIsoSizes = &vmi.Status.IsoSizes + vmiIsoSize, err := findIsoSize(vmi, &volume, emptyIso) + if err != nil { + return err } - if err := createSysprepDisk(volume.Name, vmiIsoSizes); err != nil { + if err := createSysprepDisk(volume.Name, vmiIsoSize); err != nil { return err } } @@ -84,7 +84,7 @@ func shouldCreateSysprepDisk(volumeSysprep *v1.SysprepSource) bool { return volumeSysprep != nil && sysprepVolumeHasContents(volumeSysprep) } -func createSysprepDisk(volumeName string, sizes *v1.VirtualMachineInstanceIsoSizes) error { +func createSysprepDisk(volumeName string, size int64) error { sysprepSourcePath := GetSysprepSourcePath(volumeName) if err := validateAutounattendPresence(sysprepSourcePath); err != nil { return err @@ -94,12 +94,12 @@ func createSysprepDisk(volumeName string, sizes *v1.VirtualMachineInstanceIsoSiz return err } - return createIsoImageAndSetFileOwnership(volumeName, filesPath, sizes) + return createIsoImageAndSetFileOwnership(volumeName, filesPath, size) } -func createIsoImageAndSetFileOwnership(volumeName string, filesPath []string, sizes *v1.VirtualMachineInstanceIsoSizes) error { +func createIsoImageAndSetFileOwnership(volumeName string, filesPath []string, size int64) error { disk := GetSysprepDiskPath(volumeName) - if err := createIsoConfigImage(disk, sysprepVolumeLabel, filesPath, sizes); err != nil { + if err := createIsoConfigImage(disk, sysprepVolumeLabel, filesPath, size); err != nil { return err } if err := ephemeraldiskutils.DefaultOwnershipManager.SetFileOwnership(disk); err != nil { diff --git a/pkg/virt-handler/vm.go b/pkg/virt-handler/vm.go index 0150d4617fdf..a66fb104f603 100644 --- a/pkg/virt-handler/vm.go +++ b/pkg/virt-handler/vm.go @@ -1198,10 +1198,12 @@ func (d *VirtualMachineController) updateIsoSizeStatus(vmi *v1.VirtualMachineIns if err != nil { continue } - if vmi.Status.IsoSizes == nil { - vmi.Status.IsoSizes = make(v1.VirtualMachineInstanceIsoSizes) + for _, vs := range vmi.Status.VolumeStatus { + if vs.Name == volume.Name { + vs.Size = stats.Size() + continue + } } - vmi.Status.IsoSizes[path.Base(volPath)] = stats.Size() } } diff --git a/pkg/virt-launcher/virtwrap/manager.go b/pkg/virt-launcher/virtwrap/manager.go index f03f6da1f3fd..bf084da281d5 100644 --- a/pkg/virt-launcher/virtwrap/manager.go +++ b/pkg/virt-launcher/virtwrap/manager.go @@ -388,7 +388,7 @@ func (l *LibvirtDomainManager) MigrateVMI(vmi *v1.VirtualMachineInstance, option return l.startMigration(vmi, options) } -func (l *LibvirtDomainManager) generateSomeCloudInitISO(vmi *v1.VirtualMachineInstance, domPtr *cli.VirDomain, sizes *v1.VirtualMachineInstanceIsoSizes) error { +func (l *LibvirtDomainManager) generateSomeCloudInitISO(vmi *v1.VirtualMachineInstance, domPtr *cli.VirDomain, size int64) error { var devicesMetadata []cloudinit.DeviceData // this is the point where we need to build the devices metadata if it was requested. // This metadata maps the user provided tag to the hypervisor assigned device address. @@ -410,8 +410,8 @@ func (l *LibvirtDomainManager) generateSomeCloudInitISO(vmi *v1.VirtualMachineIn cloudInitDataStore.DevicesData = &devicesMetadata } var err error - if sizes != nil { - err = cloudinit.GenerateEmptyIso(vmi.Name, vmi.Namespace, cloudInitDataStore, sizes) + if size != 0 { + err = cloudinit.GenerateEmptyIso(vmi.Name, vmi.Namespace, cloudInitDataStore, size) } else { err = cloudinit.GenerateLocalData(vmi.Name, vmi.Namespace, cloudInitDataStore) } @@ -423,11 +423,19 @@ func (l *LibvirtDomainManager) generateSomeCloudInitISO(vmi *v1.VirtualMachineIn } func (l *LibvirtDomainManager) generateCloudInitISO(vmi *v1.VirtualMachineInstance, domPtr *cli.VirDomain) error { - return l.generateSomeCloudInitISO(vmi, domPtr, nil) + return l.generateSomeCloudInitISO(vmi, domPtr, 0) } func (l *LibvirtDomainManager) generateCloudInitEmptyISO(vmi *v1.VirtualMachineInstance, domPtr *cli.VirDomain) error { - return l.generateSomeCloudInitISO(vmi, domPtr, &vmi.Status.IsoSizes) + if l.cloudInitDataStore == nil { + return nil + } + for _, vs := range vmi.Status.VolumeStatus { + if vs.Name == l.cloudInitDataStore.VolumeName { + return l.generateSomeCloudInitISO(vmi, domPtr, vs.Size) + } + } + return fmt.Errorf("failed to find the status of volume %s", l.cloudInitDataStore.VolumeName) } // All local environment setup that needs to occur before VirtualMachineInstance starts diff --git a/pkg/virt-launcher/virtwrap/manager_test.go b/pkg/virt-launcher/virtwrap/manager_test.go index e9b38d95fd67..0d5b5505d179 100644 --- a/pkg/virt-launcher/virtwrap/manager_test.go +++ b/pkg/virt-launcher/virtwrap/manager_test.go @@ -1843,6 +1843,80 @@ var _ = Describe("Manager", func() { Expect(virtualMachineInstanceGuestAgentInfo).ToNot(BeNil()) }) + It("executes generateCloudInitEmptyISO and succeeds", func() { + agentStore := agentpoller.NewAsyncAgentStore() + agentStore.Store(agentpoller.GET_FILESYSTEM, []api.Filesystem{ + { + Name: "test", + Mountpoint: "/mnt/whatever", + Type: "fs", + UsedBytes: 0, + TotalBytes: 0, + }, + }) + + manager, _ := NewLibvirtDomainManager(mockConn, testVirtShareDir, &agentStore, "/usr/share/OVMF", ephemeralDiskCreatorMock) + + // we need the non-typecast object to make the function we want to test available + libvirtmanager := manager.(*LibvirtDomainManager) + + vmi := newVMI(testNamespace, testVmName) + vmi.Status.VolumeStatus = make([]v1.VolumeStatus, 1) + vmi.Status.VolumeStatus[0] = v1.VolumeStatus{ + Name: "test1", + Size: 42, + } + + userData := "fake\nuser\ndata\n" + networkData := "FakeNetwork" + addCloudInitDisk(vmi, userData, networkData) + libvirtmanager.cloudInitDataStore = &cloudinit.CloudInitData{ + DataSource: cloudinit.DataSourceNoCloud, + VolumeName: "test1", + } + + err := libvirtmanager.generateCloudInitEmptyISO(vmi, nil) + Expect(err).ToNot(HaveOccurred()) + + isoPath := cloudinit.GetIsoFilePath(libvirtmanager.cloudInitDataStore.DataSource, vmi.Name, vmi.Namespace) + stats, err := os.Stat(isoPath) + Expect(err).ToNot(HaveOccurred()) + Expect(stats.Size()).To(Equal(int64(42))) + }) + + It("executes generateCloudInitEmptyISO and fails", func() { + agentStore := agentpoller.NewAsyncAgentStore() + agentStore.Store(agentpoller.GET_FILESYSTEM, []api.Filesystem{ + { + Name: "test", + Mountpoint: "/mnt/whatever", + Type: "fs", + UsedBytes: 0, + TotalBytes: 0, + }, + }) + + manager, _ := NewLibvirtDomainManager(mockConn, testVirtShareDir, &agentStore, "/usr/share/OVMF", ephemeralDiskCreatorMock) + + // we need the non-typecast object to make the function we want to test available + libvirtmanager := manager.(*LibvirtDomainManager) + + vmi := newVMI(testNamespace, testVmName) + vmi.Status.VolumeStatus = make([]v1.VolumeStatus, 1) + + userData := "fake\nuser\ndata\n" + networkData := "FakeNetwork" + addCloudInitDisk(vmi, userData, networkData) + libvirtmanager.cloudInitDataStore = &cloudinit.CloudInitData{ + DataSource: cloudinit.DataSourceNoCloud, + VolumeName: "test1", + } + + err := libvirtmanager.generateCloudInitEmptyISO(vmi, nil) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to find the status of volume test1")) + }) + // TODO: test error reporting on non successful VirtualMachineInstance syncs and kill attempts AfterEach(func() { diff --git a/pkg/virt-operator/resource/generate/components/validations_generated.go b/pkg/virt-operator/resource/generate/components/validations_generated.go index 04f1b6e8df3e..d76121a6a8d2 100644 --- a/pkg/virt-operator/resource/generate/components/validations_generated.go +++ b/pkg/virt-operator/resource/generate/components/validations_generated.go @@ -8070,13 +8070,6 @@ var CRDsValidation map[string]string = map[string]string{ type: string type: object type: array - isoSizes: - additionalProperties: - format: int64 - type: integer - description: Reprensents the size of the cloud-init isos associated with - the VMI - type: object launcherContainerImageVersion: description: LauncherContainerImageVersion indicates what container image is currently active for the vmi. @@ -8258,6 +8251,10 @@ var CRDsValidation map[string]string = map[string]string{ description: Reason is a brief description of why we are in the current hotplug volume phase type: string + size: + description: Represents the size of the volume + format: int64 + type: integer target: description: 'Target is the target name used when adding the volume to the VM, eg: vda' diff --git a/staging/src/kubevirt.io/client-go/api/v1/deepcopy_generated.go b/staging/src/kubevirt.io/client-go/api/v1/deepcopy_generated.go index da4fbbd94421..801d8e7c5d51 100644 --- a/staging/src/kubevirt.io/client-go/api/v1/deepcopy_generated.go +++ b/staging/src/kubevirt.io/client-go/api/v1/deepcopy_generated.go @@ -3611,28 +3611,6 @@ func (in *VirtualMachineInstanceGuestOSUserList) DeepCopyObject() runtime.Object return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in VirtualMachineInstanceIsoSizes) DeepCopyInto(out *VirtualMachineInstanceIsoSizes) { - { - in := &in - *out = make(VirtualMachineInstanceIsoSizes, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - return - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualMachineInstanceIsoSizes. -func (in VirtualMachineInstanceIsoSizes) DeepCopy() VirtualMachineInstanceIsoSizes { - if in == nil { - return nil - } - out := new(VirtualMachineInstanceIsoSizes) - in.DeepCopyInto(out) - return *out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VirtualMachineInstanceList) DeepCopyInto(out *VirtualMachineInstanceList) { *out = *in @@ -4185,13 +4163,6 @@ func (in *VirtualMachineInstanceStatus) DeepCopyInto(out *VirtualMachineInstance *out = new(VirtualMachineInstanceMigrationState) (*in).DeepCopyInto(*out) } - if in.IsoSizes != nil { - in, out := &in.IsoSizes, &out.IsoSizes - *out = make(VirtualMachineInstanceIsoSizes, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } if in.QOSClass != nil { in, out := &in.QOSClass, &out.QOSClass *out = new(corev1.PodQOSClass) diff --git a/staging/src/kubevirt.io/client-go/api/v1/openapi_generated.go b/staging/src/kubevirt.io/client-go/api/v1/openapi_generated.go index 251e87a2973a..3bbb5183fae9 100644 --- a/staging/src/kubevirt.io/client-go/api/v1/openapi_generated.go +++ b/staging/src/kubevirt.io/client-go/api/v1/openapi_generated.go @@ -25191,21 +25191,6 @@ func schema_kubevirtio_client_go_api_v1_VirtualMachineInstanceStatus(ref common. Format: "", }, }, - "isoSizes": { - SchemaProps: spec.SchemaProps{ - Description: "Reprensents the size of the cloud-init isos associated with the VMI", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, "qosClass": { SchemaProps: spec.SchemaProps{ Description: "The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", @@ -25915,6 +25900,13 @@ func schema_kubevirtio_client_go_api_v1_VolumeStatus(ref common.ReferenceCallbac Ref: ref("kubevirt.io/client-go/api/v1.HotplugVolumeStatus"), }, }, + "size": { + SchemaProps: spec.SchemaProps{ + Description: "Represents the size of the volume", + Type: []string{"integer"}, + Format: "int64", + }, + }, }, Required: []string{"name", "target"}, }, diff --git a/staging/src/kubevirt.io/client-go/api/v1/types.go b/staging/src/kubevirt.io/client-go/api/v1/types.go index 57f3a4922bc6..9fc49b18685d 100644 --- a/staging/src/kubevirt.io/client-go/api/v1/types.go +++ b/staging/src/kubevirt.io/client-go/api/v1/types.go @@ -210,8 +210,6 @@ type VirtualMachineInstanceStatus struct { MigrationMethod VirtualMachineInstanceMigrationMethod `json:"migrationMethod,omitempty"` // This represents the migration transport MigrationTransport VirtualMachineInstanceMigrationTransport `json:"migrationTransport,omitempty"` - // Reprensents the size of the cloud-init isos associated with the VMI - IsoSizes VirtualMachineInstanceIsoSizes `json:"isoSizes,omitempty"` // The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements // See PodQOSClass type for available QOS classes // More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md @@ -289,6 +287,8 @@ type VolumeStatus struct { PersistentVolumeClaimInfo *PersistentVolumeClaimInfo `json:"persistentVolumeClaimInfo,omitempty"` // If the volume is hotplug, this will contain the hotplug status. HotplugVolume *HotplugVolumeStatus `json:"hotplugVolume,omitempty"` + // Represents the size of the volume + Size int64 `json:"size,omitempty"` } // HotplugVolumeStatus represents the hotplug status of the volume @@ -615,10 +615,6 @@ const ( MigrationTransportUnix VirtualMachineInstanceMigrationTransport = "Unix" ) -// -// +k8s:openapi-gen=true -type VirtualMachineInstanceIsoSizes map[string]int64 - // // +k8s:openapi-gen=true type VirtualMachineInstanceMigrationMethod string diff --git a/staging/src/kubevirt.io/client-go/api/v1/types_swagger_generated.go b/staging/src/kubevirt.io/client-go/api/v1/types_swagger_generated.go index 555fd47c8ba9..c164798b1abc 100644 --- a/staging/src/kubevirt.io/client-go/api/v1/types_swagger_generated.go +++ b/staging/src/kubevirt.io/client-go/api/v1/types_swagger_generated.go @@ -67,7 +67,6 @@ func (VirtualMachineInstanceStatus) SwaggerDoc() map[string]string { "migrationState": "Represents the status of a live migration", "migrationMethod": "Represents the method using which the vmi can be migrated: live migration or block migration", "migrationTransport": "This represents the migration transport", - "isoSizes": "Reprensents the size of the cloud-init isos associated with the VMI", "qosClass": "The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements\nSee PodQOSClass type for available QOS classes\nMore info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md\n+optional", "launcherContainerImageVersion": "LauncherContainerImageVersion indicates what container image is currently active for the vmi.", "evacuationNodeName": "EvacuationNodeName is used to track the eviction process of a VMI. It stores the name of the node that we want\nto evacuate. It is meant to be used by KubeVirt core components only and can't be set or modified by users.\n+optional", @@ -99,6 +98,7 @@ func (VolumeStatus) SwaggerDoc() map[string]string { "message": "Message is a detailed message about the current hotplug volume phase", "persistentVolumeClaimInfo": "PersistentVolumeClaimInfo is information about the PVC that handler requires during start flow", "hotplugVolume": "If the volume is hotplug, this will contain the hotplug status.", + "size": "Represents the size of the volume", } } diff --git a/staging/src/kubevirt.io/client-go/apis/snapshot/v1alpha1/openapi_generated.go b/staging/src/kubevirt.io/client-go/apis/snapshot/v1alpha1/openapi_generated.go index b79c59feb6b2..aa6d120b9ebf 100644 --- a/staging/src/kubevirt.io/client-go/apis/snapshot/v1alpha1/openapi_generated.go +++ b/staging/src/kubevirt.io/client-go/apis/snapshot/v1alpha1/openapi_generated.go @@ -20249,21 +20249,6 @@ func schema_kubevirtio_client_go_api_v1_VirtualMachineInstanceStatus(ref common. Format: "", }, }, - "isoSizes": { - SchemaProps: spec.SchemaProps{ - Description: "Reprensents the size of the cloud-init isos associated with the VMI", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, "qosClass": { SchemaProps: spec.SchemaProps{ Description: "The Quality of Service (QOS) classification assigned to the virtual machine instance based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", @@ -20973,6 +20958,13 @@ func schema_kubevirtio_client_go_api_v1_VolumeStatus(ref common.ReferenceCallbac Ref: ref("kubevirt.io/client-go/api/v1.HotplugVolumeStatus"), }, }, + "size": { + SchemaProps: spec.SchemaProps{ + Description: "Represents the size of the volume", + Type: []string{"integer"}, + Format: "int64", + }, + }, }, Required: []string{"name", "target"}, },