Skip to content

Commit e6d04cb

Browse files
committed
fix(vm): fix errors with power state operations
Signed-off-by: dmitry.lopatin <dmitry.lopatin@flant.com>
1 parent 096377b commit e6d04cb

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

images/virtualization-artifact/pkg/controller/powerstate/kvvm_request.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,19 @@ limitations under the License.
1717
package powerstate
1818

1919
import (
20-
"fmt"
20+
"errors"
2121

2222
"k8s.io/apimachinery/pkg/api/equality"
2323
kvv1 "kubevirt.io/api/core/v1"
2424

2525
"github.com/deckhouse/virtualization-controller/pkg/common/patch"
2626
)
2727

28+
var (
29+
ErrChangesAlreadyExists = errors.New("changes already exist in the current status")
30+
ErrUnableToCompleteRequest = errors.New("unable to complete request: stop/start already underway")
31+
)
32+
2833
// BuildPatch creates a patch to request VM state changing via updating KVVM status.
2934
//
3035
// Some combinations lead to an error to not interfere with kvvm controller:
@@ -49,8 +54,12 @@ func BuildPatch(vm *kvv1.VirtualMachine, changes ...kvv1.VirtualMachineStateChan
4954
failOnConflict = false
5055
}
5156
if len(vm.Status.StateChangeRequests) != 0 {
57+
if equality.Semantic.DeepEqual(vm.Status.StateChangeRequests, changes) {
58+
return nil, ErrChangesAlreadyExists
59+
}
60+
5261
if failOnConflict {
53-
return nil, fmt.Errorf("unable to complete request: stop/start already underway")
62+
return nil, ErrUnableToCompleteRequest
5463
} else {
5564
verb = patch.PatchReplaceOp
5665
}

images/virtualization-artifact/pkg/controller/powerstate/operations.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package powerstate
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223

2324
"k8s.io/apimachinery/pkg/types"
@@ -36,6 +37,9 @@ func StartVM(ctx context.Context, cl client.Client, kvvm *kvv1.VirtualMachine) e
3637
jp, err := BuildPatch(kvvm,
3738
kvv1.VirtualMachineStateChangeRequest{Action: kvv1.StartRequest})
3839
if err != nil {
40+
if errors.Is(err, ErrChangesAlreadyExists) {
41+
return nil
42+
}
3943
return err
4044
}
4145
return cl.Status().Patch(ctx, kvvm, client.RawPatch(types.JSONPatchType, jp), &client.SubResourcePatchOptions{})
@@ -70,6 +74,9 @@ func RestartVM(ctx context.Context, cl client.Client, kvvm *kvv1.VirtualMachine,
7074
kvv1.VirtualMachineStateChangeRequest{Action: kvv1.StopRequest, UID: &kvvmi.UID},
7175
kvv1.VirtualMachineStateChangeRequest{Action: kvv1.StartRequest})
7276
if err != nil {
77+
if errors.Is(err, ErrChangesAlreadyExists) {
78+
return nil
79+
}
7380
return err
7481
}
7582

images/virtualization-artifact/pkg/controller/vm/internal/sync_power_state.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ func (h *SyncPowerStateHandler) Handle(ctx context.Context, s state.VirtualMachi
7070
}
7171

7272
changed := s.VirtualMachine().Changed()
73+
if isDeletion(changed) {
74+
return reconcile.Result{}, nil
75+
}
7376

7477
kvvm, err := s.KVVM(ctx)
7578
if err != nil {

0 commit comments

Comments
 (0)