Skip to content

Commit b68827c

Browse files
committed
metrics: Populate MetricsOptions at startup
1 parent e47ae18 commit b68827c

3 files changed

Lines changed: 19 additions & 23 deletions

File tree

cmd/cluster-version-operator/start.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ func init() {
2929
},
3030
}
3131

32-
cmd.PersistentFlags().StringVar(&opts.ListenAddr, "listen", opts.ListenAddr, "Address to listen on for metrics")
32+
cmd.PersistentFlags().StringVar(&opts.MetricsOptions.ListenAddress, "listen", opts.MetricsOptions.ListenAddress, "Address to listen on for metrics")
3333
cmd.PersistentFlags().StringVar(&opts.Kubeconfig, "kubeconfig", opts.Kubeconfig, "Kubeconfig file to access a remote cluster (testing only)")
3434
cmd.PersistentFlags().StringVar(&opts.NodeName, "node-name", opts.NodeName, "kubernetes node name CVO is scheduled on.")
3535
cmd.PersistentFlags().BoolVar(&opts.EnableAutoUpdate, "enable-auto-update", opts.EnableAutoUpdate, "Enables the autoupdate controller.")
3636
cmd.PersistentFlags().StringVar(&opts.ReleaseImage, "release-image", opts.ReleaseImage, "The Openshift release image url.")
37-
cmd.PersistentFlags().StringVar(&opts.ServingCertFile, "serving-cert-file", opts.ServingCertFile, "The X.509 certificate file for serving metrics over HTTPS. You must set both --serving-cert-file and --serving-key-file unless you set --listen empty.")
38-
cmd.PersistentFlags().StringVar(&opts.ServingKeyFile, "serving-key-file", opts.ServingKeyFile, "The X.509 key file for serving metrics over HTTPS. You must set both --serving-cert-file and --serving-key-file unless you set --listen empty.")
37+
cmd.PersistentFlags().StringVar(&opts.MetricsOptions.ServingCertFile, "serving-cert-file", opts.MetricsOptions.ServingCertFile, "The X.509 certificate file for serving metrics over HTTPS. You must set both --serving-cert-file and --serving-key-file unless you set --listen empty.")
38+
cmd.PersistentFlags().StringVar(&opts.MetricsOptions.ServingKeyFile, "serving-key-file", opts.MetricsOptions.ServingKeyFile, "The X.509 key file for serving metrics over HTTPS. You must set both --serving-cert-file and --serving-key-file unless you set --listen empty.")
3939
cmd.PersistentFlags().StringVar(&opts.PromQLTarget.CABundleFile, "metrics-ca-bundle-file", opts.PromQLTarget.CABundleFile, "The service CA bundle file containing one or more X.509 certificate files for validating certificates generated from the service CA for the respective remote PromQL query service.")
4040
cmd.PersistentFlags().StringVar(&opts.PromQLTarget.BearerTokenFile, "metrics-token-file", opts.PromQLTarget.BearerTokenFile, "The bearer token file used to access the remote PromQL query service.")
4141
cmd.PersistentFlags().StringVar(&opts.PromQLTarget.KubeSvc.Namespace, "metrics-namespace", opts.PromQLTarget.KubeSvc.Namespace, "The name of the namespace where the the remote PromQL query service resides. Must be specified when --use-dns-for-services is disabled.")

