forked from dapr/components-contrib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkubernetes.go
61 lines (51 loc) · 1.63 KB
/
kubernetes.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// ------------------------------------------------------------
package kubernetes
import (
"errors"
"github.com/dapr/components-contrib/secretstores"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
type kubernetesSecretStore struct {
kubeClient kubernetes.Interface
}
// NewKubernetesSecretStore returns a new Kubernetes secret store
func NewKubernetesSecretStore() secretstores.SecretStore {
return &kubernetesSecretStore{}
}
// Init creates a Kubernetes client
func (k *kubernetesSecretStore) Init(metadata secretstores.Metadata) error {
client, err := GetKubeClient()
if err != nil {
return err
}
k.kubeClient = client
return nil
}
// GetSecret retrieves a secret using a key and returns a map of decrypted string/string values
func (k *kubernetesSecretStore) GetSecret(req secretstores.GetSecretRequest) (secretstores.GetSecretResponse, error) {
resp := secretstores.GetSecretResponse{
Data: map[string]string{},
}
namespace, err := k.getNamespaceFromMetadata(req.Metadata)
if err != nil {
return resp, err
}
secret, err := k.kubeClient.CoreV1().Secrets(namespace).Get(req.Name, meta_v1.GetOptions{})
if err != nil {
return resp, err
}
for k, v := range secret.Data {
resp.Data[k] = string(v)
}
return resp, nil
}
func (k *kubernetesSecretStore) getNamespaceFromMetadata(metadata map[string]string) (string, error) {
if val, ok := metadata["namespace"]; ok && val != "" {
return val, nil
}
return "", errors.New("namespace is missing on metadata")
}