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{
