Skip to content

Commit a0f8b82

Browse files
feat: expose namespace selector labels conf
1 parent c399686 commit a0f8b82

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

apis/v1beta1/targetallocator_types.go

+24
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,48 @@ type TargetAllocatorPrometheusCR struct {
3636
// label selector matches no objects.
3737
// +optional
3838
PodMonitorSelector *metav1.LabelSelector `json:"podMonitorSelector,omitempty"`
39+
// Namespaces to be selected to look for PodMonitors for target discovery.
40+
// A label selector is a label query over a set of resources. The result of matchLabels and
41+
// matchExpressions are ANDed. An empty label selector matches all objects. A null
42+
// label selector matches no objects.
43+
// +optional
44+
PodMonitorNamespaceSelector *metav1.LabelSelector `json:"podMonitorNamespaceSelector,omitempty"`
3945
// ServiceMonitors to be selected for target discovery.
4046
// A label selector is a label query over a set of resources. The result of matchLabels and
4147
// matchExpressions are ANDed. An empty label selector matches all objects. A null
4248
// label selector matches no objects.
4349
// +optional
4450
ServiceMonitorSelector *metav1.LabelSelector `json:"serviceMonitorSelector,omitempty"`
51+
// Namespaces to be selected to look for ServiceMonitors for target discovery.
52+
// A label selector is a label query over a set of resources. The result of matchLabels and
53+
// matchExpressions are ANDed. An empty label selector matches all objects. A null
54+
// label selector matches no objects.
55+
// +optional
56+
ServiceMonitorNamespaceSelector *metav1.LabelSelector `json:"serviceMonitorNamespaceSelector,omitempty"`
4557
// ScrapeConfigs to be selected for target discovery.
4658
// A label selector is a label query over a set of resources. The result of matchLabels and
4759
// matchExpressions are ANDed. An empty label selector matches all objects. A null
4860
// label selector matches no objects.
4961
// +optional
5062
ScrapeConfigSelector *metav1.LabelSelector `json:"scrapeConfigSelector,omitempty"`
63+
// Namespaces to be selected to look for ScrapeConfigs for target discovery.
64+
// A label selector is a label query over a set of resources. The result of matchLabels and
65+
// matchExpressions are ANDed. An empty label selector matches all objects. A null
66+
// label selector matches no objects.
67+
// +optional
68+
ScrapeConfigNamespaceSelector *metav1.LabelSelector `json:"scrapeConfigNamespaceSelector,omitempty"`
5169
// Probes to be selected for target discovery.
5270
// A label selector is a label query over a set of resources. The result of matchLabels and
5371
// matchExpressions are ANDed. An empty label selector matches all objects. A null
5472
// label selector matches no objects.
5573
// +optional
5674
ProbeSelector *metav1.LabelSelector `json:"probeSelector,omitempty"`
75+
// Namespaces to be selected to look for Probes for target discovery.
76+
// A label selector is a label query over a set of resources. The result of matchLabels and
77+
// matchExpressions are ANDed. An empty label selector matches all objects. A null
78+
// label selector matches no objects.
79+
// +optional
80+
ProbeNamespaceSelector *metav1.LabelSelector `json:"probeNamespaceSelector,omitempty"`
5781
}
5882

