@@ -80,6 +80,8 @@ type ThanosRulesConfig struct {
8080 RuleDashboardURL string
8181
8282 ServiceLabelValue string
83+ ServiceSelectorPrefix string
84+ ServiceSelectorSuffix string
8385 ReceiveRouterServiceSelector string
8486 ReceiveIngesterServiceSelector string
8587 RulerServiceSelector string
@@ -105,56 +107,50 @@ func WithServiceLabelValue(serviceLabelValue string) ThanosRulesConfigOption {
105107 }
106108}
107109
110+ func WithServiceSelectorPrefix (serviceSelectorPrefix string ) ThanosRulesConfigOption {
111+ return func (thanosRulesConfig * ThanosRulesConfig ) {
112+ thanosRulesConfig .ServiceSelectorPrefix = serviceSelectorPrefix
113+ }
114+ }
115+
116+ func WithServiceSelectorSuffix (serviceSelectorSuffix string ) ThanosRulesConfigOption {
117+ return func (thanosRulesConfig * ThanosRulesConfig ) {
118+ thanosRulesConfig .ServiceSelectorSuffix = serviceSelectorSuffix
119+ }
120+ }
121+
108122func WithReceiveRouterServiceSelector (receiveRouterServiceSelector string ) ThanosRulesConfigOption {
109123 return func (thanosRulesConfig * ThanosRulesConfig ) {
110- if receiveRouterServiceSelector == "" {
111- receiveRouterServiceSelector = "thanos-receive-router.*"
112- }
113124 thanosRulesConfig .ReceiveRouterServiceSelector = receiveRouterServiceSelector
114125 }
115126}
116127
117128func WithReceiveIngesterServiceSelector (receiveIngesterServiceSelector string ) ThanosRulesConfigOption {
118129 return func (thanosRulesConfig * ThanosRulesConfig ) {
119- if receiveIngesterServiceSelector == "" {
120- receiveIngesterServiceSelector = "thanos-receive-ingester.*"
121- }
122130 thanosRulesConfig .ReceiveIngesterServiceSelector = receiveIngesterServiceSelector
123131 }
124132}
125133
126134func WithRulerServiceSelector (rulerServiceSelector string ) ThanosRulesConfigOption {
127135 return func (thanosRulesConfig * ThanosRulesConfig ) {
128- if rulerServiceSelector == "" {
129- rulerServiceSelector = "thanos-ruler.*"
130- }
131136 thanosRulesConfig .RulerServiceSelector = rulerServiceSelector
132137 }
133138}
134139
135140func WithStoreServiceSelector (storeServiceSelector string ) ThanosRulesConfigOption {
136141 return func (thanosRulesConfig * ThanosRulesConfig ) {
137- if storeServiceSelector == "" {
138- storeServiceSelector = "thanos-store.*"
139- }
140142 thanosRulesConfig .StoreServiceSelector = storeServiceSelector
141143 }
142144}
143145
144146func WithCompactServiceSelector (compactServiceSelector string ) ThanosRulesConfigOption {
145147 return func (thanosRulesConfig * ThanosRulesConfig ) {
146- if compactServiceSelector == "" {
147- compactServiceSelector = "thanos-compact.*"
148- }
149148 thanosRulesConfig .CompactServiceSelector = compactServiceSelector
150149 }
151150}
152151
153152func WithQueryServiceSelector (queryServiceSelector string ) ThanosRulesConfigOption {
154153 return func (thanosRulesConfig * ThanosRulesConfig ) {
155- if queryServiceSelector == "" {
156- queryServiceSelector = "thanos-query.*"
157- }
158154 thanosRulesConfig .QueryServiceSelector = queryServiceSelector
159155 }
160156}
@@ -201,25 +197,45 @@ func WithRuleDashboardURL(ruleDashboardURL string) ThanosRulesConfigOption {
201197 }
202198}
203199
200+ // buildServiceSelector constructs a service selector regex pattern with optional prefix and suffix.
201+ // For example, with baseComponent="thanos-compact", prefix="my-", suffix="-dev",
202+ // it returns "my-thanos-compact-dev.*"
203+ func buildServiceSelector (baseComponent , prefix , suffix string ) string {
204+ return prefix + baseComponent + suffix + ".*"
205+ }
206+
204207// NewThanosRulesBuilder creates a new Thanos rules builder.
205208func NewThanosRulesBuilder (
206209 namespace string ,
207210 labels map [string ]string ,
208211 annotations map [string ]string ,
209212 options ... ThanosRulesConfigOption ,
210213) (promtheusrule.Builder , error ) {
211- thanosRulesConfig := ThanosRulesConfig {
212- ReceiveRouterServiceSelector : "thanos-receive-router.*" ,
213- ReceiveIngesterServiceSelector : "thanos-receive-ingester.*" ,
214- RulerServiceSelector : "thanos-ruler.*" ,
215- StoreServiceSelector : "thanos-store.*" ,
216- CompactServiceSelector : "thanos-compact.*" ,
217- QueryServiceSelector : "thanos-query.*" ,
218- }
214+ thanosRulesConfig := ThanosRulesConfig {}
219215 for _ , option := range options {
220216 option (& thanosRulesConfig )
221217 }
222218
219+ // Apply defaults with prefix/suffix if selectors are not explicitly set
220+ if thanosRulesConfig .ReceiveRouterServiceSelector == "" {
221+ thanosRulesConfig .ReceiveRouterServiceSelector = buildServiceSelector ("thanos-receive-router" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
222+ }
223+ if thanosRulesConfig .ReceiveIngesterServiceSelector == "" {
224+ thanosRulesConfig .ReceiveIngesterServiceSelector = buildServiceSelector ("thanos-receive-ingester" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
225+ }
226+ if thanosRulesConfig .RulerServiceSelector == "" {
227+ thanosRulesConfig .RulerServiceSelector = buildServiceSelector ("thanos-ruler" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
228+ }
229+ if thanosRulesConfig .StoreServiceSelector == "" {
230+ thanosRulesConfig .StoreServiceSelector = buildServiceSelector ("thanos-store" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
231+ }
232+ if thanosRulesConfig .CompactServiceSelector == "" {
233+ thanosRulesConfig .CompactServiceSelector = buildServiceSelector ("thanos-compact" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
234+ }
235+ if thanosRulesConfig .QueryServiceSelector == "" {
236+ thanosRulesConfig .QueryServiceSelector = buildServiceSelector ("thanos-query" , thanosRulesConfig .ServiceSelectorPrefix , thanosRulesConfig .ServiceSelectorSuffix )
237+ }
238+
223239 promRule , err := promtheusrule .New (
224240 "thanos-rules" ,
225241 namespace ,
0 commit comments