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