Skip to content

Commit 9526a4e

Browse files
pierDipiknative-prow-robot
authored andcommitted
Watch and reconcile operator-controlled ConfigMaps
If users apply configmap changes directly, the operator wasn't reverting those changes instantly; with this PR, it will watch applied ConfigMaps and apply `KnativeServing` and `KnativeEventing` configurations. Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com>
1 parent 79683a0 commit 9526a4e

10 files changed

Lines changed: 178 additions & 30 deletions

File tree

cmd/operator/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,18 @@ package main
1919
import (
2020
"knative.dev/operator/pkg/reconciler/knativeeventing"
2121
"knative.dev/operator/pkg/reconciler/knativeserving"
22+
kubefilteredfactory "knative.dev/pkg/client/injection/kube/informers/factory/filtered"
2223
"knative.dev/pkg/injection/sharedmain"
24+
"knative.dev/pkg/signals"
2325
)
2426

2527
func main() {
26-
sharedmain.Main("knative-operator",
28+
ctx := signals.NewContext()
29+
ctx = kubefilteredfactory.WithSelectors(ctx,
30+
knativeserving.Selector,
31+
knativeeventing.Selector,
32+
)
33+
sharedmain.MainWithContext(ctx, "knative-operator",
2734
knativeserving.NewController,
2835
knativeeventing.NewController,
2936
)

pkg/reconciler/common/transformers.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,15 @@ func InjectNamespace(manifest *mf.Manifest, instance base.KComponent, extra ...m
8383
*manifest = m
8484
return nil
8585
}
86+
87+
func InjectLabel(key, value string) mf.Transformer {
88+
return func(u *unstructured.Unstructured) error {
89+
curr := u.GetLabels()
90+
if curr == nil {
91+
curr = map[string]string{}
92+
}
93+
curr[key] = value
94+
u.SetLabels(curr)
95+
return nil
96+
}
97+
}

pkg/reconciler/knativeeventing/controller.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,20 @@ import (
2828
knereconciler "knative.dev/operator/pkg/client/injection/reconciler/operator/v1beta1/knativeeventing"
2929
"knative.dev/operator/pkg/reconciler/common"
3030
kubeclient "knative.dev/pkg/client/injection/kube/client"
31-
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment"
31+
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/filtered"
32+
configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered"
3233
"knative.dev/pkg/configmap"
3334
"knative.dev/pkg/controller"
3435
"knative.dev/pkg/injection"
3536
"knative.dev/pkg/logging"
3637
)
3738

39+
const (
40+
SelectorKey = "app.kubernetes.io/name"
41+
SelectorValue = "knative-eventing"
42+
Selector = SelectorKey + "=" + SelectorValue
43+
)
44+
3845
// NewController initializes the controller and is called by the generated code
3946
// Registers eventhandlers to enqueue events
4047
func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl {
@@ -45,7 +52,8 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl
4552
func NewExtendedController(generator common.ExtensionGenerator) injection.ControllerConstructor {
4653
return func(ctx context.Context, cmw configmap.Watcher) *controller.Impl {
4754
knativeEventingInformer := knativeEventinginformer.Get(ctx)
48-
deploymentInformer := deploymentinformer.Get(ctx)
55+
deploymentInformer := deploymentinformer.Get(ctx, Selector)
56+
configMapInformer := configmapinformer.Get(ctx, Selector)
4957
kubeClient := kubeclient.Get(ctx)
5058
logger := logging.FromContext(ctx)
5159

@@ -72,6 +80,10 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro
7280
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
7381
Handler: controller.HandleAll(impl.EnqueueControllerOf),
7482
})
83+
configMapInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
84+
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeEventing")),
85+
Handler: controller.HandleAll(impl.EnqueueControllerOf),
86+
})
7587

7688
return impl
7789
}

pkg/reconciler/knativeeventing/knativeeventing.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ func (r *Reconciler) transform(ctx context.Context, manifest *mf.Manifest, comp
160160
kec.DefaultBrokerConfigMapTransform(instance, logger),
161161
kec.SinkBindingSelectionModeTransform(instance, logger),
162162
kec.ReplicasEnvVarsTransform(manifest.Client),
163+
// Ensure all resources have the selector applied so that the controller re-queues applied resources when they change.
164+
common.InjectLabel(SelectorKey, SelectorValue),
163165
}
164166
extra = append(extra, r.extension.Transformers(instance)...)
165167
return common.Transform(ctx, manifest, instance, extra...)

