You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ts...@apache.org on 2022/07/08 06:16:28 UTC
[camel-k] 03/04: fix(#3393): Make CronJob functionality optional
This is an automated email from the ASF dual-hosted git repository.
tsato pushed a commit to branch release-1.9.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit cad2e06c6ba9d052ea0c0a32e7d43f8b4e6a2644
Author: Christoph Deppisch <cd...@redhat.com>
AuthorDate: Wed Jun 29 08:58:06 2022 +0200
fix(#3393): Make CronJob functionality optional
- Explicitly check for CronJob batch/v1 API availability before using it
- CronJob batch/v1 API is not available on OpenShift 3.x
- Disable cron job e2e test on OpenShift 3.x
(cherry picked from commit ee05ecca0a1fcd536aec65b366f5a5193eef4182)
---
e2e/common/cli/install_test.go | 6 ++---
e2e/common/cron_test.go | 12 ++++++++++
pkg/cmd/operator/operator.go | 26 ++++++++++++++++------
.../integration/integration_controller.go | 7 ++++--
4 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/e2e/common/cli/install_test.go b/e2e/common/cli/install_test.go
index b52f6c772..dfcefa0f9 100644
--- a/e2e/common/cli/install_test.go
+++ b/e2e/common/cli/install_test.go
@@ -38,7 +38,7 @@ import (
"github.com/apache/camel-k/pkg/util/defaults"
"github.com/apache/camel-k/pkg/util/kubernetes"
"github.com/apache/camel-k/pkg/util/openshift"
- console "github.com/openshift/api/console/v1"
+ consolev1 "github.com/openshift/api/console/v1"
)
func TestBasicInstallation(t *testing.T) {
@@ -97,11 +97,11 @@ func TestConsoleCliDownload(t *testing.T) {
ocp, err := openshift.IsOpenShift(TestClient())
assert.Nil(t, err)
- ok, err := kubernetes.IsAPIResourceInstalled(TestClient(), "console.openshift.io/v1", reflect.TypeOf(console.ConsoleCLIDownload{}).Name())
+ ok, err := kubernetes.IsAPIResourceInstalled(TestClient(), "console.openshift.io/v1", reflect.TypeOf(consolev1.ConsoleCLIDownload{}).Name())
assert.Nil(t, err)
if !ocp || !ok {
- t.Skip("This test requires ConsoleCliDownload object which is available on OpenShift 4 only.")
+ t.Skip("This test requires ConsoleCliDownload object which is available on OpenShift 4+ only.")
return
}
diff --git a/e2e/common/cron_test.go b/e2e/common/cron_test.go
index dc26197db..85b5ac211 100644
--- a/e2e/common/cron_test.go
+++ b/e2e/common/cron_test.go
@@ -23,17 +23,29 @@ limitations under the License.
package common
import (
+ "reflect"
"testing"
. "github.com/onsi/gomega"
+ "github.com/stretchr/testify/assert"
+ batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
. "github.com/apache/camel-k/e2e/support"
v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+ "github.com/apache/camel-k/pkg/util/kubernetes"
)
func TestRunCronExample(t *testing.T) {
+ ok, err := kubernetes.IsAPIResourceInstalled(TestClient(), batchv1.SchemeGroupVersion.Group, reflect.TypeOf(batchv1.CronJob{}).Name())
+ assert.Nil(t, err)
+
+ if !ok {
+ t.Skip("This test requires CronJob batch/v1 API installed.")
+ return
+ }
+
WithNewTestNamespace(t, func(ns string) {
Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
diff --git a/pkg/cmd/operator/operator.go b/pkg/cmd/operator/operator.go
index 1b555fd30..8a8ffa2a7 100644
--- a/pkg/cmd/operator/operator.go
+++ b/pkg/cmd/operator/operator.go
@@ -23,6 +23,7 @@ import (
"fmt"
"math/rand"
"os"
+ "reflect"
"runtime"
"strconv"
"time"
@@ -34,6 +35,7 @@ import (
coordination "k8s.io/api/coordination/v1"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
"k8s.io/client-go/tools/leaderelection/resourcelock"
@@ -152,6 +154,22 @@ func Run(healthPort, monitoringPort int32, leaderElection bool, leaderElectionID
exitOnError(err, "cannot create Integration label selector")
selector := labels.NewSelector().Add(*hasIntegrationLabel)
+ selectors := cache.SelectorsByObject{
+ &corev1.Pod{}: {Label: selector},
+ &appsv1.Deployment{}: {Label: selector},
+ &batchv1.Job{}: {Label: selector},
+ &servingv1.Service{}: {Label: selector},
+ }
+
+ if ok, err := kubernetes.IsAPIResourceInstalled(c, batchv1.SchemeGroupVersion.String(), reflect.TypeOf(batchv1.CronJob{}).Name()); ok && err == nil {
+ selectors[&batchv1.CronJob{}] = struct {
+ Label labels.Selector
+ Field fields.Selector
+ }{
+ Label: selector,
+ }
+ }
+
mgr, err := manager.New(c.GetConfig(), manager.Options{
Namespace: watchNamespace,
EventBroadcaster: broadcaster,
@@ -164,13 +182,7 @@ func Run(healthPort, monitoringPort int32, leaderElection bool, leaderElectionID
MetricsBindAddress: ":" + strconv.Itoa(int(monitoringPort)),
NewCache: cache.BuilderWithOptions(
cache.Options{
- SelectorsByObject: cache.SelectorsByObject{
- &corev1.Pod{}: {Label: selector},
- &appsv1.Deployment{}: {Label: selector},
- &batchv1.CronJob{}: {Label: selector},
- &batchv1.Job{}: {Label: selector},
- &servingv1.Service{}: {Label: selector},
- },
+ SelectorsByObject: selectors,
},
),
})
diff --git a/pkg/controller/integration/integration_controller.go b/pkg/controller/integration/integration_controller.go
index 4fb05c8be..2ee389e2d 100644
--- a/pkg/controller/integration/integration_controller.go
+++ b/pkg/controller/integration/integration_controller.go
@@ -203,8 +203,6 @@ func add(mgr manager.Manager, c client.Client, r reconcile.Reconciler) error {
})).
// Watch for the owned Deployments
Owns(&appsv1.Deployment{}, builder.WithPredicates(StatusChangedPredicate{})).
- // Watch for the owned CronJobs
- Owns(&batchv1.CronJob{}, builder.WithPredicates(StatusChangedPredicate{})).
// Watch for the Integration Pods
Watches(&source.Kind{Type: &corev1.Pod{}},
handler.EnqueueRequestsFromMapFunc(func(a ctrl.Object) []reconcile.Request {
@@ -223,6 +221,11 @@ func add(mgr manager.Manager, c client.Client, r reconcile.Reconciler) error {
}
}))
+ if ok, err := kubernetes.IsAPIResourceInstalled(c, batchv1.SchemeGroupVersion.String(), reflect.TypeOf(batchv1.CronJob{}).Name()); ok && err == nil {
+ // Watch for the owned CronJobs
+ b.Owns(&batchv1.CronJob{}, builder.WithPredicates(StatusChangedPredicate{}))
+ }
+
// Watch for the owned Knative Services conditionally
if ok, err := kubernetes.IsAPIResourceInstalled(c, servingv1.SchemeGroupVersion.String(), reflect.TypeOf(servingv1.Service{}).Name()); err != nil {
return err