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{