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

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

commit 76dec79d1f457d029b6259ae084b4ada0c8c023b
Author: Tadayoshi Sato <sato.tadayo...@gmail.com>
AuthorDate: Wed Dec 14 18:11:20 2022 +0900

    fix(install): refactor install cmd support funcs to remove another maintidx 
lint
---
 pkg/install/cluster.go | 246 +++++++++++++++++++++++++++----------------------
 1 file changed, 136 insertions(+), 110 deletions(-)

diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index fd704759a..0af2e0e30 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -39,7 +39,6 @@ import (
        "github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
-// nolint: maintidx // TODO: refactor the code
 func SetupClusterWideResourcesOrCollect(
        ctx context.Context, clientProvider client.Provider,
        collection *kubernetes.Collection, clusterType string, force bool,
@@ -50,110 +49,8 @@ func SetupClusterWideResourcesOrCollect(
                return err
        }
 
-       isAPIExtensionsV1 := true
-       if _, err := 
c.Discovery().ServerResourcesForGroupVersion("apiextensions.k8s.io/v1"); err != 
nil {
-               if k8serrors.IsNotFound(err) {
-                       isAPIExtensionsV1 = false
-               } else {
-                       return err
-               }
-       }
-
-       // Convert the CRD to apiextensions.k8s.io/v1beta1 in case v1 is not 
available.
-       // 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.
-       if err := apiextensionsv1.AddToScheme(c.GetScheme()); err != nil {
-               return err
-       }
-       if !isAPIExtensionsV1 {
-               if err := apiextensionsv1beta1.AddToScheme(c.GetScheme()); err 
!= nil {
-                       return err
-               }
-       }
-       downgradeToCRDv1beta1 := func(object ctrl.Object) ctrl.Object {
-               // Remove default values in v1beta1 Integration and 
KameletBinding CRDs,
-               removeDefaultFromCrd := func(crd 
*apiextensionsv1beta1.CustomResourceDefinition, property string) {
-                       defaultValue := apiextensionsv1beta1.JSONSchemaProps{
-                               Default: nil,
-                       }
-                       if crd.Name == "integrations.camel.apache.org" {
-                               crd.Spec.Validation.OpenAPIV3Schema.
-                                       
Properties["spec"].Properties["template"].Properties["spec"].Properties[property].Items.Schema.
-                                       
Properties["ports"].Items.Schema.Properties["protocol"] = defaultValue
-                       }
-                       if crd.Name == "kameletbindings.camel.apache.org" {
-                               
crd.Spec.Validation.OpenAPIV3Schema.Properties["spec"].Properties["integration"].Properties["template"].
-                                       
Properties["spec"].Properties[property].Items.Schema.Properties["ports"].Items.Schema.
-                                       Properties["protocol"] = defaultValue
-                       }
-               }
-
-               if !isAPIExtensionsV1 {
-                       v1Crd, ok := 
object.(*apiextensionsv1.CustomResourceDefinition)
-                       if !ok {
-                               return nil
-                       }
-                       v1beta1Crd := 
&apiextensionsv1beta1.CustomResourceDefinition{}
-                       crd := &apiextensions.CustomResourceDefinition{}
-
-                       err := 
apiextensionsv1.Convert_v1_CustomResourceDefinition_To_apiextensions_CustomResourceDefinition(v1Crd,
 crd, nil)
-                       if err != nil {
-                               return nil
-                       }
-
-                       err = 
apiextensionsv1beta1.Convert_apiextensions_CustomResourceDefinition_To_v1beta1_CustomResourceDefinition(crd,
 v1beta1Crd, nil)
-                       if err != nil {
-                               return nil
-                       }
-
-                       removeDefaultFromCrd(v1beta1Crd, "ephemeralContainers")
-                       removeDefaultFromCrd(v1beta1Crd, "containers")
-                       removeDefaultFromCrd(v1beta1Crd, "initContainers")
-
-                       return v1beta1Crd
-               }
-               return object
-       }
-
-       // Install CRD for Integration Platform (if needed)
-       if err := installCRD(ctx, c, "IntegrationPlatform", "v1", 
"camel.apache.org_integrationplatforms.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for Integration Kit (if needed)
-       if err := installCRD(ctx, c, "IntegrationKit", "v1", 
"camel.apache.org_integrationkits.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for Integration (if needed)
-       if err := installCRD(ctx, c, "Integration", "v1", 
"camel.apache.org_integrations.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for Camel Catalog (if needed)
-       if err := installCRD(ctx, c, "CamelCatalog", "v1", 
"camel.apache.org_camelcatalogs.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for Build (if needed)
-       if err := installCRD(ctx, c, "Build", "v1", 
"camel.apache.org_builds.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for Kamelet (if needed)
-       if err := installCRD(ctx, c, "Kamelet", "v1alpha1", 
"camel.apache.org_kamelets.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
-               return err
-       }
-
-       // Install CRD for KameletBinding (if needed)
-       if err := installCRD(ctx, c, "KameletBinding", "v1alpha1", 
"camel.apache.org_kameletbindings.yaml",
-               downgradeToCRDv1beta1, collection, force); err != nil {
+       // Install CRDs
+       if err := installCRDs(ctx, c, collection, force); err != nil {
                return err
        }
 
@@ -165,7 +62,14 @@ func SetupClusterWideResourcesOrCollect(
                }
        }
 
-       // Installing ClusterRoles
+       // Install ClusterRoles
+       return installClusterRoles(ctx, c, collection, clusterType)
+}
+
+func installClusterRoles(
+       ctx context.Context, c client.Client, collection 
*kubernetes.Collection, clusterType string,
+) error {
+       // ClusterRole: camel-k-edit
        ok, err := isClusterRoleInstalled(ctx, c, "camel-k-edit")
        if err != nil {
                return err
@@ -177,6 +81,7 @@ func SetupClusterWideResourcesOrCollect(
                }
        }
 
+       // ClusterRole: camel-k-operator-custom-resource-definitions
        ok, err = isClusterRoleInstalled(ctx, c, 
"camel-k-operator-custom-resource-definitions")
        if err != nil {
                return err
@@ -188,12 +93,15 @@ func SetupClusterWideResourcesOrCollect(
                }
        }
 
+       // ClusterRole: camel-k-operator-local-registry
        ok, err = isClusterRoleInstalled(ctx, c, 
"camel-k-operator-local-registry")
        if err == nil && !ok {
-               // nolint: errcheck
-               installResource(ctx, c, collection, 
"/rbac/operator-cluster-role-local-registry.yaml")
+               // ignore errors
+               _ = installResource(ctx, c, collection, 
"/rbac/operator-cluster-role-local-registry.yaml")
        }
 
+       // === For OpenShift ===
+       // ClusterRole: camel-k-operator-console-openshift
        isOpenShift, err := isOpenShift(c, clusterType)
        if err != nil {
                return err
@@ -211,6 +119,8 @@ func SetupClusterWideResourcesOrCollect(
                }
        }
 
+       // === For Knative ===
+       // ClusterRole: camel-k-operator-bind-addressable-resolver
        isKnative, err := knative.IsInstalled(c)
        if err != nil {
                return err
@@ -231,6 +141,122 @@ func SetupClusterWideResourcesOrCollect(
        return nil
 }
 
+func installCRDs(ctx context.Context, c client.Client, collection 
*kubernetes.Collection, force bool) error {
+       isAPIExtensionsV1 := true
+       if _, err := 
c.Discovery().ServerResourcesForGroupVersion("apiextensions.k8s.io/v1"); err != 
nil {
+               if k8serrors.IsNotFound(err) {
+                       isAPIExtensionsV1 = false
+               } else {
+                       return err
+               }
+       }
+
+       // Convert the CRD to apiextensions.k8s.io/v1beta1 in case v1 is not 
available.
+       // 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.
+       if err := apiextensionsv1.AddToScheme(c.GetScheme()); err != nil {
+               return err
+       }
+       if !isAPIExtensionsV1 {
+               if err := apiextensionsv1beta1.AddToScheme(c.GetScheme()); err 
!= nil {
+                       return err
+               }
+       }
+       v1beta1Customizer := downgradeToCRDv1beta1(isAPIExtensionsV1)
+
+       // Install CRD for Integration Platform (if needed)
+       if err := installCRD(ctx, c, "IntegrationPlatform", "v1", 
"camel.apache.org_integrationplatforms.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for Integration Kit (if needed)
+       if err := installCRD(ctx, c, "IntegrationKit", "v1", 
"camel.apache.org_integrationkits.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for Integration (if needed)
+       if err := installCRD(ctx, c, "Integration", "v1", 
"camel.apache.org_integrations.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for Camel Catalog (if needed)
+       if err := installCRD(ctx, c, "CamelCatalog", "v1", 
"camel.apache.org_camelcatalogs.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for Build (if needed)
+       if err := installCRD(ctx, c, "Build", "v1", 
"camel.apache.org_builds.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for Kamelet (if needed)
+       if err := installCRD(ctx, c, "Kamelet", "v1alpha1", 
"camel.apache.org_kamelets.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       // Install CRD for KameletBinding (if needed)
+       if err := installCRD(ctx, c, "KameletBinding", "v1alpha1", 
"camel.apache.org_kameletbindings.yaml",
+               v1beta1Customizer, collection, force); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func downgradeToCRDv1beta1(isAPIExtensionsV1 bool) ResourceCustomizer {
+       return func(object ctrl.Object) ctrl.Object {
+               // Remove default values in v1beta1 Integration and 
KameletBinding CRDs,
+               removeDefaultFromCrd := func(crd 
*apiextensionsv1beta1.CustomResourceDefinition, property string) {
+                       defaultValue := apiextensionsv1beta1.JSONSchemaProps{
+                               Default: nil,
+                       }
+                       if crd.Name == "integrations.camel.apache.org" {
+                               crd.Spec.Validation.OpenAPIV3Schema.
+                                       
Properties["spec"].Properties["template"].Properties["spec"].Properties[property].Items.Schema.
+                                       
Properties["ports"].Items.Schema.Properties["protocol"] = defaultValue
+                       }
+                       if crd.Name == "kameletbindings.camel.apache.org" {
+                               
crd.Spec.Validation.OpenAPIV3Schema.Properties["spec"].Properties["integration"].Properties["template"].
+                                       
Properties["spec"].Properties[property].Items.Schema.Properties["ports"].Items.Schema.
+                                       Properties["protocol"] = defaultValue
+                       }
+               }
+
+               if !isAPIExtensionsV1 {
+                       v1Crd, ok := 
object.(*apiextensionsv1.CustomResourceDefinition)
+                       if !ok {
+                               return nil
+                       }
+                       v1beta1Crd := 
&apiextensionsv1beta1.CustomResourceDefinition{}
+                       crd := &apiextensions.CustomResourceDefinition{}
+
+                       err := 
apiextensionsv1.Convert_v1_CustomResourceDefinition_To_apiextensions_CustomResourceDefinition(v1Crd,
 crd, nil)
+                       if err != nil {
+                               return nil
+                       }
+
+                       err = 
apiextensionsv1beta1.Convert_apiextensions_CustomResourceDefinition_To_v1beta1_CustomResourceDefinition(crd,
 v1beta1Crd, nil)
+                       if err != nil {
+                               return nil
+                       }
+
+                       removeDefaultFromCrd(v1beta1Crd, "ephemeralContainers")
+                       removeDefaultFromCrd(v1beta1Crd, "containers")
+                       removeDefaultFromCrd(v1beta1Crd, "initContainers")
+
+                       return v1beta1Crd
+               }
+
+               return object
+       }
+}
+
 func WaitForAllCrdInstallation(ctx context.Context, clientProvider 
client.Provider, timeout time.Duration) error {
        deadline := time.Now().Add(timeout)
        for {
@@ -306,7 +332,7 @@ func isCrdInstalled(c client.Client, kind string, version 
string) (bool, error)
 
 func installCRD(
        ctx context.Context, c client.Client, kind string, version string, 
resourceName string,
-       converter ResourceCustomizer, collection *kubernetes.Collection, force 
bool,
+       customizer ResourceCustomizer, collection *kubernetes.Collection, force 
bool,
 ) error {
        content, err := resources.ResourceAsString("/crd/bases/" + resourceName)
        if err != nil {
@@ -318,7 +344,7 @@ func installCRD(
                return err
        }
 
-       crd = converter(crd)
+       crd = customizer(crd)
        if crd == nil {
                // The conversion has failed
                return errors.New("cannot convert " + resourceName + " CRD to 
apiextensions.k8s.io/v1beta1")

Reply via email to