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 <[email protected]>
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{

Reply via email to