mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
fix: v4 changes
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user