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 }