Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
Signed-off-by: yaroslavborbat <[email protected]>
  • Loading branch information
yaroslavborbat committed Jan 16, 2025
1 parent 0656aea commit bd7b2ee
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 160 deletions.
15 changes: 0 additions & 15 deletions api/client/kubeclient/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,21 +162,6 @@ func (v vm) AddVolume(ctx context.Context, name string, opts v1alpha2.VirtualMac
Param("image", opts.Image).
Do(ctx).
Error()
//c := v.restClient.Put().AbsPath(path)
//if opts.Name != "" {
// c = c.Param("name", opts.Name)
//}
//if opts.VolumeKind != "" {
// c = c.Param("volumeKind", opts.VolumeKind)
//}
//if opts.PVCName != "" {
// c = c.Param("pvcName", opts.PVCName)
//}
//if opts.Image != "" {
// c = c.Param("image", opts.Image)
//}
//
//return c.Do(ctx).Error()
}

func (v vm) RemoveVolume(ctx context.Context, name string, opts v1alpha2.VirtualMachineRemoveVolume) error {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions api/subresources/v1alpha2/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

82 changes: 32 additions & 50 deletions images/virtualization-artifact/pkg/controller/kvapi/kvapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,27 +32,31 @@ type Kubevirt interface {
HotplugVolumesEnabled() bool
}

// Deprecated: use virt client.
func New(cli client.Client, kv Kubevirt) *KvApi {
return &KvApi{
Client: cli,
kubevirt: kv,
}
}

// Deprecated: use virt client.
type KvApi struct {
client.Client
kubevirt Kubevirt
}

func (api *KvApi) AddVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, opts *AddVolumeOptions) error {
// Deprecated: use virt client.
func (api *KvApi) AddVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, opts *virtv1.AddVolumeOptions) error {
return api.addVolume(ctx, kvvm, opts)
}

// Deprecated: use virt client.
func (api *KvApi) RemoveVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, opts *virtv1.RemoveVolumeOptions) error {
return api.removeVolume(ctx, kvvm, opts)
}

