Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ require (
knative.dev/eventing-kafka-broker v0.37.0
knative.dev/hack v0.0.0-20250220110655-b5e4ff820460
knative.dev/networking v0.0.0-20241022012959-60e29ff520dc
knative.dev/operator v0.43.3-0.20250312021337-6b0f076ba7ae
knative.dev/pkg v0.0.0-20241021183759-9b9d535af5ad
knative.dev/serving v0.43.2
knative.dev/operator v0.43.6-0.20250418020004-b3f6dcf3b77b
knative.dev/pkg v0.0.0-20250306143800-fff4f701c7af
knative.dev/serving v0.43.3
sigs.k8s.io/controller-runtime v0.19.0
sigs.k8s.io/yaml v1.4.0
)
Expand Down Expand Up @@ -168,7 +168,7 @@ require (
github.com/go-logr/logr v1.4.2
go.uber.org/atomic v1.11.0 // indirect
k8s.io/apiextensions-apiserver v0.31.0
knative.dev/reconciler-test v0.0.0-20250217113355-f4bd4f5199d4
knative.dev/reconciler-test v0.0.0-20250411085513-cfed924c2716
)

replace (
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2593,8 +2593,8 @@ knative.dev/hack v0.0.0-20250117112405-6cb0feb3ac46 h1:UWX4qXgehoigmCH/db5ZldJ9V
knative.dev/hack v0.0.0-20250117112405-6cb0feb3ac46/go.mod h1:R0ritgYtjLDO9527h5vb5X6gfvt5LCrJ55BNbVDsWiY=
knative.dev/networking v0.0.0-20241022012959-60e29ff520dc h1:0d9XXRLlyuHfINZLlYqo/BYe/+chqqNBMLKJldjTbtw=
knative.dev/networking v0.0.0-20241022012959-60e29ff520dc/go.mod h1:G56j6VCLzfaN9yZ4IqfNyN4c3U1czvhUmKeZX4UjQ8Q=
knative.dev/operator v0.43.3-0.20250312021337-6b0f076ba7ae h1:GtHRzhWCPbBq51FLPpKcTnmK7dxR1ZmHN9jIcXFtEao=
knative.dev/operator v0.43.3-0.20250312021337-6b0f076ba7ae/go.mod h1:0WF/rDMqu7koe4ODC2vyjLd80Kw5NqIYoLwi+S+YERk=
knative.dev/operator v0.43.6-0.20250418020004-b3f6dcf3b77b h1:Hdi6eRXShCVXzqJzI8ehRfMxpsBezvH72z0svHXTh9A=
knative.dev/operator v0.43.6-0.20250418020004-b3f6dcf3b77b/go.mod h1:KKHTORv6Ly5eDpCcFr7z3vsFxgtJYsbtvDW0OlFGD7E=
knative.dev/pkg v0.0.0-20241021183759-9b9d535af5ad h1:Nrjtr2H168rJeamH4QdyLMV1lEKHejNhaj1ymgQMfLk=
knative.dev/pkg v0.0.0-20241021183759-9b9d535af5ad/go.mod h1:StJI72GWcm/iErmk4RqFJiOo8RLbVqPbHxUqeVwAzeo=
knative.dev/reconciler-test v0.0.0-20241015093232-09111f0f1364 h1:DIc+vbaFKOSGktPXJ1MaXIXoDjlmUIXQkHiZaPcYGbQ=
Expand Down
33 changes: 17 additions & 16 deletions hack/patches/013-eventing_namespace_global_resync.patch
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
diff --git a/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/controller.go b/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/controller.go
index cf341fa33..745e3dd70 100644
index bc1340ebf..24227dd98 100644
--- a/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/controller.go
+++ b/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/controller.go
@@ -33,6 +33,9 @@ import (
"knative.dev/pkg/controller"
"knative.dev/pkg/injection"
"knative.dev/pkg/logging"
+
+ namespaceinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/namespace"
@@ -22,6 +22,9 @@ import (
"go.uber.org/zap"
"k8s.io/client-go/tools/cache"

+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
+ namespaceinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/namespace"
+
"knative.dev/operator/pkg/apis/operator/v1beta1"
operatorclient "knative.dev/operator/pkg/client/injection/client"
knativeEventinginformer "knative.dev/operator/pkg/client/injection/informers/operator/v1beta1/knativeeventing"
@@ -79,6 +82,23 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro

knativeEventingInformer.Informer().AddEventHandler(controller.HandleAll(impl.Enqueue))

// NewController initializes the controller and is called by the generated code
@@ -72,6 +75,22 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})
+ namespaceinformer.Get(ctx).Informer().AddEventHandler(cache.FilteringResourceEventHandler{
+ FilterFunc: func(obj interface{}) bool {
+ ns, ok := obj.(metav1.Object)
Expand All @@ -32,6 +32,7 @@ index cf341fa33..745e3dd70 100644
+ impl.GlobalResync(knativeEventingInformer.Informer())
+ }),
+ })

