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

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

commit 0e5c2ce0aec2d5198fb3d69e49fead8e25e5acce
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Mon Jan 17 19:12:14 2022 +0100

    fix: Install Kamelets as unstructured resources
---
 pkg/install/kamelets.go       | 14 +++++++-------
 pkg/util/kubernetes/loader.go | 15 +++++++--------
 2 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/pkg/install/kamelets.go b/pkg/install/kamelets.go
index f910436..024341c 100644
--- a/pkg/install/kamelets.go
+++ b/pkg/install/kamelets.go
@@ -90,7 +90,7 @@ func KameletCatalog(ctx context.Context, c client.Client, 
namespace string) erro
                }
                // We may want to throttle the creation of Go routines if the 
number of bundled Kamelets increases.
                g.Go(func() error {
-                       kamelet, err := loadKamelet(path.Join(kameletDir, 
f.Name()), namespace, c.GetScheme())
+                       kamelet, err := loadKamelet(path.Join(kameletDir, 
f.Name()), namespace)
                        if err != nil {
                                return err
                        }
@@ -177,22 +177,22 @@ func isIncompatibleServerError(err error) bool {
        return false
 }
 
-func loadKamelet(path string, namespace string, scheme *runtime.Scheme) 
(*v1alpha1.Kamelet, error) {
+func loadKamelet(path string, namespace string) (ctrl.Object, error) {
        content, err := util.ReadFile(path)
        if err != nil {
                return nil, err
        }
 
-       obj, err := kubernetes.LoadResourceFromYaml(scheme, string(content))
+       kamelet, err := kubernetes.LoadUnstructuredFromYaml(string(content))
        if err != nil {
                return nil, err
        }
-       kamelet, ok := obj.(*v1alpha1.Kamelet)
-       if !ok {
-               return nil, fmt.Errorf("cannot load Kamelet from file %q", path)
+       gvk := kamelet.GetObjectKind().GroupVersionKind()
+       if gvk.Group != v1alpha1.SchemeGroupVersion.Group || gvk.Kind != 
"Kamelet" {
+               return nil, fmt.Errorf("file %q does not define a Kamelet", 
path)
        }
 
-       kamelet.Namespace = namespace
+       kamelet.SetNamespace(namespace)
 
        if kamelet.GetAnnotations() == nil {
                kamelet.SetAnnotations(make(map[string]string))
diff --git a/pkg/util/kubernetes/loader.go b/pkg/util/kubernetes/loader.go
index ad4217b..e076eab 100644
--- a/pkg/util/kubernetes/loader.go
+++ b/pkg/util/kubernetes/loader.go
@@ -29,7 +29,7 @@ import (
        ctrl "sigs.k8s.io/controller-runtime/pkg/client"
 )
 
-// LoadResourceFromYaml loads a k8s resource from a yaml definition.
+// LoadResourceFromYaml returns a Kubernetes resource from its serialized YAML 
definition.
 func LoadResourceFromYaml(scheme *runtime.Scheme, data string) (ctrl.Object, 
error) {
        source := []byte(data)
        jsonSource, err := yaml.ToJSON(source)
@@ -53,19 +53,18 @@ func LoadResourceFromYaml(scheme *runtime.Scheme, data 
string) (ctrl.Object, err
        return o, nil
 }
 
-// LoadRawResourceFromYaml loads a k8s resource from a yaml definition without 
making assumptions on the underlying type.
-func LoadRawResourceFromYaml(data string) (runtime.Object, error) {
-       source := []byte(data)
-       jsonSource, err := yaml.ToJSON(source)
+// LoadUnstructuredFromYaml returns an unstructured resource from its 
serialized YAML definition.
+func LoadUnstructuredFromYaml(data string) (ctrl.Object, error) {
+       source, err := yaml.ToJSON([]byte(data))
        if err != nil {
                return nil, err
        }
-       var objmap map[string]interface{}
-       if err = json.Unmarshal(jsonSource, &objmap); err != nil {
+       var obj map[string]interface{}
+       if err = json.Unmarshal(source, &obj); err != nil {
                return nil, err
        }
        return &unstructured.Unstructured{
-               Object: objmap,
+               Object: obj,
        }, nil
 }
 

Reply via email to