pkg/reconciler/knativeserving/controller.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828
knsreconciler "knative.dev/operator/pkg/client/injection/reconciler/operator/v1beta1/knativeserving"
2929
"knative.dev/operator/pkg/reconciler/common"
3030
kubeclient "knative.dev/pkg/client/injection/kube/client"
31-
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment"
31+
deploymentinformer "knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/filtered"
32+
configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered"
3233
"knative.dev/pkg/configmap"
3334
"knative.dev/pkg/controller"
3435
"knative.dev/pkg/injection"
@@ -41,11 +42,18 @@ func NewController(ctx context.Context, cmw configmap.Watcher) *controller.Impl
4142
return NewExtendedController(common.NoExtension)(ctx, cmw)
4243
}
4344

45+
const (
46+
SelectorKey = "app.kubernetes.io/name"
47+
SelectorValue = "knative-serving"
48+
Selector = SelectorKey + "=" + SelectorValue
49+
)
50+
4451
// NewExtendedController returns a controller extended to a specific platform
4552
func NewExtendedController(generator common.ExtensionGenerator) injection.ControllerConstructor {
4653
return func(ctx context.Context, cmw configmap.Watcher) *controller.Impl {
4754
knativeServingInformer := knativeServinginformer.Get(ctx)
48-
deploymentInformer := deploymentinformer.Get(ctx)
55+
deploymentInformer := deploymentinformer.Get(ctx, Selector)
56+
configMapInformer := configmapinformer.Get(ctx, Selector)
4957
kubeClient := kubeclient.Get(ctx)
5058
logger := logging.FromContext(ctx)
5159

@@ -72,6 +80,10 @@ func NewExtendedController(generator common.ExtensionGenerator) injection.Contro
7280
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeServing")),
7381
Handler: controller.HandleAll(impl.EnqueueControllerOf),
7482
})
83+
configMapInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
84+
FilterFunc: controller.FilterControllerGVK(v1beta1.SchemeGroupVersion.WithKind("KnativeServing")),
85+
Handler: controller.HandleAll(impl.EnqueueControllerOf),
86+
})
7587

7688
return impl
7789
}

pkg/reconciler/knativeserving/knativeserving.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ func (r *Reconciler) transform(ctx context.Context, manifest *mf.Manifest, comp
142142
extra := []mf.Transformer{
143143
ksc.CustomCertsTransform(instance, logger),
144144
ksc.AggregationRuleTransform(manifest.Client),
145+
// Ensure all resources have the selector applied so that the controller re-queues applied resources when they change.
146+
common.InjectLabel(SelectorKey, SelectorValue),
145147
}
146148
extra = append(extra, r.extension.Transformers(instance)...)
147149
extra = append(extra, ingress.Transformers(ctx, instance)...)

vendor/knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/deployment.go renamed to vendor/knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/filtered/deployment.go

Lines changed: 25 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered/configmap.go

Lines changed: 65 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/knative.dev/pkg/client/injection/kube/informers/factory/factory.go renamed to vendor/knative.dev/pkg/client/injection/kube/informers/factory/filtered/filtered_factory.go

Lines changed: 33 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/modules.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,8 +1491,9 @@ knative.dev/pkg/client/injection/ducks/duck/v1/addressable
14911491
knative.dev/pkg/client/injection/ducks/duck/v1/authstatus
14921492
knative.dev/pkg/client/injection/kube/client
14931493
knative.dev/pkg/client/injection/kube/client/fake
1494-
knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment
1495-
knative.dev/pkg/client/injection/kube/informers/factory
1494+
knative.dev/pkg/client/injection/kube/informers/apps/v1/deployment/filtered
1495+
knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/filtered
1496+
knative.dev/pkg/client/injection/kube/informers/factory/filtered
14961497
knative.dev/pkg/codegen/cmd/injection-gen
14971498
knative.dev/pkg/codegen/cmd/injection-gen/args
14981499
knative.dev/pkg/codegen/cmd/injection-gen/generators

0 commit comments

Comments
 (0)