zfs-localpv/pkg/builder/nodebuilder/node.go
Shubham Bajpai 3eb2c9e894
feat(scheduling): add zfs pool capacity tracking (#335)
Signed-off-by: shubham <shubham.bajpai@mayadata.io>
2021-05-31 18:59:59 +05:30

122 lines
2.6 KiB
Go

/*
Copyright 2021 The OpenEBS Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package nodebuilder
import (
apis "github.com/openebs/zfs-localpv/pkg/apis/openebs.io/zfs/v1"
"github.com/pkg/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Builder is the builder object for ZFSNode
type Builder struct {
node *ZFSNode
errs []error
}
// ZFSNode is a wrapper over
// ZFSNode API instance
type ZFSNode struct {
// ZFSVolume object
Object *apis.ZFSNode
}
// From returns a new instance of
// zfs volume
func From(node *apis.ZFSNode) *ZFSNode {
return &ZFSNode{
Object: node,
}
}
// NewBuilder returns new instance of Builder
func NewBuilder() *Builder {
return &Builder{
node: &ZFSNode{
Object: &apis.ZFSNode{},
},
}
}
// BuildFrom returns new instance of Builder
// from the provided api instance
func BuildFrom(node *apis.ZFSNode) *Builder {
if node == nil {
b := NewBuilder()
b.errs = append(
b.errs,
errors.New("failed to build zfs node object: nil node"),
)
return b
}
return &Builder{
node: &ZFSNode{
Object: node,
},
}
}
// WithNamespace sets the namespace of ZFSNode
func (b *Builder) WithNamespace(namespace string) *Builder {
if namespace == "" {
b.errs = append(
b.errs,
errors.New(
"failed to build zfs node object: missing namespace",
),
)
return b
}
b.node.Object.Namespace = namespace
return b
}
// WithName sets the name of ZFSNode
func (b *Builder) WithName(name string) *Builder {
if name == "" {
b.errs = append(
b.errs,
errors.New(
"failed to build zfs node object: missing name",
),
)
return b
}
b.node.Object.Name = name
return b
}
// WithPools sets the pools of ZFSNode
func (b *Builder) WithPools(pools []apis.Pool) *Builder {
b.node.Object.Pools = pools
return b
}
// WithOwnerReferences sets the owner references of ZFSNode
func (b *Builder) WithOwnerReferences(ownerRefs ...metav1.OwnerReference) *Builder {
b.node.Object.OwnerReferences = ownerRefs
return b
}
// Build returns ZFSNode API object
func (b *Builder) Build() (*apis.ZFSNode, error) {
if len(b.errs) > 0 {
return nil, errors.Errorf("%+v", b.errs)
}
return b.node.Object, nil
}