mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 19:28:16 +00:00
create separate struct for managed secret + propagate lables/annotations
This commit is contained in:
@@ -102,6 +102,11 @@ spec:
|
|||||||
secretNamespace:
|
secretNamespace:
|
||||||
description: The name space where the Kubernetes Secret is located
|
description: The name space where the Kubernetes Secret is located
|
||||||
type: string
|
type: string
|
||||||
|
secretType:
|
||||||
|
default: Opaque
|
||||||
|
description: 'The Kubernetes Secret type (experimental feature).
|
||||||
|
More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
||||||
|
type: string
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
- secretNamespace
|
- secretNamespace
|
||||||
|
|||||||
@@ -41,9 +41,20 @@ type KubeSecretReference struct {
|
|||||||
// The name space where the Kubernetes Secret is located
|
// The name space where the Kubernetes Secret is located
|
||||||
// +kubebuilder:validation:Required
|
// +kubebuilder:validation:Required
|
||||||
SecretNamespace string `json:"secretNamespace"`
|
SecretNamespace string `json:"secretNamespace"`
|
||||||
|
}
|
||||||
|
|
||||||
// The Kubernetes Secret type. More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types
|
type MangedKubeSecretConfig struct {
|
||||||
|
// The name of the Kubernetes Secret
|
||||||
|
// +kubebuilder:validation:Required
|
||||||
|
SecretName string `json:"secretName"`
|
||||||
|
|
||||||
|
// The name space where the Kubernetes Secret is located
|
||||||
|
// +kubebuilder:validation:Required
|
||||||
|
SecretNamespace string `json:"secretNamespace"`
|
||||||
|
|
||||||
|
// The Kubernetes Secret type (experimental feature). More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types
|
||||||
// +kubebuilder:validation:Optional
|
// +kubebuilder:validation:Optional
|
||||||
|
// +kubebuilder:default:=Opaque
|
||||||
SecretType string `json:"secretType"`
|
SecretType string `json:"secretType"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +67,7 @@ type InfisicalSecretSpec struct {
|
|||||||
Authentication Authentication `json:"authentication"`
|
Authentication Authentication `json:"authentication"`
|
||||||
|
|
||||||
// +kubebuilder:validation:Required
|
// +kubebuilder:validation:Required
|
||||||
ManagedSecretReference KubeSecretReference `json:"managedSecretReference"`
|
ManagedSecretReference MangedKubeSecretConfig `json:"managedSecretReference"`
|
||||||
|
|
||||||
// +kubebuilder:default:=60
|
// +kubebuilder:default:=60
|
||||||
ResyncInterval int `json:"resyncInterval"`
|
ResyncInterval int `json:"resyncInterval"`
|
||||||
|
|||||||
@@ -157,6 +157,21 @@ func (in *KubeSecretReference) DeepCopy() *KubeSecretReference {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *MangedKubeSecretConfig) DeepCopyInto(out *MangedKubeSecretConfig) {
|
||||||
|
*out = *in
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MangedKubeSecretConfig.
|
||||||
|
func (in *MangedKubeSecretConfig) DeepCopy() *MangedKubeSecretConfig {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(MangedKubeSecretConfig)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *SecretScopeInWorkspace) DeepCopyInto(out *SecretScopeInWorkspace) {
|
func (in *SecretScopeInWorkspace) DeepCopyInto(out *SecretScopeInWorkspace) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
|||||||
@@ -52,9 +52,6 @@ spec:
|
|||||||
description: The name space where the Kubernetes Secret
|
description: The name space where the Kubernetes Secret
|
||||||
is located
|
is located
|
||||||
type: string
|
type: string
|
||||||
secretType:
|
|
||||||
description: 'The Kubernetes Secret type. More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
|
||||||
type: string
|
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
- secretNamespace
|
- secretNamespace
|
||||||
@@ -85,9 +82,6 @@ spec:
|
|||||||
description: The name space where the Kubernetes Secret
|
description: The name space where the Kubernetes Secret
|
||||||
is located
|
is located
|
||||||
type: string
|
type: string
|
||||||
secretType:
|
|
||||||
description: 'The Kubernetes Secret type. More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
|
||||||
type: string
|
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
- secretNamespace
|
- secretNamespace
|
||||||
@@ -109,7 +103,9 @@ spec:
|
|||||||
description: The name space where the Kubernetes Secret is located
|
description: The name space where the Kubernetes Secret is located
|
||||||
type: string
|
type: string
|
||||||
secretType:
|
secretType:
|
||||||
description: 'The Kubernetes Secret type. More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
default: Opaque
|
||||||
|
description: 'The Kubernetes Secret type (experimental feature).
|
||||||
|
More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
@@ -126,9 +122,6 @@ spec:
|
|||||||
secretNamespace:
|
secretNamespace:
|
||||||
description: The name space where the Kubernetes Secret is located
|
description: The name space where the Kubernetes Secret is located
|
||||||
type: string
|
type: string
|
||||||
secretType:
|
|
||||||
description: 'The Kubernetes Secret type. More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
|
||||||
type: string
|
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
- secretNamespace
|
- secretNamespace
|
||||||
|
|||||||
@@ -2,8 +2,12 @@ apiVersion: secrets.infisical.com/v1alpha1
|
|||||||
kind: InfisicalSecret
|
kind: InfisicalSecret
|
||||||
metadata:
|
metadata:
|
||||||
name: infisicalsecret-sample
|
name: infisicalsecret-sample
|
||||||
|
labels:
|
||||||
|
label-to-be-passed-to-managed-secret: sample-value
|
||||||
|
annotations:
|
||||||
|
example.com/annotation-to-be-passed-to-managed-secret: "sample-value"
|
||||||
spec:
|
spec:
|
||||||
hostAPI: http://localhost:8764/api
|
hostAPI: https://app.infisical.com/api
|
||||||
resyncInterval: 10
|
resyncInterval: 10
|
||||||
authentication:
|
authentication:
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
@@ -20,8 +24,10 @@ spec:
|
|||||||
envSlug: dev
|
envSlug: dev
|
||||||
secretsPath: "/"
|
secretsPath: "/"
|
||||||
managedSecretReference:
|
managedSecretReference:
|
||||||
secretName: managed-secret
|
secretName: managed-token
|
||||||
secretNamespace: default
|
secretNamespace: default
|
||||||
|
# secretType: kubernetes.io/dockerconfigjson
|
||||||
|
|
||||||
# # To be depreciated soon
|
# # To be depreciated soon
|
||||||
# tokenSecretReference:
|
# tokenSecretReference:
|
||||||
# secretName: service-token
|
# secretName: service-token
|
||||||
|
|||||||
@@ -130,23 +130,30 @@ func (r *InfisicalSecretReconciler) CreateInfisicalManagedKubeSecret(ctx context
|
|||||||
plainProcessedSecrets := make(map[string][]byte)
|
plainProcessedSecrets := make(map[string][]byte)
|
||||||
secretType := infisicalSecret.Spec.ManagedSecretReference.SecretType
|
secretType := infisicalSecret.Spec.ManagedSecretReference.SecretType
|
||||||
|
|
||||||
// Set the default secret type to "Opaque" if not provided
|
|
||||||
if secretType == "" {
|
|
||||||
secretType = "Opaque"
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, secret := range secretsFromAPI {
|
for _, secret := range secretsFromAPI {
|
||||||
plainProcessedSecrets[secret.Key] = []byte(secret.Value) // plain process
|
plainProcessedSecrets[secret.Key] = []byte(secret.Value) // plain process
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copy labels and annotations from InfisicalSecret CRD
|
||||||
|
labels := map[string]string{}
|
||||||
|
for k, v := range infisicalSecret.Labels {
|
||||||
|
labels[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
annotations := map[string]string{}
|
||||||
|
for k, v := range infisicalSecret.Annotations {
|
||||||
|
annotations[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
annotations[SECRET_VERSION_ANNOTATION] = encryptedSecretsResponse.ETag
|
||||||
|
|
||||||
// create a new secret as specified by the managed secret spec of CRD
|
// create a new secret as specified by the managed secret spec of CRD
|
||||||
newKubeSecretInstance := &corev1.Secret{
|
newKubeSecretInstance := &corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: infisicalSecret.Spec.ManagedSecretReference.SecretName,
|
Name: infisicalSecret.Spec.ManagedSecretReference.SecretName,
|
||||||
Namespace: infisicalSecret.Spec.ManagedSecretReference.SecretNamespace,
|
Namespace: infisicalSecret.Spec.ManagedSecretReference.SecretNamespace,
|
||||||
Annotations: map[string]string{
|
Annotations: annotations,
|
||||||
SECRET_VERSION_ANNOTATION: encryptedSecretsResponse.ETag,
|
Labels: labels,
|
||||||
},
|
|
||||||
},
|
},
|
||||||
Type: corev1.SecretType(secretType),
|
Type: corev1.SecretType(secretType),
|
||||||
Data: plainProcessedSecrets,
|
Data: plainProcessedSecrets,
|
||||||
|
|||||||
@@ -108,6 +108,10 @@ spec:
|
|||||||
secretNamespace:
|
secretNamespace:
|
||||||
description: The name space where the Kubernetes Secret is located
|
description: The name space where the Kubernetes Secret is located
|
||||||
type: string
|
type: string
|
||||||
|
secretType:
|
||||||
|
default: Opaque
|
||||||
|
description: 'The Kubernetes Secret type (experimental feature). More info: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types'
|
||||||
|
type: string
|
||||||
required:
|
required:
|
||||||
- secretName
|
- secretName
|
||||||
- secretNamespace
|
- secretNamespace
|
||||||
|
|||||||
Reference in New Issue
Block a user