11package sub
22
33import (
4+ "context"
45 "fmt"
56 "net"
67 "strconv"
@@ -11,6 +12,7 @@ import (
1112 "github.com/cybozu-go/coil/v2/controllers"
1213 "github.com/cybozu-go/coil/v2/pkg/indexing"
1314 "github.com/cybozu-go/coil/v2/pkg/ipam"
15+ "github.com/cybozu-go/coil/v2/pkg/utils"
1416 "github.com/cybozu-go/coil/v2/runners"
1517 "k8s.io/apimachinery/pkg/runtime"
1618 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -78,6 +80,46 @@ func subMain() error {
7880 return err
7981 }
8082
83+ var setupFinished chan struct {}
84+
85+ if ! config .disableCertRotation {
86+ setupFinished , err = utils .SetupRotator (mgr , "ipam" , config .disableRestartOnCertRefresh )
87+ if err != nil {
88+ return fmt .Errorf ("failed to setup Rotator: %w" , err )
89+ }
90+ }
91+
92+ ctx := ctrl .SetupSignalHandler ()
93+
94+ setupErr := make (chan error )
95+
96+ go func () {
97+ setupErr <- setupManager (ctx , mgr , setupFinished )
98+ close (setupErr )
99+ }()
100+
101+ mgrCtx , cancel := context .WithCancel (ctx )
102+
103+ mgrErr := make (chan error )
104+ go func () {
105+ setupLog .Info (fmt .Sprintf ("starting manager (version: %s)" , v2 .Version ()))
106+ if err := mgr .Start (mgrCtx ); err != nil {
107+ mgrErr <- err
108+ }
109+ close (mgrErr )
110+ }()
111+
112+ if err := utils .WaitForExit (setupErr , mgrErr , cancel ); err != nil {
113+ return err
114+ }
115+
116+ return nil
117+ }
118+
119+ func setupManager (ctx context.Context , mgr ctrl.Manager , setupFinished chan struct {}) error {
120+ // wait for certificates to be configured
121+ <- setupFinished
122+
81123 // register controllers
82124
83125 pm := ipam .NewPoolManager (mgr .GetClient (), mgr .GetAPIReader (), ctrl .Log .WithName ("pool-manager" ), scheme )
@@ -90,7 +132,6 @@ func subMain() error {
90132 return err
91133 }
92134
93- ctx := ctrl .SetupSignalHandler ()
94135 if err := indexing .SetupIndexForAddressBlock (ctx , mgr ); err != nil {
95136 return err
96137 }
@@ -117,11 +158,5 @@ func subMain() error {
117158 return err
118159 }
119160
120- setupLog .Info (fmt .Sprintf ("starting manager (version: %s)" , v2 .Version ()))
121- if err := mgr .Start (ctx ); err != nil {
122- setupLog .Error (err , "problem running manager" )
123- return err
124- }
125-
126161 return nil
127162}
0 commit comments