fix: v4 changes

This commit is contained in:
sidwebworks
2025-08-12 18:58:35 +05:30
parent f9f989c8af
commit 97dac1da94
8 changed files with 81 additions and 55 deletions

View File

@@ -7,7 +7,7 @@ metadata:
annotations: annotations:
example.com/annotation-to-be-passed-to-managed-secret: "sample-value" example.com/annotation-to-be-passed-to-managed-secret: "sample-value"
spec: spec:
hostAPI: http://localhost:8080/api hostAPI: http://localhost:8085/api
resyncInterval: 10 resyncInterval: 10
instantUpdates: true instantUpdates: true
# tls: # tls:
@@ -32,7 +32,7 @@ spec:
# Universal Auth # Universal Auth
universalAuth: universalAuth:
secretsScope: secretsScope:
projectSlug: <your-project-slug> projectSlug: test-j7-kx
envSlug: dev # "dev", "staging", "prod", etc.. envSlug: dev # "dev", "staging", "prod", etc..
secretsPath: "/" # Root is "/" secretsPath: "/" # Root is "/"
recursive: true # Wether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false recursive: true # Wether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false

View File

@@ -1,32 +1,28 @@
apiVersion: secrets.infisical.com/v1alpha1 apiVersion: secrets.infisical.com/v1alpha1
kind: InfisicalSecret kind: InfisicalSecret
metadata: metadata:
name: infisicalsecret-sample name: infisicalsecret-sample
labels: labels:
label-to-be-passed-to-managed-secret: sample-value label-to-be-passed-to-managed-secret: sample-value
annotations: annotations:
example.com/annotation-to-be-passed-to-managed-secret: "sample-value" example.com/annotation-to-be-passed-to-managed-secret: "sample-value"
spec: spec:
hostAPI: http://localhost:8085/api hostAPI: http://localhost:8085/api
resyncInterval: 10 resyncInterval: 10
authentication: authentication:
# Native Kubernetes Auth # Universal Auth
kubernetesAuth: universalAuth:
identityId: 25d05878-0a2f-47c5-b889-46b70fb2dbfc secretsScope:
serviceAccountRef: projectSlug: test-j7-kx
name: infisical-auth envSlug: dev # "dev", "staging", "prod", etc..
namespace: default secretsPath: "/" # Root is "/"
recursive: true # Wether or not to use recursive mode (Fetches all secrets in an environment from a given secret path, and all folders inside the path) / defaults to false
# secretsScope is identical to the secrets scope in the universalAuth field in this sample. credentialsRef:
secretsScope: secretName: universal-auth-credentials
projectSlug: test-j7-kx
envSlug: dev
secretsPath: "/"
recursive: true
managedSecretReference:
secretName: managed-secret-k8s
secretNamespace: default secretNamespace: default
creationPolicy: "Orphan" ## Owner | Orphan
# secretType: kubernetes.io/dockerconfigjson managedSecretReference:
secretName: managed-secret-k8s
secretNamespace: default
creationPolicy: "Orphan" ## Owner | Orphan
# secretType: kubernetes.io/dockerconfigjson

View File

@@ -4,5 +4,5 @@ metadata:
name: universal-auth-credentials name: universal-auth-credentials
type: Opaque type: Opaque
stringData: stringData:
clientId: <your-client-id> clientId: 86c17800-00b9-4556-89a8-ea11ac6f8371
clientSecret: <your-client-secret> clientSecret: c5bc415b2fe4d40d9d7560bcf3f78cbf65edacc618d293503df1b6f175467933

View File

@@ -3,7 +3,7 @@ package api
import ( import (
"fmt" "fmt"
"github.com/Infisical/infisical/k8-operator/packages/model" "github.com/Infisical/infisical/k8-operator/internal/model"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
) )

View File

