...

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

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

     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  // etcdMemberMod is a function which modifies the EtcdMember object
    12  type etcdMemberMod func(*v1etcd.EtcdMember)
    13  
    14  // EtcdMemberHandlerBuilder is the builder object for EtcdMemberHandler
    15  type EtcdMemberHandlerBuilder struct {
    16  	etcdMemberHandler *EtcdMemberHandler
    17  	actions           []etcdMemberMod
    18  }
    19  
    20  // EtcdMemberBuilder is the builder object for the EtcdMember object
    21  // within the EtcdMemberHandlerBuilder
    22  type EtcdMemberBuilder struct {
    23  	EtcdMemberHandlerBuilder
    24  }
    25  
    26  // NewEtcdMemberHandlerBuilder returns a new empty EtcdMemberHandlerBuilder
    27  func NewEtcdMemberHandlerBuilder() *EtcdMemberHandlerBuilder {
    28  	return &EtcdMemberHandlerBuilder{
    29  		etcdMemberHandler: &EtcdMemberHandler{},
    30  		actions:           []etcdMemberMod{},
    31  	}
    32  }
    33  
    34  // Build is a method which creates EtcdMemberHandler
    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  // WithClient is a builder method to set the field Client in EtcdMemberHandlerBuilder
    44  func (b *EtcdMemberHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *EtcdMemberHandlerBuilder {
    45  	b.etcdMemberHandler.Client = v
    46  	return b
    47  }
    48  
    49  // WithKey is a builder method to set the field Key in EtcdMemberHandlerBuilder
    50  func (b *EtcdMemberHandlerBuilder) WithKey(v types.NamespacedName) *EtcdMemberHandlerBuilder {
    51  	b.etcdMemberHandler.Key = v
    52  	return b
    53  }
    54  
    55  // HandlesEtcdMember returns the EtcdMemberBuilder
    56  func (b *EtcdMemberHandlerBuilder) HandlesEtcdMember() *EtcdMemberBuilder {
    57  	return &EtcdMemberBuilder{*b}
    58  }
    59  
    60  // Named is a builder method to set the field Name in EtcdMemberBuilder
    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  // InstalledFor is a builder method to set the label for the IEN version in EtcdMemberBuilder
    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  // AtHost is a builder method to set the field host in EtcdMemberBuilder
    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  // OnPeerPort is a builder method to set the field PeerPort in EtcdMemberBuilder. Will default to
    88  // 2380 if not set.
    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  // OnClientPort is a builder method to set the field ClientPort in EtcdMemberBuilder. Will default to
    97  // 2379 if not set.
    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  // newEtcdMember returns a new default base EtcdMember object.
   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  // requiredFiles returns a list of files that must be copied from the controlplane to
   126  // the worker node that the EtcdMember is running on.
   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