@@ -96,6 +96,7 @@ func expectedPathFor(testPath string) string {
96
96
type policyEntryFilter struct {
97
97
name string
98
98
elementsEntries []policyEntryFilter
99
+ elementsReplace * policyEntryReplace
99
100
memberReplace * policyEntryReplace
100
101
onlyIfEmpty bool
101
102
}
@@ -152,6 +153,29 @@ var policyEntryFilters = []policyEntryFilter{
152
153
153
154
// Namespaces may not be present in older versions of the stack.
154
155
{name : "namespaces" , onlyIfEmpty : true },
156
+
157
+ // OTel Collector IDs are relevant, but just check that they are there.
158
+ {name : "extensions" , memberReplace : & otelComponentIDReplace },
159
+ {name : "receivers" , memberReplace : & otelComponentIDReplace },
160
+ {name : "processors" , memberReplace : & otelComponentIDReplace },
161
+ {name : "exporters" , memberReplace : & otelComponentIDReplace },
162
+ {name : "service.extensions" , elementsReplace : & otelComponentIDReplace },
163
+
164
+ // TODO: The signals here will need patterns at some moment, as they can also contain ids.
165
+ {name : "service.pipelines.logs.receivers" , elementsReplace : & otelComponentIDReplace },
166
+ {name : "service.pipelines.logs.processors" , elementsReplace : & otelComponentIDReplace },
167
+ {name : "service.pipelines.logs.exporters" , elementsReplace : & otelComponentIDReplace },
168
+ {name : "service.pipelines.metrics.receivers" , elementsReplace : & otelComponentIDReplace },
169
+ {name : "service.pipelines.metrics.processors" , elementsReplace : & otelComponentIDReplace },
170
+ {name : "service.pipelines.metrics.exporters" , elementsReplace : & otelComponentIDReplace },
171
+ {name : "service.pipelines.traces.receivers" , elementsReplace : & otelComponentIDReplace },
172
+ {name : "service.pipelines.traces.processors" , elementsReplace : & otelComponentIDReplace },
173
+ {name : "service.pipelines.traces.exporters" , elementsReplace : & otelComponentIDReplace },
174
+ }
175
+
176
+ var otelComponentIDReplace = policyEntryReplace {
177
+ regexp : regexp .MustCompile (`^([^/]+)/.*$` ),
178
+ replace : "$1/componentid" ,
155
179
}
156
180
157
181
// cleanPolicy prepares a policy YAML as returned by the download API to be compared with other
@@ -206,10 +230,31 @@ func cleanPolicyMap(policyMap common.MapStr, entries []policyEntryFilter) (commo
206
230
if ! ok {
207
231
return nil , fmt .Errorf ("expected map, found %T" , v )
208
232
}
233
+ regexp := entry .memberReplace .regexp
234
+ replacement := entry .memberReplace .replace
209
235
for k , e := range m {
210
- if entry .memberReplace .regexp .MatchString (k ) {
236
+ key := k
237
+ if regexp .MatchString (k ) {
211
238
delete (m , k )
212
- m [entry .memberReplace .replace ] = e
239
+ key = regexp .ReplaceAllString (k , replacement )
240
+ m [key ] = e
241
+ }
242
+ strElement , ok := e .(string )
243
+ if ok && regexp .MatchString (strElement ) {
244
+ m [key ] = regexp .ReplaceAllString (strElement , replacement )
245
+ }
246
+ }
247
+ case entry .elementsReplace != nil :
248
+ list , ok := v .([]any )
249
+ if ! ok {
250
+ return nil , fmt .Errorf ("expected list, found %T" , v )
251
+ }
252
+ regexp := entry .elementsReplace .regexp
253
+ replacement := entry .elementsReplace .replace
254
+ for i , e := range list {
255
+ strElement , ok := e .(string )
256
+ if ok && regexp .MatchString (strElement ) {
257
+ list [i ] = regexp .ReplaceAllString (strElement , replacement )
213
258
}
214
259
}
215
260
default :
0 commit comments