forked from shipengqi/kube
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsecret.go
79 lines (69 loc) · 2.62 KB
/
secret.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package kube
import (
"context"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
)
// GetSecrets returns a SecretList.
func (c *Client) GetSecrets(ctx context.Context, namespace string, label ...string) (*corev1.SecretList, error) {
return c.client.CoreV1().Secrets(namespace).List(ctx, listOptions(label))
}
// GetSecret returns a Secret with the given name.
func (c *Client) GetSecret(ctx context.Context, namespace, name string) (*corev1.Secret, error) {
return c.client.CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{})
}
// CreateSecret creates a new Secret.
func (c *Client) CreateSecret(ctx context.Context, secret *corev1.Secret) (*corev1.Secret, error) {
if len(secret.Namespace) == 0 {
return nil, ErrorMissingNamespace
}
return c.client.CoreV1().Secrets(secret.Namespace).Create(ctx, secret, metav1.CreateOptions{})
}
// UpdateSecret updates the given Secret.
func (c *Client) UpdateSecret(ctx context.Context, secret *corev1.Secret) (*corev1.Secret, error) {
if len(secret.Namespace) == 0 {
return nil, ErrorMissingNamespace
}
return c.client.CoreV1().Secrets(secret.Namespace).Update(ctx, secret, metav1.UpdateOptions{})
}
// PatchSecret patch the given Secret.
func (c *Client) PatchSecret(ctx context.Context, namespace, name string, data []byte) (*corev1.Secret, error) {
return c.client.CoreV1().Secrets(namespace).Patch(
ctx,
name,
types.StrategicMergePatchType,
data,
metav1.PatchOptions{},
)
}
// ApplySecret updates a Secret, and creates a new Secret if not exist.
func (c *Client) ApplySecret(ctx context.Context, namespace, name string, data map[string]string) (*corev1.Secret, error) {
olds, err := c.GetSecret(ctx, namespace, name)
if err != nil || olds == nil {
var news corev1.Secret
news.SetName(name)
news.SetNamespace(namespace)
news.StringData = data
return c.CreateSecret(ctx, &news)
}
olds.StringData = data
return c.UpdateSecret(ctx, olds)
}
// ApplySecretBytes is like ApplySecret, but with data map[string][]byte.
func (c *Client) ApplySecretBytes(ctx context.Context, namespace, name string, data map[string][]byte) (*corev1.Secret, error) {
olds, err := c.GetSecret(ctx, namespace, name)
if err != nil || olds == nil {
var news corev1.Secret
news.SetName(name)
news.SetNamespace(namespace)
news.Data = data
return c.CreateSecret(ctx, &news)
}
olds.Data = data
return c.UpdateSecret(ctx, olds)
}
// DeleteSecret deletes a Secret.
func (c *Client) DeleteSecret(ctx context.Context, namespace, name string) error {
return c.client.CoreV1().Secrets(namespace).Delete(ctx, name, metav1.DeleteOptions{})
}