Files
telemetry/confmap/testdata/merge-append-scenarios.yaml
Vihas MakwanaandGitHub a5a45e8307 [confmap] - add a more targeted version of append-merging strategy (#12926)
Follow-up of
https://github.com/open-telemetry/opentelemetry-collector/pull/12097/

<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
### Description

Ideally, users want to merge lists in pipelines only. In this PR, I'm
adding support for merging following components:
1. extensions
2. receivers
3. exporters

We make use of glob-like pattern to match the path because there can be
multiple pipelines configured. Inspired by @evan-bradley's
[idea](https://github.com/open-telemetry/opentelemetry-collector/pull/12097/#discussion_r1918620008).

I'm leaving `processors` out of this list because we make an ordering
guarantee.

#### _**Future plan:**_ 
Once this PR gets merged, it would make it easier for us to decide upon
the command line flags to make this option configurable over the RFC.
Right now, `patterns` is hardcoded to include above mentioned
components, but we can easily make it configurable after making some
tweaks.

<!-- Issue number if applicable -->
### Link to tracking issue
Relates
https://github.com/open-telemetry/opentelemetry-collector/issues/8754

<!--Describe what testing was performed and which tests were added.-->
### Testing

Expanded the existing test cases

<!--Describe the documentation added.-->
#### Documentation
2025-05-05 09:34:53 +00:00

660 lines
12 KiB
YAML

- name: merge-mode-default
configs:
-
receivers:
nop:
nop/myreceiver:
processors:
nop:
nop/myprocessor:
exporters:
nop:
nop/myexporter:
extensions:
nop:
nop/myextension:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [nop]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
extensions:
nop2:
service:
extensions: [nop2]
pipelines:
traces:
receivers: [nop2]
processors: [nop2]
exporters: [nop2]
expected:
receivers:
nop2:
nop:
nop/myreceiver:
exporters:
nop2:
nop:
nop/myexporter:
processors:
nop:
nop/myprocessor:
extensions:
nop2:
nop:
nop/myextension:
service:
extensions: [nop, nop2]
pipelines:
traces:
receivers: [nop, nop2]
processors: [nop2]
exporters: [nop, nop2]
- name: merge-mode-append
configs:
-
receivers:
nop:
key: val
processors:
nop:
exporters:
nop:
key: 2
extensions:
nop:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [nop]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
nop:
key: updated_value
extensions:
nop2:
service:
extensions: [nop2]
pipelines:
traces:
receivers: [nop2]
processors: [nop2]
exporters: [nop2]
expected:
receivers:
nop2:
nop:
key: val
exporters:
nop2:
nop:
key: updated_value
processors:
nop:
extensions:
nop2:
nop:
service:
extensions: [nop, nop2]
pipelines:
traces:
receivers: [nop, nop2]
processors: [nop2]
exporters: [nop, nop2]
- name: merge-mode-append-override-old-values
configs:
-
receivers:
nop:
key1: "value"
key2: 1
processors:
nop:
exporters:
nop:
extensions:
nop:
ext:
key: 1
service:
extensions: [nop, ext]
pipelines:
traces:
receivers: [nop]
processors: [nop]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
extensions:
ext:
key: 2
service:
extensions: [ext]
pipelines:
traces:
receivers: [nop2]
exporters: [nop2]
expected:
receivers:
nop:
key1: "value"
key2: 1
nop2:
exporters:
nop2:
nop:
processors:
nop:
extensions:
nop:
ext:
key: 2
service:
extensions: [nop, ext]
pipelines:
traces:
receivers: [nop, nop2]
processors: [nop]
exporters: [nop, nop2]
- name: merge-mode-append-name-aware
configs:
-
receivers:
nop:
exporters:
nop:
extensions:
nop:
ext:
ext2:
service:
extensions: [nop, ext, ext2]
pipelines:
traces:
receivers: [nop]
exporters: [nop]
-
receivers:
nop:
exporters:
nop:
extensions:
nop:
key: 1
ext3:
service:
extensions: [nop, ext3]
pipelines:
traces:
receivers: [nop]
exporters: [nop]
expected:
receivers:
nop:
exporters:
nop:
extensions:
nop:
key: 1
ext:
ext2:
ext3:
service:
extensions: [nop, ext, ext2, ext3]
pipelines:
traces:
receivers: [nop]
exporters: [nop]
- name: merge-mode-append-multiple
configs:
-
receivers:
nop:
exporters:
nop:
extensions:
nop:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
extensions:
nop2:
service:
extensions: [nop2]
pipelines:
traces:
receivers: [nop2]
exporters: [nop2]
-
receivers:
nop3:
exporters:
nop3:
extensions:
nop3:
service:
extensions: [nop3]
pipelines:
traces:
receivers: [nop3]
exporters: [nop3]
expected:
receivers:
nop:
nop2:
nop3:
exporters:
nop:
nop2:
nop3:
extensions:
nop:
nop2:
nop3:
service:
extensions: [nop, nop2, nop3]
pipelines:
traces:
receivers: [nop, nop2, nop3]
exporters: [nop, nop2, nop3]
- name: merge-mode-append-processor-service
configs:
-
receivers:
nop:
exporters:
nop:
extensions:
nop:
processors:
processor:
path: [path]
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [processor]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
extensions:
nop2:
processors:
processor:
path: [path2]
service:
extensions: [nop2]
pipelines:
traces:
receivers: [nop2]
processors: [processor]
exporters: [nop2]
expected:
receivers:
nop:
nop2:
exporters:
nop:
nop2:
extensions:
nop:
nop2:
processors:
processor:
path: [path2]
service:
extensions: [nop, nop2]
pipelines:
traces:
receivers: [nop, nop2]
processors: [processor]
exporters: [nop, nop2]
- name: merge-mode-append-entire-config
configs:
-
receivers:
nop:
exporters:
nop:
extensions:
nop:
processors:
processor:
path: [path]
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [processor]
exporters: [nop]
-
receivers:
nop2:
exporters:
nop2:
extensions:
nop2:
processors:
processor:
path: [path2]
service:
extensions: [nop2]
pipelines:
traces:
receivers: [nop2]
processors: [processor]
exporters: [nop2]
-
receivers:
nop3:
exporters:
nop3:
extensions:
nop3:
processors:
processor:
path: [path3]
processor2:
service:
extensions: [nop3]
pipelines:
traces:
receivers: [nop3]
processors: [processor, processor2]
exporters: [nop3]
expected:
receivers:
nop:
nop2:
nop3:
exporters:
nop:
nop2:
nop3:
extensions:
nop:
nop2:
nop3:
processors:
processor:
path: [path3]
processor2:
service:
extensions: [nop, nop2, nop3]
pipelines:
traces:
receivers: [nop, nop2, nop3]
processors: [processor, processor2]
exporters: [nop, nop2, nop3]
- name: merge-mode-append-different-kinds
configs:
-
receivers:
nop:
key: val
processors:
nop:
exporters:
nop:
key: 2
extensions:
nop:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [nop]
exporters: [nop]
-
receivers:
nop:
key: 1.2
expected:
receivers:
nop:
key: 1.2
processors:
nop:
exporters:
nop:
key: 2
extensions:
nop:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [nop]
exporters: [nop]
- name: merge-mode-multiple-pipelines
configs:
-
receivers:
nop:
key: val
processors:
nop:
key: val
exporters:
nop:
key: 2
extensions:
nop:
service:
extensions: [nop]
pipelines:
traces:
receivers: [nop]
processors: [attributes/example]
exporters: [nop]
logs:
receivers: [nop]
processors: [attributes/example]
exporters: [nop]
-
receivers:
nop1:
key: val
processors:
nop1:
key: val
exporters:
nop1:
key: 2
extensions:
nop1:
service:
extensions: [nop1]
pipelines:
traces:
receivers: [nop1]
processors: [nop1]
exporters: [nop1]
logs:
receivers: [nop1]
processors: [nop1]
exporters: [nop1]
expected:
receivers:
nop:
key: val
nop1:
key: val
processors:
nop:
key: val
nop1:
key: val
exporters:
nop:
key: 2
nop1:
key: 2
extensions:
nop:
nop1:
service:
extensions: [nop, nop1]
pipelines:
traces:
receivers: [nop, nop1]
processors: [nop1]
exporters: [nop, nop1]
logs:
receivers: [nop, nop1]
processors: [nop1]
exporters: [nop, nop1]
- name: merge-mode-map
configs:
-
processors:
resource:
attributes:
- key: deployment.region
value: "nl"
action: upsert
-
processors:
resource:
attributes:
- key: app
value: "foo"
action: upsert
expected:
processors:
resource:
attributes:
# TODO: once merge append mode is configurable, comment this out.
# - key: deployment.region
# value: "nl"
# action: upsert
- key: app
value: "foo"
action: upsert