You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2021/04/12 11:59:03 UTC
[camel-k] 02/05: core(operator): NodeSelector factory
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 <pa...@gmail.com>
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
+}