You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2022/01/31 13:23:16 UTC

[camel-k] 08/09: chore(cli): Install Knative addressable-resolver ClusterRole and ClusterRoleBinding

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 4bec325b596175d75444aadfa78fc20a4cb1a4c0
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Mon Jan 31 10:53:36 2022 +0100

    chore(cli): Install Knative addressable-resolver ClusterRole and ClusterRoleBinding
---
 pkg/install/cluster.go  | 18 ++++++++++++++++++
 pkg/install/operator.go | 46 +++++++++++++++++++++++++++-------------------
 2 files changed, 45 insertions(+), 19 deletions(-)

diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index 7902986..966f5ea 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -35,6 +35,7 @@ import (
 
 	"github.com/apache/camel-k/pkg/client"
 	"github.com/apache/camel-k/pkg/resources"
+	"github.com/apache/camel-k/pkg/util/knative"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
@@ -193,6 +194,23 @@ func SetupClusterWideResourcesOrCollect(ctx context.Context, clientProvider clie
 		}
 	}
 
+	isKnative, err := knative.IsInstalled(ctx, c)
+	if err != nil {
+		return err
+	}
+	if isKnative {
+		ok, err := isClusterRoleInstalled(ctx, c, "camel-k-operator-bind-addressable-resolver")
+		if err != nil {
+			return err
+		}
+		if !ok || collection != nil {
+			err := installResource(ctx, c, collection, "/rbac/operator-cluster-role-addressable-resolver.yaml")
+			if err != nil {
+				return err
+			}
+		}
+	}
+
 	return nil
 }
 
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index 47c5a0c..18fa8f0 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -247,44 +247,51 @@ func OperatorOrCollect(ctx context.Context, c client.Client, cfg OperatorConfigu
 		if err := installKnative(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
 			return err
 		}
+		if err := installClusterRoleBinding(ctx, c, collection, cfg.Namespace, "camel-k-operator-bind-addressable-resolver", "/rbac/operator-cluster-role-binding-addressable-resolver.yaml"); err != nil {
+			if k8serrors.IsForbidden(err) {
+				fmt.Println("Warning: the operator will not be able to bind Knative addressable-resolver ClusterRole. Try installing the operator as cluster-admin.")
+			} else {
+				return err
+			}
+		}
 	}
 
-	if errevt := installEvents(ctx, c, cfg.Namespace, customizer, collection, force); errevt != nil {
-		if k8serrors.IsAlreadyExists(errevt) {
-			return errevt
+	if err = installEvents(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
+		if k8serrors.IsAlreadyExists(err) {
+			return err
 		}
 		fmt.Println("Warning: the operator will not be able to publish Kubernetes events. Try installing as cluster-admin to allow it to generate events.")
 	}
 
-	if errmtr := installKedaBindings(ctx, c, cfg.Namespace, customizer, collection, force); errmtr != nil {
-		if k8serrors.IsAlreadyExists(errmtr) {
-			return errmtr
+	if err = installKedaBindings(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
+		if k8serrors.IsAlreadyExists(err) {
+			return err
 		}
 		fmt.Println("Warning: the operator will not be able to create KEDA resources. Try installing as cluster-admin.")
 	}
 
-	if errmtr := installPodMonitors(ctx, c, cfg.Namespace, customizer, collection, force); errmtr != nil {
-		if k8serrors.IsAlreadyExists(errmtr) {
-			return errmtr
+	if err = installPodMonitors(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
+		if k8serrors.IsAlreadyExists(err) {
+			return err
 		}
 		fmt.Println("Warning: the operator will not be able to create PodMonitor resources. Try installing as cluster-admin.")
 	}
 
-	if errmtr := installStrimziBindings(ctx, c, cfg.Namespace, customizer, collection, force); errmtr != nil {
-		if k8serrors.IsAlreadyExists(errmtr) {
-			return errmtr
+	if err := installStrimziBindings(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
+		if k8serrors.IsAlreadyExists(err) {
+			return err
 		}
 		fmt.Println("Warning: the operator will not be able to lookup strimzi kafka resources. Try installing as cluster-admin to allow the lookup of strimzi kafka resources.")
 	}
 
-	if errmtr := installLeaseBindings(ctx, c, cfg.Namespace, customizer, collection, force); errmtr != nil {
-		if k8serrors.IsAlreadyExists(errmtr) {
-			return errmtr
+	if err = installLeaseBindings(ctx, c, cfg.Namespace, customizer, collection, force); err != nil {
+		if k8serrors.IsAlreadyExists(err) {
+			return err
 		}
 		fmt.Println("Warning: the operator will not be able to create Leases. Try installing as cluster-admin to allow management of Lease resources.")
 	}
 
-	if errmtr := installClusterRoleBinding(ctx, c, collection, cfg.Namespace, "camel-k-operator-custom-resource-definitions", "/rbac/operator-cluster-role-binding-custom-resource-definitions.yaml"); errmtr != nil {
+	if err = installClusterRoleBinding(ctx, c, collection, cfg.Namespace, "camel-k-operator-custom-resource-definitions", "/rbac/operator-cluster-role-binding-custom-resource-definitions.yaml"); err != nil {
 		fmt.Println("Warning: the operator will not be able to get CustomResourceDefinitions resources and the service-binding trait will fail if used. Try installing the operator as cluster-admin.")
 	}
 
@@ -309,7 +316,6 @@ func installClusterRoleBinding(ctx context.Context, c client.Client, collection
 	existing, err := c.RbacV1().ClusterRoleBindings().Get(ctx, name, metav1.GetOptions{})
 	switch {
 	case k8serrors.IsNotFound(err):
-
 		content, err := resources.ResourceAsString(path)
 		if err != nil {
 			return err
@@ -324,8 +330,10 @@ func installClusterRoleBinding(ctx context.Context, c client.Client, collection
 		if err != nil {
 			return err
 		}
-		// nolint: forcetypeassert
-		target = obj.(*rbacv1.ClusterRoleBinding)
+		var ok bool
+		if target, ok = obj.(*rbacv1.ClusterRoleBinding); !ok {
+			return fmt.Errorf("file %v does not contain a ClusterRoleBinding resource", path)
+		}
 	case err != nil:
 		return err
 	default: