...
1 package resources
2
3 import (
4 "reflect"
5
6 corev1 "k8s.io/api/core/v1"
7 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8 "k8s.io/apimachinery/pkg/types"
9
10 v1etcd "edge-infra.dev/pkg/sds/etcd/operator/apis/etcdmember/v1"
11 kubeclienttypes "edge-infra.dev/pkg/sds/lib/k8s/retryclient/types"
12 )
13
14
15 type secretMod func(*corev1.Secret)
16
17
18 type SecretHandlerBuilder struct {
19 secretHandler *SecretHandler
20 actions []secretMod
21 }
22
23
24
25 type SecretBuilder struct {
26 SecretHandlerBuilder
27 }
28
29
30 func NewSecretHandlerBuilder() *SecretHandlerBuilder {
31 return &SecretHandlerBuilder{
32 secretHandler: &SecretHandler{},
33 actions: []secretMod{},
34 }
35 }
36
37
38 func (b *SecretHandlerBuilder) Build() *SecretHandler {
39 b.secretHandler.Secret = newSecret()
40 for _, action := range b.actions {
41 action(b.secretHandler.Secret)
42 }
43 return b.secretHandler
44 }
45
46
47 func (b *SecretHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *SecretHandlerBuilder {
48 b.secretHandler.Client = v
49 return b
50 }
51
52
53 func (b *SecretHandlerBuilder) WithKey(v types.NamespacedName) *SecretHandlerBuilder {
54 b.secretHandler.Key = v
55 return b
56 }
57
58
59 func (b *SecretHandlerBuilder) HandlesSecret() *SecretBuilder {
60 return &SecretBuilder{*b}
61 }
62
63
64 func (b *SecretBuilder) Named(v string) *SecretBuilder {
65 b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) {
66 s.Name = v
67 })
68 return b
69 }
70
71
72 func (b *SecretBuilder) InNamespace(v string) *SecretBuilder {
73 b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) {
74 s.Namespace = v
75 })
76 return b
77 }
78
79
80 func (b *SecretBuilder) WithOwner(v *v1etcd.EtcdMember) *SecretBuilder {
81 b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) {
82 s.OwnerReferences = []metav1.OwnerReference{
83 *metav1.NewControllerRef(
84 v,
85 v1etcd.GroupVersion.WithKind(reflect.TypeOf(v1etcd.EtcdMember{}).Name()),
86 ),
87 }
88 })
89 return b
90 }
91
92
93 func (b *SecretBuilder) WithData(v []byte) *SecretBuilder {
94 b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) {
95 if s.Data == nil {
96 s.Data = make(map[string][]byte)
97 }
98 s.Data["etcd-tar-gz"] = v
99 })
100 return b
101 }
102
103
104 func newSecret() *corev1.Secret {
105 return &corev1.Secret{
106 TypeMeta: metav1.TypeMeta{
107 Kind: "Secret",
108 APIVersion: "v1",
109 },
110 Type: "Opaque",
111 }
112 }
113
View as plain text