func (api *KvApi) addVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, opts *AddVolumeOptions) error {
func (api *KvApi) addVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, opts *virtv1.AddVolumeOptions) error {
if kvvm == nil {
return nil
}
Expand All @@ -71,7 +75,7 @@ func (api *KvApi) addVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, op

opts.Disk.Name = opts.Name

volumeRequest := VirtualMachineVolumeRequest{
volumeRequest := virtv1.VirtualMachineVolumeRequest{
AddVolumeOptions: opts,
}

Expand All @@ -80,8 +84,6 @@ func (api *KvApi) addVolume(ctx context.Context, kvvm *virtv1.VirtualMachine, op
opts.VolumeSource.DataVolume.Hotpluggable = true
case opts.VolumeSource.PersistentVolumeClaim != nil:
opts.VolumeSource.PersistentVolumeClaim.Hotpluggable = true
case opts.VolumeSource.ContainerDisk != nil:
opts.VolumeSource.ContainerDisk.Hotpluggable = true
}

return api.vmVolumePatchStatus(ctx, kvvm, &volumeRequest)
Expand All @@ -99,14 +101,14 @@ func (api *KvApi) removeVolume(ctx context.Context, kvvm *virtv1.VirtualMachine,
return fmt.Errorf("RemoveVolumeOptions requires name to be set")
}

volumeRequest := VirtualMachineVolumeRequest{
volumeRequest := virtv1.VirtualMachineVolumeRequest{
RemoveVolumeOptions: opts,
}

return api.vmVolumePatchStatus(ctx, kvvm, &volumeRequest)
}

func (api *KvApi) vmVolumePatchStatus(ctx context.Context, kvvm *virtv1.VirtualMachine, volumeRequest *VirtualMachineVolumeRequest) error {
func (api *KvApi) vmVolumePatchStatus(ctx context.Context, kvvm *virtv1.VirtualMachine, volumeRequest *virtv1.VirtualMachineVolumeRequest) error {
if kvvm == nil {
return nil
}
Expand All @@ -133,7 +135,7 @@ func (api *KvApi) vmVolumePatchStatus(ctx context.Context, kvvm *virtv1.VirtualM
return nil
}

func (api *KvApi) getDryRunOption(volumeRequest *VirtualMachineVolumeRequest) []string {
func (api *KvApi) getDryRunOption(volumeRequest *virtv1.VirtualMachineVolumeRequest) []string {
var dryRunOption []string
if options := volumeRequest.AddVolumeOptions; options != nil && options.DryRun != nil && options.DryRun[0] == metav1.DryRunAll {
dryRunOption = volumeRequest.AddVolumeOptions.DryRun
Expand All @@ -143,7 +145,7 @@ func (api *KvApi) getDryRunOption(volumeRequest *VirtualMachineVolumeRequest) []
return dryRunOption
}

func verifyVolumeOption(volumes []virtv1.Volume, volumeRequest *VirtualMachineVolumeRequest) error {
func verifyVolumeOption(volumes []virtv1.Volume, volumeRequest *virtv1.VirtualMachineVolumeRequest) error {
foundRemoveVol := false
for _, volume := range volumes {
if volumeRequest.AddVolumeOptions != nil {
Expand All @@ -170,16 +172,13 @@ func verifyVolumeOption(volumes []virtv1.Volume, volumeRequest *VirtualMachineVo
return nil
}

func volumeSourceName(volumeSource *HotplugVolumeSource) string {
func volumeSourceName(volumeSource *virtv1.HotplugVolumeSource) string {
if volumeSource.DataVolume != nil {
return volumeSource.DataVolume.Name
}
if volumeSource.PersistentVolumeClaim != nil {
return volumeSource.PersistentVolumeClaim.ClaimName
}
if volumeSource.ContainerDisk != nil {
return ""
}
return ""
}

Expand All @@ -193,46 +192,26 @@ func volumeNameExists(volume virtv1.Volume, volumeName string) bool {

func volumeSourceExists(volume virtv1.Volume, volumeName string) bool {
return (volume.DataVolume != nil && volume.DataVolume.Name == volumeName) ||
(volume.PersistentVolumeClaim != nil && volume.PersistentVolumeClaim.ClaimName == volumeName)
(volume.PersistentVolumeClaim != nil && volume.PersistentVolumeClaim.ClaimName == volumeName) ||
(volume.ContainerDisk != nil && volume.ContainerDisk.Image != "")
}

func volumeHotpluggable(volume virtv1.Volume) bool {
return (volume.DataVolume != nil && volume.DataVolume.Hotpluggable) ||
(volume.PersistentVolumeClaim != nil && volume.PersistentVolumeClaim.Hotpluggable) ||
(volume.ContainerDisk != nil)
return (volume.DataVolume != nil && volume.DataVolume.Hotpluggable) || (volume.PersistentVolumeClaim != nil && volume.PersistentVolumeClaim.Hotpluggable)
}

func generateVMVolumeRequestPatch(vm *virtv1.VirtualMachine, volumeRequest *VirtualMachineVolumeRequest) (string, error) {
var newVolumeRequests []VirtualMachineVolumeRequest

for _, req := range vm.Status.VolumeRequests {
newReq := VirtualMachineVolumeRequest{
RemoveVolumeOptions: req.RemoveVolumeOptions,
}
if req.AddVolumeOptions != nil {
addVolumeOptions := &AddVolumeOptions{
Name: req.AddVolumeOptions.Name,
DryRun: req.AddVolumeOptions.DryRun,
Disk: req.AddVolumeOptions.Disk,
VolumeSource: &HotplugVolumeSource{
PersistentVolumeClaim: req.AddVolumeOptions.VolumeSource.PersistentVolumeClaim,
DataVolume: req.AddVolumeOptions.VolumeSource.DataVolume,
},
}

newReq.AddVolumeOptions = addVolumeOptions
}
}
func generateVMVolumeRequestPatch(vm *virtv1.VirtualMachine, volumeRequest *virtv1.VirtualMachineVolumeRequest) (string, error) {
vmCopy := vm.DeepCopy()

// We only validate the list against other items in the list at this point.
// The VM validation webhook will validate the list against the VMI spec
// during the Patch command
if volumeRequest.AddVolumeOptions != nil {
if err := addAddVolumeRequests(&newVolumeRequests, volumeRequest); err != nil {
if err := addAddVolumeRequests(vmCopy, volumeRequest); err != nil {
return "", err
}
} else if volumeRequest.RemoveVolumeOptions != nil {
if err := addRemoveVolumeRequests(&newVolumeRequests, volumeRequest); err != nil {
if err := addRemoveVolumeRequests(vmCopy, volumeRequest); err != nil {
return "", err
}
}
Expand All @@ -241,24 +220,24 @@ func generateVMVolumeRequestPatch(vm *virtv1.VirtualMachine, volumeRequest *Virt
if len(vm.Status.VolumeRequests) > 0 {
verb = patch.PatchReplaceOp
}
jop := patch.NewJsonPatchOperation(verb, "/status/volumeRequests", newVolumeRequests)
jop := patch.NewJsonPatchOperation(verb, "/status/volumeRequests", vmCopy.Status.VolumeRequests)
jp := patch.NewJsonPatch(jop)

return jp.String()
}

func addAddVolumeRequests(requests *[]VirtualMachineVolumeRequest, volumeRequest *VirtualMachineVolumeRequest) error {
func addAddVolumeRequests(vm *virtv1.VirtualMachine, volumeRequest *virtv1.VirtualMachineVolumeRequest) error {
name := volumeRequest.AddVolumeOptions.Name
for _, request := range *requests {
for _, request := range vm.Status.VolumeRequests {
if err := validateAddVolumeRequest(request, name); err != nil {
return err
}
}
*requests = append(*requests, *volumeRequest)
vm.Status.VolumeRequests = append(vm.Status.VolumeRequests, *volumeRequest)
return nil
}

func validateAddVolumeRequest(request VirtualMachineVolumeRequest, name string) error {
func validateAddVolumeRequest(request virtv1.VirtualMachineVolumeRequest, name string) error {
if addVolumeRequestExists(request, name) {
return fmt.Errorf("add volume request for volume [%s] already exists", name)
}
Expand All @@ -268,25 +247,28 @@ func validateAddVolumeRequest(request VirtualMachineVolumeRequest, name string)
return nil
}

func addRemoveVolumeRequests(requests *[]VirtualMachineVolumeRequest, volumeRequest *VirtualMachineVolumeRequest) error {
func addRemoveVolumeRequests(vm *virtv1.VirtualMachine, volumeRequest *virtv1.VirtualMachineVolumeRequest) error {
name := volumeRequest.RemoveVolumeOptions.Name
for _, request := range *requests {
var volumeRequestsList []virtv1.VirtualMachineVolumeRequest
for _, request := range vm.Status.VolumeRequests {
if addVolumeRequestExists(request, name) {
// Filter matching AddVolume requests from the new list.
continue
}
if removeVolumeRequestExists(request, name) {
return fmt.Errorf("a remove volume request for volume [%s] already exists and is still being processed", name)
}
volumeRequestsList = append(volumeRequestsList, request)
}
*requests = append(*requests, *volumeRequest)
volumeRequestsList = append(volumeRequestsList, *volumeRequest)
vm.Status.VolumeRequests = volumeRequestsList
return nil
}

func addVolumeRequestExists(request VirtualMachineVolumeRequest, name string) bool {
func addVolumeRequestExists(request virtv1.VirtualMachineVolumeRequest, name string) bool {
return request.AddVolumeOptions != nil && request.AddVolumeOptions.Name == name
}

func removeVolumeRequestExists(request VirtualMachineVolumeRequest, name string) bool {
func removeVolumeRequestExists(request virtv1.VirtualMachineVolumeRequest, name string) bool {
return request.RemoveVolumeOptions != nil && request.RemoveVolumeOptions.Name == name
}
47 changes: 0 additions & 47 deletions images/virtualization-artifact/pkg/controller/kvapi/types.go

This file was deleted.

Loading

0 comments on commit bd7b2ee

Please sign in to comment.