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
The following commit(s) were added to refs/heads/main by this push:
new 3652ee748 chore: Use global client discovery API to check Knative
install
3652ee748 is described below
commit 3652ee74813567f255e7f353a5045301e3d08ed4
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Thu Sep 29 14:32:52 2022 +0200
chore: Use global client discovery API to check Knative install
---
e2e/global/knative/knative_platform_test.go | 4 ++-
pkg/controller/integration/platform_setup.go | 24 ++++++++++------
pkg/controller/kameletbinding/integration.go | 4 ++-
pkg/install/cluster.go | 2 +-
pkg/install/knative.go | 2 +-
pkg/install/operator.go | 2 +-
pkg/util/knative/enabled.go | 43 ++++------------------------
7 files changed, 29 insertions(+), 52 deletions(-)
diff --git a/e2e/global/knative/knative_platform_test.go
b/e2e/global/knative/knative_platform_test.go
index d35c6867f..5b4bdb88d 100644
--- a/e2e/global/knative/knative_platform_test.go
+++ b/e2e/global/knative/knative_platform_test.go
@@ -40,7 +40,9 @@ import (
func TestKnativePlatform(t *testing.T) {
WithNewTestNamespace(t, func(ns string) {
- if !knative.IsEnabledInNamespace(TestContext, TestClient(), ns)
{
+ installed, err := knative.IsInstalled(TestClient())
+ Expect(err).NotTo(HaveOccurred())
+ if !installed {
t.Error("Knative not installed in the cluster")
t.FailNow()
}
diff --git a/pkg/controller/integration/platform_setup.go
b/pkg/controller/integration/platform_setup.go
index 6c1b85bb1..92a90ce80 100644
--- a/pkg/controller/integration/platform_setup.go
+++ b/pkg/controller/integration/platform_setup.go
@@ -59,7 +59,11 @@ func (action *platformSetupAction) Handle(ctx
context.Context, integration *v1.I
if err != nil && !k8serrors.IsNotFound(err) {
return nil, err
} else if pl != nil {
- integration.Status.Profile = determineBestProfile(ctx,
action.client, integration, pl)
+ profile, err := determineBestProfile(action.client,
integration, pl)
+ if err != nil {
+ return nil, err
+ }
+ integration.Status.Profile = profile
}
// Change the integration phase to Initialization after traits have
been applied
@@ -73,24 +77,26 @@ func (action *platformSetupAction) Handle(ctx
context.Context, integration *v1.I
}
// DetermineBestProfile tries to detect the best trait profile for the
integration.
-func determineBestProfile(ctx context.Context, c client.Client, integration
*v1.Integration, p *v1.IntegrationPlatform) v1.TraitProfile {
+func determineBestProfile(c client.Client, integration *v1.Integration, p
*v1.IntegrationPlatform) (v1.TraitProfile, error) {
if integration.Spec.Profile != "" {
- return integration.Spec.Profile
+ return integration.Spec.Profile, nil
}
if integration.Status.Profile != "" {
// Integration already has a profile
- return integration.Status.Profile
+ return integration.Status.Profile, nil
}
if p.Status.Profile != "" {
// Use platform profile if set
- return p.Status.Profile
+ return p.Status.Profile, nil
}
if p.Spec.Profile != "" {
// Use platform spec profile if set
- return p.Spec.Profile
+ return p.Spec.Profile, nil
}
- if knative.IsEnabledInNamespace(ctx, c, integration.Namespace) {
- return v1.TraitProfileKnative
+ if ok, err := knative.IsInstalled(c); err != nil {
+ return "", err
+ } else if ok {
+ return v1.TraitProfileKnative, nil
}
- return platform.GetProfile(p)
+ return platform.GetProfile(p), nil
}
diff --git a/pkg/controller/kameletbinding/integration.go
b/pkg/controller/kameletbinding/integration.go
index 3f988d595..e9e1add70 100644
--- a/pkg/controller/kameletbinding/integration.go
+++ b/pkg/controller/kameletbinding/integration.go
@@ -249,7 +249,9 @@ func determineProfile(ctx context.Context, c client.Client,
binding *v1alpha1.Ka
return pl.Spec.Profile, nil
}
}
- if knative.IsEnabledInNamespace(ctx, c, binding.Namespace) {
+ if ok, err := knative.IsInstalled(c); err != nil {
+ return "", err
+ } else if ok {
return v1.TraitProfileKnative, nil
}
if pl != nil {
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index b135b2d64..6e18919a8 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -201,7 +201,7 @@ func SetupClusterWideResourcesOrCollect(ctx
context.Context, clientProvider clie
}
}
- isKnative, err := knative.IsInstalled(ctx, c)
+ isKnative, err := knative.IsInstalled(c)
if err != nil {
return err
}
diff --git a/pkg/install/knative.go b/pkg/install/knative.go
index 23d779c60..cf98ef5e8 100644
--- a/pkg/install/knative.go
+++ b/pkg/install/knative.go
@@ -35,7 +35,7 @@ const knativeAddressableResolverClusterRoleName =
"addressable-resolver"
// BindKnativeAddressableResolverClusterRole binds the Knative addressable
resolver aggregated ClusterRole
// to the operator ServiceAccount.
func BindKnativeAddressableResolverClusterRole(ctx context.Context, c
kubernetes.Interface, namespace string, operatorNamespace string) error {
- if isKnative, err := knative.IsInstalled(ctx, c); err != nil {
+ if isKnative, err := knative.IsInstalled(c); err != nil {
return err
} else if !isKnative {
return nil
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index ce33bbea9..00d01f1d0 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -242,7 +242,7 @@ func OperatorOrCollect(ctx context.Context, cmd
*cobra.Command, c client.Client,
}
// Additionally, install Knative resources (roles and bindings)
- isKnative, err := knative.IsInstalled(ctx, c)
+ isKnative, err := knative.IsInstalled(c)
if err != nil {
return err
}
diff --git a/pkg/util/knative/enabled.go b/pkg/util/knative/enabled.go
index 00e6adc65..80e94b9f8 100644
--- a/pkg/util/knative/enabled.go
+++ b/pkg/util/knative/enabled.go
@@ -18,48 +18,15 @@ limitations under the License.
package knative
import (
- "context"
-
- "github.com/apache/camel-k/pkg/client"
- kubernetesutils "github.com/apache/camel-k/pkg/util/kubernetes"
- "github.com/apache/camel-k/pkg/util/log"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
- "k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
-)
-// IsEnabledInNamespace returns true if we can list some basic knative objects
in the given namespace.
-//
-// This method can be used at operator level to check if knative resources can
be accessed.
-func IsEnabledInNamespace(ctx context.Context, c client.Client, namespace
string) bool {
- dyn, err := dynamic.NewForConfig(c.GetConfig())
- if err != nil {
- log.Infof("could not create dynamic client to check knative
installation in namespace %s, got error: %v", namespace, err)
- return false
- }
- for _, kgv := range RequiredKinds {
- _, err = dyn.Resource(schema.GroupVersionResource{
- Group: kgv.Group,
- Version: kgv.Version,
- Resource: kgv.Resource,
- }).Namespace(namespace).List(ctx, metav1.ListOptions{})
-
- if err == nil {
- return true
- }
- }
-
- log.Infof("could not find any knative type in namespace %s, last error
was: %v", namespace, err)
- return false
-}
+ util "github.com/apache/camel-k/pkg/util/kubernetes"
+)
-// IsInstalled returns true if we are connected to a cluster with Knative
installed
-//
-// This method should not be called from the operator, as it might require
permissions that are not available.
-func IsInstalled(ctx context.Context, c kubernetes.Interface) (bool, error) {
- // check some Knative APIs
+// IsInstalled returns true if we are connected to a cluster with Knative
installed.
+func IsInstalled(c kubernetes.Interface) (bool, error) {
for _, api := range getRequiredKnativeGroupVersions() {
if installed, err := isInstalled(c, api); err != nil {
return false, err
@@ -72,7 +39,7 @@ func IsInstalled(ctx context.Context, c kubernetes.Interface)
(bool, error) {
func isInstalled(c kubernetes.Interface, api schema.GroupVersion) (bool,
error) {
_, err := c.Discovery().ServerResourcesForGroupVersion(api.String())
- if err != nil && (k8serrors.IsNotFound(err) ||
kubernetesutils.IsUnknownAPIError(err)) {
+ if err != nil && (k8serrors.IsNotFound(err) ||
util.IsUnknownAPIError(err)) {
return false, nil
} else if err != nil {
return false, err