@@ -203,14 +203,14 @@ func (r *InfisicalSecretReconciler) Reconcile(ctx context.Context, req ctrl.Requ
if infisicalSecretCRD.Spec.InstantUpdates { if infisicalSecretCRD.Spec.InstantUpdates {
logger.Info("Instant updates are enabled") logger.Info("Instant updates are enabled")
if err := r.EnsureEventStream(ctx, logger, &infisicalSecretCRD); err != nil { if err := handler.OpenInstantUpdatesStream(ctx, logger, &infisicalSecretCRD, infisicalSecretResourceVariablesMap, r.SourceCh); err != nil {
logger.Error(err, fmt.Sprintf("unable to ensure event stream. Will requeue after [requeueTime=%v]", requeueTime)) logger.Error(err, fmt.Sprintf("unable to ensure event stream. Will requeue after [requeueTime=%v]", requeueTime))
return ctrl.Result{ return ctrl.Result{
RequeueAfter: requeueTime, RequeueAfter: requeueTime,
}, nil }, nil
} }
} else { } else {
r.CloseEventStream(ctx, logger, &infisicalSecretCRD) handler.CloseInstantUpdatesStream(ctx, logger, &infisicalSecretCRD, infisicalSecretResourceVariablesMap)
} }
// Sync again after the specified time // Sync again after the specified time

View File

@@ -7,6 +7,7 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
"github.com/Infisical/infisical/k8-operator/api/v1alpha1" "github.com/Infisical/infisical/k8-operator/api/v1alpha1"
"github.com/Infisical/infisical/k8-operator/internal/api" "github.com/Infisical/infisical/k8-operator/internal/api"
@@ -100,3 +101,22 @@ func (h *InfisicalSecretHandler) SetInfisicalAutoRedeploymentReady(ctx context.C
} }
reconciler.SetInfisicalAutoRedeploymentReady(ctx, logger, infisicalSecret, numDeployments, errorToConditionOn) reconciler.SetInfisicalAutoRedeploymentReady(ctx, logger, infisicalSecret, numDeployments, errorToConditionOn)
} }
func (h *InfisicalSecretHandler) CloseInstantUpdatesStream(ctx context.Context, logger logr.Logger, infisicalSecret *v1alpha1.InfisicalSecret, resourceVariablesMap map[string]util.ResourceVariables) error {
reconciler := &InfisicalSecretReconciler{
Client: h.Client,
Scheme: h.Scheme,
IsNamespaceScoped: h.IsNamespaceScoped,
}
return reconciler.CloseInstantUpdatesStream(ctx, logger, infisicalSecret, resourceVariablesMap)
}
// Ensures that SSE stream is open, incase if the stream is already opened - this is a noop
func (h *InfisicalSecretHandler) OpenInstantUpdatesStream(ctx context.Context, logger logr.Logger, infisicalSecret *v1alpha1.InfisicalSecret, resourceVariablesMap map[string]util.ResourceVariables, eventCh chan<- event.TypedGenericEvent[client.Object]) error {
reconciler := &InfisicalSecretReconciler{
Client: h.Client,
Scheme: h.Scheme,
IsNamespaceScoped: h.IsNamespaceScoped,
}
return reconciler.OpenInstantUpdatesStream(ctx, logger, infisicalSecret, resourceVariablesMap, eventCh)
}

View File

@@ -36,9 +36,7 @@ const FINALIZER_NAME = "secrets.finalizers.infisical.com"
type InfisicalSecretReconciler struct { type InfisicalSecretReconciler struct {
client.Client client.Client
Scheme *runtime.Scheme Scheme *runtime.Scheme
SourceCh chan event.TypedGenericEvent[client.Object]
IsNamespaceScoped bool IsNamespaceScoped bool
} }
@@ -533,7 +531,33 @@ func (r *InfisicalSecretReconciler) ReconcileInfisicalSecret(ctx context.Context
return secretsCount, nil return secretsCount, nil
} }
func (r *InfisicalSecretReconciler) EnsureEventStream(ctx context.Context, logger logr.Logger, secret *v1alpha1.InfisicalSecret, variables util.ResourceVariables) error { func (r *InfisicalSecretReconciler) CloseInstantUpdatesStream(ctx context.Context, logger logr.Logger, infisicalSecret *v1alpha1.InfisicalSecret, resourceVariablesMap map[string]util.ResourceVariables) error {
if infisicalSecret == nil {
return fmt.Errorf("infisicalSecret is nil")
}
variables := r.getResourceVariables(*infisicalSecret, resourceVariablesMap)
if !variables.AuthDetails.IsMachineIdentityAuth {
return fmt.Errorf("only machine identity is supported for subscriptions")
}
conn := variables.ServerSentEvents
if _, ok := conn.Get(); ok {
conn.Close()
}
return nil
}
func (r *InfisicalSecretReconciler) OpenInstantUpdatesStream(ctx context.Context, logger logr.Logger, infisicalSecret *v1alpha1.InfisicalSecret, resourceVariablesMap map[string]util.ResourceVariables, eventCh chan<- event.TypedGenericEvent[client.Object]) error {
if infisicalSecret == nil {
return fmt.Errorf("infisicalSecret is nil")
}
variables := r.getResourceVariables(*infisicalSecret, resourceVariablesMap)
if !variables.AuthDetails.IsMachineIdentityAuth { if !variables.AuthDetails.IsMachineIdentityAuth {
return fmt.Errorf("only machine identity is supported for subscriptions") return fmt.Errorf("only machine identity is supported for subscriptions")
} }
@@ -613,8 +637,8 @@ func (r *InfisicalSecretReconciler) EnsureEventStream(ctx context.Context, logge
select { select {
case ev := <-events: case ev := <-events:
logger.Info("Received SSE Event", "event", ev) logger.Info("Received SSE Event", "event", ev)
r.SourceCh <- event.TypedGenericEvent[client.Object]{ eventCh <- event.TypedGenericEvent[client.Object]{
Object: secret, Object: infisicalSecret,
} }
case err := <-errors: case err := <-errors:
logger.Error(err, "Error occurred") logger.Error(err, "Error occurred")
@@ -627,17 +651,3 @@ func (r *InfisicalSecretReconciler) EnsureEventStream(ctx context.Context, logge
return nil return nil
} }
func (r *InfisicalSecretReconciler) CloseEventStream(ctx context.Context, logger logr.Logger, variables util.ResourceVariables) error {
if !variables.AuthDetails.IsMachineIdentityAuth {
return fmt.Errorf("only machine identity is supported for subscriptions")
}
conn := variables.ServerSentEvents
if _, ok := conn.Get(); ok {
conn.Close()
}
return nil
}

View File

@@ -3,7 +3,7 @@ package util
import ( import (
"context" "context"
"github.com/Infisical/infisical/k8-operator/packages/util/sse" "github.com/Infisical/infisical/k8-operator/internal/util/sse"
infisicalSdk "github.com/infisical/go-sdk" infisicalSdk "github.com/infisical/go-sdk"
) )