5983
type (

internal/manifests/targetallocator/configmap.go

+8
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,20 @@ func ConfigMap(params Params) (*corev1.ConfigMap, error) {
107107

108108
prometheusCRConfig["service_monitor_selector"] = taSpec.PrometheusCR.ServiceMonitorSelector
109109

110+
prometheusCRConfig["service_monitor_namespace_selector"] = taSpec.PrometheusCR.ServiceMonitorNamespaceSelector
111+
110112
prometheusCRConfig["pod_monitor_selector"] = taSpec.PrometheusCR.PodMonitorSelector
111113

114+
prometheusCRConfig["pod_monitor_namespace_selector"] = taSpec.PrometheusCR.PodMonitorNamespaceSelector
115+
112116
prometheusCRConfig["scrape_config_selector"] = taSpec.PrometheusCR.ScrapeConfigSelector
113117

118+
prometheusCRConfig["scrape_config_namespace_selector"] = taSpec.PrometheusCR.ScrapeConfigNamespaceSelector
119+
114120
prometheusCRConfig["probe_selector"] = taSpec.PrometheusCR.ProbeSelector
115121

122+
prometheusCRConfig["probe_namespace_selector"] = taSpec.PrometheusCR.ProbeNamespaceSelector
123+
116124
taConfig["prometheus_cr"] = prometheusCRConfig
117125
}
118126

internal/manifests/targetallocator/configmap_test.go

+83
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,89 @@ prometheus_cr:
217217
assert.Equal(t, expectedLabels, actual.Labels)
218218
assert.Equal(t, expectedData, actual.Data)
219219

220+
})
221+
t.Run("should return expected target allocator config map with namespace label selectors", func(t *testing.T) {
222+
expectedData := map[string]string{
223+
targetAllocatorFilename: `allocation_strategy: consistent-hashing
224+
collector_selector:
225+
matchlabels:
226+
app.kubernetes.io/component: opentelemetry-collector
227+
app.kubernetes.io/instance: default.my-instance
228+
app.kubernetes.io/managed-by: opentelemetry-operator
229+
app.kubernetes.io/part-of: opentelemetry
230+
matchexpressions: []
231+
config:
232+
global:
233+
scrape_interval: 30s
234+
scrape_protocols:
235+
- PrometheusProto
236+
- OpenMetricsText1.0.0
237+
- OpenMetricsText0.0.1
238+
- PrometheusText0.0.4
239+
scrape_configs:
240+
- job_name: otel-collector
241+
scrape_interval: 10s
242+
static_configs:
243+
- targets:
244+
- 0.0.0.0:8888
245+
- 0.0.0.0:9999
246+
filter_strategy: relabel-config
247+
prometheus_cr:
248+
enabled: true
249+
pod_monitor_namespace_selector:
250+
matchlabels:
251+
release: my-instance
252+
matchexpressions: []
253+
pod_monitor_selector: null
254+
probe_namespace_selector:
255+
matchlabels:
256+
release: my-instance
257+
matchexpressions: []
258+
probe_selector: null
259+
scrape_config_namespace_selector:
260+
matchlabels:
261+
release: my-instance
262+
matchexpressions: []
263+
scrape_config_selector: null
264+
service_monitor_namespace_selector:
265+
matchlabels:
266+
release: my-instance
267+
matchexpressions: []
268+
service_monitor_selector: null
269+
`,
270+
}
271+
targetAllocator = targetAllocatorInstance()
272+
targetAllocator.Spec.PrometheusCR.Enabled = true
273+
targetAllocator.Spec.PrometheusCR.PodMonitorNamespaceSelector = &metav1.LabelSelector{
274+
MatchLabels: map[string]string{
275+
"release": "my-instance",
276+
},
277+
}
278+
targetAllocator.Spec.PrometheusCR.ServiceMonitorNamespaceSelector = &metav1.LabelSelector{
279+
MatchLabels: map[string]string{
280+
"release": "my-instance",
281+
}}
282+
targetAllocator.Spec.PrometheusCR.ScrapeConfigNamespaceSelector = &metav1.LabelSelector{
283+
MatchLabels: map[string]string{
284+
"release": "my-instance",
285+
}}
286+
targetAllocator.Spec.PrometheusCR.ProbeNamespaceSelector = &metav1.LabelSelector{
287+
MatchLabels: map[string]string{
288+
"release": "my-instance",
289+
}}
290+
targetAllocator.Spec.GlobalConfig = v1beta1.AnyConfig{
291+
Object: map[string]interface{}{
292+
"scrape_interval": "30s",
293+
"scrape_protocols": []string{"PrometheusProto", "OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"},
294+
},
295+
}
296+
params.TargetAllocator = targetAllocator
297+
actual, err := ConfigMap(params)
298+
assert.NoError(t, err)
299+
assert.Equal(t, "my-instance-targetallocator", actual.Name)
300+
assert.Equal(t, expectedLabels, actual.Labels)
301+
assert.Equal(t, expectedData, actual.Data)
302+
220303
})
221304
t.Run("should return expected target allocator config map with scrape interval set", func(t *testing.T) {
222305
expectedData := map[string]string{

0 commit comments

Comments
 (0)