Merge pull request #1993 from Infisical/daniel/k8-managed-secret-recreation

feat(k8-operator): reconcile on managed secret deletion
This commit is contained in:
Daniel Hougaard
2024-06-19 19:48:42 +02:00
committed by GitHub
3 changed files with 43 additions and 3 deletions

View File

@@ -18,4 +18,4 @@ version: v0.6.1
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "v0.6.0"
appVersion: "v0.6.1"

View File

@@ -32,7 +32,7 @@ controllerManager:
- ALL
image:
repository: infisical/kubernetes-operator
tag: v0.6.0
tag: v0.6.1
resources:
limits:
cpu: 500m

View File

@@ -5,11 +5,17 @@ import (
"fmt"
"time"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
controllerUtil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/predicate"
"sigs.k8s.io/controller-runtime/pkg/source"
secretsv1alpha1 "github.com/Infisical/infisical/k8-operator/api/v1alpha1"
"github.com/Infisical/infisical/k8-operator/packages/api"
@@ -69,6 +75,31 @@ func (r *InfisicalSecretReconciler) handleFinalizer(ctx context.Context, infisic
return nil
}
func (r *InfisicalSecretReconciler) handleManagedSecretDeletion(secret client.Object) []ctrl.Request {
var requests []ctrl.Request
infisicalSecrets := &secretsv1alpha1.InfisicalSecretList{}
err := r.List(context.Background(), infisicalSecrets)
if err != nil {
fmt.Printf("unable to list Infisical Secrets from cluster because [err=%v]", err)
return requests
}
for _, infisicalSecret := range infisicalSecrets.Items {
if secret.GetName() == infisicalSecret.Spec.ManagedSecretReference.SecretName &&
secret.GetNamespace() == infisicalSecret.Spec.ManagedSecretReference.SecretNamespace {
requests = append(requests, ctrl.Request{
NamespacedName: client.ObjectKey{
Namespace: infisicalSecret.Namespace,
Name: infisicalSecret.Name,
},
})
fmt.Printf("\nManaged secret deleted in resource %s: [name=%v] [namespace=%v]\n", infisicalSecret.Name, secret.GetName(), secret.GetNamespace())
}
}
return requests
}
func (r *InfisicalSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var infisicalSecretCR secretsv1alpha1.InfisicalSecret
requeueTime := time.Minute // seconds
@@ -154,9 +185,18 @@ func (r *InfisicalSecretReconciler) Reconcile(ctx context.Context, req ctrl.Requ
}, nil
}
// SetupWithManager sets up the controller with the Manager.
func (r *InfisicalSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&secretsv1alpha1.InfisicalSecret{}).
Watches(
&source.Kind{Type: &corev1.Secret{}},
handler.EnqueueRequestsFromMapFunc(r.handleManagedSecretDeletion),
builder.WithPredicates(predicate.Funcs{
// Always return true to ensure we process all delete events
DeleteFunc: func(e event.DeleteEvent) bool {
return true
},
}),
).
Complete(r)
}