Skip to content

Commit

Permalink
refactor(cvi): add events
Browse files Browse the repository at this point in the history
Signed-off-by: Daniil Antoshin <[email protected]>
  • Loading branch information
danilrwx committed Dec 23, 2024
1 parent d7b875c commit 70c647a
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 11 deletions.
18 changes: 18 additions & 0 deletions api/core/v1alpha2/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,22 @@ const (

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

ReasonVDStorageClassWasDeleted = "VirtualDiskStorageClassWasDeleted"
ReasonVDStorageClassNotFound = "VirtualDiskStorageClassNotFound"
ReasonVDSpecChanged = "VirtualDiskSpecChanged"
ReasonVDContainerRegistrySecretNotFound = "VirtualDiskContainerRegistrySecretNotFound"

ReasonVDResizingStarted = "VirtualDiskResizingStarted"
ReasonVDResizingCompleted = "VirtualDiskResizingCompleted"
ReasonVDResizingFailed = "VirtualDiskResizingFailed"
ReasonVDResizingNotAvailable = "VirtualDiskResizingNotAvailable"

ReasonDataSourceSyncStarted = "DataSourceImportStarted"
ReasonDataSourceSyncInProgress = "DataSourceImportInProgress"
ReasonDataSourceSyncCompleted = "DataSourceImportCompleted"
ReasonDataSourceSyncFailed = "DataSourceImportFailed"

ReasonDataSourceDiskProvisioningCompleted = "DataSourceImportDiskProvisioningCompleted"
ReasonDataSourceDiskProvisioningFailed = "DataSourceImportDiskProvisioningFailed"
)
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
"github.com/deckhouse/virtualization-controller/pkg/controller/cvi/internal/source"
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
"github.com/deckhouse/virtualization-controller/pkg/dvcr"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
"github.com/deckhouse/virtualization-controller/pkg/logger"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
)
Expand Down Expand Up @@ -60,12 +61,13 @@ func NewController(
protection := service.NewProtectionService(mgr.GetClient(), virtv2.FinalizerCVIProtection)
importer := service.NewImporterService(dvcr, mgr.GetClient(), importerImage, requirements, PodPullPolicy, PodVerbose, ControllerName, protection)
uploader := service.NewUploaderService(dvcr, mgr.GetClient(), uploaderImage, requirements, PodPullPolicy, PodVerbose, ControllerName, protection)
recorder := eventrecord.NewEventRecorderLogger(mgr, ControllerName)

sources := source.NewSources()
sources.Set(virtv2.DataSourceTypeHTTP, source.NewHTTPDataSource(stat, importer, dvcr, ns))
sources.Set(virtv2.DataSourceTypeContainerImage, source.NewRegistryDataSource(stat, importer, dvcr, mgr.GetClient(), ns))
sources.Set(virtv2.DataSourceTypeObjectRef, source.NewObjectRefDataSource(stat, importer, dvcr, mgr.GetClient(), ns))
sources.Set(virtv2.DataSourceTypeUpload, source.NewUploadDataSource(stat, uploader, dvcr, ns))
sources.Set(virtv2.DataSourceTypeHTTP, source.NewHTTPDataSource(recorder, stat, importer, dvcr, ns))
sources.Set(virtv2.DataSourceTypeContainerImage, source.NewRegistryDataSource(recorder, stat, importer, dvcr, mgr.GetClient(), ns))
sources.Set(virtv2.DataSourceTypeObjectRef, source.NewObjectRefDataSource(recorder, stat, importer, dvcr, mgr.GetClient(), ns))
sources.Set(virtv2.DataSourceTypeUpload, source.NewUploadDataSource(recorder, stat, uploader, dvcr, ns))

reconciler := NewReconciler(
mgr.GetClient(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"errors"
"fmt"

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

Expand All @@ -34,6 +35,7 @@ import (
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
"github.com/deckhouse/virtualization-controller/pkg/dvcr"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
"github.com/deckhouse/virtualization-controller/pkg/logger"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
"github.com/deckhouse/virtualization/api/core/v1alpha2/cvicondition"
Expand All @@ -44,9 +46,11 @@ type HTTPDataSource struct {
importerService Importer
dvcrSettings *dvcr.Settings
controllerNamespace string
recorder eventrecord.EventRecorderLogger
}

func NewHTTPDataSource(
recorder eventrecord.EventRecorderLogger,
statService Stat,
importerService Importer,
dvcrSettings *dvcr.Settings,
Expand All @@ -57,6 +61,7 @@ func NewHTTPDataSource(
importerService: importerService,
dvcrSettings: dvcrSettings,
controllerNamespace: controllerNamespace,
recorder: recorder,
}
}

Expand All @@ -81,6 +86,12 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtualIma
switch {
case isDiskProvisioningFinished(condition):
log.Info("Cluster virtual image provisioning finished: clean up")
ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceDiskProvisioningCompleted,
"Disk provisioning finished: clean up",
)

cb.Status(metav1.ConditionTrue).
Reason(cvicondition.Ready).
Expand All @@ -100,6 +111,13 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtualIma

log.Info("Cleaning up...")
case pod == nil:
ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceSyncStarted,
"The HTTP DataSource import has started",
)

cvi.Status.Progress = ds.statService.GetProgress(cvi.GetUID(), pod, cvi.Status.Progress)

envSettings := ds.getEnvSettings(cvi, supgen)
Expand Down Expand Up @@ -129,6 +147,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtualIma

switch {
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Message(service.CapitalizeFirstLetter(err.Error() + "."))
Expand All @@ -138,6 +157,13 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtualIma
}
}

ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceSyncCompleted,
"The HTTP DataSource import has completed",
)

cb.Status(metav1.ConditionTrue).
Reason(cvicondition.Ready).
Message("")
Expand All @@ -163,6 +189,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtualIma
Message(service.CapitalizeFirstLetter(err.Error() + "."))
return reconcile.Result{}, nil
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Message(service.CapitalizeFirstLetter(err.Error() + "."))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"errors"
"fmt"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand All @@ -37,6 +38,7 @@ import (
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
"github.com/deckhouse/virtualization-controller/pkg/dvcr"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
"github.com/deckhouse/virtualization-controller/pkg/logger"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
"github.com/deckhouse/virtualization/api/core/v1alpha2/cvicondition"
Expand All @@ -48,12 +50,14 @@ type ObjectRefDataSource struct {
dvcrSettings *dvcr.Settings
client client.Client
controllerNamespace string
recorder eventrecord.EventRecorderLogger

viOnPvcSyncer *ObjectRefVirtualImageOnPvc
vdSyncer *ObjectRefVirtualDisk
}

func NewObjectRefDataSource(
recorder eventrecord.EventRecorderLogger,
statService Stat,
importerService Importer,
dvcrSettings *dvcr.Settings,
Expand All @@ -66,9 +70,10 @@ func NewObjectRefDataSource(
dvcrSettings: dvcrSettings,
client: client,
controllerNamespace: controllerNamespace,
recorder: recorder,

viOnPvcSyncer: NewObjectRefVirtualImageOnPvc(importerService, dvcrSettings, statService),
vdSyncer: NewObjectRefVirtualDisk(importerService, client, controllerNamespace, dvcrSettings, statService),
viOnPvcSyncer: NewObjectRefVirtualImageOnPvc(recorder, importerService, dvcrSettings, statService),
vdSyncer: NewObjectRefVirtualDisk(recorder, importerService, client, controllerNamespace, dvcrSettings, statService),
}
}

Expand Down Expand Up @@ -121,7 +126,12 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtu

switch {
case isDiskProvisioningFinished(condition):
log.Info("Cluster virtual image provisioning finished: clean up")
ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceDiskProvisioningCompleted,
"Disk provisioning finished: clean up",
)

cb.
Status(metav1.ConditionTrue).
Expand Down Expand Up @@ -181,6 +191,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtu

switch {
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down Expand Up @@ -232,6 +243,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, cvi *virtv2.ClusterVirtu
Message(service.CapitalizeFirstLetter(err.Error() + "."))
return reconcile.Result{}, nil
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"errors"
"fmt"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand All @@ -36,6 +37,7 @@ import (
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
"github.com/deckhouse/virtualization-controller/pkg/dvcr"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
"github.com/deckhouse/virtualization-controller/pkg/logger"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
"github.com/deckhouse/virtualization/api/core/v1alpha2/cvicondition"
Expand All @@ -48,15 +50,17 @@ type ObjectRefVirtualDisk struct {
statService Stat
dvcrSettings *dvcr.Settings
controllerNamespace string
recorder eventrecord.EventRecorderLogger
}

func NewObjectRefVirtualDisk(importerService Importer, client client.Client, controllerNamespace string, dvcrSettings *dvcr.Settings, statService Stat) *ObjectRefVirtualDisk {
func NewObjectRefVirtualDisk(recorder eventrecord.EventRecorderLogger, importerService Importer, client client.Client, controllerNamespace string, dvcrSettings *dvcr.Settings, statService Stat) *ObjectRefVirtualDisk {
return &ObjectRefVirtualDisk{
importerService: importerService,
statService: statService,
dvcrSettings: dvcrSettings,
client: client,
controllerNamespace: controllerNamespace,
recorder: recorder,
}
}

Expand All @@ -72,6 +76,12 @@ func (ds ObjectRefVirtualDisk) Sync(ctx context.Context, cvi *virtv2.ClusterVirt
switch {
case isDiskProvisioningFinished(cb.Condition()):
log.Info("Cluster virtual image provisioning finished: clean up")
ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceDiskProvisioningCompleted,
"Image provisioning finished: clean up",
)

cb.
Status(metav1.ConditionTrue).
Expand Down Expand Up @@ -125,6 +135,7 @@ func (ds ObjectRefVirtualDisk) Sync(ctx context.Context, cvi *virtv2.ClusterVirt

switch {
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down Expand Up @@ -161,6 +172,7 @@ func (ds ObjectRefVirtualDisk) Sync(ctx context.Context, cvi *virtv2.ClusterVirt
Message(service.CapitalizeFirstLetter(err.Error() + "."))
return reconcile.Result{}, nil
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"errors"
"fmt"

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

Expand All @@ -34,6 +35,7 @@ import (
"github.com/deckhouse/virtualization-controller/pkg/controller/service"
"github.com/deckhouse/virtualization-controller/pkg/controller/supplements"
"github.com/deckhouse/virtualization-controller/pkg/dvcr"
"github.com/deckhouse/virtualization-controller/pkg/eventrecord"
"github.com/deckhouse/virtualization-controller/pkg/logger"
virtv2 "github.com/deckhouse/virtualization/api/core/v1alpha2"
"github.com/deckhouse/virtualization/api/core/v1alpha2/cvicondition"
Expand All @@ -45,13 +47,15 @@ type ObjectRefVirtualImageOnPvc struct {
importerService Importer
statService Stat
dvcrSettings *dvcr.Settings
recorder eventrecord.EventRecorderLogger
}

func NewObjectRefVirtualImageOnPvc(importerService Importer, dvcrSettings *dvcr.Settings, statService Stat) *ObjectRefVirtualImageOnPvc {
func NewObjectRefVirtualImageOnPvc(recorder eventrecord.EventRecorderLogger, importerService Importer, dvcrSettings *dvcr.Settings, statService Stat) *ObjectRefVirtualImageOnPvc {
return &ObjectRefVirtualImageOnPvc{
importerService: importerService,
statService: statService,
dvcrSettings: dvcrSettings,
recorder: recorder,
}
}

Expand All @@ -67,6 +71,12 @@ func (ds ObjectRefVirtualImageOnPvc) Sync(ctx context.Context, cvi *virtv2.Clust
switch {
case isDiskProvisioningFinished(cb.Condition()):
log.Info("Cluster virtual image provisioning finished: clean up")
ds.recorder.Event(
cvi,
corev1.EventTypeNormal,
virtv2.ReasonDataSourceDiskProvisioningCompleted,
"Image provisioning finished: clean up",
)

cb.
Status(metav1.ConditionTrue).
Expand Down Expand Up @@ -120,6 +130,7 @@ func (ds ObjectRefVirtualImageOnPvc) Sync(ctx context.Context, cvi *virtv2.Clust

switch {
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down Expand Up @@ -156,6 +167,7 @@ func (ds ObjectRefVirtualImageOnPvc) Sync(ctx context.Context, cvi *virtv2.Clust
Message(service.CapitalizeFirstLetter(err.Error() + "."))
return reconcile.Result{}, nil
case errors.Is(err, service.ErrProvisioningFailed):
ds.recorder.Event(cvi, corev1.EventTypeWarning, virtv2.ReasonDataSourceDiskProvisioningFailed, "Disk provisioning failed")
cb.
Status(metav1.ConditionFalse).
Reason(cvicondition.ProvisioningFailed).
Expand Down
Loading

0 comments on commit 70c647a

Please sign in to comment.