From a2b899aa153f3e7bf88e16c3d1945a154cf25670 Mon Sep 17 00:00:00 2001 From: Ricardo Maraschini Date: Thu, 12 Jun 2025 11:23:09 +0200 Subject: [PATCH] feat(prometheus): allow different url schemes as per prometheus golang client implementation: the only url validation done is by means of an `url.Parse()` call. we should do the same and not enforce the usage of https scheme. our readme even shows an example of descheduler config using http prometheus url scheme. --- pkg/descheduler/policyconfig.go | 9 ++------- pkg/descheduler/policyconfig_test.go | 14 -------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/pkg/descheduler/policyconfig.go b/pkg/descheduler/policyconfig.go index ec8443aa8..9f46b7c08 100644 --- a/pkg/descheduler/policyconfig.go +++ b/pkg/descheduler/policyconfig.go @@ -172,13 +172,8 @@ func validateDeschedulerConfiguration(in api.DeschedulerPolicy, registry pluginr } else { if prometheusConfig.Prometheus.URL == "" { errorsInPolicy = append(errorsInPolicy, fmt.Errorf("prometheus URL is required when prometheus is enabled")) - } else { - u, err := url.Parse(prometheusConfig.Prometheus.URL) - if err != nil { - errorsInPolicy = append(errorsInPolicy, fmt.Errorf("error parsing prometheus URL: %v", err)) - } else if u.Scheme != "https" { - errorsInPolicy = append(errorsInPolicy, fmt.Errorf("prometheus URL's scheme is not https, got %q instead", u.Scheme)) - } + } else if _, err := url.Parse(prometheusConfig.Prometheus.URL); err != nil { + errorsInPolicy = append(errorsInPolicy, fmt.Errorf("error parsing prometheus URL: %v", err)) } if prometheusConfig.Prometheus.AuthToken != nil { diff --git a/pkg/descheduler/policyconfig_test.go b/pkg/descheduler/policyconfig_test.go index 6689dce1f..bfc8a386b 100644 --- a/pkg/descheduler/policyconfig_test.go +++ b/pkg/descheduler/policyconfig_test.go @@ -259,20 +259,6 @@ func TestValidateDeschedulerConfiguration(t *testing.T) { }, result: fmt.Errorf("error parsing prometheus URL: parse \"http://example.com:-80\": invalid port \":-80\" after host"), }, - { - description: "prometheus url does not have https error", - deschedulerPolicy: api.DeschedulerPolicy{ - MetricsProviders: []api.MetricsProvider{ - { - Source: api.PrometheusMetrics, - Prometheus: &api.Prometheus{ - URL: "http://example.com:80", - }, - }, - }, - }, - result: fmt.Errorf("prometheus URL's scheme is not https, got \"http\" instead"), - }, { description: "prometheus authtoken with no secret reference error", deschedulerPolicy: api.DeschedulerPolicy{