/
manager.go
74 lines (62 loc) · 1.92 KB
/
manager.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
package provisioner
import (
cmdManager "github.com/Dynatrace/dynatrace-operator/cmd/manager"
"github.com/Dynatrace/dynatrace-operator/pkg/api/scheme"
"github.com/pkg/errors"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/cache"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
)
const (
metricsBindAddress = ":8090"
defaultProbeAddress = ":8091"
livenessEndpointName = "/livez"
livezEndpointName = "livez"
)
type csiDriverManagerProvider struct {
probeAddress string
}
func newCsiDriverManagerProvider(probeAddress string) cmdManager.Provider {
return csiDriverManagerProvider{
probeAddress: probeAddress,
}
}
func (provider csiDriverManagerProvider) CreateManager(namespace string, config *rest.Config) (manager.Manager, error) {
mgr, err := manager.New(config, provider.createOptions(namespace))
if err != nil {
return nil, errors.WithStack(err)
}
// instrument webhook manager HTTP client with OpenTelemetry
mgr.GetHTTPClient().Transport = otelhttp.NewTransport(mgr.GetHTTPClient().Transport)
err = provider.addHealthzCheck(mgr)
if err != nil {
return nil, err
}
return mgr, nil
}
func (provider csiDriverManagerProvider) addHealthzCheck(mgr manager.Manager) error {
err := mgr.AddHealthzCheck(livezEndpointName, healthz.Ping)
if err != nil {
return errors.WithStack(err)
}
return nil
}
func (provider csiDriverManagerProvider) createOptions(namespace string) ctrl.Options {
return ctrl.Options{
Cache: cache.Options{
DefaultNamespaces: map[string]cache.Config{
namespace: {},
},
},
Scheme: scheme.Scheme,
Metrics: server.Options{
BindAddress: metricsBindAddress,
},
HealthProbeBindAddress: provider.probeAddress,
LivenessEndpointName: livenessEndpointName,
}
}