return impl
}
+
deploymentInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
4 changes: 2 additions & 2 deletions hack/patches/020-backstage_plugins_eventmesh_backend.patch
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ index 000000000..e23d375d6
+ return f.IsEnabled(backstageBackendFeatureFlag)
+}
diff --git a/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/knativeeventing.go b/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/knativeeventing.go
index f0d4c777d..f622a4bce 100644
index b85ec89e4..59bd74dd1 100644
--- a/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/knativeeventing.go
+++ b/vendor/knative.dev/operator/pkg/reconciler/knativeeventing/knativeeventing.go
@@ -140,6 +140,7 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, ke *v1beta1.KnativeEvent
Expand All @@ -94,4 +94,4 @@ index f0d4c777d..f622a4bce 100644
+ r.handleBackstageResources,
manifests.Install,
common.CheckDeployments,
common.DeleteObsoleteResources(ctx, ke, r.installed),
common.InstallWebhookConfigs,
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
operatorv1beta1 "knative.dev/operator/pkg/apis/operator/v1beta1"
"knative.dev/operator/pkg/reconciler/knativeeventing"
"knative.dev/operator/pkg/reconciler/knativeserving"
kubefilteredfactory "knative.dev/pkg/client/injection/kube/informers/factory/filtered"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/injection/sharedmain"
Expand All @@ -36,6 +37,11 @@ func main() {
ServerCertificateName: "tls.crt",
})

ctx = kubefilteredfactory.WithSelectors(ctx,
knativeserving.Selector,
knativeeventing.Selector,
)

