Skip to content

Commit

Permalink
feat(vm): add hotplug images to VirtualMachine status
Browse files Browse the repository at this point in the history
Signed-off-by: Roman Sysoev <[email protected]>
  • Loading branch information
Roman Sysoev committed Jan 30, 2025
1 parent d408a98 commit 31c329b
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -268,18 +268,53 @@ func (h *BlockDeviceHandler) getBlockDeviceStatusRefsFromVMBDA(ctx context.Conte
continue
}

var vd *virtv2.VirtualDisk
vd, err = s.VirtualDisk(ctx, vmbda.Spec.BlockDeviceRef.Name)
if err != nil {
return nil, err
}
var (
cvi *virtv2.ClusterVirtualImage
vi *virtv2.VirtualImage
vd *virtv2.VirtualDisk
bdStatusRef virtv2.BlockDeviceStatusRef
)

switch vmbda.Spec.BlockDeviceRef.Kind {
case virtv2.VMBDAObjectRefKindVirtualDisk:
vd, err = s.VirtualDisk(ctx, vmbda.Spec.BlockDeviceRef.Name)
if err != nil {
return nil, err
}

if vd == nil {
continue
if vd == nil {
continue
}

bdStatusRef = h.getDiskStatusRef(virtv2.DiskDevice, vmbda.Spec.BlockDeviceRef.Name)
bdStatusRef.Size = vd.Status.Capacity
case virtv2.VMBDAObjectRefKindVirtualImage:
vi, err = s.VirtualImage(ctx, vmbda.Spec.BlockDeviceRef.Name)
if err != nil {
return nil, err
}

if vi == nil {
continue
}

bdStatusRef = h.getDiskStatusRef(virtv2.ImageDevice, vmbda.Spec.BlockDeviceRef.Name)
bdStatusRef.Size = vi.Status.Size.Unpacked

case virtv2.VMBDAObjectRefKindClusterVirtualImage:
cvi, err = s.ClusterVirtualImage(ctx, vmbda.Spec.BlockDeviceRef.Name)
if err != nil {
return nil, err
}

if cvi == nil {
continue
}

bdStatusRef = h.getDiskStatusRef(virtv2.ClusterImageDevice, vmbda.Spec.BlockDeviceRef.Name)
bdStatusRef.Size = cvi.Status.Size.Unpacked
}

bdStatusRef := h.getDiskStatusRef(virtv2.DiskDevice, vmbda.Spec.BlockDeviceRef.Name)
bdStatusRef.Size = vd.Status.Capacity
bdStatusRef.Hotplugged = true
bdStatusRef.VirtualMachineBlockDeviceAttachmentName = vmbda.Name

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ type VirtualMachineState interface {
Pod(ctx context.Context) (*corev1.Pod, error)
VMBDAList(ctx context.Context) ([]virtv2.VirtualMachineBlockDeviceAttachment, error)
VirtualDisk(ctx context.Context, name string) (*virtv2.VirtualDisk, error)
VirtualImage(ctx context.Context, name string) (*virtv2.VirtualImage, error)
ClusterVirtualImage(ctx context.Context, name string) (*virtv2.ClusterVirtualImage, error)
VirtualDisksByName(ctx context.Context) (map[string]*virtv2.VirtualDisk, error)
VirtualImagesByName(ctx context.Context) (map[string]*virtv2.VirtualImage, error)
ClusterVirtualImagesByName(ctx context.Context) (map[string]*virtv2.ClusterVirtualImage, error)
Expand Down Expand Up @@ -193,6 +195,20 @@ func (s *state) VirtualDisk(ctx context.Context, name string) (*virtv2.VirtualDi
}, s.client, &virtv2.VirtualDisk{})
}

func (s *state) VirtualImage(ctx context.Context, name string) (*virtv2.VirtualImage, error) {
return object.FetchObject(ctx, types.NamespacedName{
Name: name,
Namespace: s.vm.Current().GetNamespace(),
}, s.client, &virtv2.VirtualImage{})
}

func (s *state) ClusterVirtualImage(ctx context.Context, name string) (*virtv2.ClusterVirtualImage, error) {
return object.FetchObject(ctx, types.NamespacedName{
Name: name,
Namespace: s.vm.Current().GetNamespace(),
}, s.client, &virtv2.ClusterVirtualImage{})
}

func (s *state) VirtualDisksByName(ctx context.Context) (map[string]*virtv2.VirtualDisk, error) {
if s.vm == nil {
return nil, nil
Expand Down

0 comments on commit 31c329b

Please sign in to comment.