package resources import ( "reflect" corev1 "k8s.io/api/core/v1" 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" ) // secretMod is a function which modifies the Secret object type secretMod func(*corev1.Secret) // SecretHandlerBuilder is the builder object for SecretHandler type SecretHandlerBuilder struct { secretHandler *SecretHandler actions []secretMod } // SecretBuilder is the builder object for the Secret object within // the SecretHandlerBuilder type SecretBuilder struct { SecretHandlerBuilder } // NewSecretHandlerBuilder returns a new empty SecretHandlerBuilder func NewSecretHandlerBuilder() *SecretHandlerBuilder { return &SecretHandlerBuilder{ secretHandler: &SecretHandler{}, actions: []secretMod{}, } } // Build is the method which creates SecretHandler func (b *SecretHandlerBuilder) Build() *SecretHandler { b.secretHandler.Secret = newSecret() for _, action := range b.actions { action(b.secretHandler.Secret) } return b.secretHandler } // WithClient is a builder method to set the field Client in SecretHandlerBuilder func (b *SecretHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *SecretHandlerBuilder { b.secretHandler.Client = v return b } // WithKey is a builder method to set the field Key in SecretHandlerBuilder func (b *SecretHandlerBuilder) WithKey(v types.NamespacedName) *SecretHandlerBuilder { b.secretHandler.Key = v return b } // HandlesSecret returns the SecretBuilder func (b *SecretHandlerBuilder) HandlesSecret() *SecretBuilder { return &SecretBuilder{*b} } // Named is a builder method to set the field Name in SecretBuilder func (b *SecretBuilder) Named(v string) *SecretBuilder { b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) { s.Name = v }) return b } // InNamespace is a builder method to set the field Namespace in SecretBuilder func (b *SecretBuilder) InNamespace(v string) *SecretBuilder { b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) { s.Namespace = v }) return b } // WithOwner is a builder method to set the field OwnerReferences in SecretBuilder func (b *SecretBuilder) WithOwner(v *v1etcd.EtcdMember) *SecretBuilder { b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) { s.OwnerReferences = []metav1.OwnerReference{ *metav1.NewControllerRef( v, v1etcd.GroupVersion.WithKind(reflect.TypeOf(v1etcd.EtcdMember{}).Name()), ), } }) return b } // WithData is a builder method to set the field Data["etcd-tar-gz"] in SecretBuilder func (b *SecretBuilder) WithData(v []byte) *SecretBuilder { b.SecretHandlerBuilder.actions = append(b.SecretHandlerBuilder.actions, func(s *corev1.Secret) { if s.Data == nil { s.Data = make(map[string][]byte) } s.Data["etcd-tar-gz"] = v }) return b } // newSecret creates a new default base Secret. func newSecret() *corev1.Secret { return &corev1.Secret{ TypeMeta: metav1.TypeMeta{ Kind: "Secret", APIVersion: "v1", }, Type: "Opaque", } }