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

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


The following commit(s) were added to refs/heads/master by this push:
     new d5356cd  chore(crd): Use conversion-gen API for structured conversion 
of CRDs to v1beta1
d5356cd is described below

commit d5356cd0331fc8344184e539eb2fbd737bcd8f2d
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Tue Jan 26 18:00:28 2021 +0100

    chore(crd): Use conversion-gen API for structured conversion of CRDs to 
v1beta1
---
 pkg/install/cluster.go | 63 ++++++++++++++++++++++++++++----------------------
 1 file changed, 36 insertions(+), 27 deletions(-)

diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index 4e72a3f..fcbd327 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -27,10 +27,13 @@ import (
        rbacv1 "k8s.io/api/rbac/v1"
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-       "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/runtime"
        k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 
+       "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
+       apiextensionsv1 
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
+       apiextensionsv1beta1 
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
+
        "github.com/apache/camel-k/deploy"
        "github.com/apache/camel-k/pkg/client"
        "github.com/apache/camel-k/pkg/util/kubernetes"
@@ -53,33 +56,35 @@ func SetupClusterWideResourcesOrCollect(ctx 
context.Context, clientProvider clie
        }
 
        // Convert the CRD to apiextensions.k8s.io/v1beta1 in case v1 is not 
available.
-       // This is mainly requires to support OpenShift 3 and older versions of 
Kubernetes,
-       // and can be removed as soon as they are not supported anymore.
+       // This is mainly required to support OpenShift 3, and older versions 
of Kubernetes.
+       // It can be removed as soon as these versions are not supported 
anymore.
+       err = apiextensionsv1.AddToScheme(c.GetScheme())
+       if err != nil {
+               return err
+       }
+       if !isApiExtensionsV1 {
+               err = apiextensionsv1beta1.AddToScheme(c.GetScheme())
+               if err != nil {
+                       return err
+               }
+       }
        downgradeToCRDv1beta1 := func(object runtime.Object) runtime.Object {
                if !isApiExtensionsV1 {
-                       
object.GetObjectKind().SetGroupVersionKind(object.GetObjectKind().GroupVersionKind().GroupKind().WithVersion("v1beta1"))
-                       o := object.(*unstructured.Unstructured).Object
-                       spec := o["spec"].(map[string]interface{})
-                       version := 
spec["versions"].([]interface{})[0].(map[string]interface{})
-
-                       spec["validation"] = version["schema"]
-                       delete(version, "schema")
-
-                       spec["additionalPrinterColumns"] = 
version["additionalPrinterColumns"]
-                       delete(version, "additionalPrinterColumns")
-                       additionalPrinterColumns := 
spec["additionalPrinterColumns"].([]interface{})
-                       for i := range additionalPrinterColumns {
-                               column := 
additionalPrinterColumns[i].(map[string]interface{})
-                               for k, v := range column {
-                                       if k == "jsonPath" {
-                                               column["JSONPath"] = v
-                                               delete(column, k)
-                                       }
-                               }
+                       v1Crd := 
object.(*apiextensionsv1.CustomResourceDefinition)
+                       v1beta1Crd := 
&apiextensionsv1beta1.CustomResourceDefinition{}
+                       crd := &apiextensions.CustomResourceDefinition{}
+
+                       err := 
apiextensionsv1.Convert_v1_CustomResourceDefinition_To_apiextensions_CustomResourceDefinition(v1Crd,
 crd, nil)
+                       if err != nil {
+                               return nil
                        }
 
-                       spec["subresources"] = version["subresources"]
-                       delete(version, "subresources")
+                       err = 
apiextensionsv1beta1.Convert_apiextensions_CustomResourceDefinition_To_v1beta1_CustomResourceDefinition(crd,
 v1beta1Crd, nil)
+                       if err != nil {
+                               return nil
+                       }
+
+                       return v1beta1Crd
                }
                return object
        }
@@ -222,13 +227,17 @@ func IsCRDInstalled(ctx context.Context, c client.Client, 
kind string, version s
        return false, nil
 }
 
-func installCRD(ctx context.Context, c client.Client, kind string, version 
string, resourceName string, customizer ResourceCustomizer, collection 
*kubernetes.Collection) error {
-       crd, err := 
kubernetes.LoadRawResourceFromYaml(deploy.ResourceAsString(resourceName))
+func installCRD(ctx context.Context, c client.Client, kind string, version 
string, resourceName string, converter ResourceCustomizer, collection 
*kubernetes.Collection) error {
+       crd, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
deploy.ResourceAsString(resourceName))
        if err != nil {
                return err
        }
 
-       crd = customizer(crd)
+       crd = converter(crd)
+       if crd == nil {
+               // The conversion has failed
+               return errors.New("cannot convert " + resourceName + " CRD to 
apiextensions.k8s.io/v1beta1")
+       }
 
        if collection != nil {
                collection.Add(crd)

Reply via email to