This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 58b91415ca5745ae2f733d714449ed6ceb634730 Author: Antonin Stefanutti <[email protected]> AuthorDate: Wed Mar 3 10:25:54 2021 +0100 chore: Upgrade controller-runtime to version 0.7.2 --- addons/master/master.go | 5 +- e2e/common/traits/pdb_test.go | 6 +- e2e/support/test_support.go | 68 ++++++------- go.mod | 8 +- go.sum | 33 ++++-- pkg/builder/s2i/publisher.go | 8 +- pkg/cmd/install.go | 2 +- pkg/cmd/operator/operator.go | 2 +- pkg/cmd/run.go | 18 +--- pkg/controller/build/build_controller.go | 21 ++-- .../integration/integration_controller.go | 112 +++++++++++---------- .../integrationkit/integrationkit_controller.go | 58 +++++------ .../integrationplatform_controller.go | 39 +++---- pkg/controller/kamelet/kamelet_controller.go | 39 +++---- .../kameletbinding/kamelet_binding_controller.go | 39 +++---- pkg/install/cluster.go | 19 ++-- pkg/install/common.go | 33 +++--- pkg/install/kamelets.go | 30 +++--- pkg/install/operator.go | 3 +- pkg/install/secret.go | 7 +- pkg/platform/defaults.go | 19 ++-- pkg/trait/deployer.go | 18 ++-- pkg/trait/trait_types.go | 7 +- pkg/util/knative/knative.go | 42 ++++---- pkg/util/kubernetes/collection.go | 18 ++-- pkg/util/kubernetes/loader.go | 17 +++- pkg/util/kubernetes/replace.go | 33 ++---- pkg/util/kubernetes/wait.go | 15 ++- pkg/util/monitoring/controller.go | 9 +- pkg/util/patch/patch.go | 5 +- 30 files changed, 351 insertions(+), 382 deletions(-) diff --git a/addons/master/master.go b/addons/master/master.go index 01e90e5..5bcdd19 100644 --- a/addons/master/master.go +++ b/addons/master/master.go @@ -22,6 +22,8 @@ import ( "fmt" "strings" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/metadata" "github.com/apache/camel-k/pkg/resources" @@ -29,7 +31,6 @@ import ( "github.com/apache/camel-k/pkg/util" "github.com/apache/camel-k/pkg/util/kubernetes" "github.com/apache/camel-k/pkg/util/uri" - "k8s.io/apimachinery/pkg/runtime" ) // The Master trait allows to configure the integration to automatically leverage Kubernetes resources for doing @@ -256,7 +257,7 @@ func findAdditionalDependencies(e *trait.Environment, meta metadata.IntegrationM return dependencies } -func loadResource(e *trait.Environment, name string, params interface{}) (runtime.Object, error) { +func loadResource(e *trait.Environment, name string, params interface{}) (ctrl.Object, error) { data, err := resources.TemplateResource(fmt.Sprintf("/addons/master/%s", name), params) if err != nil { return nil, err diff --git a/e2e/common/traits/pdb_test.go b/e2e/common/traits/pdb_test.go index d154289..591e90f 100644 --- a/e2e/common/traits/pdb_test.go +++ b/e2e/common/traits/pdb_test.go @@ -155,11 +155,7 @@ func podDisruptionBudget(ns string, name string) func() *policy.PodDisruptionBud Name: name, }, } - key, err := client.ObjectKeyFromObject(&pdb) - if err != nil { - panic(err) - } - err = TestClient().Get(TestContext, key, &pdb) + err := TestClient().Get(TestContext, client.ObjectKeyFromObject(&pdb), &pdb) if err != nil && errors.IsNotFound(err) { return nil } else if err != nil { diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index f9250ca..4ed9ea5 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -44,9 +44,8 @@ import ( rbacv1 "k8s.io/api/rbac/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" eventing "knative.dev/eventing/pkg/apis/eventing/v1beta1" messaging "knative.dev/eventing/pkg/apis/messaging/v1beta1" @@ -280,8 +279,8 @@ func IntegrationPods(ns string, name string) func() []corev1.Pod { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ v1.IntegrationLabel: name, }) if err != nil { @@ -328,7 +327,7 @@ func IntegrationCondition(ns string, name string, conditionType v1.IntegrationCo func ConfigMap(ns string, name string) func() *corev1.ConfigMap { return func() *corev1.ConfigMap { cm := corev1.ConfigMap{} - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -345,7 +344,7 @@ func ConfigMap(ns string, name string) func() *corev1.ConfigMap { func Service(ns string, name string) func() *corev1.Service { return func() *corev1.Service { svc := corev1.Service{} - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -362,7 +361,7 @@ func Service(ns string, name string) func() *corev1.Service { func Route(ns string, name string) func() *routev1.Route { return func() *routev1.Route { route := routev1.Route{} - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -385,8 +384,8 @@ func IntegrationCronJob(ns string, name string) func() *v1beta1.CronJob { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ "camel.apache.org/integration": name, }) if err != nil { @@ -402,7 +401,7 @@ func IntegrationCronJob(ns string, name string) func() *v1beta1.CronJob { func Integration(ns string, name string) func() *v1.Integration { return func() *v1.Integration { it := v1.NewIntegration(ns, name) - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -495,7 +494,7 @@ func ScaleIntegration(ns string, name string, replicas int32) error { func Kits(ns string) func() []v1.IntegrationKit { return func() []v1.IntegrationKit { lst := v1.NewIntegrationKitList() - if err := TestClient().List(TestContext, &lst, k8sclient.InNamespace(ns)); err != nil { + if err := TestClient().List(TestContext, &lst, ctrl.InNamespace(ns)); err != nil { panic(err) } return lst.Items @@ -559,7 +558,7 @@ func Configmap(ns string, name string) func() *corev1.ConfigMap { Name: name, }, } - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -585,7 +584,7 @@ func KnativeService(ns string, name string) func() *servingv1.Service { Name: name, }, } - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -611,7 +610,7 @@ func Deployment(ns string, name string) func() *appsv1.Deployment { Name: name, }, } - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -628,7 +627,7 @@ func Deployment(ns string, name string) func() *appsv1.Deployment { func Build(ns string, name string) func() *v1.Build { return func() *v1.Build { build := v1.NewBuild(ns, name) - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Namespace: ns, Name: name, } @@ -645,7 +644,7 @@ func Build(ns string, name string) func() *v1.Build { func Platform(ns string) func() *v1.IntegrationPlatform { return func() *v1.IntegrationPlatform { lst := v1.NewIntegrationPlatformList() - if err := TestClient().List(TestContext, &lst, k8sclient.InNamespace(ns)); err != nil { + if err := TestClient().List(TestContext, &lst, ctrl.InNamespace(ns)); err != nil { panic(err) } if len(lst.Items) == 0 { @@ -722,8 +721,8 @@ func OperatorPod(ns string) func() *corev1.Pod { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ "camel.apache.org/component": "operator", }) if err != nil { @@ -739,7 +738,7 @@ func OperatorPod(ns string) func() *corev1.Pod { func OperatorTryPodForceKill(ns string, timeSeconds int) { pod := OperatorPod(ns)() if pod != nil { - if err := TestClient().Delete(TestContext, pod, k8sclient.GracePeriodSeconds(timeSeconds)); err != nil { + if err := TestClient().Delete(TestContext, pod, ctrl.GracePeriodSeconds(timeSeconds)); err != nil { log.Error(err, "cannot forcefully kill the pod") } } @@ -752,7 +751,7 @@ func ScaleOperator(ns string, replicas int32) func() error { return err } operator.Spec.Replicas = &replicas - _, err = TestClient().AppsV1().Deployments(ns).Update(TestContext,operator, metav1.UpdateOptions{}) + _, err = TestClient().AppsV1().Deployments(ns).Update(TestContext, operator, metav1.UpdateOptions{}) if err != nil { return err } @@ -774,8 +773,8 @@ func Role(ns string) func() *rbacv1.Role { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ "app": "camel-k", }) if err != nil { @@ -797,8 +796,8 @@ func RoleBinding(ns string) func() *rbacv1.RoleBinding { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ "app": "camel-k", }) if err != nil { @@ -820,8 +819,8 @@ func ServiceAccount(ns, name string) func() *corev1.ServiceAccount { }, } err := TestClient().List(TestContext, &lst, - k8sclient.InNamespace(ns), - k8sclient.MatchingLabels{ + ctrl.InNamespace(ns), + ctrl.MatchingLabels{ "app": "camel-k", }) if err != nil { @@ -1035,7 +1034,7 @@ func NumPods(ns string) func() int { APIVersion: v1.SchemeGroupVersion.String(), }, } - if err := TestClient().List(TestContext, &lst, k8sclient.InNamespace(ns)); err != nil && k8serrors.IsUnauthorized(err) { + if err := TestClient().List(TestContext, &lst, ctrl.InNamespace(ns)); err != nil && k8serrors.IsUnauthorized(err) { return 0 } else if err != nil { log.Error(err, "Error while listing the pods") @@ -1101,10 +1100,7 @@ func DeleteKnativeBroker(ns metav1.Object) { Name: ns.GetName(), }, } - nsKey, err := k8sclient.ObjectKeyFromObject(&nsRef) - if err != nil { - panic(err) - } + nsKey := ctrl.ObjectKeyFromObject(&nsRef) if err := TestClient().Get(TestContext, nsKey, &nsRef); err != nil { panic(err) } @@ -1128,7 +1124,7 @@ func DeleteKnativeBroker(ns metav1.Object) { } } -func DeleteTestNamespace(t *testing.T, ns metav1.Object) { +func DeleteTestNamespace(t *testing.T, ns ctrl.Object) { var oc bool var err error if oc, err = openshift.IsOpenShift(TestClient()); err != nil { @@ -1147,7 +1143,7 @@ func DeleteTestNamespace(t *testing.T, ns metav1.Object) { t.Logf("Warning: cannot delete test project %q", prj.Name) } } else { - if err := TestClient().Delete(TestContext, ns.(runtime.Object)); err != nil { + if err := TestClient().Delete(TestContext, ns); err != nil { t.Logf("Warning: cannot delete test namespace %q", ns.GetName()) } } @@ -1163,10 +1159,10 @@ func DeleteTestNamespace(t *testing.T, ns metav1.Object) { } } -func NewTestNamespace(injectKnativeBroker bool) metav1.Object { +func NewTestNamespace(injectKnativeBroker bool) ctrl.Object { var err error var oc bool - var obj runtime.Object + var obj ctrl.Object brokerLabel := "eventing.knative.dev/injection" name := "test-" + uuid.New().String() @@ -1222,5 +1218,5 @@ func NewTestNamespace(injectKnativeBroker bool) metav1.Object { } } } - return obj.(metav1.Object) + return obj } diff --git a/go.mod b/go.mod index d2c31e8..a8ded7a 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.6.2 - github.com/stoewer/go-strcase v1.0.2 + github.com/stoewer/go-strcase v1.2.0 github.com/stretchr/testify v1.6.1 go.uber.org/multierr v1.5.0 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d @@ -51,13 +51,9 @@ require ( knative.dev/eventing v0.18.0 knative.dev/pkg v0.0.0-20200922164940-4bf40ad82aab knative.dev/serving v0.18.0 - sigs.k8s.io/controller-runtime v0.6.4 + sigs.k8s.io/controller-runtime v0.7.2 ) -// To be removed when upgrading to controller-runtime 0.7+ -// See: https://github.com/kubernetes-sigs/controller-runtime/pull/1238 -replace sigs.k8s.io/controller-runtime => sigs.k8s.io/controller-runtime v0.6.3 - replace ( github.com/Azure/go-autorest => github.com/Azure/go-autorest v13.3.2+incompatible // Required by client-go Azure plugin k8s.io/client-go => k8s.io/client-go v0.19.8 diff --git a/go.sum b/go.sum index f398a4a..899c3e1 100644 --- a/go.sum +++ b/go.sum @@ -259,8 +259,6 @@ github.com/cloudevents/sdk-go/v2 v2.0.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoa github.com/cloudevents/sdk-go/v2 v2.2.0/go.mod h1:3CTrpB4+u7Iaj6fd7E2Xvm5IxMdRoaAhqaRVnOr2rCU= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/container-tools/spectrum v0.3.2 h1:KQz70RWAzITzaPx+qPsiGkrF0uGmFJfKak2yOqJyPKQ= -github.com/container-tools/spectrum v0.3.2/go.mod h1:hsogRHNfGQLysCyDiGT4SAioTS8LGLbyC4b0Ep2Iw+o= github.com/container-tools/spectrum v0.3.4 h1:ykSzjjIbmwy/dQKyaTRNf69gqSx5rB/XwjuYhOspJSY= github.com/container-tools/spectrum v0.3.4/go.mod h1:hsogRHNfGQLysCyDiGT4SAioTS8LGLbyC4b0Ep2Iw+o= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= @@ -415,6 +413,7 @@ github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE= github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= github.com/go-logr/zapr v0.3.0 h1:iyiCRZ29uPmbO7mWIjOEiYMXrTxZWTyK4tCatLyGpUY= github.com/go-logr/zapr v0.3.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= @@ -511,6 +510,7 @@ github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hz github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -626,6 +626,8 @@ github.com/googleapis/gnostic v0.4.0 h1:BXDUo8p/DaxC+4FJY/SSx3gvnx9C1VdHNgaUkiEL github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -693,6 +695,7 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= @@ -1122,6 +1125,7 @@ github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -1133,8 +1137,8 @@ github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E= github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/sqs/goreturns v0.0.0-20181028201513-538ac6014518/go.mod h1:CKI4AZ4XmGV240rTHfO0hfE83S6/a3/Q1siZJ/vXf7A= github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stoewer/go-strcase v1.0.2 h1:l3iQ2FPu8+36ars/7syO1dQAkjwMCb1IE3J+Th0ohfE= -github.com/stoewer/go-strcase v1.0.2/go.mod h1:eLfe5bL3qbL7ep/KafHzthxejrOF5J3xmt03uL5tzek= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1232,6 +1236,8 @@ go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA= +go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -1441,6 +1447,7 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1539,6 +1546,7 @@ golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191030203535-5e247c9ad0a0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112005509-a3f652f18032/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1816,6 +1824,8 @@ gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d h1:LCPbGQ34PMrwad11aMZ+dbz5S gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= @@ -1934,6 +1944,7 @@ k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vX k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14= k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= +k8s.io/component-base v0.19.8 h1:z5NvhzEjdjTwXWF2qMdozKXbUCEm9HXGGNp51buf4HA= k8s.io/component-base v0.19.8/go.mod h1:cvHAT4oGxKsfcnnm0hMp3JkEMxAt5s6le943V796FXM= k8s.io/csi-translation-lib v0.17.0/go.mod h1:HEF7MEz7pOLJCnxabi45IPkhSsE/KmxPQksuCrHKWls= k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= @@ -1951,6 +1962,7 @@ k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.3/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= @@ -1994,6 +2006,8 @@ k8s.io/utils v0.0.0-20200603063816-c1c6865ac451 h1:v8ud2Up6QK1lNOKFgiIVrZdMg7Mpm k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200729134348-d5654de09c73 h1:uJmqzgNWG7XyClnU/mLPBWwfKKF1K8Hf8whTseBgJcg= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= knative.dev/caching v0.0.0-20190719140829-2032732871ff/go.mod h1:dHXFU6CGlLlbzaWc32g80cR92iuBSpsslDNBWI8C7eg= knative.dev/caching v0.0.0-20200116200605-67bca2c83dfa/go.mod h1:dHXFU6CGlLlbzaWc32g80cR92iuBSpsslDNBWI8C7eg= knative.dev/caching v0.0.0-20200922173540-a6b8bbd6999a/go.mod h1:P624eQ2AZLjwPBRuSqlnkWjRYoVeGdZ/uGXPrYP/USk= @@ -2038,8 +2052,14 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQb sigs.k8s.io/boskos v0.0.0-20200526191642-45fc818e2d00/go.mod h1:L1ubP7d1CCMSQSjKiZv6dGbh7b4kfoG+dFPj8cfYDnI= sigs.k8s.io/boskos v0.0.0-20200617235605-f289ba6555ba/go.mod h1:ZO5RV+VxJS9mb6DvZ1yAjywoyq/wQ8b0vDoZxcIA5kE= sigs.k8s.io/boskos v0.0.0-20200729174948-794df80db9c9/go.mod h1:ZO5RV+VxJS9mb6DvZ1yAjywoyq/wQ8b0vDoZxcIA5kE= -sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE= -sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= +sigs.k8s.io/controller-runtime v0.3.0/go.mod h1:Cw6PkEg0Sa7dAYovGT4R0tRkGhHXpYijwNxYhAnAZZk= +sigs.k8s.io/controller-runtime v0.5.0/go.mod h1:REiJzC7Y00U+2YkMbT8wxgrsX5USpXKGhb2sCtAXiT8= +sigs.k8s.io/controller-runtime v0.5.4/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A= +sigs.k8s.io/controller-runtime v0.6.0/go.mod h1:CpYf5pdNY/B352A1TFLAS2JVSlnGQ5O2cftPHndTroo= +sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= +sigs.k8s.io/controller-runtime v0.6.4/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= +sigs.k8s.io/controller-runtime v0.7.2 h1:gD2JZp0bBLLuvSRYVNvox+bRCz1UUUxKDjPUCb56Ukk= +sigs.k8s.io/controller-runtime v0.7.2/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff v0.0.0-20190302045857-e85c7b244fd2/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= @@ -2056,6 +2076,7 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.1-0.20200706213357-43c19bbb7fba h1:AAb sigs.k8s.io/structured-merge-diff/v3 v3.0.1-0.20200706213357-43c19bbb7fba/go.mod h1:V06abazjHneE37ZdSY/UUwPVgcJMKI/jU5XGUjgIKoc= sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= diff --git a/pkg/builder/s2i/publisher.go b/pkg/builder/s2i/publisher.go index d6a40a3..cdeda0d 100644 --- a/pkg/builder/s2i/publisher.go +++ b/pkg/builder/s2i/publisher.go @@ -29,7 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/json" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" buildv1 "github.com/openshift/api/build/v1" imagev1 "github.com/openshift/api/image/v1" @@ -175,11 +175,7 @@ func publisher(ctx *builder.Context) error { return err } - key, err := k8sclient.ObjectKeyFromObject(&is) - if err != nil { - return err - } - err = ctx.Client.Get(ctx.C, key, &is) + err = ctx.Client.Get(ctx.C, ctrl.ObjectKeyFromObject(&is), &is) if err != nil { return err } diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go index 4252c75..9728ffc 100644 --- a/pkg/cmd/install.go +++ b/pkg/cmd/install.go @@ -370,7 +370,7 @@ func (o *installCmdOptions) install(cobraCmd *cobra.Command, _ []string) error { } // Always create a platform in the namespace where the operator is located - err = install.RuntimeObjectOrCollect(o.Context, c, namespace, collection, o.Force, platform) + err = install.ObjectOrCollect(o.Context, c, namespace, collection, o.Force, platform) if err != nil { return err } diff --git a/pkg/cmd/operator/operator.go b/pkg/cmd/operator/operator.go index fb4a7c2..39253a0 100644 --- a/pkg/cmd/operator/operator.go +++ b/pkg/cmd/operator/operator.go @@ -27,7 +27,6 @@ import ( "strconv" "time" - "github.com/apache/camel-k/pkg/platform" corev1 "k8s.io/api/core/v1" typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/record" @@ -45,6 +44,7 @@ import ( "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/controller" "github.com/apache/camel-k/pkg/install" + "github.com/apache/camel-k/pkg/platform" "github.com/apache/camel-k/pkg/util/defaults" "github.com/apache/camel-k/pkg/util/kubernetes" ) diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go index 87e3ac8..bf6ad39 100644 --- a/pkg/cmd/run.go +++ b/pkg/cmd/run.go @@ -39,7 +39,7 @@ import ( corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/client" @@ -302,12 +302,7 @@ func (o *runCmdOptions) run(cmd *cobra.Command, args []string) error { // The integration watch timed out so recreate it using the latest integration resource version clone := integration.DeepCopy() - var key k8sclient.ObjectKey - key, err = k8sclient.ObjectKeyFromObject(clone) - if err != nil { - return err - } - err = c.Get(o.Context, key, clone) + err = c.Get(o.Context, ctrl.ObjectKeyFromObject(clone), clone) if err != nil { return err } @@ -429,7 +424,7 @@ func (o *runCmdOptions) createIntegration(c client.Client, sources []string, cat return o.updateIntegrationCode(c, sources, catalog) } -//nolint: gocyclo +// nolint: gocyclo func (o *runCmdOptions) updateIntegrationCode(c client.Client, sources []string, catalog *trait.Catalog) (*v1.Integration, error) { namespace := o.Namespace @@ -590,12 +585,7 @@ func (o *runCmdOptions) updateIntegrationCode(c client.Client, sources []string, if err != nil && k8serrors.IsAlreadyExists(err) { existed = true clone := integration.DeepCopy() - var key k8sclient.ObjectKey - key, err = k8sclient.ObjectKeyFromObject(clone) - if err != nil { - return nil, err - } - err = c.Get(o.Context, key, clone) + err = c.Get(o.Context, ctrl.ObjectKeyFromObject(clone), clone) if err != nil { return nil, err } diff --git a/pkg/controller/build/build_controller.go b/pkg/controller/build/build_controller.go index b77e23c..341c909 100644 --- a/pkg/controller/build/build_controller.go +++ b/pkg/controller/build/build_controller.go @@ -25,10 +25,10 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/record" - "k8s.io/apimachinery/pkg/runtime/schema" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -82,7 +82,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource Build - err = c.Watch(&source.Kind{Type: &v1.Build{}}, &handler.EnqueueRequestForObject{}, + err = c.Watch(&source.Kind{Type: &v1.Build{}}, + &handler.EnqueueRequestForObject{}, predicate.Funcs{ UpdateFunc: func(e event.UpdateEvent) bool { oldBuild := e.ObjectOld.(*v1.Build) @@ -93,7 +94,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { return oldBuild.Generation != newBuild.Generation || oldBuild.Status.Phase != newBuild.Status.Phase }, - }) + }, + ) if err != nil { return err } @@ -112,7 +114,8 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // as it's used to transition the builds from one phase to another return oldPod.Status.Phase != newPod.Status.Phase }, - }) + }, + ) if err != nil { return err } @@ -129,7 +132,7 @@ type reconcileBuild struct { client client.Client // Non-caching client to be used whenever caching may cause race conditions, // like in the builds scheduling critical section - reader k8sclient.Reader + reader ctrl.Reader scheme *runtime.Scheme builder builder.Builder routines sync.Map @@ -141,12 +144,10 @@ type reconcileBuild struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *reconcileBuild) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconcileBuild) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling Build") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -265,7 +266,7 @@ func (r *reconcileBuild) Reconcile(request reconcile.Request) (reconcile.Result, } func (r *reconcileBuild) update(ctx context.Context, base *v1.Build, target *v1.Build) (reconcile.Result, error) { - err := r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(base)) + err := r.client.Status().Patch(ctx, target, ctrl.MergeFrom(base)) return reconcile.Result{}, err } diff --git a/pkg/controller/integration/integration_controller.go b/pkg/controller/integration/integration_controller.go index abe0d90..ff8c8ed 100644 --- a/pkg/controller/integration/integration_controller.go +++ b/pkg/controller/integration/integration_controller.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -76,29 +76,32 @@ func newReconciler(mgr manager.Manager, c client.Client) reconcile.Reconciler { } // add adds a new Controller to mgr with r as the reconcile.Reconciler -func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { +func add(mgr manager.Manager, r reconcile.Reconciler, cl client.Client) error { // Create a new controller - ctrl, err := controller.New("integration-controller", mgr, controller.Options{Reconciler: r}) + c, err := controller.New("integration-controller", mgr, controller.Options{Reconciler: r}) if err != nil { return err } // Watch for changes to primary resource Integration - err = ctrl.Watch(&source.Kind{Type: &v1.Integration{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldIntegration := e.ObjectOld.(*v1.Integration) - newIntegration := e.ObjectNew.(*v1.Integration) - // Ignore updates to the integration status in which case metadata.Generation does not change, - // or except when the integration phase changes as it's used to transition from one phase - // to another - return oldIntegration.Generation != newIntegration.Generation || - oldIntegration.Status.Phase != newIntegration.Status.Phase + err = c.Watch(&source.Kind{Type: &v1.Integration{}}, + &handler.EnqueueRequestForObject{}, + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldIntegration := e.ObjectOld.(*v1.Integration) + newIntegration := e.ObjectNew.(*v1.Integration) + // Ignore updates to the integration status in which case metadata.Generation does not change, + // or except when the integration phase changes as it's used to transition from one phase + // to another + return oldIntegration.Generation != newIntegration.Generation || + oldIntegration.Status.Phase != newIntegration.Status.Phase + }, + DeleteFunc: func(e event.DeleteEvent) bool { + // Evaluates to false if the object has been confirmed deleted + return !e.DeleteStateUnknown + }, }, - DeleteFunc: func(e event.DeleteEvent) bool { - // Evaluates to false if the object has been confirmed deleted - return !e.DeleteStateUnknown - }, - }) + ) if err != nil { return err } @@ -106,18 +109,18 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { // Watch for IntegrationKit phase transitioning to ready or error and // enqueue requests for any integrations that are in phase waiting for // kit - err = ctrl.Watch(&source.Kind{Type: &v1.IntegrationKit{}}, &handler.EnqueueRequestsFromMapFunc{ - ToRequests: handler.ToRequestsFunc(func(a handler.MapObject) []reconcile.Request { - kit := a.Object.(*v1.IntegrationKit) + err = c.Watch(&source.Kind{Type: &v1.IntegrationKit{}}, + handler.EnqueueRequestsFromMapFunc(func(a ctrl.Object) []reconcile.Request { + kit := a.(*v1.IntegrationKit) var requests []reconcile.Request if kit.Status.Phase == v1.IntegrationKitPhaseReady || kit.Status.Phase == v1.IntegrationKitPhaseError { list := &v1.IntegrationList{} // Do global search in case of global operator (it may be using a global platform) - var opts []k8sclient.ListOption + var opts []ctrl.ListOption if !platform.IsCurrentOperatorGlobal() { - opts = append(opts, k8sclient.InNamespace(kit.Namespace)) + opts = append(opts, ctrl.InNamespace(kit.Namespace)) } if err := mgr.GetClient().List(context.TODO(), list, opts...); err != nil { @@ -141,35 +144,35 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { return requests }), - }) + ) if err != nil { return err } // Watch for IntegrationPlatform phase transitioning to ready and enqueue // requests for any integrations that are in phase waiting for platform - err = ctrl.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, &handler.EnqueueRequestsFromMapFunc{ - ToRequests: handler.ToRequestsFunc(func(a handler.MapObject) []reconcile.Request { - pl := a.Object.(*v1.IntegrationPlatform) + err = c.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, + handler.EnqueueRequestsFromMapFunc(func(a ctrl.Object) []reconcile.Request { + p := a.(*v1.IntegrationPlatform) var requests []reconcile.Request - if pl.Status.Phase == v1.IntegrationPlatformPhaseReady { + if p.Status.Phase == v1.IntegrationPlatformPhaseReady { list := &v1.IntegrationList{} // Do global search in case of global operator (it may be using a global platform) - var opts []k8sclient.ListOption + var opts []ctrl.ListOption if !platform.IsCurrentOperatorGlobal() { - opts = append(opts, k8sclient.InNamespace(pl.Namespace)) + opts = append(opts, ctrl.InNamespace(p.Namespace)) } if err := mgr.GetClient().List(context.TODO(), list, opts...); err != nil { - log.Error(err, "Failed to retrieve integration list") + log.Error(err, "Failed to list integrations") return requests } for _, integration := range list.Items { if integration.Status.Phase == v1.IntegrationPhaseWaitingForPlatform { - log.Infof("Platform %s ready, wake-up integration: %s", pl.Name, integration.Name) + log.Infof("Platform %s ready, wake-up integration: %s", p.Name, integration.Name) requests = append(requests, reconcile.Request{ NamespacedName: types.NamespacedName{ Namespace: integration.Namespace, @@ -182,7 +185,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { return requests }), - }) + ) if err != nil { return err } @@ -191,9 +194,9 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { // the EnqueueRequestForOwner handler as the owner depends on the deployment strategy, // either regular deployment or Knative service. In any case, the integration is not the // direct owner of the ReplicaSet. - err = ctrl.Watch(&source.Kind{Type: &appsv1.ReplicaSet{}}, &handler.EnqueueRequestsFromMapFunc{ - ToRequests: handler.ToRequestsFunc(func(a handler.MapObject) []reconcile.Request { - rs := a.Object.(*appsv1.ReplicaSet) + err = c.Watch(&source.Kind{Type: &appsv1.ReplicaSet{}}, + handler.EnqueueRequestsFromMapFunc(func(a ctrl.Object) []reconcile.Request { + rs := a.(*appsv1.ReplicaSet) var requests []reconcile.Request labels := rs.GetLabels() @@ -209,23 +212,24 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { return requests }), - }, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldReplicaSet := e.ObjectOld.(*appsv1.ReplicaSet) - newReplicaSet := e.ObjectNew.(*appsv1.ReplicaSet) - // Ignore updates to the ReplicaSet other than the replicas ones, - // that are used to reconcile the integration replicas. - return oldReplicaSet.Status.Replicas != newReplicaSet.Status.Replicas || - oldReplicaSet.Status.ReadyReplicas != newReplicaSet.Status.ReadyReplicas || - oldReplicaSet.Status.AvailableReplicas != newReplicaSet.Status.AvailableReplicas + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldReplicaSet := e.ObjectOld.(*appsv1.ReplicaSet) + newReplicaSet := e.ObjectNew.(*appsv1.ReplicaSet) + // Ignore updates to the ReplicaSet other than the replicas ones, + // that are used to reconcile the integration replicas. + return oldReplicaSet.Status.Replicas != newReplicaSet.Status.Replicas || + oldReplicaSet.Status.ReadyReplicas != newReplicaSet.Status.ReadyReplicas || + oldReplicaSet.Status.AvailableReplicas != newReplicaSet.Status.AvailableReplicas + }, }, - }) + ) if err != nil { return err } // Watch cronjob to update the ready condition - err = ctrl.Watch(&source.Kind{Type: &v1beta1.CronJob{}}, &handler.EnqueueRequestForOwner{ + err = c.Watch(&source.Kind{Type: &v1beta1.CronJob{}}, &handler.EnqueueRequestForOwner{ OwnerType: &v1.Integration{}, IsController: false, }) @@ -234,17 +238,17 @@ func add(mgr manager.Manager, r reconcile.Reconciler, c client.Client) error { } // Check the ServiceBinding CRD is present - if ok, err := kubernetes.IsAPIResourceInstalled(c, sb.GroupVersion.String(), sb.GroupVersionKind.Kind); err != nil { + if ok, err := kubernetes.IsAPIResourceInstalled(cl, sb.GroupVersion.String(), sb.GroupVersionKind.Kind); err != nil { return err } else if !ok { log.Info("Service binding is disabled, install the Service Binding Operator if needed") - } else if ok, err := kubernetes.CheckPermission(context.TODO(), c, sb.GroupVersion.Group, sb.GroupVersionResource.Resource, platform.GetOperatorWatchNamespace(), "", "create"); err != nil { + } else if ok, err := kubernetes.CheckPermission(context.TODO(), cl, sb.GroupVersion.Group, sb.GroupVersionResource.Resource, platform.GetOperatorWatchNamespace(), "", "create"); err != nil { return err } else if !ok { log.Info("Service binding is disabled, the operator is not granted permission to create ServiceBindings!") } else { // Watch ServiceBindings and enqueue owning Integrations - err = ctrl.Watch(&source.Kind{Type: &sb.ServiceBinding{}}, &handler.EnqueueRequestForOwner{ + err = c.Watch(&source.Kind{Type: &sb.ServiceBinding{}}, &handler.EnqueueRequestForOwner{ OwnerType: &v1.Integration{}, IsController: true, }) @@ -271,12 +275,10 @@ type reconcileIntegration struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *reconcileIntegration) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconcileIntegration) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling Integration") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -352,14 +354,14 @@ func (r *reconcileIntegration) Reconcile(request reconcile.Request) (reconcile.R } func (r *reconcileIntegration) update(ctx context.Context, base *v1.Integration, target *v1.Integration) (reconcile.Result, error) { - dgst, err := digest.ComputeForIntegration(target) + d, err := digest.ComputeForIntegration(target) if err != nil { return reconcile.Result{}, err } - target.Status.Digest = dgst + target.Status.Digest = d - err = r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(base)) + err = r.client.Status().Patch(ctx, target, ctrl.MergeFrom(base)) return reconcile.Result{}, err } diff --git a/pkg/controller/integrationkit/integrationkit_controller.go b/pkg/controller/integrationkit/integrationkit_controller.go index ac38555..3714c52 100644 --- a/pkg/controller/integrationkit/integrationkit_controller.go +++ b/pkg/controller/integrationkit/integrationkit_controller.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -79,21 +79,24 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource IntegrationKit - err = c.Watch(&source.Kind{Type: &v1.IntegrationKit{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldIntegrationKit := e.ObjectOld.(*v1.IntegrationKit) - newIntegrationKit := e.ObjectNew.(*v1.IntegrationKit) - // Ignore updates to the integration kit status in which case metadata.Generation - // does not change, or except when the integration kit phase changes as it's used - // to transition from one phase to another - return oldIntegrationKit.Generation != newIntegrationKit.Generation || - oldIntegrationKit.Status.Phase != newIntegrationKit.Status.Phase - }, - DeleteFunc: func(e event.DeleteEvent) bool { - // Evaluates to false if the object has been confirmed deleted - return !e.DeleteStateUnknown + err = c.Watch(&source.Kind{Type: &v1.IntegrationKit{}}, + &handler.EnqueueRequestForObject{}, + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldIntegrationKit := e.ObjectOld.(*v1.IntegrationKit) + newIntegrationKit := e.ObjectNew.(*v1.IntegrationKit) + // Ignore updates to the integration kit status in which case metadata.Generation + // does not change, or except when the integration kit phase changes as it's used + // to transition from one phase to another + return oldIntegrationKit.Generation != newIntegrationKit.Generation || + oldIntegrationKit.Status.Phase != newIntegrationKit.Status.Phase + }, + DeleteFunc: func(e event.DeleteEvent) bool { + // Evaluates to false if the object has been confirmed deleted + return !e.DeleteStateUnknown + }, }, - }) + ) if err != nil { return err } @@ -113,29 +116,30 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // to another during the image build return oldBuild.Status.Phase != newBuild.Status.Phase }, - }) + }, + ) if err != nil { return err } // Watch for IntegrationPlatform phase transitioning to ready and enqueue // requests for any integration kits that are in phase waiting for platform - err = c.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, &handler.EnqueueRequestsFromMapFunc{ - ToRequests: handler.ToRequestsFunc(func(a handler.MapObject) []reconcile.Request { - platform := a.Object.(*v1.IntegrationPlatform) + err = c.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, + handler.EnqueueRequestsFromMapFunc(func(a ctrl.Object) []reconcile.Request { + p := a.(*v1.IntegrationPlatform) var requests []reconcile.Request - if platform.Status.Phase == v1.IntegrationPlatformPhaseReady { + if p.Status.Phase == v1.IntegrationPlatformPhaseReady { list := &v1.IntegrationKitList{} - if err := mgr.GetClient().List(context.TODO(), list, k8sclient.InNamespace(platform.Namespace)); err != nil { - log.Error(err, "Failed to retrieve integrationkit list") + if err := mgr.GetClient().List(context.TODO(), list, ctrl.InNamespace(p.Namespace)); err != nil { + log.Error(err, "Failed to list integration kits") return requests } for _, kit := range list.Items { if kit.Status.Phase == v1.IntegrationKitPhaseWaitingForPlatform { - log.Infof("Platform %s ready, wake-up integrationkit: %s", platform.Name, kit.Name) + log.Infof("Platform %s ready, wake-up integration kit: %s", p.Name, kit.Name) requests = append(requests, reconcile.Request{ NamespacedName: types.NamespacedName{ Namespace: kit.Namespace, @@ -148,7 +152,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { return requests }), - }) + ) if err != nil { return err } @@ -172,12 +176,10 @@ type reconcileIntegrationKit struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *reconcileIntegrationKit) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconcileIntegrationKit) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling IntegrationKit") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -284,7 +286,7 @@ func (r *reconcileIntegrationKit) update(ctx context.Context, base *v1.Integrati target.Status.Digest = dgst - err = r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(base)) + err = r.client.Status().Patch(ctx, target, ctrl.MergeFrom(base)) return reconcile.Result{}, err } diff --git a/pkg/controller/integrationplatform/integrationplatform_controller.go b/pkg/controller/integrationplatform/integrationplatform_controller.go index 71a8711..5fa590e 100644 --- a/pkg/controller/integrationplatform/integrationplatform_controller.go +++ b/pkg/controller/integrationplatform/integrationplatform_controller.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/record" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -77,21 +77,24 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource IntegrationPlatform - err = c.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldIntegrationPlatform := e.ObjectOld.(*v1.IntegrationPlatform) - newIntegrationPlatform := e.ObjectNew.(*v1.IntegrationPlatform) - // Ignore updates to the integration platform status in which case metadata.Generation - // does not change, or except when the integration platform phase changes as it's used - // to transition from one phase to another - return oldIntegrationPlatform.Generation != newIntegrationPlatform.Generation || - oldIntegrationPlatform.Status.Phase != newIntegrationPlatform.Status.Phase + err = c.Watch(&source.Kind{Type: &v1.IntegrationPlatform{}}, + &handler.EnqueueRequestForObject{}, + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldIntegrationPlatform := e.ObjectOld.(*v1.IntegrationPlatform) + newIntegrationPlatform := e.ObjectNew.(*v1.IntegrationPlatform) + // Ignore updates to the integration platform status in which case metadata.Generation + // does not change, or except when the integration platform phase changes as it's used + // to transition from one phase to another + return oldIntegrationPlatform.Generation != newIntegrationPlatform.Generation || + oldIntegrationPlatform.Status.Phase != newIntegrationPlatform.Status.Phase + }, + DeleteFunc: func(e event.DeleteEvent) bool { + // Evaluates to false if the object has been confirmed deleted + return !e.DeleteStateUnknown + }, }, - DeleteFunc: func(e event.DeleteEvent) bool { - // Evaluates to false if the object has been confirmed deleted - return !e.DeleteStateUnknown - }, - }) + ) if err != nil { return err } @@ -115,12 +118,10 @@ type reconcileIntegrationPlatform struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *reconcileIntegrationPlatform) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconcileIntegrationPlatform) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling IntegrationPlatform") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -174,7 +175,7 @@ func (r *reconcileIntegrationPlatform) Reconcile(request reconcile.Request) (rec } if target != nil { - if err := r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(&instance)); err != nil { + if err := r.client.Status().Patch(ctx, target, ctrl.MergeFrom(&instance)); err != nil { camelevent.NotifyIntegrationPlatformError(ctx, r.client, r.recorder, &instance, target, err) return reconcile.Result{}, err } diff --git a/pkg/controller/kamelet/kamelet_controller.go b/pkg/controller/kamelet/kamelet_controller.go index a9acf50..84729df 100644 --- a/pkg/controller/kamelet/kamelet_controller.go +++ b/pkg/controller/kamelet/kamelet_controller.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/record" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -77,21 +77,24 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource Kamelet - err = c.Watch(&source.Kind{Type: &v1alpha1.Kamelet{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldKamelet := e.ObjectOld.(*v1alpha1.Kamelet) - newKamelet := e.ObjectNew.(*v1alpha1.Kamelet) - // Ignore updates to the kamelet status in which case metadata.Generation - // does not change, or except when the kamelet phase changes as it's used - // to transition from one phase to another - return oldKamelet.Generation != newKamelet.Generation || - oldKamelet.Status.Phase != newKamelet.Status.Phase + err = c.Watch(&source.Kind{Type: &v1alpha1.Kamelet{}}, + &handler.EnqueueRequestForObject{}, + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldKamelet := e.ObjectOld.(*v1alpha1.Kamelet) + newKamelet := e.ObjectNew.(*v1alpha1.Kamelet) + // Ignore updates to the kamelet status in which case metadata.Generation + // does not change, or except when the kamelet phase changes as it's used + // to transition from one phase to another + return oldKamelet.Generation != newKamelet.Generation || + oldKamelet.Status.Phase != newKamelet.Status.Phase + }, + DeleteFunc: func(e event.DeleteEvent) bool { + // Evaluates to false if the object has been confirmed deleted + return !e.DeleteStateUnknown + }, }, - DeleteFunc: func(e event.DeleteEvent) bool { - // Evaluates to false if the object has been confirmed deleted - return !e.DeleteStateUnknown - }, - }) + ) if err != nil { return err } @@ -115,12 +118,10 @@ type reconcileKamelet struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *reconcileKamelet) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *reconcileKamelet) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling Kamelet") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -172,7 +173,7 @@ func (r *reconcileKamelet) Reconcile(request reconcile.Request) (reconcile.Resul } if target != nil { - if err := r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(&instance)); err != nil { + if err := r.client.Status().Patch(ctx, target, ctrl.MergeFrom(&instance)); err != nil { camelevent.NotifyKameletError(ctx, r.client, r.recorder, &instance, target, err) return reconcile.Result{}, err } diff --git a/pkg/controller/kameletbinding/kamelet_binding_controller.go b/pkg/controller/kameletbinding/kamelet_binding_controller.go index ffde023..ff23f65 100644 --- a/pkg/controller/kameletbinding/kamelet_binding_controller.go +++ b/pkg/controller/kameletbinding/kamelet_binding_controller.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/record" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -76,21 +76,24 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource KameletBinding - err = c.Watch(&source.Kind{Type: &v1alpha1.KameletBinding{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{ - UpdateFunc: func(e event.UpdateEvent) bool { - oldKameletBinding := e.ObjectOld.(*v1alpha1.KameletBinding) - newKameletBinding := e.ObjectNew.(*v1alpha1.KameletBinding) - // Ignore updates to the kameletBinding status in which case metadata.Generation - // does not change, or except when the kameletBinding phase changes as it's used - // to transition from one phase to another - return oldKameletBinding.Generation != newKameletBinding.Generation || - oldKameletBinding.Status.Phase != newKameletBinding.Status.Phase + err = c.Watch(&source.Kind{Type: &v1alpha1.KameletBinding{}}, + &handler.EnqueueRequestForObject{}, + predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + oldKameletBinding := e.ObjectOld.(*v1alpha1.KameletBinding) + newKameletBinding := e.ObjectNew.(*v1alpha1.KameletBinding) + // Ignore updates to the kameletBinding status in which case metadata.Generation + // does not change, or except when the kameletBinding phase changes as it's used + // to transition from one phase to another + return oldKameletBinding.Generation != newKameletBinding.Generation || + oldKameletBinding.Status.Phase != newKameletBinding.Status.Phase + }, + DeleteFunc: func(e event.DeleteEvent) bool { + // Evaluates to false if the object has been confirmed deleted + return !e.DeleteStateUnknown + }, }, - DeleteFunc: func(e event.DeleteEvent) bool { - // Evaluates to false if the object has been confirmed deleted - return !e.DeleteStateUnknown - }, - }) + ) if err != nil { return err } @@ -123,12 +126,10 @@ type ReconcileKameletBinding struct { // Note: // The Controller will requeue the Request to be processed again if the returned error is non-nil or // Result.Requeue is true, otherwise upon completion it will remove the work from the queue. -func (r *ReconcileKameletBinding) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *ReconcileKameletBinding) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name) rlog.Info("Reconciling KameletBinding") - ctx := context.TODO() - // Make sure the operator is allowed to act on namespace if ok, err := platform.IsOperatorAllowedOnNamespace(ctx, r.client, request.Namespace); err != nil { return reconcile.Result{}, err @@ -180,7 +181,7 @@ func (r *ReconcileKameletBinding) Reconcile(request reconcile.Request) (reconcil } if target != nil { - if err := r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(&instance)); err != nil { + if err := r.client.Status().Patch(ctx, target, ctrl.MergeFrom(&instance)); err != nil { camelevent.NotifyKameletBindingError(ctx, r.client, r.recorder, &instance, target, err) return reconcile.Result{}, err } diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go index 401ff8f..442877c 100644 --- a/pkg/install/cluster.go +++ b/pkg/install/cluster.go @@ -25,14 +25,13 @@ import ( "time" rbacv1 "k8s.io/api/rbac/v1" - k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/resources" @@ -68,7 +67,7 @@ func SetupClusterWideResourcesOrCollect(ctx context.Context, clientProvider clie return err } } - downgradeToCRDv1beta1 := func(object runtime.Object) runtime.Object { + downgradeToCRDv1beta1 := func(object ctrl.Object) ctrl.Object { if !isApiExtensionsV1 { v1Crd := object.(*apiextensionsv1.CustomResourceDefinition) v1beta1Crd := &apiextensionsv1beta1.CustomResourceDefinition{} @@ -284,12 +283,8 @@ func isClusterRoleInstalled(ctx context.Context, c client.Client, name string) ( return isResourceInstalled(ctx, c, &clusterRole) } -func isResourceInstalled(ctx context.Context, c client.Client, object runtime.Object) (bool, error) { - key, err := k8sclient.ObjectKeyFromObject(object) - if err != nil { - return false, err - } - err = c.Get(ctx, key, object) +func isResourceInstalled(ctx context.Context, c client.Client, object ctrl.Object) (bool, error) { + err := c.Get(ctx, ctrl.ObjectKeyFromObject(object), object) if err != nil && k8serrors.IsNotFound(err) { return false, nil } else if err != nil { diff --git a/pkg/install/common.go b/pkg/install/common.go index 2abcda6..345d112 100644 --- a/pkg/install/common.go +++ b/pkg/install/common.go @@ -21,23 +21,23 @@ import ( "context" "strings" - "github.com/apache/camel-k/pkg/resources" + "k8s.io/apimachinery/pkg/api/errors" + k8s "k8s.io/client-go/kubernetes" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/client" + "github.com/apache/camel-k/pkg/resources" "github.com/apache/camel-k/pkg/util/kubernetes" "github.com/apache/camel-k/pkg/util/openshift" - kube "k8s.io/client-go/kubernetes" - - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" ) // ResourceCustomizer can be used to inject code that changes the objects before they are created -type ResourceCustomizer func(object runtime.Object) runtime.Object +type ResourceCustomizer func(object ctrl.Object) ctrl.Object // IdentityResourceCustomizer is a ResourceCustomizer that does nothing -var IdentityResourceCustomizer = func(object runtime.Object) runtime.Object { +var IdentityResourceCustomizer = func(object ctrl.Object) ctrl.Object { return object } @@ -62,7 +62,6 @@ func Resource(ctx context.Context, c client.Client, namespace string, force bool return ResourceOrCollect(ctx, c, namespace, nil, force, customizer, name) } -// ResourceOrCollect -- func ResourceOrCollect(ctx context.Context, c client.Client, namespace string, collection *kubernetes.Collection, force bool, customizer ResourceCustomizer, name string) error { obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), resources.ResourceAsString(name)) @@ -70,25 +69,17 @@ func ResourceOrCollect(ctx context.Context, c client.Client, namespace string, c return err } - return RuntimeObjectOrCollect(ctx, c, namespace, collection, force, customizer(obj)) + return ObjectOrCollect(ctx, c, namespace, collection, force, customizer(obj)) } -// RuntimeObject installs a single runtime object -func RuntimeObject(ctx context.Context, c client.Client, namespace string, force bool, obj runtime.Object) error { - return RuntimeObjectOrCollect(ctx, c, namespace, nil, force, obj) -} - -// RuntimeObjectOrCollect -- -func RuntimeObjectOrCollect(ctx context.Context, c client.Client, namespace string, collection *kubernetes.Collection, force bool, obj runtime.Object) error { +func ObjectOrCollect(ctx context.Context, c client.Client, namespace string, collection *kubernetes.Collection, force bool, obj ctrl.Object) error { if collection != nil { // Adding to the collection before setting the namespace collection.Add(obj) return nil } - if metaObject, ok := obj.(metav1.Object); ok { - metaObject.SetNamespace(namespace) - } + obj.SetNamespace(namespace) if obj.GetObjectKind().GroupVersionKind().Kind == "PersistentVolumeClaim" { if err := c.Create(ctx, obj); err != nil && !errors.IsAlreadyExists(err) { @@ -115,7 +106,7 @@ func RuntimeObjectOrCollect(ctx context.Context, c client.Client, namespace stri return c.Create(ctx, obj) } -func isOpenShift(c kube.Interface, clusterType string) (bool, error) { +func isOpenShift(c k8s.Interface, clusterType string) (bool, error) { var res bool var err error if clusterType != "" { diff --git a/pkg/install/kamelets.go b/pkg/install/kamelets.go index d6871a7..9825836 100644 --- a/pkg/install/kamelets.go +++ b/pkg/install/kamelets.go @@ -23,11 +23,12 @@ import ( "strings" "github.com/pkg/errors" + k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/resources" @@ -66,27 +67,24 @@ func KameletCatalog(ctx context.Context, c client.Client, namespace string) erro } if existing == nil || existing.Annotations[kamelVersionAnnotation] != defaults.Version { - err := Resource(ctx, c, namespace, true, func(object runtime.Object) runtime.Object { - if o, ok := object.(metav1.Object); ok { - if o.GetAnnotations() == nil { - o.SetAnnotations(make(map[string]string)) - } - o.GetAnnotations()[kamelVersionAnnotation] = defaults.Version - - if o.GetLabels() == nil { - o.SetLabels(make(map[string]string)) - } - o.GetLabels()[kameletBundledLabel] = "true" - o.GetLabels()[kameletReadOnlyLabel] = "true" + err := Resource(ctx, c, namespace, true, func(o ctrl.Object) ctrl.Object { + if o.GetAnnotations() == nil { + o.SetAnnotations(make(map[string]string)) } - return object + o.GetAnnotations()[kamelVersionAnnotation] = defaults.Version + + if o.GetLabels() == nil { + o.SetLabels(make(map[string]string)) + } + o.GetLabels()[kameletBundledLabel] = "true" + o.GetLabels()[kameletReadOnlyLabel] = "true" + return o }, path.Join(kameletDir, res)) if err != nil { return errors.Wrapf(err, "could not create resource %q", res) } } - } } diff --git a/pkg/install/operator.go b/pkg/install/operator.go index 1187332..145c310 100644 --- a/pkg/install/operator.go +++ b/pkg/install/operator.go @@ -31,7 +31,6 @@ import ( k8serrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" ctrl "sigs.k8s.io/controller-runtime/pkg/client" @@ -70,7 +69,7 @@ type OperatorMonitoringConfiguration struct { // OperatorOrCollect installs the operator resources or adds them to the collector if present func OperatorOrCollect(ctx context.Context, c client.Client, cfg OperatorConfiguration, collection *kubernetes.Collection, force bool) error { - customizer := func(o runtime.Object) runtime.Object { + customizer := func(o ctrl.Object) ctrl.Object { if cfg.CustomImage != "" { if d, ok := o.(*appsv1.Deployment); ok { if d.Labels["camel.apache.org/component"] == "operator" { diff --git a/pkg/install/secret.go b/pkg/install/secret.go index 1020ad7..6d403bf 100644 --- a/pkg/install/secret.go +++ b/pkg/install/secret.go @@ -21,11 +21,12 @@ import ( "context" "io/ioutil" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/util/kubernetes" "github.com/apache/camel-k/pkg/util/registry" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const registrySecretName = "camel-k-registry-secret" @@ -70,7 +71,7 @@ func registrySecretFromDataOrCollect(ctx context.Context, c client.Client, names }, } - if err := RuntimeObjectOrCollect(ctx, c, namespace, collection, force, ®istrySecret); err != nil { + if err := ObjectOrCollect(ctx, c, namespace, collection, force, ®istrySecret); err != nil { return "", err } return registrySecretName, nil diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go index c4f1382..22cab53 100644 --- a/pkg/platform/defaults.go +++ b/pkg/platform/defaults.go @@ -23,8 +23,6 @@ import ( "strings" "time" - "github.com/apache/camel-k/pkg/kamelet/repository" - "github.com/apache/camel-k/pkg/util/patch" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" @@ -33,15 +31,17 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/install" + "github.com/apache/camel-k/pkg/kamelet/repository" "github.com/apache/camel-k/pkg/util/defaults" "github.com/apache/camel-k/pkg/util/log" "github.com/apache/camel-k/pkg/util/maven" "github.com/apache/camel-k/pkg/util/openshift" + "github.com/apache/camel-k/pkg/util/patch" ) // BuilderServiceAccount -- @@ -293,13 +293,8 @@ func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Clie if err != nil && !k8serrors.IsAlreadyExists(err) { return err } else if k8serrors.IsAlreadyExists(err) { - key, err := k8sclient.ObjectKeyFromObject(cm) - if err != nil { - return err - } - - cmCopy := cm.DeepCopyObject() - err = client.Get(ctx, key, cmCopy) + cmCopy := cm.DeepCopyObject().(ctrl.Object) + err = client.Get(ctx, ctrl.ObjectKeyFromObject(cm), cmCopy) if err != nil { return err } @@ -308,7 +303,7 @@ func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Clie if err != nil { return err } else if len(p) != 0 { - err = client.Patch(ctx, cm, k8sclient.RawPatch(types.MergePatchType, p)) + err = client.Patch(ctx, cm, ctrl.RawPatch(types.MergePatchType, p)) if err != nil { return errors.Wrap(err, "error during patch resource") } @@ -339,7 +334,7 @@ func createServiceCaBundleConfigMap(ctx context.Context, client client.Client, p func createBuilderServiceAccount(ctx context.Context, client client.Client, p *v1.IntegrationPlatform) error { sa := corev1.ServiceAccount{} - key := k8sclient.ObjectKey{ + key := ctrl.ObjectKey{ Name: BuilderServiceAccount, Namespace: p.Namespace, } diff --git a/pkg/trait/deployer.go b/pkg/trait/deployer.go index a9a11d7..f8a895a 100644 --- a/pkg/trait/deployer.go +++ b/pkg/trait/deployer.go @@ -23,10 +23,9 @@ import ( "github.com/pkg/errors" k8serrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/util/patch" @@ -109,30 +108,27 @@ func (t *deployerTrait) Apply(e *Environment) error { return nil } -func (t *deployerTrait) serverSideApply(env *Environment, resource runtime.Object) error { +func (t *deployerTrait) serverSideApply(env *Environment, resource ctrl.Object) error { target, err := patch.PositiveApplyPatch(resource) if err != nil { return err } - err = env.Client.Patch(env.C, target, client.Apply, client.ForceOwnership, client.FieldOwner("camel-k-operator")) + err = env.Client.Patch(env.C, target, ctrl.Apply, ctrl.ForceOwnership, ctrl.FieldOwner("camel-k-operator")) if err != nil { return errors.Wrapf(err, "error during apply resource: %v", resource) } return nil } -func (t *deployerTrait) clientSideApply(env *Environment, resource runtime.Object) error { +func (t *deployerTrait) clientSideApply(env *Environment, resource ctrl.Object) error { err := env.Client.Create(env.C, resource) if err == nil { return nil } else if !k8serrors.IsAlreadyExists(err) { return errors.Wrapf(err, "error during create resource: %v", resource) } - key, err := client.ObjectKeyFromObject(resource) - if err != nil { - return err - } - object := resource.DeepCopyObject() + key := ctrl.ObjectKeyFromObject(resource) + object := resource.DeepCopyObject().(ctrl.Object) err = env.Client.Get(env.C, key, object) if err != nil { return err @@ -144,7 +140,7 @@ func (t *deployerTrait) clientSideApply(env *Environment, resource runtime.Objec // Avoid triggering a patch request for nothing return nil } - err = env.Client.Patch(env.C, resource, client.RawPatch(types.MergePatchType, p)) + err = env.Client.Patch(env.C, resource, ctrl.RawPatch(types.MergePatchType, p)) if err != nil { return errors.Wrapf(err, "error during patch resource: %v", resource) } diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go index 29a7914..89c205f 100644 --- a/pkg/trait/trait_types.go +++ b/pkg/trait/trait_types.go @@ -29,9 +29,10 @@ import ( "k8s.io/api/batch/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" serving "knative.dev/serving/pkg/apis/serving/v1" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/client" "github.com/apache/camel-k/pkg/platform" @@ -393,9 +394,9 @@ func (e *Environment) computeApplicationProperties() *corev1.ConfigMap { return nil } -func (e *Environment) computeConfigMaps() []runtime.Object { +func (e *Environment) computeConfigMaps() []ctrl.Object { sources := e.Integration.Sources() - maps := make([]runtime.Object, 0, len(sources)+1) + maps := make([]ctrl.Object, 0, len(sources)+1) // combine properties of integration with kit, integration // properties have the priority diff --git a/pkg/util/knative/knative.go b/pkg/util/knative/knative.go index 4f506ea..182f566 100644 --- a/pkg/util/knative/knative.go +++ b/pkg/util/knative/knative.go @@ -22,14 +22,14 @@ import ( "fmt" "net/url" - "github.com/apache/camel-k/pkg/client" - kubernetesutils "github.com/apache/camel-k/pkg/util/kubernetes" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + eventing "knative.dev/eventing/pkg/apis/eventing/v1beta1" messaging "knative.dev/eventing/pkg/apis/messaging/v1beta1" sources "knative.dev/eventing/pkg/apis/sources/v1alpha2" @@ -38,12 +38,14 @@ import ( duckv1alpha1 "knative.dev/pkg/apis/duck/v1alpha1" "knative.dev/pkg/tracker" serving "knative.dev/serving/pkg/apis/serving/v1" - controller "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/apache/camel-k/pkg/client" + util "github.com/apache/camel-k/pkg/util/kubernetes" ) // CreateSubscription --- -func CreateSubscription(channelReference corev1.ObjectReference, serviceName string) runtime.Object { - subs := messaging.Subscription{ +func CreateSubscription(channelReference corev1.ObjectReference, serviceName string) *messaging.Subscription { + return &messaging.Subscription{ TypeMeta: metav1.TypeMeta{ APIVersion: messaging.SchemeGroupVersion.String(), Kind: "Subscription", @@ -67,20 +69,18 @@ func CreateSubscription(channelReference corev1.ObjectReference, serviceName str }, }, } - - return &subs } // CreateTrigger --- -func CreateTrigger(brokerReference corev1.ObjectReference, serviceName string, eventType string) runtime.Object { - subs := eventing.Trigger{ +func CreateTrigger(brokerReference corev1.ObjectReference, serviceName string, eventType string) *eventing.Trigger { + return &eventing.Trigger{ TypeMeta: metav1.TypeMeta{ APIVersion: eventing.SchemeGroupVersion.String(), Kind: "Trigger", }, ObjectMeta: metav1.ObjectMeta{ Namespace: brokerReference.Namespace, - Name: brokerReference.Name + "-" + serviceName + "-" + kubernetesutils.SanitizeLabel(eventType), + Name: brokerReference.Name + "-" + serviceName + "-" + util.SanitizeLabel(eventType), }, Spec: eventing.TriggerSpec{ Filter: &eventing.TriggerFilter{ @@ -98,12 +98,11 @@ func CreateTrigger(brokerReference corev1.ObjectReference, serviceName string, e }, }, } - return &subs } // CreateSinkBinding --- -func CreateSinkBinding(source corev1.ObjectReference, target corev1.ObjectReference) runtime.Object { - binding := sources.SinkBinding{ +func CreateSinkBinding(source corev1.ObjectReference, target corev1.ObjectReference) *sources.SinkBinding { + return &sources.SinkBinding{ TypeMeta: metav1.TypeMeta{ APIVersion: sources.SchemeGroupVersion.String(), Kind: "SinkBinding", @@ -131,8 +130,6 @@ func CreateSinkBinding(source corev1.ObjectReference, target corev1.ObjectRefere }, }, } - - return &binding } // GetAddressableReference looks up the resource among all given types and returns an object reference to it @@ -142,8 +139,8 @@ func GetAddressableReference(ctx context.Context, c client.Client, for _, ref := range possibleReferences { sink := ref.DeepCopy() sink.Namespace = namespace - _, err := GetSinkURI(ctx, c, sink, namespace) - if err != nil && (k8serrors.IsNotFound(err) || kubernetesutils.IsUnknownAPIError(err)) { + _, err := getSinkURI(ctx, c, sink, namespace) + if err != nil && (k8serrors.IsNotFound(err) || util.IsUnknownAPIError(err)) { continue } else if err != nil { return nil, err @@ -156,25 +153,24 @@ func GetAddressableReference(ctx context.Context, c client.Client, // GetSinkURL returns the sink as *url.URL func GetSinkURL(ctx context.Context, c client.Client, sink *corev1.ObjectReference, namespace string) (*url.URL, error) { - res, err := GetSinkURI(ctx, c, sink, namespace) + res, err := getSinkURI(ctx, c, sink, namespace) if err != nil { return nil, err } return url.Parse(res) } -// GetSinkURI retrieves the sink URI from the object referenced by the given -// ObjectReference. +// getSinkURI retrieves the sink URI from the object referenced by the given ObjectReference. // // Method taken from https://github.com/knative/eventing-contrib/blob/master/pkg/controller/sinks/sinks.go -func GetSinkURI(ctx context.Context, c client.Client, sink *corev1.ObjectReference, namespace string) (string, error) { +func getSinkURI(ctx context.Context, c client.Client, sink *corev1.ObjectReference, namespace string) (string, error) { if sink == nil { return "", fmt.Errorf("sink ref is nil") } u := &unstructured.Unstructured{} u.SetGroupVersionKind(sink.GroupVersionKind()) - err := c.Get(ctx, controller.ObjectKey{Namespace: namespace, Name: sink.Name}, u) + err := c.Get(ctx, ctrl.ObjectKey{Namespace: namespace, Name: sink.Name}, u) if err != nil { return "", err } diff --git a/pkg/util/kubernetes/collection.go b/pkg/util/kubernetes/collection.go index 4643e2f..9442e6c 100644 --- a/pkg/util/kubernetes/collection.go +++ b/pkg/util/kubernetes/collection.go @@ -24,6 +24,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + eventing "knative.dev/eventing/pkg/apis/eventing/v1beta1" serving "knative.dev/serving/pkg/apis/serving/v1" @@ -36,13 +38,13 @@ import ( // A Collection is a container of Kubernetes resources type Collection struct { - items []runtime.Object + items []ctrl.Object } // NewCollection creates a new empty collection -func NewCollection(objects ...runtime.Object) *Collection { +func NewCollection(objects ...ctrl.Object) *Collection { collection := Collection{ - items: make([]runtime.Object, 0, len(objects)), + items: make([]ctrl.Object, 0, len(objects)), } collection.items = append(collection.items, objects...) @@ -56,7 +58,7 @@ func (c *Collection) Size() int { } // Items returns all resources belonging to the collection -func (c *Collection) Items() []runtime.Object { +func (c *Collection) Items() []ctrl.Object { return c.items } @@ -79,21 +81,21 @@ func (c *Collection) AsKubernetesList() *corev1.List { } // Add adds a resource to the collection -func (c *Collection) Add(resource runtime.Object) { +func (c *Collection) Add(resource ctrl.Object) { if resource != nil { c.items = append(c.items, resource) } } // AddFirst adds a resource to the head of the collection -func (c *Collection) AddFirst(resource runtime.Object) { +func (c *Collection) AddFirst(resource ctrl.Object) { if resource != nil { - c.items = append([]runtime.Object{resource}, c.items...) + c.items = append([]ctrl.Object{resource}, c.items...) } } // AddAll adds all resources to the collection -func (c *Collection) AddAll(resource []runtime.Object) { +func (c *Collection) AddAll(resource []ctrl.Object) { c.items = append(c.items, resource...) } diff --git a/pkg/util/kubernetes/loader.go b/pkg/util/kubernetes/loader.go index aba9700..3221849 100644 --- a/pkg/util/kubernetes/loader.go +++ b/pkg/util/kubernetes/loader.go @@ -25,10 +25,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/util/yaml" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" ) // LoadResourceFromYaml loads a k8s resource from a yaml definition -func LoadResourceFromYaml(scheme *runtime.Scheme, data string) (runtime.Object, error) { +func LoadResourceFromYaml(scheme *runtime.Scheme, data string) (ctrl.Object, error) { source := []byte(data) jsonSource, err := yaml.ToJSON(source) if err != nil { @@ -39,7 +41,15 @@ func LoadResourceFromYaml(scheme *runtime.Scheme, data string) (runtime.Object, if err != nil { return nil, err } - return RuntimeObjectFromUnstructured(scheme, &u) + ro, err := runtimeObjectFromUnstructured(scheme, &u) + if err != nil { + return nil, err + } + if o, ok := ro.(ctrl.Object); !ok { + return nil, err + } else { + return o, nil + } } // LoadRawResourceFromYaml loads a k8s resource from a yaml definition without making assumptions on the underlying type @@ -58,8 +68,7 @@ func LoadRawResourceFromYaml(data string) (runtime.Object, error) { }, nil } -// RuntimeObjectFromUnstructured converts an unstructured to a runtime object -func RuntimeObjectFromUnstructured(scheme *runtime.Scheme, u *unstructured.Unstructured) (runtime.Object, error) { +func runtimeObjectFromUnstructured(scheme *runtime.Scheme, u *unstructured.Unstructured) (runtime.Object, error) { gvk := u.GroupVersionKind() codecs := serializer.NewCodecFactory(scheme) decoder := codecs.UniversalDecoder(gvk.GroupVersion()) diff --git a/pkg/util/kubernetes/replace.go b/pkg/util/kubernetes/replace.go index a9f045d..45ea33f 100644 --- a/pkg/util/kubernetes/replace.go +++ b/pkg/util/kubernetes/replace.go @@ -24,10 +24,9 @@ import ( corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + ctrl "sigs.k8s.io/controller-runtime/pkg/client" serving "knative.dev/serving/pkg/apis/serving/v1" @@ -37,16 +36,11 @@ import ( ) // ReplaceResource allows to completely replace a resource on Kubernetes, taking care of immutable fields and resource versions -func ReplaceResource(ctx context.Context, c client.Client, res runtime.Object) error { +func ReplaceResource(ctx context.Context, c client.Client, res ctrl.Object) error { err := c.Create(ctx, res) if err != nil && k8serrors.IsAlreadyExists(err) { - existing := res.DeepCopyObject() - var key k8sclient.ObjectKey - key, err = k8sclient.ObjectKeyFromObject(existing) - if err != nil { - return err - } - err = c.Get(ctx, key, existing) + existing := res.DeepCopyObject().(ctrl.Object) + err = c.Get(ctx, ctrl.ObjectKeyFromObject(existing), existing) if err != nil { return err } @@ -63,12 +57,8 @@ func ReplaceResource(ctx context.Context, c client.Client, res runtime.Object) e return nil } -func mapRequiredMeta(from runtime.Object, to runtime.Object) { - if fromC, ok := from.(metav1.Object); ok { - if toC, ok := to.(metav1.Object); ok { - toC.SetResourceVersion(fromC.GetResourceVersion()) - } - } +func mapRequiredMeta(from ctrl.Object, to ctrl.Object) { + to.SetResourceVersion(from.GetResourceVersion()) } func mapRequiredServiceData(from runtime.Object, to runtime.Object) { @@ -119,16 +109,9 @@ func mapRequiredKnativeServiceV1Data(from runtime.Object, to runtime.Object) { } } -func findResourceDetails(res runtime.Object) string { +func findResourceDetails(res ctrl.Object) string { if res == nil { return "nil resource" } - if meta, ok := res.(metav1.Object); ok { - name := meta.GetName() - if ty, ok := res.(metav1.Type); ok { - return ty.GetKind() + " " + name - } - return "resource " + name - } - return "unnamed resource" + return res.GetObjectKind().GroupVersionKind().String() + " " + res.GetName() } diff --git a/pkg/util/kubernetes/wait.go b/pkg/util/kubernetes/wait.go index 5c6129b..b5a49f8 100644 --- a/pkg/util/kubernetes/wait.go +++ b/pkg/util/kubernetes/wait.go @@ -21,12 +21,13 @@ import ( "context" "time" - "github.com/apache/camel-k/pkg/client" "github.com/pkg/errors" - "k8s.io/apimachinery/pkg/runtime" k8serrors "k8s.io/apimachinery/pkg/api/errors" - k8sclient "sigs.k8s.io/controller-runtime/pkg/client" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/apache/camel-k/pkg/client" ) // ResourceRetrieveFunction -- @@ -39,13 +40,9 @@ const ( sleepTime = 400 * time.Millisecond ) -// WaitCondition -- -func WaitCondition(ctx context.Context, c client.Client, obj runtime.Object, condition ResourceCheckFunction, maxDuration time.Duration) error { +func WaitCondition(ctx context.Context, c client.Client, obj ctrl.Object, condition ResourceCheckFunction, maxDuration time.Duration) error { start := time.Now() - key, err := k8sclient.ObjectKeyFromObject(obj) - if err != nil { - return err - } + key := ctrl.ObjectKeyFromObject(obj) for start.Add(maxDuration).After(time.Now()) { err := c.Get(ctx, key, obj) if err != nil { diff --git a/pkg/util/monitoring/controller.go b/pkg/util/monitoring/controller.go index c9c3136..c488478 100644 --- a/pkg/util/monitoring/controller.go +++ b/pkg/util/monitoring/controller.go @@ -18,6 +18,7 @@ limitations under the License. package monitoring import ( + "context" "time" "k8s.io/apimachinery/pkg/runtime/schema" @@ -57,17 +58,17 @@ type instrumentedReconciler struct { var _ reconcile.Reconciler = &instrumentedReconciler{} -func NewInstrumentedReconciler(reconciler reconcile.Reconciler, gvk schema.GroupVersionKind) reconcile.Reconciler { +func NewInstrumentedReconciler(rec reconcile.Reconciler, gvk schema.GroupVersionKind) reconcile.Reconciler { return &instrumentedReconciler{ - reconciler: reconciler, + reconciler: rec, gvk: gvk, } } -func (r *instrumentedReconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) { +func (r *instrumentedReconciler) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { timer := NewTimer() - res, err := r.reconciler.Reconcile(request) + res, err := r.reconciler.Reconcile(ctx, request) labels := prometheus.Labels{ namespaceLabel: request.Namespace, diff --git a/pkg/util/patch/patch.go b/pkg/util/patch/patch.go index 09c4265..76d1cec 100644 --- a/pkg/util/patch/patch.go +++ b/pkg/util/patch/patch.go @@ -23,9 +23,10 @@ import ( jsonpatch "github.com/evanphx/json-patch" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/json" + + ctrl "sigs.k8s.io/controller-runtime/pkg/client" ) func PositiveMergePatch(source runtime.Object, target runtime.Object) ([]byte, error) { @@ -64,7 +65,7 @@ func PositiveMergePatch(source runtime.Object, target runtime.Object) ([]byte, e return json.Marshal(positivePatch) } -func PositiveApplyPatch(source runtime.Object) (runtime.Object, error) { +func PositiveApplyPatch(source runtime.Object) (ctrl.Object, error) { sourceJSON, err := json.Marshal(source) if err != nil { return nil, err
