v2/pkg/genruntime/secrets.go (67 lines of code) (raw):

/* * Copyright (c) Microsoft Corporation. * Licensed under the MIT license. */ package genruntime import ( "fmt" ) // SecretReference is a reference to a Kubernetes secret and key in the same namespace as // the resource it is on. // +kubebuilder:object:generate=true // //nolint:recvcheck type SecretReference struct { // Name is the name of the Kubernetes secret being referenced. // The secret must be in the same namespace as the resource // +kubebuilder:validation:Required Name string `json:"name"` // Key is the key in the Kubernetes secret being referenced // +kubebuilder:validation:Required Key string `json:"key"` // If we end up wanting to support secrets from KeyVault (or elsewhere) we should be able to add a // Type *SecretType // here and default it to Kubernetes if it's not set. See the secrets design for more details. } var _ Indexer = SecretReference{} func (s SecretReference) Index() []string { return []string{s.Name} } // Copy makes an independent copy of the SecretReference func (s SecretReference) Copy() SecretReference { return s } func (s SecretReference) String() string { return fmt.Sprintf("Name: %q, Key: %q", s.Name, s.Key) } // AsNamespacedRef creates a NamespacedSecretReference from this SecretReference in the given namespace func (s SecretReference) AsNamespacedRef(namespace string) NamespacedSecretReference { return NamespacedSecretReference{ SecretReference: s, Namespace: namespace, } } // NamespacedSecretReference is a SecretReference with namespace information included type NamespacedSecretReference struct { SecretReference Namespace string } func (s NamespacedSecretReference) String() string { return fmt.Sprintf("Namespace: %q, %s", s.Namespace, s.SecretReference) } // SecretMapReference is a reference to a Kubernetes secret in the same namespace as // the resource it is on. // +kubebuilder:object:generate=true // //nolint:recvcheck type SecretMapReference struct { // Name is the name of the Kubernetes secret being referenced. // The secret must be in the same namespace as the resource // +kubebuilder:validation:Required Name string `json:"name"` // If we end up wanting to support secrets from KeyVault (or elsewhere) we should be able to add a // Type *SecretType // here and default it to Kubernetes if it's not set. See the secrets design for more details. // TODO: If we wanted to do this, probably the secret would need to be JSON-formatted, as unlike // TODO: Kubernetes secrets there's no map[string]string structure inside of the secret. I think // TODO: that's still probably preferable to having a map[string]SecretReference from a UX perspective. } var _ Indexer = SecretMapReference{} func (s SecretMapReference) Index() []string { return []string{s.Name} } // Copy makes an independent copy of the SecretMapReference func (s SecretMapReference) Copy() SecretMapReference { return s } func (s SecretMapReference) String() string { return fmt.Sprintf("Name: %q", s.Name) } // AsNamespacedRef creates a NamespacedSecretReference from this SecretReference in the given namespace func (s SecretMapReference) AsNamespacedRef(namespace string) NamespacedSecretMapReference { return NamespacedSecretMapReference{ SecretMapReference: s, Namespace: namespace, } } // NamespacedSecretMapReference is an SecretMapReference with namespace information included type NamespacedSecretMapReference struct { SecretMapReference Namespace string } func (s NamespacedSecretMapReference) String() string { return fmt.Sprintf("Namespace: %q, %s", s.Namespace, s.SecretMapReference) } // SecretDestination describes the location to store a single secret value. // Note: This is similar to: ConfigMapDestination in configmaps.go. // Changes to one may need to be made to the others as well. type SecretDestination struct { // Name is the name of the Kubernetes secret to write to. // The secret will be created in the same namespace as the resource. // +kubebuilder:validation:Required Name string `json:"name,omitempty"` // Key is the key in the Kubernetes secret being referenced. // +kubebuilder:validation:Required Key string `json:"key,omitempty"` // This is a type separate from SecretReference as in the future we may want to support things like // customizable annotations or labels, instructions to not delete the secret when the resource is // deleted, etc. None of those things make sense for SecretReference so using the exact same type isn't // advisable. } // Copy makes an independent copy of the SecretDestination func (s SecretDestination) Copy() SecretDestination { return s } func (s SecretDestination) String() string { return fmt.Sprintf("Name: %q, Key: %q", s.Name, s.Key) }