...

Source file src/edge-infra.dev/pkg/sds/etcd/operator/internal/resources/secret_builder.go

Documentation: edge-infra.dev/pkg/sds/etcd/operator/internal/resources

     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  // secretMod is a function which modifies the Secret object
    15  type secretMod func(*corev1.Secret)
    16  
    17  // SecretHandlerBuilder is the builder object for SecretHandler
    18  type SecretHandlerBuilder struct {
    19  	secretHandler *SecretHandler
    20  	actions       []secretMod
    21  }
    22  
    23  // SecretBuilder is the builder object for the Secret object within
    24  // the SecretHandlerBuilder
    25  type SecretBuilder struct {
    26  	SecretHandlerBuilder
    27  }
    28  
    29  // NewSecretHandlerBuilder returns a new empty SecretHandlerBuilder
    30  func NewSecretHandlerBuilder() *SecretHandlerBuilder {
    31  	return &SecretHandlerBuilder{
    32  		secretHandler: &SecretHandler{},
    33  		actions:       []secretMod{},
    34  	}
    35  }
    36  
    37  // Build is the method which creates SecretHandler
    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  // WithClient is a builder method to set the field Client in SecretHandlerBuilder
    47  func (b *SecretHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *SecretHandlerBuilder {
    48  	b.secretHandler.Client = v
    49  	return b
    50  }
    51  
    52  // WithKey is a builder method to set the field Key in SecretHandlerBuilder
    53  func (b *SecretHandlerBuilder) WithKey(v types.NamespacedName) *SecretHandlerBuilder {
    54  	b.secretHandler.Key = v
    55  	return b
    56  }
    57  
    58  // HandlesSecret returns the SecretBuilder
    59  func (b *SecretHandlerBuilder) HandlesSecret() *SecretBuilder {
    60  	return &SecretBuilder{*b}
    61  }
    62  
    63  // Named is a builder method to set the field Name in SecretBuilder
    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  // InNamespace is a builder method to set the field Namespace in SecretBuilder
    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  // WithOwner is a builder method to set the field OwnerReferences in SecretBuilder
    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  // WithData is a builder method to set the field Data["etcd-tar-gz"] in SecretBuilder
    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  // newSecret creates a new default base Secret.
   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