...
1 package resources
2
3 import (
4 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5 "k8s.io/apimachinery/pkg/types"
6
7 v1etcd "edge-infra.dev/pkg/sds/etcd/operator/apis/etcdmember/v1"
8 kubeclienttypes "edge-infra.dev/pkg/sds/lib/k8s/retryclient/types"
9 )
10
11
12 type etcdMemberMod func(*v1etcd.EtcdMember)
13
14
15 type EtcdMemberHandlerBuilder struct {
16 etcdMemberHandler *EtcdMemberHandler
17 actions []etcdMemberMod
18 }
19
20
21
22 type EtcdMemberBuilder struct {
23 EtcdMemberHandlerBuilder
24 }
25
26
27 func NewEtcdMemberHandlerBuilder() *EtcdMemberHandlerBuilder {
28 return &EtcdMemberHandlerBuilder{
29 etcdMemberHandler: &EtcdMemberHandler{},
30 actions: []etcdMemberMod{},
31 }
32 }
33
34
35 func (b *EtcdMemberHandlerBuilder) Build() *EtcdMemberHandler {
36 b.etcdMemberHandler.EtcdMember = newEtcdMember()
37 for _, action := range b.actions {
38 action(b.etcdMemberHandler.EtcdMember)
39 }
40 return b.etcdMemberHandler
41 }
42
43
44 func (b *EtcdMemberHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *EtcdMemberHandlerBuilder {
45 b.etcdMemberHandler.Client = v
46 return b
47 }
48
49
50 func (b *EtcdMemberHandlerBuilder) WithKey(v types.NamespacedName) *EtcdMemberHandlerBuilder {
51 b.etcdMemberHandler.Key = v
52 return b
53 }
54
55
56 func (b *EtcdMemberHandlerBuilder) HandlesEtcdMember() *EtcdMemberBuilder {
57 return &EtcdMemberBuilder{*b}
58 }
59
60
61 func (b *EtcdMemberBuilder) Named(v string) *EtcdMemberBuilder {
62 b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) {
63 e.Name = v
64 })
65 return b
66 }
67
68
69 func (b *EtcdMemberBuilder) InstalledFor(v string) *EtcdMemberBuilder {
70 b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) {
71 if e.Labels == nil {
72 e.Labels = make(map[string]string)
73 }
74 e.Labels[v1etcd.IENVersionLabel] = v
75 })
76 return b
77 }
78
79
80 func (b *EtcdMemberBuilder) AtHost(v string) *EtcdMemberBuilder {
81 b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) {
82 e.Spec.Address.Host = v
83 })
84 return b
85 }
86
87
88
89 func (b *EtcdMemberBuilder) OnPeerPort(v int) *EtcdMemberBuilder {
90 b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) {
91 e.Spec.Address.PeerPort = v
92 })
93 return b
94 }
95
96
97
98 func (b *EtcdMemberBuilder) OnClientPort(v int) *EtcdMemberBuilder {
99 b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) {
100 e.Spec.Address.ClientPort = v
101 })
102 return b
103 }
104
105
106 func newEtcdMember() *v1etcd.EtcdMember {
107 return &v1etcd.EtcdMember{
108 TypeMeta: metav1.TypeMeta{
109 Kind: v1etcd.Kind,
110 APIVersion: v1etcd.GroupVersion.String(),
111 },
112 ObjectMeta: metav1.ObjectMeta{
113 Finalizers: []string{v1etcd.Finalizer},
114 },
115 Spec: v1etcd.EtcdMemberSpec{
116 Address: v1etcd.Address{
117 PeerPort: 2380,
118 ClientPort: 2379,
119 },
120 RequiredFiles: requiredFiles(),
121 },
122 }
123 }
124
125
126
127 func requiredFiles() []string {
128 pathPrefix := "/etc/kubernetes"
129 return []string{
130 pathPrefix + "/controller-manager.conf",
131 pathPrefix + "/scheduler.conf",
132 pathPrefix + "/admin.conf",
133 pathPrefix + "/pki/ca.key",
134 pathPrefix + "/pki/apiserver-kubelet-client.crt",
135 pathPrefix + "/pki/apiserver-kubelet-client.key",
136 pathPrefix + "/pki/apiserver.crt",
137 pathPrefix + "/pki/apiserver.key",
138 pathPrefix + "/pki/etcd/ca.crt",
139 pathPrefix + "/pki/etcd/ca.key",
140 pathPrefix + "/pki/front-proxy-ca.crt",
141 pathPrefix + "/pki/front-proxy-ca.key",
142 pathPrefix + "/pki/front-proxy-client.crt",
143 pathPrefix + "/pki/front-proxy-client.key",
144 pathPrefix + "/pki/sa.key",
145 pathPrefix + "/pki/sa.pub",
146 }
147 }
148
View as plain text