Skip to content

Commit 4e92ee2

Browse files
committed
fix: Lowercase scheme for Prometheus ScrapeConfig
This fixes #3386 Signed-off-by: alex-berger <[email protected]>
1 parent 2bf33ed commit 4e92ee2

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Main (unreleased)
4444
### Bugfixes
4545

4646
- Fix `otelcol.receiver.filelog` documentation's default value for `start_at`. (@petewall)
47+
- Fix [#3386](https://github.com/grafana/alloy/issues/3386) lower casing scheme in `prometheus.operator.scrapeconfigs`. (@alex-berger)
4748
- Fix `mimir.rules.kubernetes` panic on non-leader debug info retrieval (@TheoBrigitte)
4849

4950
### Other changes

internal/component/prometheus/operator/configgen/config_gen_scrapeconfig.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package configgen
44

55
import (
66
"fmt"
7+
"strings"
78

89
promopv1alpha1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1alpha1"
910
"github.com/prometheus-operator/prometheus-operator/pkg/namespacelabeler"
@@ -92,7 +93,10 @@ func (cg *ConfigGenerator) commonScrapeConfigConfig(m *promopv1alpha1.ScrapeConf
9293
cfg.Params = m.Spec.Params
9394
}
9495
if m.Spec.Scheme != nil {
95-
cfg.Scheme = *m.Spec.Scheme
96+
// Prometheus Operator ScrapeConfig CRD requires spec.scheme to be uppercase "HTTP" or "HTTPS", but
97+
// the implementation expects lowercase "http" or "https" in the final scrape configuration. So, we
98+
// have to lowercase the schema.
99+
cfg.Scheme = strings.ToLower(*m.Spec.Scheme)
96100
}
97101
if m.Spec.TLSConfig != nil {
98102
if cfg.HTTPClientConfig.TLSConfig, err = cg.generateSafeTLS(*m.Spec.TLSConfig, m.Namespace); err != nil {

internal/component/prometheus/operator/configgen/config_gen_scrapeconfig_test.go

+51
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
)
2727

2828
func TestGenerateStaticScrapeConfigConfig(t *testing.T) {
29+
HTTPS := "HTTPS"
2930
suite := []struct {
3031
name string
3132
m *promopv1alpha1.ScrapeConfig
@@ -84,6 +85,56 @@ func TestGenerateStaticScrapeConfigConfig(t *testing.T) {
8485
},
8586
},
8687
},
88+
{
89+
name: "lowercase schema",
90+
m: &promopv1alpha1.ScrapeConfig{
91+
ObjectMeta: metav1.ObjectMeta{
92+
Namespace: "operator",
93+
Name: "scrapeconfig",
94+
},
95+
Spec: promopv1alpha1.ScrapeConfigSpec{
96+
Scheme: &HTTPS,
97+
},
98+
},
99+
ep: promopv1alpha1.StaticConfig{
100+
Targets: []promopv1alpha1.Target{"foo", "bar"},
101+
},
102+
expectedRelabels: util.Untab(`
103+
- target_label: __meta_foo
104+
replacement: bar
105+
- source_labels: [job]
106+
target_label: __tmp_prometheus_job_name
107+
- replacement: operator
108+
target_label: __meta_kubernetes_scrapeconfig_namespace
109+
- replacement: scrapeconfig
110+
target_label: __meta_kubernetes_scrapeconfig_name
111+
- source_labels: [__address__]
112+
target_label: instance
113+
`),
114+
expected: &config.ScrapeConfig{
115+
JobName: "scrapeConfig/operator/scrapeconfig/static/1",
116+
HonorTimestamps: true,
117+
ScrapeInterval: model.Duration(time.Hour),
118+
ScrapeTimeout: model.Duration(42 * time.Second),
119+
ScrapeProtocols: config.DefaultScrapeProtocols,
120+
EnableCompression: true,
121+
MetricsPath: "/metrics",
122+
Scheme: "https",
123+
HTTPClientConfig: commonConfig.HTTPClientConfig{
124+
FollowRedirects: true,
125+
EnableHTTP2: true,
126+
},
127+
ServiceDiscoveryConfigs: discovery.Configs{
128+
discovery.StaticConfig{
129+
&targetgroup.Group{
130+
Targets: []model.LabelSet{{model.AddressLabel: model.LabelValue("foo")}, {model.AddressLabel: model.LabelValue("bar")}},
131+
Labels: model.LabelSet{},
132+
Source: "scrapeConfig/operator/scrapeconfig/static/1",
133+
},
134+
},
135+
},
136+
},
137+
},
87138
}
88139
for _, tc := range suite {
89140
t.Run(tc.name, func(t *testing.T) {

0 commit comments

Comments
 (0)