Bug fix: Calculate label using backup name for CSI objects (#2510)

* Use a helper function when querying w/ backup label

Setting or querying for a backup label name should always pass the value
through the GetValidName function. This change passes query uses of the
backup label value through the GetValidName function by introducing 2
new helpers, one for making a Selector, one for making a ListOptions.

It also removes functions returning the same data, but under
unecessarily specific names.

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>

* Document using the label.GetValidName function

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>

* Update copyright year

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>

* Clarify labels.GetValidName and annotations

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>

* Move functions to pkg/label

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>

* Fix function comments

Signed-off-by: Nolan Brubaker <brubakern@vmware.com>
This commit is contained in:
Nolan Brubaker
2020-05-07 11:56:13 -07:00
committed by GitHub
parent abae81ddc8
commit de8962ea18
8 changed files with 38 additions and 19 deletions
+18
View File
@@ -20,7 +20,11 @@ import (
"crypto/sha256"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/validation"
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
)
// GetValidName converts an input string to valid kubernetes label string in accordance to rfc1035 DNS Label spec
@@ -43,3 +47,17 @@ func GetValidName(label string) string {
return label[:charsFromLabel] + strSha[:6]
}
// NewSelectorForBackup returns a Selector based on the backup name.
// This is useful for interacting with Listers that need a Selector.
func NewSelectorForBackup(name string) labels.Selector {
return labels.SelectorFromSet(map[string]string{velerov1api.BackupNameLabel: GetValidName(name)})
}
// NewListOptionsForBackup returns a ListOptions based on the backup name.
// This is useful for interacting with client-go clients that needs a ListOptions.
func NewListOptionsForBackup(name string) metav1.ListOptions {
return metav1.ListOptions{
LabelSelector: fmt.Sprintf("%s=%s", velerov1api.BackupNameLabel, GetValidName(name)),
}
}