-
Notifications
You must be signed in to change notification settings - Fork 157
/
controller.go
77 lines (62 loc) · 2.37 KB
/
controller.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
Copyright 2020 The Kubermatic Kubernetes Platform contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package seedsync
import (
"context"
"fmt"
"go.uber.org/zap"
"github.com/kubermatic/kubermatic/api/pkg/controller/util/predicate"
kubermaticv1 "github.com/kubermatic/kubermatic/api/pkg/crd/kubermatic/v1"
"github.com/kubermatic/kubermatic/api/pkg/provider"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/source"
)
const (
// ControllerName is the name of this very controller.
ControllerName = "seed-sync-controller"
// ManagedByLabel is the label used to identify the resources
// created by this controller.
ManagedByLabel = "app.kubernetes.io/managed-by"
// CleanupFinalizer is put on Seed CRs to facilitate proper
// cleanup when a Seed is deleted.
CleanupFinalizer = "kubermatic.io/cleanup-seed-sync"
)
// Add creates a new Seed-Sync controller and sets up Watches
func Add(
ctx context.Context,
mgr manager.Manager,
numWorkers int,
log *zap.SugaredLogger,
namespace string,
seedKubeconfigGetter provider.SeedKubeconfigGetter,
) error {
reconciler := &Reconciler{
Client: mgr.GetClient(),
ctx: ctx,
recorder: mgr.GetEventRecorderFor(ControllerName),
log: log.Named(ControllerName),
seedClientGetter: provider.SeedClientGetterFactory(seedKubeconfigGetter),
}
ctrlOptions := controller.Options{Reconciler: reconciler, MaxConcurrentReconciles: numWorkers}
c, err := controller.New(ControllerName, mgr, ctrlOptions)
if err != nil {
return err
}
// watch all seeds in the given namespace
if err := c.Watch(&source.Kind{Type: &kubermaticv1.Seed{}}, &handler.EnqueueRequestForObject{}, predicate.ByNamespace(namespace)); err != nil {
return fmt.Errorf("failed to create watcher: %v", err)
}
return nil
}