if err := apis.AddToScheme(scheme.Scheme); err != nil {
log.Error(err)
os.Exit(1)
Expand Down
22 changes: 19 additions & 3 deletions vendor/knative.dev/operator/pkg/reconciler/common/deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,31 @@ package common

import (
"context"
"errors"

mf "github.com/manifestival/manifestival"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/client-go/kubernetes/scheme"

"knative.dev/operator/pkg/apis/operator/base"
)

type deploymentsNotReadyError struct{}

var _ error = deploymentsNotReadyError{}

// Error implements the Error() interface of error.
func (err deploymentsNotReadyError) Error() string {
return "deployments not ready"
}

// IsDeploymentsNotReadyError returns true if the given error is a deploymentsNotReadyError.
func IsDeploymentsNotReadyError(err error) bool {
return errors.Is(err, deploymentsNotReadyError{})
}

// CheckDeployments checks all deployments in the given manifest and updates the given
// status with the status of the deployments.
func CheckDeployments(ctx context.Context, manifest *mf.Manifest, instance base.KComponent) error {
Expand All @@ -36,7 +52,7 @@ func CheckDeployments(ctx context.Context, manifest *mf.Manifest, instance base.
resource, err := manifest.Client.Get(&u)
if err != nil {
status.MarkDeploymentsNotReady([]string{"all"})
if errors.IsNotFound(err) {
if apierrors.IsNotFound(err) {
return nil
}
return err
Expand All @@ -52,7 +68,7 @@ func CheckDeployments(ctx context.Context, manifest *mf.Manifest, instance base.

if len(nonReadyDeployments) > 0 {
status.MarkDeploymentsNotReady(nonReadyDeployments)
return nil
return deploymentsNotReadyError{}
}

status.MarkDeploymentsAvailable()
Expand Down
43 changes: 37 additions & 6 deletions vendor/knative.dev/operator/pkg/reconciler/common/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,20 @@ import (
"strings"

mf "github.com/manifestival/manifestival"
"knative.dev/pkg/logging"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"

"knative.dev/operator/pkg/apis/operator/base"
"knative.dev/operator/pkg/apis/operator/v1beta1"
"knative.dev/pkg/logging"
)

var (
role mf.Predicate = mf.Any(mf.ByKind("ClusterRole"), mf.ByKind("Role"))
rolebinding mf.Predicate = mf.Any(mf.ByKind("ClusterRoleBinding"), mf.ByKind("RoleBinding"))
webhook mf.Predicate = mf.Any(mf.ByKind("MutatingWebhookConfiguration"), mf.ByKind("ValidatingWebhookConfiguration"))
gatewayNotMatch = "no matches for kind \"Gateway\""
role mf.Predicate = mf.Any(mf.ByKind("ClusterRole"), mf.ByKind("Role"))
rolebinding mf.Predicate = mf.Any(mf.ByKind("ClusterRoleBinding"), mf.ByKind("RoleBinding"))
webhook mf.Predicate = mf.Any(mf.ByKind("MutatingWebhookConfiguration"), mf.ByKind("ValidatingWebhookConfiguration"))
webhookDependentResources mf.Predicate = byGV(schema.GroupKind{Group: "networking.internal.knative.dev", Kind: "Certificate"})
gatewayNotMatch = "no matches for kind \"Gateway\""
)

// Install applies the manifest resources for the given version and updates the given
Expand All @@ -52,7 +55,7 @@ func Install(ctx context.Context, manifest *mf.Manifest, instance base.KComponen
status.MarkInstallFailed(err.Error())
return fmt.Errorf("failed to apply (cluster)rolebindings: %w", err)
}
if err := manifest.Filter(mf.Not(mf.Any(role, rolebinding, webhook))).Apply(); err != nil {
if err := manifest.Filter(mf.Not(mf.Any(role, rolebinding, webhook, webhookDependentResources))).Apply(); err != nil {
status.MarkInstallFailed(err.Error())
if ks, ok := instance.(*v1beta1.KnativeServing); ok && strings.Contains(err.Error(), gatewayNotMatch) &&
(ks.Spec.Ingress == nil || ks.Spec.Ingress.Istio.Enabled) {
Expand All @@ -63,10 +66,32 @@ func Install(ctx context.Context, manifest *mf.Manifest, instance base.KComponen

return fmt.Errorf("failed to apply non rbac manifest: %w", err)
}
return nil
}

// InstallWebhookConfigs applies the Webhook manifest resources and updates the given status accordingly.
func InstallWebhookConfigs(ctx context.Context, manifest *mf.Manifest, instance base.KComponent) error {
status := instance.GetStatus()
if err := manifest.Filter(webhook).Apply(); err != nil {
status.MarkInstallFailed(err.Error())
return fmt.Errorf("failed to apply webhooks: %w", err)
}
return nil
}

// InstallWebhookDependentResources applies the Webhook dependent resources updates the given status accordingly.
func InstallWebhookDependentResources(ctx context.Context, manifest *mf.Manifest, instance base.KComponent) error {
status := instance.GetStatus()
if err := manifest.Filter(webhookDependentResources).Apply(); err != nil {
status.MarkInstallFailed(err.Error())
return fmt.Errorf("failed to apply webhooks: %w", err)
}
return nil
}

// MarkStatusSuccess updates the component status to success.
func MarkStatusSuccess(ctx context.Context, manifest *mf.Manifest, instance base.KComponent) error {
status := instance.GetStatus()
status.MarkInstallSucceeded()
status.SetVersion(TargetVersion(instance))
return nil
Expand All @@ -83,3 +108,9 @@ func Uninstall(manifest *mf.Manifest) error {
}
return nil
}

func byGV(gk schema.GroupKind) mf.Predicate {
return func(u *unstructured.Unstructured) bool {
return u.GroupVersionKind().GroupKind() == gk
}
}
3 changes: 3 additions & 0 deletions vendor/knative.dev/operator/pkg/reconciler/common/stages.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ type Stages []Stage
func (stages Stages) Execute(ctx context.Context, manifest *mf.Manifest, instance base.KComponent) error {
for _, stage := range stages {
if err := stage(ctx, manifest, instance); err != nil {
if IsDeploymentsNotReadyError(err) {
break
}
return err
}
}
Expand Down
13 changes: 13 additions & 0 deletions vendor/knative.dev/operator/pkg/reconciler/common/transformers.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,16 @@ func InjectNamespace(manifest *mf.Manifest, instance base.KComponent, extra ...m
*manifest = m
return nil
}

// InjectLabel adds the given key and value as label.
func InjectLabel(key, value string) mf.Transformer {
return func(u *unstructured.Unstructured) error {
curr := u.GetLabels()
if curr == nil {
curr = map[string]string{}
}
curr[key] = value
u.SetLabels(curr)
return nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,30 @@ import (
"go.uber.org/zap"
"k8s.io/client-go/tools/cache"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
namespaceinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/namespace"

"knative.dev/operator/pkg/apis/operator/v1beta1"
operatorclient "knative.dev/operator/pkg/client/injection/client"
knativeEventinginformer "knative.dev/operator/pkg/client/injection/informers/operator/v1beta1/knativeeventing"
knereconciler "knative.dev/operator/pkg/client/injection/reconciler/operator/v1beta1/knativeeventing"
"knative.dev/operator/pkg/reconciler/common"
kubeclient "knative.dev/pkg/client/injection/kube/client"
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment"
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/filtered"
configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/injection"
"knative.dev/pkg/logging"
)

namespaceinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/namespace"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
const (
// SelectorKey is the key of the selector for the KnativeEventing resources.
SelectorKey = "app.kubernetes.io/name"
// SelectorValue is the value of the selector for the KnativeEventing resources.
SelectorValue = "knative-eventing"
// Selector is the selector for the KnativeEventing resources.
Selector = SelectorKey + "=" + SelectorValue
)

// NewController initializes the controller and is called by the generated code
Expand All @@ -48,7 +58,8 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl
func NewExtendedController(generator common.ExtensionGenerator) injection.ControllerConstructor {
return func(ctx context.Context, cmw configmap.Watcher) *controller.Impl {
knativeEventingInformer := knativeEventinginformer.Get(ctx)
deploymentInformer := deploymentinformer.Get(ctx)
deploymentInformer := deploymentinformer.Get(ctx, Selector)
configMapInformer := configmapinformer.Get(ctx, Selector)
kubeClient := kubeclient.Get(ctx)
logger := logging.FromContext(ctx)

Expand All @@ -71,10 +82,6 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro

knativeEventingInformer.Informer().AddEventHandler(controller.HandleAll(impl.Enqueue))

deploymentInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})
namespaceinformer.Get(ctx).Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: func(obj interface{}) bool {
ns, ok := obj.(metav1.Object)
Expand All @@ -92,6 +99,15 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro
}),
})

deploymentInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})
configMapInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
Handler: controller.HandleAll(impl.EnqueueControllerOf),
})

return impl
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, ke *v1beta1.KnativeEvent
r.handleBackstageResources,
manifests.Install,
common.CheckDeployments,
common.InstallWebhookConfigs,
manifests.SetManifestPaths,
common.MarkStatusSuccess,
common.DeleteObsoleteResources(ctx, ke, r.installed),
}
manifest := r.manifest.Append()
Expand All @@ -158,6 +161,8 @@ func (r *Reconciler) transform(ctx context.Context, manifest *mf.Manifest, comp
kec.DefaultBrokerConfigMapTransform(instance, logger),
kec.SinkBindingSelectionModeTransform(instance, logger),
kec.ReplicasEnvVarsTransform(manifest.Client),
// Ensure all resources have the selector applied so that the controller re-queues applied resources when they change.
common.InjectLabel(SelectorKey, SelectorValue),
}
extra = append(extra, r.extension.Transformers(instance)...)
return common.Transform(ctx, manifest, instance, extra...)
Expand Down
Loading
Loading