Skip to content

Commit be4764f

Browse files
committed
add --disabled-controllers
On-behalf-of: @SAP [email protected]
1 parent 1b5392e commit be4764f

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

cmd/api-syncagent/main.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"flag"
2222
"fmt"
2323
golog "log"
24+
"slices"
2425
"strings"
2526

2627
"github.com/go-logr/zapr"
@@ -46,6 +47,7 @@ import (
4647
"k8s.io/apimachinery/pkg/fields"
4748
"k8s.io/apimachinery/pkg/runtime"
4849
"k8s.io/apimachinery/pkg/types"
50+
"k8s.io/apimachinery/pkg/util/sets"
4951
"k8s.io/client-go/rest"
5052
"k8s.io/client-go/tools/clientcmd"
5153
ctrlruntime "sigs.k8s.io/controller-runtime"
@@ -57,6 +59,8 @@ import (
5759
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
5860
)
5961

62+
var availableControllers = sets.New("apiexport", "apiresourceschema", "sync")
63+
6064
func main() {
6165
ctx := context.Background()
6266

@@ -133,16 +137,37 @@ func run(ctx context.Context, log *zap.SugaredLogger, opts *Options) error {
133137
return fmt.Errorf("failed to add kcp cluster runnable: %w", err)
134138
}
135139

136-
if err := apiresourceschema.Add(mgr, kcpCluster, lcName, log, 4, opts.AgentName, opts.PublishedResourceSelector); err != nil {
137-
return fmt.Errorf("failed to add apiresourceschema controller: %w", err)
140+
startController := func(name string, creator func() error) error {
141+
if slices.Contains(opts.DisabledControllers, name) {
142+
log.Infof("Not starting %s controller because it is disabled.", name)
143+
return nil
144+
}
145+
146+
if err := creator(); err != nil {
147+
return fmt.Errorf("failed to add %s controller: %w", name, err)
148+
}
149+
150+
return nil
151+
}
152+
153+
if err := startController("apiresourceschema", func() error {
154+
return apiresourceschema.Add(mgr, kcpCluster, lcName, log, 4, opts.AgentName, opts.PublishedResourceSelector)
155+
}); err != nil {
156+
return err
138157
}
139158

140-
if err := apiexport.Add(mgr, kcpCluster, lcName, log, opts.APIExportRef, opts.AgentName, opts.PublishedResourceSelector); err != nil {
141-
return fmt.Errorf("failed to add apiexport controller: %w", err)
159+
if err := startController("apiexport", func() error {
160+
return apiexport.Add(mgr, kcpCluster, lcName, log, opts.APIExportRef, opts.AgentName, opts.PublishedResourceSelector)
161+
}); err != nil {
162+
return err
142163
}
143164

144-
if err := syncmanager.Add(ctx, mgr, kcpCluster, kcpRestConfig, log, apiExport, opts.PublishedResourceSelector, opts.Namespace, opts.AgentName); err != nil {
145-
return fmt.Errorf("failed to add syncmanager controller: %w", err)
165+
// This controller is called "sync" because it makes the most sense to the users, even though internally the relevant
166+
// controller is the syncmanager (which in turn would start/stop the sync controllers).
167+
if err := startController("sync", func() error {
168+
return syncmanager.Add(ctx, mgr, kcpCluster, kcpRestConfig, log, apiExport, opts.PublishedResourceSelector, opts.Namespace, opts.AgentName)
169+
}); err != nil {
170+
return err
146171
}
147172

148173
log.Info("Starting kcp Sync Agent…")

cmd/api-syncagent/options.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"k8s.io/apimachinery/pkg/labels"
2828
utilerrors "k8s.io/apimachinery/pkg/util/errors"
29+
"k8s.io/apimachinery/pkg/util/sets"
2930
"k8s.io/apimachinery/pkg/util/validation"
3031
)
3132

@@ -68,6 +69,8 @@ type Options struct {
6869

6970
MetricsAddr string
7071
HealthAddr string
72+
73+
DisabledControllers []string
7174
}
7275

7376
func NewOptions() *Options {
@@ -91,6 +94,7 @@ func (o *Options) AddFlags(flags *pflag.FlagSet) {
9194
flags.StringVar(&o.KubeconfigCAFileOverride, "kubeconfig-ca-file-override", o.KubeconfigCAFileOverride, "override the server CA file configured in the local kubeconfig")
9295
flags.StringVar(&o.MetricsAddr, "metrics-address", o.MetricsAddr, "host and port to serve Prometheus metrics via /metrics (HTTP)")
9396
flags.StringVar(&o.HealthAddr, "health-address", o.HealthAddr, "host and port to serve probes via /readyz and /healthz (HTTP)")
97+
flags.StringSliceVar(&o.DisabledControllers, "disabled-controllers", o.DisabledControllers, fmt.Sprintf("comma-separated list of controllers (out of %v) to disable (can be given multiple times)", sets.List(availableControllers)))
9498
}
9599

96100
func (o *Options) Validate() error {
@@ -124,6 +128,13 @@ func (o *Options) Validate() error {
124128
}
125129
}
126130

131+
disabled := sets.New(o.DisabledControllers...)
132+
unknown := disabled.Difference(availableControllers)
133+
134+
if unknown.Len() > 0 {
135+
errs = append(errs, fmt.Errorf("unknown controller(s) %v, mut be any of %v", sets.List(unknown), sets.List(availableControllers)))
136+
}
137+
127138
return utilerrors.NewAggregate(errs)
128139
}
129140

0 commit comments

Comments
 (0)