From 9e6760c49594c9b066e53ed1105a808bd8e15413 Mon Sep 17 00:00:00 2001 From: Jonada Hoxha Date: Sun, 2 Jun 2024 19:16:21 +0200 Subject: [PATCH] Introduce `IsWithinGracePeriod` function --- pkg/schema/v1/contracts.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pkg/schema/v1/contracts.go b/pkg/schema/v1/contracts.go index 043753ab..049f9671 100644 --- a/pkg/schema/v1/contracts.go +++ b/pkg/schema/v1/contracts.go @@ -1,9 +1,12 @@ package v1 import ( + "fmt" "github.com/icinga/icinga-go-library/types" kmetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ktypes "k8s.io/apimachinery/pkg/types" + kcache "k8s.io/client-go/tools/cache" + "time" ) type Resource interface { @@ -58,6 +61,25 @@ func (m *Meta) SetOwnerReferences([]kmetav1.OwnerReference) { panic("Not expe func (m *Meta) GetManagedFields() []kmetav1.ManagedFieldsEntry { panic("Not expected to be called") } func (m *Meta) SetManagedFields([]kmetav1.ManagedFieldsEntry) { panic("Not expected to be called") } +func IsWithinGracePeriod(k kmetav1.Object) *string { + const gracePeriod = 5 * time.Minute + + deadline := k.GetCreationTimestamp().Add(gracePeriod) + now := time.Now() + if now.Before(deadline) { + key, _ := kcache.MetaNamespaceKeyFunc(k) + reason := fmt.Sprintf( + "%s %s is within grace period until %s, so its state is not yet evaluated.", + types.Name(k), + key, + deadline) + + return &reason + } + + return nil +} + // Assert interface compliance. var ( _ kmetav1.Object = (*Meta)(nil)