pkg/start/start.go

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ const (
5757

5858
// Options are the valid inputs to starting the CVO.
5959
type Options struct {
60-
ReleaseImage string
61-
ServingCertFile string
62-
ServingKeyFile string
60+
ReleaseImage string
61+
62+
MetricsOptions cvo.MetricsOptions
6363

6464
Kubeconfig string
6565
NodeName string
66-
ListenAddr string
6766

6867
EnableAutoUpdate bool
6968

@@ -116,7 +115,7 @@ func defaultEnv(name, defaultValue string) string {
116115
func NewOptions() *Options {
117116
defaultPromQLTarget := clusterconditions.DefaultPromQLTarget()
118117
return &Options{
119-
ListenAddr: "0.0.0.0:9099",
118+
MetricsOptions: cvo.MetricsOptions{ListenAddress: "0.0.0.0:9099"},
120119
NodeName: os.Getenv("NODE_NAME"),
121120
PrometheusURLString: defaultPromQLTarget.URL.String(),
122121
PromQLTarget: defaultPromQLTarget,
@@ -138,10 +137,10 @@ func (o *Options) ValidateAndComplete() error {
138137
if o.ReleaseImage == "" {
139138
return fmt.Errorf("missing --release-image flag, it is required")
140139
}
141-
if o.ListenAddr != "" && o.ServingCertFile == "" {
140+
if o.MetricsOptions.ListenAddress != "" && o.MetricsOptions.ServingCertFile == "" {
142141
return fmt.Errorf("--listen was not set empty, so --serving-cert-file must be set")
143142
}
144-
if o.ListenAddr != "" && o.ServingKeyFile == "" {
143+
if o.MetricsOptions.ListenAddress != "" && o.MetricsOptions.ServingKeyFile == "" {
145144
return fmt.Errorf("--listen was not set empty, so --serving-key-file must be set")
146145
}
147146
if o.PrometheusURLString == "" {
@@ -161,6 +160,10 @@ func (o *Options) ValidateAndComplete() error {
161160
// Inject the cluster ID into PromQL queries in HyperShift
162161
o.InjectClusterIdIntoPromQL = o.HyperShift
163162

163+
// Temporarily disable the authentication and authorization for the metrics endpoint in HyperShift
164+
o.MetricsOptions.DisableAuthorization = o.HyperShift
165+
o.MetricsOptions.DisableAuthentication = o.HyperShift
166+
164167
if err := validateCapabilities(o.AlwaysEnableCapabilities); err != nil {
165168
return fmt.Errorf("--always-enable-capabilities: %w", err)
166169
}
@@ -346,18 +349,11 @@ func (o *Options) run(ctx context.Context, controllerCtx *Context, lock resource
346349
Callbacks: leaderelection.LeaderCallbacks{
347350
OnStartedLeading: func(_ context.Context) { // no need for this passed-through postMainContext, because goroutines we launch inside will use runContext
348351
launchedMain = true
349-
if o.ListenAddr != "" {
352+
if o.MetricsOptions.ListenAddress != "" {
350353
resultChannelCount++
351354
go func() {
352355
defer utilruntime.HandleCrash()
353-
options := cvo.MetricsOptions{
354-
ListenAddress: o.ListenAddr,
355-
ServingCertFile: o.ServingCertFile,
356-
ServingKeyFile: o.ServingKeyFile,
357-
DisableAuthentication: o.HyperShift,
358-
DisableAuthorization: o.HyperShift,
359-
}
360-
err := cvo.RunMetrics(postMainContext, shutdownContext, restConfig, options)
356+
err := cvo.RunMetrics(postMainContext, shutdownContext, restConfig, o.MetricsOptions)
361357
resultChannel <- asyncResult{name: "metrics server", error: err}
362358
}()
363359
}
@@ -658,7 +654,7 @@ func (o *Options) NewControllerContext(
658654
return nil, err
659655
}
660656
}
661-
if o.ListenAddr != "" {
657+
if o.MetricsOptions.ListenAddress != "" {
662658
if err := ctx.CVO.RegisterMetrics(coInformer.Informer()); err != nil {
663659
return nil, err
664660
}

pkg/start/start_integration_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ func TestIntegrationCVO_initializeAndUpgrade(t *testing.T) {
185185
options := NewOptions()
186186
options.Namespace = ns
187187
options.Name = ns
188-
options.ListenAddr = ""
188+
options.MetricsOptions.ListenAddress = ""
189189
options.NodeName = "test-node"
190190
options.ReleaseImage = payloadImage1
191191
options.PayloadOverride = filepath.Join(dir, "0.0.1")
@@ -330,7 +330,7 @@ func TestIntegrationCVO_gracefulStepDown(t *testing.T) {
330330
options := NewOptions()
331331
options.Namespace = ns
332332
options.Name = ns
333-
options.ListenAddr = ""
333+
options.MetricsOptions.ListenAddress = ""
334334
options.NodeName = "test-node"
335335
options.ReleaseImage = payloadImage1
336336
options.PayloadOverride = filepath.Join(dir, "0.0.1")
@@ -537,7 +537,7 @@ metadata:
537537
options := NewOptions()
538538
options.Namespace = ns
539539
options.Name = ns
540-
options.ListenAddr = ""
540+
options.MetricsOptions.ListenAddress = ""
541541
options.NodeName = "test-node"
542542
options.ReleaseImage = payloadImage1
543543
options.PayloadOverride = payloadDir

0 commit comments

Comments
 (0)