...

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

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

     1  package resources
     2  
     3  import (
     4  	corev1 "k8s.io/api/core/v1"
     5  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     6  	"k8s.io/apimachinery/pkg/types"
     7  
     8  	kubeclienttypes "edge-infra.dev/pkg/sds/lib/k8s/retryclient/types"
     9  )
    10  
    11  // nodeMod is a function which modifies the Node object
    12  type nodeMod func(*corev1.Node)
    13  
    14  // NodeHandlerBuilder is the builder object for NodeHandler
    15  type NodeHandlerBuilder struct {
    16  	nodeHandler *NodeHandler
    17  	actions     []nodeMod
    18  }
    19  
    20  // NodeBuilder is the builder object for the Node object within
    21  // the NodeHandlerBuilder
    22  type NodeBuilder struct {
    23  	NodeHandlerBuilder
    24  }
    25  
    26  // NewNodeHandlerBuilder returns a new empty builder object for NodeHandler
    27  func NewNodeHandlerBuilder() *NodeHandlerBuilder {
    28  	return &NodeHandlerBuilder{
    29  		nodeHandler: &NodeHandler{},
    30  		actions:     []nodeMod{},
    31  	}
    32  }
    33  
    34  // Build method which creates NodeHandler
    35  func (b *NodeHandlerBuilder) Build() *NodeHandler {
    36  	b.nodeHandler.Node = newNode()
    37  	return b.nodeHandler
    38  }
    39  
    40  // WithClient is a builder method to set the field Client in NodeHandlerBuilder
    41  func (b *NodeHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *NodeHandlerBuilder {
    42  	b.nodeHandler.Client = v
    43  	return b
    44  }
    45  
    46  // WithKey is a builder method to set the field Key in NodeHandlerBuilder
    47  func (b *NodeHandlerBuilder) WithKey(v types.NamespacedName) *NodeHandlerBuilder {
    48  	b.nodeHandler.Key = v
    49  	return b
    50  }
    51  
    52  // HandlesNode returns the NodeBuilder
    53  func (b *NodeHandlerBuilder) HandlesNode() *NodeBuilder {
    54  	return &NodeBuilder{*b}
    55  }
    56  
    57  // Named is a builder method to set the field Name in NodeBuilder
    58  func (b *NodeBuilder) Named(v string) *NodeBuilder {
    59  	b.NodeHandlerBuilder.actions = append(b.NodeHandlerBuilder.actions, func(s *corev1.Node) {
    60  		s.Name = v
    61  	})
    62  	return b
    63  }
    64  
    65  // newNode creates a new default base Node.
    66  func newNode() *corev1.Node {
    67  	return &corev1.Node{
    68  		TypeMeta: metav1.TypeMeta{
    69  			Kind:       "Node",
    70  			APIVersion: "v1",
    71  		},
    72  	}
    73  }
    74  

View as plain text