@@ -6,12 +6,14 @@ import (
66 "flag"
77 "fmt"
88 "os"
9+ "time"
910
1011 clickhousecomv1alpha1 "github.com/ClickHouse/clickhouse-operator/api/v1alpha1"
1112 "github.com/ClickHouse/clickhouse-operator/internal/controller/clickhouse"
1213 "github.com/ClickHouse/clickhouse-operator/internal/controller/keeper"
1314 "github.com/ClickHouse/clickhouse-operator/internal/controllerutil"
1415 "github.com/ClickHouse/clickhouse-operator/internal/environment"
16+ "github.com/ClickHouse/clickhouse-operator/internal/upgrade"
1517 "github.com/ClickHouse/clickhouse-operator/internal/version"
1618 whchv1 "github.com/ClickHouse/clickhouse-operator/internal/webhook/v1alpha1"
1719
@@ -32,6 +34,10 @@ import (
3234 "sigs.k8s.io/controller-runtime/pkg/webhook"
3335)
3436
37+ const (
38+ defaultVersionUpdateInterval = 24 * time .Hour
39+ )
40+
3541var (
3642 scheme = runtime .NewScheme ()
3743 setupLog = ctrl .Log .WithName ("setup" )
@@ -60,6 +66,8 @@ func run() error {
6066 secureMetrics bool
6167 enableHTTP2 bool
6268 tlsOpts []func (* tls.Config )
69+ versionUpdateInterval time.Duration
70+ disableVersionUpdateChecks bool
6371 )
6472
6573 flag .StringVar (& metricsAddr , "metrics-bind-address" , "0" , "The address the metrics endpoint binds to. " +
@@ -78,7 +86,11 @@ func run() error {
7886 flag .StringVar (& metricsCertName , "metrics-cert-name" , "tls.crt" , "The name of the metrics server certificate file." )
7987 flag .StringVar (& metricsCertKey , "metrics-cert-key" , "tls.key" , "The name of the metrics server key file." )
8088 flag .BoolVar (& enableHTTP2 , "enable-http2" , false ,
81- "If set, HTTP/2 will be enabled for the metrics and webhook servers" )
89+ "If set, HTTP/2 will be enabled for the metrics and webhook servers." )
90+ flag .DurationVar (& versionUpdateInterval , "version-update-interval" , defaultVersionUpdateInterval ,
91+ "Interval for updating ClickHouse versions list." )
92+ flag .BoolVar (& disableVersionUpdateChecks , "disable-version-update-checks" , false ,
93+ "If set, the operator will not check for ClickHouse updates and notify about outdated versions." )
8294
8395 opts := zap.Options {
8496 Development : true ,
@@ -173,11 +185,21 @@ func run() error {
173185
174186 zapLogger := controllerutil .NewLogger (logger )
175187
176- if err = keeper .SetupWithManager (mgr , zapLogger ); err != nil {
188+ var upgradeChecker * upgrade.Checker
189+ if ! disableVersionUpdateChecks {
190+ updater := upgrade .NewReleaseUpdater (upgrade .NewURLFetcher (), versionUpdateInterval , zapLogger )
191+ if err = mgr .Add (updater ); err != nil {
192+ return fmt .Errorf ("unable to add release updater to manager: %w" , err )
193+ }
194+
195+ upgradeChecker = upgrade .NewChecker (updater )
196+ }
197+
198+ if err = keeper .SetupWithManager (mgr , zapLogger , upgradeChecker ); err != nil {
177199 return fmt .Errorf ("unable to setup KeeperCluster controller: %w" , err )
178200 }
179201
180- if err = clickhouse .SetupWithManager (mgr , zapLogger ); err != nil {
202+ if err = clickhouse .SetupWithManager (mgr , zapLogger , upgradeChecker ); err != nil {
181203 return fmt .Errorf ("unable to setup ClickHouseCluster controller: %w" , err )
182204 }
183205
0 commit comments