diff --git a/src/go/cmd/update-collection-v3/main.go b/src/go/cmd/update-collection-v3/main.go index 12877a9d..a15a93d2 100644 --- a/src/go/cmd/update-collection-v3/main.go +++ b/src/go/cmd/update-collection-v3/main.go @@ -9,6 +9,7 @@ import ( disablethanos "github.com/SumoLogic/sumologic-kubernetes-collection/tools/cmd/update-collection-v3/migrations/disable-thanos" "github.com/SumoLogic/sumologic-kubernetes-collection/tools/cmd/update-collection-v3/migrations/events" + eventsconfigmerge "github.com/SumoLogic/sumologic-kubernetes-collection/tools/cmd/update-collection-v3/migrations/events-config-merge" kubestatemetricscollectors "github.com/SumoLogic/sumologic-kubernetes-collection/tools/cmd/update-collection-v3/migrations/kube-state-metrics-collectors" tracingreplaces "github.com/SumoLogic/sumologic-kubernetes-collection/tools/cmd/update-collection-v3/migrations/tracing-replaces" ) @@ -57,6 +58,7 @@ var migrationDirectoriesAndFunctions = map[string]migrateFunc{ "events": events.Migrate, "disable-thanos": disablethanos.Migrate, "tracing-replaces": tracingreplaces.Migrate, + "events-config-merge": eventsconfigmerge.Migrate, } func migrateYaml(input string) (string, error) { diff --git a/src/go/cmd/update-collection-v3/migrations/events-config-merge/migrate.go b/src/go/cmd/update-collection-v3/migrations/events-config-merge/migrate.go new file mode 100644 index 00000000..10e51570 --- /dev/null +++ b/src/go/cmd/update-collection-v3/migrations/events-config-merge/migrate.go @@ -0,0 +1,70 @@ +package eventsconfigmerge + +import ( + "bytes" + "fmt" + + "gopkg.in/yaml.v3" +) + +type InputValues struct { + Otelevents struct { + Config struct { + Override map[string]interface{} `yaml:"override,omitempty"` + } `yaml:"config,omitempty"` + Rest map[string]interface{} `yaml:",inline"` + } `yaml:"otelevents,omitempty"` + Rest map[string]interface{} `yaml:",inline"` +} + +type OutputValues struct { + Otelevents Otelevents `yaml:"otelevents,omitempty"` + Rest map[string]interface{} `yaml:",inline"` +} + +type Otelevents struct { + Config Config `yaml:"config,omitempty"` + Rest map[string]interface{} `yaml:",inline"` +} + +type Config struct { + Merge map[string]interface{} `yaml:"merge,omitempty"` + Override map[string]interface{} `yaml:"override,omitempty"` +} + +func Migrate(inputYaml string) (outputYaml string, err error) { + inputValues, err := parseValues(inputYaml) + if err != nil { + return "", fmt.Errorf("error parsing input yaml: %v", err) + } + + outputValues, err := migrate(&inputValues) + if err != nil { + return "", fmt.Errorf("error migrating: %v", err) + } + + buffer := bytes.Buffer{} + encoder := yaml.NewEncoder(&buffer) + encoder.SetIndent(2) + err = encoder.Encode(outputValues) + return buffer.String(), err +} + +func parseValues(inputYaml string) (InputValues, error) { + var inputValues InputValues + err := yaml.Unmarshal([]byte(inputYaml), &inputValues) + return inputValues, err +} + +func migrate(inputValues *InputValues) (OutputValues, error) { + outputValues := OutputValues{ + Rest: inputValues.Rest, + Otelevents: Otelevents{ + Config: Config{ + Merge: inputValues.Otelevents.Config.Override, + }, + Rest: inputValues.Otelevents.Rest, + }, + } + return outputValues, nil +} diff --git a/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.input.yaml b/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.input.yaml new file mode 100644 index 00000000..202e7816 --- /dev/null +++ b/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.input.yaml @@ -0,0 +1,4 @@ +otelevents: + config: + override: + key: value diff --git a/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.output.yaml b/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.output.yaml new file mode 100644 index 00000000..1ba455eb --- /dev/null +++ b/src/go/cmd/update-collection-v3/migrations/events-config-merge/testdata/basic.output.yaml @@ -0,0 +1,4 @@ +otelevents: + config: + merge: + key: value diff --git a/src/go/cmd/update-collection-v3/testdata/simple.input.yaml b/src/go/cmd/update-collection-v3/testdata/simple.input.yaml index b0c6b451..89d1cfac 100644 --- a/src/go/cmd/update-collection-v3/testdata/simple.input.yaml +++ b/src/go/cmd/update-collection-v3/testdata/simple.input.yaml @@ -8,6 +8,10 @@ kube-prometheus-stack: resources: limits: cpu: 20m +otelevents: + config: + override: + key: value sumologic: accessId: xxx accessKey: yyy diff --git a/src/go/cmd/update-collection-v3/testdata/simple.output.yaml b/src/go/cmd/update-collection-v3/testdata/simple.output.yaml index bf748418..04ebb2e6 100644 --- a/src/go/cmd/update-collection-v3/testdata/simple.output.yaml +++ b/src/go/cmd/update-collection-v3/testdata/simple.output.yaml @@ -1,3 +1,7 @@ +otelevents: + config: + merge: + key: value sumologic: accessId: xxx accessKey: yyy