create separate struct for managed secret + propagate lables/annotations

This commit is contained in:
Maidul Islam
2023-12-07 19:26:48 -05:00
parent 377a79f17d
commit 13014b5345
7 changed files with 65 additions and 24 deletions
@@ -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
+8 -2
View File
@@ -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