package resources import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" kubeclienttypes "edge-infra.dev/pkg/sds/lib/k8s/retryclient/types" ) // nodeMod is a function which modifies the Node object type nodeMod func(*corev1.Node) // NodeHandlerBuilder is the builder object for NodeHandler type NodeHandlerBuilder struct { nodeHandler *NodeHandler actions []nodeMod } // NodeBuilder is the builder object for the Node object within // the NodeHandlerBuilder type NodeBuilder struct { NodeHandlerBuilder } // NewNodeHandlerBuilder returns a new empty builder object for NodeHandler func NewNodeHandlerBuilder() *NodeHandlerBuilder { return &NodeHandlerBuilder{ nodeHandler: &NodeHandler{}, actions: []nodeMod{}, } } // Build method which creates NodeHandler func (b *NodeHandlerBuilder) Build() *NodeHandler { b.nodeHandler.Node = newNode() return b.nodeHandler } // WithClient is a builder method to set the field Client in NodeHandlerBuilder func (b *NodeHandlerBuilder) WithClient(v kubeclienttypes.Retrier) *NodeHandlerBuilder { b.nodeHandler.Client = v return b } // WithKey is a builder method to set the field Key in NodeHandlerBuilder func (b *NodeHandlerBuilder) WithKey(v types.NamespacedName) *NodeHandlerBuilder { b.nodeHandler.Key = v return b } // HandlesNode returns the NodeBuilder func (b *NodeHandlerBuilder) HandlesNode() *NodeBuilder { return &NodeBuilder{*b} } // Named is a builder method to set the field Name in NodeBuilder func (b *NodeBuilder) Named(v string) *NodeBuilder { b.NodeHandlerBuilder.actions = append(b.NodeHandlerBuilder.actions, func(s *corev1.Node) { s.Name = v }) return b } // newNode creates a new default base Node. func newNode() *corev1.Node { return &corev1.Node{ TypeMeta: metav1.TypeMeta{ Kind: "Node", APIVersion: "v1", }, } }