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/03/26 13:13:24 UTC

[camel-k] 02/03: refactor(util): k8s helper methods

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 978311a57a0408cfa42048249f3d7b0bae1ff6c3
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Mar 12 14:40:56 2021 +0100

    refactor(util): k8s helper methods
---
 pkg/util/kubernetes/{util.go => core_client.go} | 128 ++++---------
 pkg/util/kubernetes/core_factory.go             |  62 +++++++
 pkg/util/kubernetes/util.go                     | 228 ------------------------
 3 files changed, 98 insertions(+), 320 deletions(-)

diff --git a/pkg/util/kubernetes/util.go b/pkg/util/kubernetes/core_client.go
similarity index 79%
copy from pkg/util/kubernetes/util.go
copy to pkg/util/kubernetes/core_client.go
index 26bba6a..822b209 100644
--- a/pkg/util/kubernetes/util.go
+++ b/pkg/util/kubernetes/core_client.go
@@ -20,54 +20,23 @@ package kubernetes
 import (
 	"context"
 	"fmt"
-	"regexp"
-	"strconv"
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/util/json"
 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/client"
-	"github.com/apache/camel-k/pkg/util"
 )
 
-var validTaintRegexp = regexp.MustCompile(`^([\w\/_\-\.]+)(=)?([\w_\-\.]+)?:(NoSchedule|NoExecute|PreferNoSchedule):?(\d*)?$`)
-
-// ToJSON --
-func ToJSON(value runtime.Object) ([]byte, error) {
-	return json.Marshal(value)
-}
-
-// ToYAML --
-func ToYAML(value runtime.Object) ([]byte, error) {
-	data, err := ToJSON(value)
-	if err != nil {
-		return nil, err
-	}
-
-	return util.JSONToYAML(data)
-}
-
-// GetConfigMap --
-func GetConfigMap(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.ConfigMap, error) {
+// GetIntegrationPlatform --
+func GetIntegrationPlatform(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationPlatform, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := corev1.ConfigMap{
-		TypeMeta: metav1.TypeMeta{
-			Kind:       "ConfigMap",
-			APIVersion: "v1",
-		},
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      name,
-			Namespace: namespace,
-		},
-	}
+	answer := v1.NewIntegrationPlatform(namespace, name)
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -76,23 +45,14 @@ func GetConfigMap(context context.Context, client k8sclient.Reader, name string,
 	return &answer, nil
 }
 
-// GetSecret --
-func GetSecret(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.Secret, error) {
+// GetIntegrationKit --
+func GetIntegrationKit(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationKit, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := corev1.Secret{
-		TypeMeta: metav1.TypeMeta{
-			Kind:       "Secret",
-			APIVersion: "v1",
-		},
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      name,
-			Namespace: namespace,
-		},
-	}
+	answer := v1.NewIntegrationKit(namespace, name)
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -101,14 +61,14 @@ func GetSecret(context context.Context, client k8sclient.Reader, name string, na
 	return &answer, nil
 }
 
-// GetIntegrationPlatform --
-func GetIntegrationPlatform(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationPlatform, error) {
+// GetIntegration --
+func GetIntegration(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.Integration, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := v1.NewIntegrationPlatform(namespace, name)
+	answer := v1.NewIntegration(namespace, name)
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -117,14 +77,14 @@ func GetIntegrationPlatform(context context.Context, client k8sclient.Reader, na
 	return &answer, nil
 }
 
-// GetIntegrationKit --
-func GetIntegrationKit(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationKit, error) {
+// GetBuild --
+func GetBuild(context context.Context, client client.Client, name string, namespace string) (*v1.Build, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := v1.NewIntegrationKit(namespace, name)
+	answer := v1.NewBuild(namespace, name)
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -133,14 +93,23 @@ func GetIntegrationKit(context context.Context, client k8sclient.Reader, name st
 	return &answer, nil
 }
 
-// GetIntegration --
-func GetIntegration(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.Integration, error) {
+// GetConfigMap --
+func GetConfigMap(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.ConfigMap, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := v1.NewIntegration(namespace, name)
+	answer := corev1.ConfigMap{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "ConfigMap",
+			APIVersion: "v1",
+		},
+		ObjectMeta: metav1.ObjectMeta{
+			Name:      name,
+			Namespace: namespace,
+		},
+	}
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -149,14 +118,23 @@ func GetIntegration(context context.Context, client k8sclient.Reader, name strin
 	return &answer, nil
 }
 
-// GetBuild --
-func GetBuild(context context.Context, client client.Client, name string, namespace string) (*v1.Build, error) {
+// GetSecret --
+func GetSecret(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.Secret, error) {
 	key := k8sclient.ObjectKey{
 		Name:      name,
 		Namespace: namespace,
 	}
 
-	answer := v1.NewBuild(namespace, name)
+	answer := corev1.Secret{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       "Secret",
+			APIVersion: "v1",
+		},
+		ObjectMeta: metav1.ObjectMeta{
+			Name:      name,
+			Namespace: namespace,
+		},
+	}
 
 	if err := client.Get(context, key, &answer); err != nil {
 		return nil, err
@@ -232,37 +210,3 @@ func ResolveValueSource(ctx context.Context, client k8sclient.Reader, namespace
 
 	return "", nil
 }
-
-// GetTolerations build an array of Tolerations from an array of string
-func GetTolerations(taints []string) ([]corev1.Toleration, error) {
-	tolerations := make([]corev1.Toleration, 0)
-	for _, t := range taints {
-		if !validTaintRegexp.MatchString(t) {
-			return nil, fmt.Errorf("could not match taint %v", t)
-		}
-		toleration := corev1.Toleration{}
-		// Parse the regexp groups
-		groups := validTaintRegexp.FindStringSubmatch(t)
-		toleration.Key = groups[1]
-		if groups[2] != "" {
-			toleration.Operator = corev1.TolerationOpEqual
-		} else {
-			toleration.Operator = corev1.TolerationOpExists
-		}
-		if groups[3] != "" {
-			toleration.Value = groups[3]
-		}
-		toleration.Effect = corev1.TaintEffect(groups[4])
-
-		if groups[5] != "" {
-			tolerationSeconds, err := strconv.ParseInt(groups[5], 10, 64)
-			if err != nil {
-				return nil, err
-			}
-			toleration.TolerationSeconds = &tolerationSeconds
-		}
-		tolerations = append(tolerations, toleration)
-	}
-
-	return tolerations, nil
-}
diff --git a/pkg/util/kubernetes/core_factory.go b/pkg/util/kubernetes/core_factory.go
new file mode 100644
index 0000000..5ae1891
--- /dev/null
+++ b/pkg/util/kubernetes/core_factory.go
@@ -0,0 +1,62 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package kubernetes
+
+import (
+	"fmt"
+	"regexp"
+	"strconv"
+
+	corev1 "k8s.io/api/core/v1"
+)
+
+var validTaintRegexp = regexp.MustCompile(`^([\w\/_\-\.]+)(=)?([\w_\-\.]+)?:(NoSchedule|NoExecute|PreferNoSchedule):?(\d*)?$`)
+
+// GetTolerations build an array of Tolerations from an array of string
+func GetTolerations(taints []string) ([]corev1.Toleration, error) {
+	tolerations := make([]corev1.Toleration, 0)
+	for _, t := range taints {
+		if !validTaintRegexp.MatchString(t) {
+			return nil, fmt.Errorf("could not match taint %v", t)
+		}
+		toleration := corev1.Toleration{}
+		// Parse the regexp groups
+		groups := validTaintRegexp.FindStringSubmatch(t)
+		toleration.Key = groups[1]
+		if groups[2] != "" {
+			toleration.Operator = corev1.TolerationOpEqual
+		} else {
+			toleration.Operator = corev1.TolerationOpExists
+		}
+		if groups[3] != "" {
+			toleration.Value = groups[3]
+		}
+		toleration.Effect = corev1.TaintEffect(groups[4])
+
+		if groups[5] != "" {
+			tolerationSeconds, err := strconv.ParseInt(groups[5], 10, 64)
+			if err != nil {
+				return nil, err
+			}
+			toleration.TolerationSeconds = &tolerationSeconds
+		}
+		tolerations = append(tolerations, toleration)
+	}
+
+	return tolerations, nil
+}
diff --git a/pkg/util/kubernetes/util.go b/pkg/util/kubernetes/util.go
index 26bba6a..23d3401 100644
--- a/pkg/util/kubernetes/util.go
+++ b/pkg/util/kubernetes/util.go
@@ -18,24 +18,12 @@ limitations under the License.
 package kubernetes
 
 import (
-	"context"
-	"fmt"
-	"regexp"
-	"strconv"
-
-	corev1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/util/json"
-	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 
-	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
-	"github.com/apache/camel-k/pkg/client"
 	"github.com/apache/camel-k/pkg/util"
 )
 
-var validTaintRegexp = regexp.MustCompile(`^([\w\/_\-\.]+)(=)?([\w_\-\.]+)?:(NoSchedule|NoExecute|PreferNoSchedule):?(\d*)?$`)
-
 // ToJSON --
 func ToJSON(value runtime.Object) ([]byte, error) {
 	return json.Marshal(value)
@@ -50,219 +38,3 @@ func ToYAML(value runtime.Object) ([]byte, error) {
 
 	return util.JSONToYAML(data)
 }
-
-// GetConfigMap --
-func GetConfigMap(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.ConfigMap, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := corev1.ConfigMap{
-		TypeMeta: metav1.TypeMeta{
-			Kind:       "ConfigMap",
-			APIVersion: "v1",
-		},
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      name,
-			Namespace: namespace,
-		},
-	}
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetSecret --
-func GetSecret(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.Secret, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := corev1.Secret{
-		TypeMeta: metav1.TypeMeta{
-			Kind:       "Secret",
-			APIVersion: "v1",
-		},
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      name,
-			Namespace: namespace,
-		},
-	}
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetIntegrationPlatform --
-func GetIntegrationPlatform(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationPlatform, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := v1.NewIntegrationPlatform(namespace, name)
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetIntegrationKit --
-func GetIntegrationKit(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.IntegrationKit, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := v1.NewIntegrationKit(namespace, name)
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetIntegration --
-func GetIntegration(context context.Context, client k8sclient.Reader, name string, namespace string) (*v1.Integration, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := v1.NewIntegration(namespace, name)
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetBuild --
-func GetBuild(context context.Context, client client.Client, name string, namespace string) (*v1.Build, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := v1.NewBuild(namespace, name)
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetService --
-func GetService(context context.Context, client k8sclient.Reader, name string, namespace string) (*corev1.Service, error) {
-	key := k8sclient.ObjectKey{
-		Name:      name,
-		Namespace: namespace,
-	}
-
-	answer := corev1.Service{
-		TypeMeta: metav1.TypeMeta{
-			Kind:       "Service",
-			APIVersion: "v1",
-		},
-		ObjectMeta: metav1.ObjectMeta{
-			Name:      name,
-			Namespace: namespace,
-		},
-	}
-
-	if err := client.Get(context, key, &answer); err != nil {
-		return nil, err
-	}
-
-	return &answer, nil
-}
-
-// GetSecretRefValue returns the value of a secret in the supplied namespace --
-func GetSecretRefValue(ctx context.Context, client k8sclient.Reader, namespace string, selector *corev1.SecretKeySelector) (string, error) {
-	secret, err := GetSecret(ctx, client, selector.Name, namespace)
-	if err != nil {
-		return "", err
-	}
-
-	if data, ok := secret.Data[selector.Key]; ok {
-		return string(data), nil
-	}
-
-	return "", fmt.Errorf("key %s not found in secret %s", selector.Key, selector.Name)
-}
-
-// GetConfigMapRefValue returns the value of a configmap in the supplied namespace
-func GetConfigMapRefValue(ctx context.Context, client k8sclient.Reader, namespace string, selector *corev1.ConfigMapKeySelector) (string, error) {
-	cm, err := GetConfigMap(ctx, client, selector.Name, namespace)
-	if err != nil {
-		return "", err
-	}
-
-	if data, ok := cm.Data[selector.Key]; ok {
-		return data, nil
-	}
-
-	return "", fmt.Errorf("key %s not found in config map %s", selector.Key, selector.Name)
-}
-
-// ResolveValueSource --
-func ResolveValueSource(ctx context.Context, client k8sclient.Reader, namespace string, valueSource *v1.ValueSource) (string, error) {
-	if valueSource.ConfigMapKeyRef != nil && valueSource.SecretKeyRef != nil {
-		return "", fmt.Errorf("value source has bot config map and secret configured")
-	}
-	if valueSource.ConfigMapKeyRef != nil {
-		return GetConfigMapRefValue(ctx, client, namespace, valueSource.ConfigMapKeyRef)
-	}
-	if valueSource.SecretKeyRef != nil {
-		return GetSecretRefValue(ctx, client, namespace, valueSource.SecretKeyRef)
-	}
-
-	return "", nil
-}
-
-// GetTolerations build an array of Tolerations from an array of string
-func GetTolerations(taints []string) ([]corev1.Toleration, error) {
-	tolerations := make([]corev1.Toleration, 0)
-	for _, t := range taints {
-		if !validTaintRegexp.MatchString(t) {
-			return nil, fmt.Errorf("could not match taint %v", t)
-		}
-		toleration := corev1.Toleration{}
-		// Parse the regexp groups
-		groups := validTaintRegexp.FindStringSubmatch(t)
-		toleration.Key = groups[1]
-		if groups[2] != "" {
-			toleration.Operator = corev1.TolerationOpEqual
-		} else {
-			toleration.Operator = corev1.TolerationOpExists
-		}
-		if groups[3] != "" {
-			toleration.Value = groups[3]
-		}
-		toleration.Effect = corev1.TaintEffect(groups[4])
-
-		if groups[5] != "" {
-			tolerationSeconds, err := strconv.ParseInt(groups[5], 10, 64)
-			if err != nil {
-				return nil, err
-			}
-			toleration.TolerationSeconds = &tolerationSeconds
-		}
-		tolerations = append(tolerations, toleration)
-	}
-
-	return tolerations, nil
-}