@@ -18,14 +18,16 @@ package main
18
18
19
19
import (
20
20
"context"
21
+ "errors"
21
22
"os"
22
23
24
+ "golang.org/x/sync/errgroup"
23
25
corev1 "k8s.io/api/core/v1"
24
26
apierrors "k8s.io/apimachinery/pkg/api/errors"
25
- ctrl "sigs.k8s.io/controller-runtime"
26
- "sigs.k8s.io/controller-runtime/pkg/envtest"
27
- "sigs.k8s.io/controller-runtime/pkg/log"
28
27
"sigs.k8s.io/controller-runtime/pkg/log/zap"
28
+
29
+ ctrl "sigs.k8s.io/controller-runtime"
30
+ ctrllog "sigs.k8s.io/controller-runtime/pkg/log"
29
31
"sigs.k8s.io/controller-runtime/pkg/manager"
30
32
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
31
33
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -37,42 +39,23 @@ import (
37
39
)
38
40
39
41
func main () {
40
- log .SetLogger (zap .New (zap .UseDevMode (true )))
41
-
42
+ ctrllog .SetLogger (zap .New (zap .UseDevMode (true )))
43
+ entryLog := ctrllog . Log . WithName ( "entrypoint" )
42
44
ctx := signals .SetupSignalHandler ()
43
- entryLog := log .Log .WithName ("entrypoint" )
44
45
45
- testEnv := & envtest.Environment {}
46
- cfg , err := testEnv .Start ()
47
- if err != nil {
48
- entryLog .Error (err , "failed to start local environment" )
49
- os .Exit (1 )
50
- }
51
- defer func () {
52
- if testEnv == nil {
53
- return
54
- }
55
- if err := testEnv .Stop (); err != nil {
56
- entryLog .Error (err , "failed to stop local environment" )
57
- os .Exit (1 )
58
- }
59
- }()
60
-
61
- // Setup a Manager, note that this not yet engages clusters, only makes them available.
62
- entryLog .Info ("Setting up manager" )
63
46
provider := kind .New ()
64
- mgr , err := mcmanager .New (cfg , provider , manager.Options {})
47
+ mgr , err := mcmanager .New (ctrl . GetConfigOrDie () , provider , manager.Options {})
65
48
if err != nil {
66
- entryLog .Error (err , "unable to set up overall controller manager" )
67
- os .Exit (1 ) //nolint:gocritic // We want to return an error RC.
49
+ entryLog .Error (err , "unable to create manager" )
50
+ os .Exit (1 )
68
51
}
69
52
70
- if err : = mcbuilder .ControllerManagedBy (mgr ).
53
+ err = mcbuilder .ControllerManagedBy (mgr ).
71
54
Named ("multicluster-configmaps" ).
72
55
For (& corev1.ConfigMap {}).
73
56
Complete (mcreconcile .Func (
74
57
func (ctx context.Context , req mcreconcile.Request ) (ctrl.Result , error ) {
75
- log := log .FromContext (ctx ).WithValues ("cluster" , req .ClusterName )
58
+ log := ctrllog .FromContext (ctx ).WithValues ("cluster" , req .ClusterName )
76
59
log .Info ("Reconciling ConfigMap" )
77
60
78
61
cl , err := mgr .GetCluster (ctx , req .ClusterName )
@@ -88,26 +71,33 @@ func main() {
88
71
return reconcile.Result {}, err
89
72
}
90
73
91
- log .Info ("Found ConfigMap" , "uid" , cm .UID )
74
+ log .Info ("ConfigMap %s/%s in cluster %q " , cm . Namespace , cm .Name , req . ClusterName )
92
75
93
76
return ctrl.Result {}, nil
94
77
},
95
- )); err != nil {
96
- entryLog .Error (err , "failed to build controller" )
78
+ ))
79
+ if err != nil {
80
+ entryLog .Error (err , "unable to create controller" )
97
81
os .Exit (1 )
98
82
}
99
83
100
- entryLog .Info ("Starting provider" )
101
- go func () {
102
- if err := provider .Run (ctx , mgr ); err != nil {
103
- entryLog .Error (err , "unable to run provider" )
104
- os .Exit (1 )
105
- }
106
- }()
107
-
108
- entryLog .Info ("Starting manager" )
109
- if err := mgr .Start (ctx ); err != nil {
110
- entryLog .Error (err , "unable to run manager" )
84
+ // Starting everything.
85
+ g , ctx := errgroup .WithContext (ctx )
86
+ g .Go (func () error {
87
+ return ignoreCanceled (provider .Run (ctx , mgr ))
88
+ })
89
+ g .Go (func () error {
90
+ return ignoreCanceled (mgr .Start (ctx ))
91
+ })
92
+ if err := g .Wait (); err != nil {
93
+ entryLog .Error (err , "unable to start" )
111
94
os .Exit (1 )
112
95
}
113
96
}
97
+
98
+ func ignoreCanceled (err error ) error {
99
+ if errors .Is (err , context .Canceled ) {
100
+ return nil
101
+ }
102
+ return err
103
+ }
0 commit comments