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
+}

Reply via email to