2020-02-21 23:14:27 +00:00
|
|
|
package document
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"sigs.k8s.io/kustomize/v3/pkg/gvk"
|
|
|
|
"sigs.k8s.io/kustomize/v3/pkg/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Selector provides abstraction layer in front of kustomize selector
|
|
|
|
type Selector struct {
|
|
|
|
types.Selector
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewSelector returns instance of Selector container
|
|
|
|
func NewSelector() Selector {
|
|
|
|
return Selector{}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Following set of functions allows to build selector object
|
|
|
|
// by name, gvk, label selector and annotation selector
|
|
|
|
|
|
|
|
// ByName select by name
|
|
|
|
func (s Selector) ByName(name string) Selector {
|
|
|
|
s.Name = name
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2020-02-19 12:10:38 +04:00
|
|
|
// ByNamespace select by namepace
|
|
|
|
func (s Selector) ByNamespace(namespace string) Selector {
|
|
|
|
s.Namespace = namespace
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2020-02-21 23:14:27 +00:00
|
|
|
// ByGvk select by gvk
|
|
|
|
func (s Selector) ByGvk(group, version, kind string) Selector {
|
|
|
|
s.Gvk = gvk.Gvk{Group: group, Version: version, Kind: kind}
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2020-02-19 12:10:38 +04:00
|
|
|
// ByKind select by Kind
|
|
|
|
func (s Selector) ByKind(kind string) Selector {
|
|
|
|
s.Gvk = gvk.Gvk{Kind: kind}
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
2020-02-21 23:14:27 +00:00
|
|
|
// ByLabel select by label selector
|
|
|
|
func (s Selector) ByLabel(labelSelector string) Selector {
|
|
|
|
if s.LabelSelector != "" {
|
|
|
|
s.LabelSelector = strings.Join([]string{s.LabelSelector, labelSelector}, ",")
|
|
|
|
} else {
|
|
|
|
s.LabelSelector = labelSelector
|
|
|
|
}
|
|
|
|
return s
|
|
|
|
}
|
|
|
|
|
|
|
|
// ByAnnotation select by annotation selector.
|
|
|
|
func (s Selector) ByAnnotation(annotationSelector string) Selector {
|
|
|
|
if s.AnnotationSelector != "" {
|
|
|
|
s.AnnotationSelector = strings.Join([]string{s.AnnotationSelector, annotationSelector}, ",")
|
|
|
|
} else {
|
|
|
|
s.AnnotationSelector = annotationSelector
|
|
|
|
}
|
|
|
|
return s
|
|
|
|
}
|
2020-03-12 16:36:52 -05:00
|
|
|
|
2020-03-27 14:09:32 -07:00
|
|
|
// NewEphemeralCloudDataSelector returns selector to get BaremetalHost for ephemeral node
|
2020-03-12 16:36:52 -05:00
|
|
|
func NewEphemeralCloudDataSelector() Selector {
|
|
|
|
return NewSelector().ByKind(SecretKind).ByLabel(EphemeralUserDataSelector)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewEphemeralBMHSelector returns selector to get BaremetalHost for ephemeral node
|
|
|
|
func NewEphemeralBMHSelector() Selector {
|
|
|
|
return NewSelector().ByKind(BareMetalHostKind).ByLabel(EphemeralHostSelector)
|
|
|
|
}
|
|
|
|
|
2020-03-27 14:09:32 -07:00
|
|
|
// NewBMCCredentialsSelector returns selector to get BaremetalHost BMC credentials
|
|
|
|
func NewBMCCredentialsSelector(name string) Selector {
|
|
|
|
return NewSelector().ByKind(SecretKind).ByName(name)
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewNetworkDataSelector returns selector that can be used to get secret with
|
2020-03-12 16:36:52 -05:00
|
|
|
// network data bmhDoc argument is a document interface, that should hold fields
|
|
|
|
// spec.networkData.name and spec.networkData.namespace where to find the secret,
|
|
|
|
// if either of these fields are not defined in Document error will be returned
|
2020-03-27 14:09:32 -07:00
|
|
|
func NewNetworkDataSelector(bmhDoc Document) (Selector, error) {
|
2020-03-12 16:36:52 -05:00
|
|
|
selector := NewSelector()
|
|
|
|
// extract the network data document pointer from the bmh document
|
|
|
|
netConfDocName, err := bmhDoc.GetString("spec.networkData.name")
|
|
|
|
if err != nil {
|
|
|
|
return selector, err
|
|
|
|
}
|
|
|
|
netConfDocNamespace, err := bmhDoc.GetString("spec.networkData.namespace")
|
|
|
|
if err != nil {
|
|
|
|
return selector, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// try and find these documents in our bundle
|
|
|
|
selector = selector.
|
|
|
|
ByKind(SecretKind).
|
|
|
|
ByNamespace(netConfDocNamespace).
|
|
|
|
ByName(netConfDocName)
|
|
|
|
|
|
|
|
return selector, nil
|
|
|
|
}
|
2020-03-26 10:50:13 -05:00
|
|
|
|
|
|
|
// NewDeployToK8sSelector returns a selector to get documents that are to be deployed
|
|
|
|
// to kubernetes cluster.
|
|
|
|
func NewDeployToK8sSelector() Selector {
|
|
|
|
return NewSelector().ByAnnotation(DeployToK8sSelector)
|
|
|
|
}
|