This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 4af9bd3e5769e57cd4e86bde43dfea6352db406c Author: Pasquale Congiusti <[email protected]> AuthorDate: Fri Mar 26 12:49:32 2021 +0100 core(operator): NodeSelector factory Adding a factory to simplify creation of NodeSelectors and related unit tests --- pkg/util/kubernetes/core_factory_test.go | 39 ++++++++++++++++++++++++++++++++ pkg/util/kubernetes/factory.go | 15 ++++++++++++ 2 files changed, 54 insertions(+) diff --git a/pkg/util/kubernetes/core_factory_test.go b/pkg/util/kubernetes/core_factory_test.go index 9903246..2a751e2 100644 --- a/pkg/util/kubernetes/core_factory_test.go +++ b/pkg/util/kubernetes/core_factory_test.go @@ -95,3 +95,42 @@ func TestValueTolerations(t *testing.T) { assert.Equal(t, v1.TaintEffectNoSchedule, toleration[3].Effect) assert.Equal(t, int64(120), *toleration[3].TolerationSeconds) } + +func TestValidNodeSelectors(t *testing.T) { + validNodeSelectors := [][]string{ + {"key1=value"}, + {"kubernetes.io/hostname=worker0"}, + {"disktype=ssd"}, + {"key=path-to-value"}, + {"keyNum=123"}, + } + for _, vds := range validNodeSelectors { + _, err := GetNodeSelectors(vds) + assert.Nil(t, err) + } +} + +func TestInvalidNodeSelectors(t *testing.T) { + validNodeSelectors := [][]string{ + {"key1"}, + {"kubernetes.io@hostname=worker0"}, + {"key=path/to/value"}, + } + for _, vds := range validNodeSelectors { + _, err := GetNodeSelectors(vds) + assert.NotNil(t, err) + } +} + +func TestValueNodeSelectors(t *testing.T) { + nodeSelectorsArray := []string{ + "key=value", + "kubernetes.io/hostname=worker0", + } + nodeSelectors, err := GetNodeSelectors(nodeSelectorsArray) + assert.Nil(t, err) + assert.Equal(t, 2, len(nodeSelectors)) + + assert.Equal(t, "value", nodeSelectors["key"]) + assert.Equal(t, "worker0", nodeSelectors["kubernetes.io/hostname"]) +} diff --git a/pkg/util/kubernetes/factory.go b/pkg/util/kubernetes/factory.go index a85c472..af9266d 100644 --- a/pkg/util/kubernetes/factory.go +++ b/pkg/util/kubernetes/factory.go @@ -26,6 +26,7 @@ import ( ) var validTaintRegexp = regexp.MustCompile(`^([\w\/_\-\.]+)(=)?([\w_\-\.]+)?:(NoSchedule|NoExecute|PreferNoSchedule):?(\d*)?$`) +var validNodeSelectorRegexp = regexp.MustCompile(`^([\w\/_\-\.]+)=([\w_\-\.]+)$`) // GetTolerations build an array of Tolerations from an array of string func NewTolerations(taints []string) ([]corev1.Toleration, error) { @@ -60,3 +61,17 @@ func NewTolerations(taints []string) ([]corev1.Toleration, error) { return tolerations, nil } + +// GetNodeSelectors build a map of NodeSelectors from an array of string +func GetNodeSelectors(nsArray []string) (map[string]string, error) { + nodeSelectors := make(map[string]string) + for _, ns := range nsArray { + if !validNodeSelectorRegexp.MatchString(ns) { + return nil, fmt.Errorf("could not match node selector %v", ns) + } + // Parse the regexp groups + groups := validNodeSelectorRegexp.FindStringSubmatch(ns) + nodeSelectors[groups[1]] = groups[2] + } + return nodeSelectors, nil +}
