You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/01/08 14:50:00 UTC
(camel-k) branch main updated: fix(knative): func to check when either serving or eventing are installed
This is an automated email from the ASF dual-hosted git repository.
pcongiusti 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 fb116f182 fix(knative): func to check when either serving or eventing are installed
fb116f182 is described below
commit fb116f182f7393494d60d5f5eb8f526463b33e54
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Jan 5 13:24:57 2024 +0100
fix(knative): func to check when either serving or eventing are installed
Closes #4962
---
e2e/knative/knative_platform_test.go | 2 +-
pkg/controller/integration/platform_setup.go | 2 +-
pkg/controller/kameletbinding/integration.go | 2 +-
pkg/controller/pipe/integration.go | 2 +-
pkg/install/cluster.go | 2 +-
pkg/trait/container.go | 2 +-
pkg/trait/container_test.go | 4 +--
pkg/util/bindings/knative_ref.go | 8 +++---
pkg/util/bindings/knative_ref_test.go | 4 +--
pkg/util/knative/apis.go | 13 ---------
pkg/util/knative/enabled.go | 43 +++++++++++++++-------------
pkg/util/test/client.go | 17 ++++++++++-
12 files changed, 53 insertions(+), 48 deletions(-)
diff --git a/e2e/knative/knative_platform_test.go b/e2e/knative/knative_platform_test.go
index 2dc5fdedf..f221d02f6 100644
--- a/e2e/knative/knative_platform_test.go
+++ b/e2e/knative/knative_platform_test.go
@@ -41,7 +41,7 @@ import (
func TestKnativePlatformDetection(t *testing.T) {
RegisterTestingT(t)
- installed, err := knative.IsInstalled(TestClient())
+ installed, err := knative.IsServingInstalled(TestClient())
Expect(err).NotTo(HaveOccurred())
if !installed {
t.Error("Knative not installed in the cluster")
diff --git a/pkg/controller/integration/platform_setup.go b/pkg/controller/integration/platform_setup.go
index a272715ba..911e607b6 100644
--- a/pkg/controller/integration/platform_setup.go
+++ b/pkg/controller/integration/platform_setup.go
@@ -97,7 +97,7 @@ func determineBestProfile(c client.Client, integration *v1.Integration, p *v1.In
// Use platform spec profile if set
return p.Spec.Profile, nil
}
- if ok, err := knative.IsInstalled(c); err != nil {
+ if ok, err := knative.IsServingInstalled(c); err != nil {
return "", err
} else if ok {
return v1.TraitProfileKnative, nil
diff --git a/pkg/controller/kameletbinding/integration.go b/pkg/controller/kameletbinding/integration.go
index 04720c25f..b2e60f599 100644
--- a/pkg/controller/kameletbinding/integration.go
+++ b/pkg/controller/kameletbinding/integration.go
@@ -248,7 +248,7 @@ func determineProfile(ctx context.Context, c client.Client, binding *v1alpha1.Ka
return pl.Spec.Profile, nil
}
}
- if ok, err := knative.IsInstalled(c); err != nil {
+ if ok, err := knative.IsServingInstalled(c); err != nil {
return "", err
} else if ok {
return v1.TraitProfileKnative, nil
diff --git a/pkg/controller/pipe/integration.go b/pkg/controller/pipe/integration.go
index cf25f0722..7effc4869 100644
--- a/pkg/controller/pipe/integration.go
+++ b/pkg/controller/pipe/integration.go
@@ -249,7 +249,7 @@ func determineProfile(ctx context.Context, c client.Client, binding *v1.Pipe) (v
return pl.Spec.Profile, nil
}
}
- if ok, err := knative.IsInstalled(c); err != nil {
+ if ok, err := knative.IsServingInstalled(c); err != nil {
return "", err
} else if ok {
return v1.TraitProfileKnative, nil
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index 945c554f2..32334b8a7 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -121,7 +121,7 @@ func installClusterRoles(
// === For Knative ===
// ClusterRole: camel-k-operator-bind-addressable-resolver
- isKnative, err := knative.IsInstalled(c)
+ isKnative, err := knative.IsEventingInstalled(c)
if err != nil {
return err
}
diff --git a/pkg/trait/container.go b/pkg/trait/container.go
index 443d97787..37429a60f 100644
--- a/pkg/trait/container.go
+++ b/pkg/trait/container.go
@@ -77,7 +77,7 @@ func (t *containerTrait) Configure(e *Environment) (bool, *TraitCondition, error
return false, nil, nil
}
- knativeInstalled, _ := knative.IsInstalled(e.Client)
+ knativeInstalled, _ := knative.IsEventingInstalled(e.Client)
if e.IntegrationInPhase(v1.IntegrationPhaseInitialization) && !knativeInstalled {
hasKnativeEndpoint, err := containsEndpoint("knative", e, t.Client)
if err != nil {
diff --git a/pkg/trait/container_test.go b/pkg/trait/container_test.go
index 28383b69c..7c424eb2b 100644
--- a/pkg/trait/container_test.go
+++ b/pkg/trait/container_test.go
@@ -487,9 +487,9 @@ func TestRunNonKnativeEndpointWithKnativeNotInstalled(t *testing.T) {
func createEnvironment() *Environment {
client, _ := test.NewFakeClient()
- // disable the knative service api
+ // disable the knative eventing api
fakeClient := client.(*test.FakeClient) //nolint
- fakeClient.DisableAPIGroupDiscovery("serving.knative.dev/v1")
+ fakeClient.DisableAPIGroupDiscovery("eventing.knative.dev/v1")
replicas := int32(3)
catalog, _ := camel.QuarkusCatalog()
diff --git a/pkg/util/bindings/knative_ref.go b/pkg/util/bindings/knative_ref.go
index 1ab488c1d..b90b3b3fe 100644
--- a/pkg/util/bindings/knative_ref.go
+++ b/pkg/util/bindings/knative_ref.go
@@ -53,8 +53,8 @@ func (k KnativeRefBindingProvider) Translate(ctx BindingContext, endpointCtx End
return nil, err
}
- if knativeInstalled, _ := knative.IsInstalled(ctx.Client); !knativeInstalled {
- // works only when Knative is installed
+ if refInstalled, _ := knative.IsRefKindInstalled(ctx.Client, *e.Ref); !refInstalled {
+ // works only when Knative specific API Kind is installed
return nil, fmt.Errorf("integration referencing Knative endpoint '%s' that cannot run, "+
"because Knative is not installed on the cluster", e.Ref.Name)
}
@@ -155,8 +155,8 @@ func (k V1alpha1KnativeRefBindingProvider) Translate(ctx V1alpha1BindingContext,
return nil, err
}
- if knativeInstalled, _ := knative.IsInstalled(ctx.Client); !knativeInstalled {
- // works only when Knative is installed
+ if refInstalled, _ := knative.IsRefKindInstalled(ctx.Client, *e.Ref); !refInstalled {
+ // works only when Knative specific API Kind is installed
return nil, fmt.Errorf("integration referencing Knative endpoint '%s' that cannot run, "+
"because Knative is not installed on the cluster", e.Ref.Name)
}
diff --git a/pkg/util/bindings/knative_ref_test.go b/pkg/util/bindings/knative_ref_test.go
index 9d06ebed3..6cd63cbe1 100644
--- a/pkg/util/bindings/knative_ref_test.go
+++ b/pkg/util/bindings/knative_ref_test.go
@@ -128,9 +128,9 @@ func TestKnativeNotInstalled(t *testing.T) {
client, err := test.NewFakeClient()
assert.NoError(t, err)
- // disable the knative service api
+ // disable the knative eventing api
fakeClient := client.(*test.FakeClient) //nolint
- fakeClient.DisableAPIGroupDiscovery("serving.knative.dev/v1")
+ fakeClient.DisableAPIGroupDiscovery("eventing.knative.dev/v1")
bindingContext := BindingContext{
Ctx: ctx,
diff --git a/pkg/util/knative/apis.go b/pkg/util/knative/apis.go
index 67c0af09f..6739be347 100644
--- a/pkg/util/knative/apis.go
+++ b/pkg/util/knative/apis.go
@@ -132,19 +132,6 @@ var (
Resource: "brokers",
},
}
-
- // RequiredKinds are Knative kinds used by Camel K for materializing integrations.
- // They must be present on the cluster.
- RequiredKinds = []GroupVersionKindResource{
- {
- GroupVersionKind: schema.GroupVersionKind{
- Kind: "Service",
- Group: "serving.knative.dev",
- Version: "v1",
- },
- Resource: "services",
- },
- }
)
// GroupVersionKindResource --.
diff --git a/pkg/util/knative/enabled.go b/pkg/util/knative/enabled.go
index 9a62c3f6f..0a6b6ced2 100644
--- a/pkg/util/knative/enabled.go
+++ b/pkg/util/knative/enabled.go
@@ -18,6 +18,7 @@ limitations under the License.
package knative
import (
+ corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/kubernetes"
@@ -25,18 +26,32 @@ import (
util "github.com/apache/camel-k/v2/pkg/util/kubernetes"
)
-// 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
- } else if installed {
- return true, nil
- }
+// IsRefKindInstalled returns true if the cluster has the referenced Kind installed.
+func IsRefKindInstalled(c kubernetes.Interface, ref corev1.ObjectReference) (bool, error) {
+ if installed, err := isInstalled(c, ref.GroupVersionKind().GroupVersion()); err != nil {
+ return false, err
+ } else if installed {
+ return true, nil
}
return false, nil
}
+// IsServingInstalled returns true if we are connected to a cluster with Knative Serving installed.
+func IsServingInstalled(c kubernetes.Interface) (bool, error) {
+ return IsRefKindInstalled(c, corev1.ObjectReference{
+ Kind: "Service",
+ APIVersion: "serving.knative.dev/v1",
+ })
+}
+
+// IsEventingInstalled returns true if we are connected to a cluster with Knative Eventing installed.
+func IsEventingInstalled(c kubernetes.Interface) (bool, error) {
+ return IsRefKindInstalled(c, corev1.ObjectReference{
+ Kind: "Broker",
+ APIVersion: "eventing.knative.dev/v1",
+ })
+}
+
func isInstalled(c kubernetes.Interface, api schema.GroupVersion) (bool, error) {
_, err := c.Discovery().ServerResourcesForGroupVersion(api.String())
if err != nil && (k8serrors.IsNotFound(err) || util.IsUnknownAPIError(err)) {
@@ -46,15 +61,3 @@ func isInstalled(c kubernetes.Interface, api schema.GroupVersion) (bool, error)
}
return true, nil
}
-
-func getRequiredKnativeGroupVersions() []schema.GroupVersion {
- apis := make(map[schema.GroupVersion]bool)
- res := make([]schema.GroupVersion, 0)
- for _, gvk := range RequiredKinds {
- if !apis[gvk.GroupVersion()] {
- apis[gvk.GroupVersion()] = true
- res = append(res, gvk.GroupVersion())
- }
- }
- return res
-}
diff --git a/pkg/util/test/client.go b/pkg/util/test/client.go
index 952e0da1f..fef78d2b6 100644
--- a/pkg/util/test/client.go
+++ b/pkg/util/test/client.go
@@ -204,11 +204,26 @@ func (f *FakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*me
}
}
- // used in util/knative/enabled.go to verify if knative is installed
+ // used to verify if knative is installed
if groupVersion == "serving.knative.dev/v1" && !util.StringSliceExists(f.disabledGroups, groupVersion) {
return &metav1.APIResourceList{
GroupVersion: "serving.knative.dev/v1",
}, nil
}
+ if groupVersion == "eventing.knative.dev/v1" && !util.StringSliceExists(f.disabledGroups, groupVersion) {
+ return &metav1.APIResourceList{
+ GroupVersion: "eventing.knative.dev/v1",
+ }, nil
+ }
+ if groupVersion == "messaging.knative.dev/v1" && !util.StringSliceExists(f.disabledGroups, groupVersion) {
+ return &metav1.APIResourceList{
+ GroupVersion: "messaging.knative.dev/v1",
+ }, nil
+ }
+ if groupVersion == "messaging.knative.dev/v1beta1" && !util.StringSliceExists(f.disabledGroups, groupVersion) {
+ return &metav1.APIResourceList{
+ GroupVersion: "messaging.knative.dev/v1beta1",
+ }, nil
+ }
return f.DiscoveryInterface.ServerResourcesForGroupVersion(groupVersion)
}