You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2021/08/04 17:51:12 UTC
[camel-k] branch main updated: fix: Fix cross-namespace creator
resource events
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new 1eb8dd5 fix: Fix cross-namespace creator resource events
1eb8dd5 is described below
commit 1eb8dd56dd45126391b8bc71e83a0ea062b68037
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Wed Aug 4 17:22:11 2021 +0200
fix: Fix cross-namespace creator resource events
---
pkg/controller/integration/build_kit.go | 14 +++++++-------
pkg/event/manager.go | 28 +++++++++++++++-------------
pkg/trait/container.go | 11 ++++++-----
pkg/util/kubernetes/camel.go | 22 ++++++++++++++--------
4 files changed, 42 insertions(+), 33 deletions(-)
diff --git a/pkg/controller/integration/build_kit.go b/pkg/controller/integration/build_kit.go
index 30a629f..005ed45 100644
--- a/pkg/controller/integration/build_kit.go
+++ b/pkg/controller/integration/build_kit.go
@@ -122,13 +122,13 @@ func (action *buildKitAction) Handle(ctx context.Context, integration *v1.Integr
// Add some information for post-processing, this may need to be refactored
// to a proper data structure
platformKit.Labels = map[string]string{
- "camel.apache.org/kit.type": v1.IntegrationKitTypePlatform,
- "camel.apache.org/created.by.kind": v1.IntegrationKind,
- "camel.apache.org/created.by.name": integration.Name,
- "camel.apache.org/created.by.namespace": integration.Namespace,
- "camel.apache.org/created.by.version": integration.ResourceVersion,
- "camel.apache.org/runtime.version": integration.Status.RuntimeVersion,
- "camel.apache.org/runtime.provider": string(integration.Status.RuntimeProvider),
+ "camel.apache.org/kit.type": v1.IntegrationKitTypePlatform,
+ "camel.apache.org/runtime.version": integration.Status.RuntimeVersion,
+ "camel.apache.org/runtime.provider": string(integration.Status.RuntimeProvider),
+ kubernetes.CamelCreatorLabelKind: v1.IntegrationKind,
+ kubernetes.CamelCreatorLabelName: integration.Name,
+ kubernetes.CamelCreatorLabelNamespace: integration.Namespace,
+ kubernetes.CamelCreatorLabelVersion: integration.ResourceVersion,
}
// Set the kit to have the same characteristics as the integrations
diff --git a/pkg/event/manager.go b/pkg/event/manager.go
index 6278ba8..c8362d2 100644
--- a/pkg/event/manager.go
+++ b/pkg/event/manager.go
@@ -21,15 +21,17 @@ import (
"context"
"fmt"
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/client-go/tools/record"
+
+ ctrl "sigs.k8s.io/controller-runtime/pkg/client"
+
v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
"github.com/apache/camel-k/pkg/client"
"github.com/apache/camel-k/pkg/util/kubernetes"
"github.com/apache/camel-k/pkg/util/log"
- corev1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/client-go/tools/record"
- runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
)
const (
@@ -260,17 +262,21 @@ func NotifyBuildError(ctx context.Context, c client.Client, recorder record.Even
}
// nolint:lll
-func notifyIfPhaseUpdated(ctx context.Context, c client.Client, recorder record.EventRecorder, new runtime.Object, oldPhase, newPhase string, resourceType, name, reason, info string) {
+func notifyIfPhaseUpdated(ctx context.Context, c client.Client, recorder record.EventRecorder, new ctrl.Object, oldPhase, newPhase string, resourceType, name, reason, info string) {
// Update information about phase changes
if oldPhase != newPhase {
phase := newPhase
if phase == "" {
phase = "[none]"
}
- recorder.Eventf(new, corev1.EventTypeNormal, reason, "%s %s in phase %q%s", resourceType, name, phase, info)
+ recorder.Eventf(new, corev1.EventTypeNormal, reason, "%s %q in phase %q%s", resourceType, name, phase, info)
if creatorRef, creator := getCreatorObject(ctx, c, new); creatorRef != nil && creator != nil {
- recorder.Eventf(creator, corev1.EventTypeNormal, ReasonRelatedObjectChanged, "%s %s subresource %s (%s) changed phase to %q%s", creatorRef.Kind, creatorRef.Name, name, resourceType, phase, info)
+ if namespace := new.GetNamespace(); namespace == creatorRef.Namespace {
+ recorder.Eventf(creator, corev1.EventTypeNormal, ReasonRelatedObjectChanged, "%s %q, created by %s %q, changed phase to %q%s", resourceType, name, creatorRef.Kind, creatorRef.Name, phase, info)
+ } else {
+ recorder.Eventf(creator, corev1.EventTypeNormal, ReasonRelatedObjectChanged, "%s \"%s/%s\", created by %s %q, changed phase to %q%s", resourceType, namespace, name, creatorRef.Kind, creatorRef.Name, phase, info)
+ }
}
}
}
@@ -305,12 +311,8 @@ func getCreatorObject(ctx context.Context, c client.Client, obj runtime.Object)
if ref := kubernetes.GetCamelCreator(obj); ref != nil {
if ref.Kind == "Integration" {
it := v1.NewIntegration(ref.Namespace, ref.Name)
- key := runtimeclient.ObjectKey{
- Namespace: ref.Namespace,
- Name: ref.Name,
- }
- if err := c.Get(ctx, key, &it); err != nil {
- log.Infof("Cannot get information about the Integration creating resource %v: %v", ref, err)
+ if err := c.Get(ctx, ctrl.ObjectKeyFromObject(&it), &it); err != nil {
+ log.Infof("Cannot get information about the creator Integration %v: %v", ref, err)
return nil, nil
}
return ref, &it
diff --git a/pkg/trait/container.go b/pkg/trait/container.go
index c06cb2e..c8df0fe 100644
--- a/pkg/trait/container.go
+++ b/pkg/trait/container.go
@@ -22,6 +22,7 @@ import (
"path"
"sort"
+ "github.com/apache/camel-k/pkg/util/kubernetes"
appsv1 "k8s.io/api/apps/v1"
"k8s.io/api/batch/v1beta1"
corev1 "k8s.io/api/core/v1"
@@ -181,11 +182,11 @@ func (t *containerTrait) configureDependencies(e *Environment) error {
// Add some information for post-processing, this may need to be refactored
// to a proper data structure
kit.Labels = map[string]string{
- "camel.apache.org/kit.type": v1.IntegrationKitTypeExternal,
- "camel.apache.org/created.by.kind": v1.IntegrationKind,
- "camel.apache.org/created.by.name": e.Integration.Name,
- "camel.apache.org/created.by.namespace": e.Integration.Namespace,
- "camel.apache.org/created.by.version": e.Integration.ResourceVersion,
+ "camel.apache.org/kit.type": v1.IntegrationKitTypeExternal,
+ kubernetes.CamelCreatorLabelKind: v1.IntegrationKind,
+ kubernetes.CamelCreatorLabelName: e.Integration.Name,
+ kubernetes.CamelCreatorLabelNamespace: e.Integration.Namespace,
+ kubernetes.CamelCreatorLabelVersion: e.Integration.ResourceVersion,
}
t.L.Infof("image %s", kit.Spec.Image)
diff --git a/pkg/util/kubernetes/camel.go b/pkg/util/kubernetes/camel.go
index ca487b5..5cc7e1e 100644
--- a/pkg/util/kubernetes/camel.go
+++ b/pkg/util/kubernetes/camel.go
@@ -20,18 +20,20 @@ package kubernetes
import (
"strings"
- v1 "k8s.io/api/core/v1"
+ corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
- camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+ v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
)
const (
CamelCreatorLabelPrefix = "camel.apache.org/created.by"
- CamelCreatorLabelKind = CamelCreatorLabelPrefix + ".kind"
- CamelCreatorLabelName = CamelCreatorLabelPrefix + ".name"
+ CamelCreatorLabelKind = CamelCreatorLabelPrefix + ".kind"
+ CamelCreatorLabelName = CamelCreatorLabelPrefix + ".name"
+ CamelCreatorLabelNamespace = CamelCreatorLabelPrefix + ".namespace"
+ CamelCreatorLabelVersion = CamelCreatorLabelPrefix + ".version"
)
// FilterCamelCreatorLabels is used to inherit the creator information among resources
@@ -57,16 +59,20 @@ func MergeCamelCreatorLabels(source map[string]string, target map[string]string)
}
// GetCamelCreator returns the Camel creator object referenced by this runtime object, if present
-func GetCamelCreator(obj runtime.Object) *v1.ObjectReference {
+func GetCamelCreator(obj runtime.Object) *corev1.ObjectReference {
if m, ok := obj.(metav1.Object); ok {
kind := m.GetLabels()[CamelCreatorLabelKind]
name := m.GetLabels()[CamelCreatorLabelName]
+ namespace, ok := m.GetLabels()[CamelCreatorLabelNamespace]
+ if !ok {
+ namespace = m.GetNamespace()
+ }
if kind != "" && name != "" {
- return &v1.ObjectReference{
+ return &corev1.ObjectReference{
Kind: kind,
- Namespace: m.GetNamespace(),
+ Namespace: namespace,
Name: name,
- APIVersion: camelv1.SchemeGroupVersion.String(),
+ APIVersion: v1.SchemeGroupVersion.String(),
}
}
}