You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2022/01/07 13:48:28 UTC

[camel-k] 22/24: chore: use unstructured objects

This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 8d747ee5d67a1e8fed07537c2b7ad14fcfc4cc5b
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed Jan 5 13:08:00 2022 +0100

    chore: use unstructured objects
---
 pkg/trait/mount.go            |  6 ++++--
 pkg/trait/openapi.go          | 12 ++++++------
 pkg/util/kubernetes/client.go | 13 +++++++++++++
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/pkg/trait/mount.go b/pkg/trait/mount.go
index c0397b3..00c6e69 100644
--- a/pkg/trait/mount.go
+++ b/pkg/trait/mount.go
@@ -24,6 +24,7 @@ import (
 	appsv1 "k8s.io/api/apps/v1"
 	"k8s.io/api/batch/v1beta1"
 	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/runtime/schema"
 
 	serving "knative.dev/serving/pkg/apis/serving/v1"
 
@@ -170,8 +171,9 @@ func (t *mountTrait) configureVolumesAndMounts(e *Environment, vols *[]corev1.Vo
 func (t *mountTrait) attachResource(e *Environment, conf *utilResource.Config) {
 	if conf.StorageType() == utilResource.StorageTypeConfigmap {
 		// verify if it was autogenerated
-		cm := kubernetes.LookupConfigmap(e.Ctx, e.Client, e.Integration.Namespace, conf.Name())
-		if cm != nil && cm.ObjectMeta.Labels[kubernetes.ConfigMapAutogenLabel] == "true" {
+		cm, err := kubernetes.GetUnstructured(e.Ctx, e.Client, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ConfigMap"},
+			e.Integration.Namespace, conf.Name())
+		if err == nil && cm != nil && cm.GetLabels()[kubernetes.ConfigMapAutogenLabel] == "true" {
 			refCm := kubernetes.NewConfigMap(e.Integration.Namespace, conf.Name(), "", "", "", nil)
 			e.Resources.Add(refCm)
 		}
diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go
index 24f49b7..73af311 100644
--- a/pkg/trait/openapi.go
+++ b/pkg/trait/openapi.go
@@ -32,6 +32,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime/schema"
 
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
@@ -136,16 +137,15 @@ func (t *openAPITrait) generateFromResources(e *Environment, tmpDir string) ([]v
 func (t *openAPITrait) generateFromConfigmaps(e *Environment, tmpDir string) ([]v1.SourceSpec, error) {
 	dataSpecs := make([]v1.DataSpec, 0, len(t.Configmaps))
 	for _, configmap := range t.Configmaps {
-		cm := kubernetes.LookupConfigmap(e.Ctx, e.Client, e.Integration.Namespace, configmap)
-		if cm == nil {
-			return nil, fmt.Errorf("could not find any configmap with name: %s", configmap)
-		}
-		if cm.ObjectMeta.Labels[kubernetes.ConfigMapAutogenLabel] == "true" {
+		// verify if it was autogenerated
+		cm, err := kubernetes.GetUnstructured(e.Ctx, e.Client, schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ConfigMap"},
+			e.Integration.Namespace, configmap)
+		if err == nil && cm != nil && cm.GetLabels()[kubernetes.ConfigMapAutogenLabel] == "true" {
 			refCm := kubernetes.NewConfigMap(e.Integration.Namespace, configmap, "", "", "", nil)
 			e.Resources.Add(refCm)
 		}
 		// Iterate over each configmap key which may hold a different OpenAPI spec
-		for k, v := range cm.Data {
+		for k, v := range cm.UnstructuredContent()["data"].(map[string]string) {
 			dataSpecs = append(dataSpecs, v1.DataSpec{
 				Name:        k,
 				Content:     v,
diff --git a/pkg/util/kubernetes/client.go b/pkg/util/kubernetes/client.go
index a1e8fc9..162e676 100644
--- a/pkg/util/kubernetes/client.go
+++ b/pkg/util/kubernetes/client.go
@@ -23,6 +23,8 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	"k8s.io/apimachinery/pkg/runtime/schema"
 
 	ctrl "sigs.k8s.io/controller-runtime/pkg/client"
 
@@ -57,6 +59,17 @@ func GetBuild(context context.Context, client client.Client, name string, namesp
 	return build, nil
 }
 
+// GetUnstructured provides a generic unstructured K8S object. Useful in order to retrieve a non cached version of an object.
+func GetUnstructured(context context.Context, client ctrl.Reader, gvk schema.GroupVersionKind, name string, namespace string) (*unstructured.Unstructured, error) {
+	object := &unstructured.Unstructured{}
+	object.SetNamespace(namespace)
+	object.SetName(name)
+	object.SetGroupVersionKind(gvk)
+	err := client.Get(context, ctrl.ObjectKeyFromObject(object), object)
+
+	return object, err
+}
+
 func GetConfigMap(context context.Context, client ctrl.Reader, name string, namespace string) (*corev1.ConfigMap, error) {
 	configMap := &corev1.ConfigMap{
 		TypeMeta: metav1.TypeMeta{