Skip to content

Commit

Permalink
remove inUse event add condition
Browse files Browse the repository at this point in the history
Signed-off-by: Valeriy Khorunzhin <[email protected]>
  • Loading branch information
Valeriy Khorunzhin committed Jan 15, 2025
1 parent 6f1ded9 commit bdc28ef
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
3 changes: 0 additions & 3 deletions api/core/v1alpha2/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@ const (
// ReasonVMOPStarted is event reason that the operation is started
ReasonVMOPStarted = "VirtualMachineOperationStarted"

// ReasonVMClassInUse is event reason that VMClass is used by virtual machine.
ReasonVMClassInUse = "VirtualMachineClassInUse"

// ReasonVDStorageClassWasDeleted is event reason that VDStorageClass was deleted.
ReasonVDStorageClassWasDeleted = "VirtualDiskStorageClassWasDeleted"
// ReasonVDStorageClassNotFound is event reason that VDStorageClass not found.
Expand Down
6 changes: 6 additions & 0 deletions api/core/v1alpha2/vmclasscondition/condition.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func (t Type) String() string {
const (
TypeReady Type = "Ready"
TypeDiscovered Type = "Discovered"
TypeInUse Type = "InUse"
)

type Reason string
Expand All @@ -44,4 +45,9 @@ const (
ReasonDiscoverySucceeded Reason = "DiscoverySucceeded"
ReasonDiscoverySkip Reason = "DiscoverySkip"
ReasonDiscoveryFailed Reason = "DiscoveryFailed"

// ReasonVMClassInUse is event reason that VMClass is used by virtual machine.
ReasonVMClassInUse Reason = "VirtualMachineClassInUse"
// ReasonVMClassFree is event reason that VMClass not used by virtual machine.
ReasonVMClassFree Reason = "VirtualMachineClassFree"
)
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,18 @@ import (
"fmt"
"time"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/reconcile"

"github.com/deckhouse/deckhouse/pkg/log"
"github.com/deckhouse/virtualization-controller/pkg/common/object"
"github.com/deckhouse/virtualization-controller/pkg/controller/conditions"
"github.com/deckhouse/virtualization-controller/pkg/controller/vmclass/internal/state"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
"github.com/deckhouse/virtualization/api/core/v1alpha2/vmclasscondition"
)

const nameDeletionHandler = "DeletionHandler"
Expand Down Expand Up @@ -58,15 +60,28 @@ func (h *DeletionHandler) Handle(ctx context.Context, s state.VirtualMachineClas
controllerutil.AddFinalizer(changed, virtv2.FinalizerVMCleanup)
return reconcile.Result{}, nil
}
cb := conditions.NewConditionBuilder(vmclasscondition.TypeInUse).Generation(changed.Generation)
defer func() { conditions.SetCondition(cb, &changed.Status.Conditions) }()
vms, err := s.VirtualMachines(ctx)
if err != nil {
return reconcile.Result{}, err
}
if len(vms) > 0 {
msg := fmt.Sprintf("VirtualMachineClass cannot be deleted, there are VMs that use it. %s...", object.NamespacedName(&vms[0]))
h.recorder.Event(changed, corev1.EventTypeWarning, virtv2.ReasonVMClassInUse, msg)
var vmNamespacedNames []string
for i := range vms {
vmNamespacedNames = append(vmNamespacedNames, object.NamespacedName(&vms[i]).String())
}
msg := fmt.Sprintf("VirtualMachineClass cannot be deleted, there are VMs that use it. %q", vmNamespacedNames)
cb.
Status(metav1.ConditionTrue).
Reason(vmclasscondition.ReasonVMClassInUse).
Message(msg)
return reconcile.Result{RequeueAfter: 60 * time.Second}, nil
}
cb.
Status(metav1.ConditionFalse).
Reason(vmclasscondition.ReasonVMClassFree).
Message("")
h.logger.Info("Deletion observed: remove cleanup finalizer from VirtualMachineClass")
controllerutil.RemoveFinalizer(changed, virtv2.FinalizerVMCleanup)
return reconcile.Result{}, nil
Expand Down

0 comments on commit bdc28ef

Please sign in to comment.