mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-09-20 15:04:17 +00:00
Read Availability zone from nodeAffinity requirements
Velero to read the AZ info from `NodeAffinity` of a PV when it's taking the snapshot. Fixes #4332 Signed-off-by: Daniel Jiang <jiangd@vmware.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package builder
|
||||
|
||||
import corev1api "k8s.io/api/core/v1"
|
||||
|
||||
// NodeSelectorBuilder builds NodeSelector objects
|
||||
type NodeSelectorBuilder struct {
|
||||
object *corev1api.NodeSelector
|
||||
}
|
||||
|
||||
// ForNodeSelector returns the NodeSelectorBuilder instance with given terms
|
||||
func ForNodeSelector(term ...corev1api.NodeSelectorTerm) *NodeSelectorBuilder {
|
||||
return &NodeSelectorBuilder{
|
||||
object: &corev1api.NodeSelector{
|
||||
NodeSelectorTerms: term,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Result returns the built NodeSelector
|
||||
func (b *NodeSelectorBuilder) Result() *corev1api.NodeSelector {
|
||||
return b.object
|
||||
}
|
||||
|
||||
// NodeSelectorTermBuilder builds NodeSelectorTerm objects.
|
||||
type NodeSelectorTermBuilder struct {
|
||||
object *corev1api.NodeSelectorTerm
|
||||
}
|
||||
|
||||
// NewNodeSelectorTermBuilder initializes an instance of NodeSelectorTermBuilder
|
||||
func NewNodeSelectorTermBuilder() *NodeSelectorTermBuilder {
|
||||
return &NodeSelectorTermBuilder{
|
||||
object: &corev1api.NodeSelectorTerm{
|
||||
MatchExpressions: make([]corev1api.NodeSelectorRequirement, 0),
|
||||
MatchFields: make([]corev1api.NodeSelectorRequirement, 0),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// WithMatchExpression appends the MatchExpression to the NodeSelectorTerm
|
||||
func (ntb *NodeSelectorTermBuilder) WithMatchExpression(key string, op string, values ...string) *NodeSelectorTermBuilder {
|
||||
req := corev1api.NodeSelectorRequirement{
|
||||
Key: key,
|
||||
Operator: corev1api.NodeSelectorOperator(op),
|
||||
Values: values,
|
||||
}
|
||||
ntb.object.MatchExpressions = append(ntb.object.MatchExpressions, req)
|
||||
return ntb
|
||||
}
|
||||
|
||||
// WithMatchField appends the MatchField to the NodeSelectorTerm
|
||||
func (ntb *NodeSelectorTermBuilder) WithMatchField(key string, op string, values ...string) *NodeSelectorTermBuilder {
|
||||
req := corev1api.NodeSelectorRequirement{
|
||||
Key: key,
|
||||
Operator: corev1api.NodeSelectorOperator(op),
|
||||
Values: values,
|
||||
}
|
||||
ntb.object.MatchFields = append(ntb.object.MatchFields, req)
|
||||
return ntb
|
||||
}
|
||||
|
||||
// Result returns the built NodeSelectorTerm
|
||||
func (ntb *NodeSelectorTermBuilder) Result() *corev1api.NodeSelectorTerm {
|
||||
return ntb.object
|
||||
}
|
||||
Reference in New Issue
Block a user