package resources import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" v1etcd "edge-infra.dev/pkg/sds/etcd/operator/apis/etcdmember/v1" kubeclienttypes "edge-infra.dev/pkg/sds/lib/k8s/retryclient/types" ) // etcdMemberMod is a function which modifies the EtcdMember object type etcdMemberMod func(*v1etcd.EtcdMember) // EtcdMemberHandlerBuilder is the builder object for EtcdMemberHandler type EtcdMemberHandlerBuilder struct { etcdMemberHandler *EtcdMemberHandler actions []etcdMemberMod } // EtcdMemberBuilder is the builder object for the EtcdMember object // within the EtcdMemberHandlerBuilder type EtcdMemberBuilder struct { EtcdMemberHandlerBuilder } // NewEtcdMemberHandlerBuilder returns a new empty EtcdMemberHandlerBuilder func NewEtcdMemberHandlerBuilder() *EtcdMemberHandlerBuilder { return &EtcdMemberHandlerBuilder{ etcdMemberHandler: &EtcdMemberHandler{}, actions: []etcdMemberMod{}, } } // Build is a method which creates EtcdMemberHandler func (b *EtcdMemberHandlerBuilder) Build() *EtcdMemberHandler { b.etcdMemberHandler.EtcdMember = newEtcdMember() for _, action := range b.actions { action(b.etcdMemberHandler.EtcdMember) } return b.etcdMemberHandler } // WithClient is a builder method to set the field Client in EtcdMemberHandlerBuilder func (b *EtcdMemberHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *EtcdMemberHandlerBuilder { b.etcdMemberHandler.Client = v return b } // WithKey is a builder method to set the field Key in EtcdMemberHandlerBuilder func (b *EtcdMemberHandlerBuilder) WithKey(v types.NamespacedName) *EtcdMemberHandlerBuilder { b.etcdMemberHandler.Key = v return b } // HandlesEtcdMember returns the EtcdMemberBuilder func (b *EtcdMemberHandlerBuilder) HandlesEtcdMember() *EtcdMemberBuilder { return &EtcdMemberBuilder{*b} } // Named is a builder method to set the field Name in EtcdMemberBuilder func (b *EtcdMemberBuilder) Named(v string) *EtcdMemberBuilder { b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) { e.Name = v }) return b } // InstalledFor is a builder method to set the label for the IEN version in EtcdMemberBuilder func (b *EtcdMemberBuilder) InstalledFor(v string) *EtcdMemberBuilder { b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) { if e.Labels == nil { e.Labels = make(map[string]string) } e.Labels[v1etcd.IENVersionLabel] = v }) return b } // AtHost is a builder method to set the field host in EtcdMemberBuilder func (b *EtcdMemberBuilder) AtHost(v string) *EtcdMemberBuilder { b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) { e.Spec.Address.Host = v }) return b } // OnPeerPort is a builder method to set the field PeerPort in EtcdMemberBuilder. Will default to // 2380 if not set. func (b *EtcdMemberBuilder) OnPeerPort(v int) *EtcdMemberBuilder { b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) { e.Spec.Address.PeerPort = v }) return b } // OnClientPort is a builder method to set the field ClientPort in EtcdMemberBuilder. Will default to // 2379 if not set. func (b *EtcdMemberBuilder) OnClientPort(v int) *EtcdMemberBuilder { b.EtcdMemberHandlerBuilder.actions = append(b.EtcdMemberHandlerBuilder.actions, func(e *v1etcd.EtcdMember) { e.Spec.Address.ClientPort = v }) return b } // newEtcdMember returns a new default base EtcdMember object. func newEtcdMember() *v1etcd.EtcdMember { return &v1etcd.EtcdMember{ TypeMeta: metav1.TypeMeta{ Kind: v1etcd.Kind, APIVersion: v1etcd.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Finalizers: []string{v1etcd.Finalizer}, }, Spec: v1etcd.EtcdMemberSpec{ Address: v1etcd.Address{ PeerPort: 2380, ClientPort: 2379, }, RequiredFiles: requiredFiles(), }, } } // requiredFiles returns a list of files that must be copied from the controlplane to // the worker node that the EtcdMember is running on. func requiredFiles() []string { pathPrefix := "/etc/kubernetes" return []string{ pathPrefix + "/controller-manager.conf", pathPrefix + "/scheduler.conf", pathPrefix + "/admin.conf", pathPrefix + "/pki/ca.key", pathPrefix + "/pki/apiserver-kubelet-client.crt", pathPrefix + "/pki/apiserver-kubelet-client.key", pathPrefix + "/pki/apiserver.crt", pathPrefix + "/pki/apiserver.key", pathPrefix + "/pki/etcd/ca.crt", pathPrefix + "/pki/etcd/ca.key", pathPrefix + "/pki/front-proxy-ca.crt", pathPrefix + "/pki/front-proxy-ca.key", pathPrefix + "/pki/front-proxy-client.crt", pathPrefix + "/pki/front-proxy-client.key", pathPrefix + "/pki/sa.key", pathPrefix + "/pki/sa.pub", } }