@@ -96,6 +96,7 @@ func expectedPathFor(testPath string) string {
9696type policyEntryFilter struct {
9797 name string
9898 elementsEntries []policyEntryFilter
99+ elementsReplace * policyEntryReplace
99100 memberReplace * policyEntryReplace
100101 onlyIfEmpty bool
101102}
@@ -152,6 +153,29 @@ var policyEntryFilters = []policyEntryFilter{
152153
153154 // Namespaces may not be present in older versions of the stack.
154155 {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" ,
155179}
156180
157181// 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
206230 if ! ok {
207231 return nil , fmt .Errorf ("expected map, found %T" , v )
208232 }
233+ regexp := entry .memberReplace .regexp
234+ replacement := entry .memberReplace .replace
209235 for k , e := range m {
210- if entry .memberReplace .regexp .MatchString (k ) {
236+ key := k
237+ if regexp .MatchString (k ) {
211238 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 )
213258 }
214259 }
215260 default :
0 commit comments