From 462599f2e6d6826ceb877062a03cdcf7d418e8e9 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 13 Feb 2025 12:54:08 -0500 Subject: [PATCH 1/7] add providers converters to moduleinfo and converters to component command --- ...viders-converters-moduleinfos-command.yaml | 25 ++++++++++++++++ .../internal/builder/templates/main.go.tmpl | 11 +++++-- cmd/otelcorecol/main.go | 14 ++++----- confmap/converter.go | 2 ++ confmap/resolver_test.go | 9 ++++-- otelcol/collector.go | 7 ++++- otelcol/collector_test.go | 29 +++++++++++++++++++ otelcol/command_components.go | 10 ++++++- otelcol/command_components_test.go | 7 +++-- otelcol/testdata/components-output.yaml | 3 ++ service/internal/moduleinfo/moduleinfo.go | 2 ++ 11 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 .chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml diff --git a/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml b/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml new file mode 100644 index 00000000000..31883267daa --- /dev/null +++ b/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: otelcol, service + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Converters are now available in the component command. Additionally, Converters and Providers are listed in ModuleInfos in service host implementation + +# One or more tracking issues or pull requests related to the change +issues: [11900, 12375] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [api] diff --git a/cmd/builder/internal/builder/templates/main.go.tmpl b/cmd/builder/internal/builder/templates/main.go.tmpl index ff619f7d0fc..b87de3a7566 100644 --- a/cmd/builder/internal/builder/templates/main.go.tmpl +++ b/cmd/builder/internal/builder/templates/main.go.tmpl @@ -45,11 +45,16 @@ func main() { DefaultScheme: "{{ .ConfResolver.DefaultURIScheme }}", {{- end }} }, - }, ProviderModules: map[string]string{ + }, ProviderModules: map[component.Type]string{ {{- range .ConfmapProviders}} - {{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "{{.GoMod}}", + component.MustNewType({{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "{{.GoMod}}", {{- end}} - }, + }, ConverterModules: map[component.Type]string{ + {{- range .ConfmapConverters}} + component.MustNewType({{.Name}}.NewFactory().Create(confmap.ConverterSettings{}).Type()): "{{.GoMod}}", + {{- end}} + }, + } if err := run(set); err != nil { diff --git a/cmd/otelcorecol/main.go b/cmd/otelcorecol/main.go index d896f670c8b..25589fb9d9b 100644 --- a/cmd/otelcorecol/main.go +++ b/cmd/otelcorecol/main.go @@ -36,13 +36,13 @@ func main() { yamlprovider.NewFactory(), }, }, - }, ProviderModules: map[string]string{ - envprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/envprovider v1.26.0", - fileprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/fileprovider v1.26.0", - httpprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpprovider v1.26.0", - httpsprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.26.0", - yamlprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.26.0", - }, + }, ProviderModules: map[component.Type]string{ + component.MustNewType(envprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/envprovider v1.26.0", + component.MustNewType(fileprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/fileprovider v1.26.0", + component.MustNewType(httpprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/httpprovider v1.26.0", + component.MustNewType(httpsprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.26.0", + component.MustNewType(yamlprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.26.0", + }, ConverterModules: map[component.Type]string{}, } if err := run(set); err != nil { diff --git a/confmap/converter.go b/confmap/converter.go index 0e3a5c03f2e..cc079f0ee00 100644 --- a/confmap/converter.go +++ b/confmap/converter.go @@ -35,4 +35,6 @@ func NewConverterFactory(f CreateConverterFunc) ConverterFactory { type Converter interface { // Convert applies the conversion logic to the given "conf". Convert(ctx context.Context, conf *Conf) error + // Type returns the type of the converter. + Type() string } diff --git a/confmap/resolver_test.go b/confmap/resolver_test.go index ec1af21f145..c4b82c7307e 100644 --- a/confmap/resolver_test.go +++ b/confmap/resolver_test.go @@ -106,13 +106,18 @@ func (f *fakeProvider) Shutdown(context.Context) error { } type mockConverter struct { - err error + err error + mockConverterType string } func (m *mockConverter) Convert(context.Context, *Conf) error { return errors.New("converter_err") } +func (m *mockConverter) Type() string { + return m.mockConverterType +} + func TestNewResolverInvalidSchemeInURI(t *testing.T) { _, err := NewResolver(ResolverSettings{URIs: []string{"s_3:has invalid char"}, ProviderFactories: []ProviderFactory{newMockProvider(&mockProvider{scheme: "s3"})}}) assert.EqualError(t, err, `invalid uri: "s_3:has invalid char"`) @@ -174,7 +179,7 @@ func TestResolverErrors(t *testing.T) { name: "converter error", locations: []string{"mock:"}, providers: []Provider{&mockProvider{}}, - converters: []Converter{&mockConverter{err: errors.New("converter_err")}}, + converters: []Converter{&mockConverter{err: errors.New("converter_err"), mockConverterType: "mock"}}, expectResolveErr: true, }, { diff --git a/otelcol/collector.go b/otelcol/collector.go index 0c3ecd9e704..cc8f47ae674 100644 --- a/otelcol/collector.go +++ b/otelcol/collector.go @@ -70,7 +70,10 @@ type CollectorSettings struct { ConfigProviderSettings ConfigProviderSettings // ProviderModules maps provider schemes to their respective go modules. - ProviderModules map[string]string + ProviderModules map[component.Type]string + + // ConverterModules maps converter names to their respective go modules. + ConverterModules map[component.Type]string // LoggingOptions provides a way to change behavior of zap logging. LoggingOptions []zap.Option @@ -212,6 +215,8 @@ func (col *Collector) setupConfigurationComponents(ctx context.Context) error { Exporter: buildModuleInfo(factories.ExporterModules), Extension: buildModuleInfo(factories.ExtensionModules), Connector: buildModuleInfo(factories.ConnectorModules), + Provider: buildModuleInfo(col.set.ProviderModules), + Converter: buildModuleInfo(col.set.ConverterModules), }, AsyncErrorChannel: col.asyncErrorChannel, LoggingOptions: col.set.LoggingOptions, diff --git a/otelcol/collector_test.go b/otelcol/collector_test.go index 86855a3c86d..7967a948172 100644 --- a/otelcol/collector_test.go +++ b/otelcol/collector_test.go @@ -594,3 +594,32 @@ func newConfFromFile(tb testing.TB, fileName string) map[string]any { return confmap.NewFromStringMap(data).ToStringMap() } + +func TestProviderAndConverterModules(t *testing.T) { + set := CollectorSettings{ + BuildInfo: component.NewDefaultBuildInfo(), + Factories: nopFactories, + ConfigProviderSettings: newDefaultConfigProviderSettings(t, []string{filepath.Join("testdata", "otelcol-nop.yaml")}), + ProviderModules: map[component.Type]string{ + component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + }, + ConverterModules: map[component.Type]string{ + component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + }, + } + col, err := NewCollector(set) + require.NoError(t, err) + wg := startCollector(context.Background(), t, col) + require.NoError(t, err) + providerModules := map[component.Type]string{ + component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + } + converterModules := map[component.Type]string{ + component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + } + assert.Equal(t, providerModules, col.set.ProviderModules) + assert.Equal(t, converterModules, col.set.ConverterModules) + col.Shutdown() + wg.Wait() + +} diff --git a/otelcol/command_components.go b/otelcol/command_components.go index 2173aee7721..fce05416afa 100644 --- a/otelcol/command_components.go +++ b/otelcol/command_components.go @@ -37,6 +37,7 @@ type componentsOutput struct { Connectors []componentWithStability Extensions []componentWithStability Providers []componentWithoutStability + Converters []componentWithoutStability } // newComponentsCommand constructs a new components command using the given CollectorSettings. @@ -118,11 +119,18 @@ func newComponentsCommand(set CollectorSettings) *cobra.Command { for providerScheme, providerModuleModule := range set.ProviderModules { components.Providers = append(components.Providers, componentWithoutStability{ - Scheme: providerScheme, + Scheme: providerScheme.String(), Module: providerModuleModule, }) } + for converterType, converterModule := range set.ConverterModules { + components.Converters = append(components.Converters, componentWithoutStability{ + Scheme: converterType.String(), + Module: converterModule, + }) + } + yamlData, err := yaml.Marshal(components) if err != nil { return err diff --git a/otelcol/command_components_test.go b/otelcol/command_components_test.go index 5b429dd3f06..97cff31979a 100644 --- a/otelcol/command_components_test.go +++ b/otelcol/command_components_test.go @@ -21,8 +21,11 @@ func TestNewBuildSubCommand(t *testing.T) { BuildInfo: component.NewDefaultBuildInfo(), Factories: nopFactories, ConfigProviderSettings: newDefaultConfigProviderSettings(t, []string{filepath.Join("testdata", "otelcol-nop.yaml")}), - ProviderModules: map[string]string{ - "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + ProviderModules: map[component.Type]string{ + component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + }, + ConverterModules: map[component.Type]string{ + component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", }, } cmd := NewCommand(set) diff --git a/otelcol/testdata/components-output.yaml b/otelcol/testdata/components-output.yaml index 6459e69cde8..b5cb1b0e718 100644 --- a/otelcol/testdata/components-output.yaml +++ b/otelcol/testdata/components-output.yaml @@ -44,3 +44,6 @@ extensions: providers: - scheme: nop module: go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3 +converters: + - scheme: nopconverter + module: go.opentelemetry.io/collector/converter/testconverter v1.2.3 diff --git a/service/internal/moduleinfo/moduleinfo.go b/service/internal/moduleinfo/moduleinfo.go index 8e67b89b6ae..00582c38656 100644 --- a/service/internal/moduleinfo/moduleinfo.go +++ b/service/internal/moduleinfo/moduleinfo.go @@ -17,4 +17,6 @@ type ModuleInfos struct { Exporter map[component.Type]ModuleInfo Extension map[component.Type]ModuleInfo Connector map[component.Type]ModuleInfo + Provider map[component.Type]ModuleInfo + Converter map[component.Type]ModuleInfo } From 0869b97579477dc5319cfdd9669d817bca6c2f97 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 13 Feb 2025 14:17:45 -0500 Subject: [PATCH 2/7] make golint --- otelcol/collector_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/otelcol/collector_test.go b/otelcol/collector_test.go index 7967a948172..af5dcc131c8 100644 --- a/otelcol/collector_test.go +++ b/otelcol/collector_test.go @@ -621,5 +621,4 @@ func TestProviderAndConverterModules(t *testing.T) { assert.Equal(t, converterModules, col.set.ConverterModules) col.Shutdown() wg.Wait() - } From 5a57b1298f64792e672ce0028031df4e73a74336 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 13 Feb 2025 14:21:47 -0500 Subject: [PATCH 3/7] update chloggen --- ...kgopack4-add-providers-converters-moduleinfos-command.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml b/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml index 31883267daa..9c6a7d0f19a 100644 --- a/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml +++ b/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml @@ -10,7 +10,7 @@ component: otelcol, service note: Converters are now available in the component command. Additionally, Converters and Providers are listed in ModuleInfos in service host implementation # One or more tracking issues or pull requests related to the change -issues: [11900, 12375] +issues: [11900, 12372, 12375, 12385] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. @@ -22,4 +22,4 @@ subtext: # Include 'user' if the change is relevant to end users. # Include 'api' if there is a change to a library API. # Default: '[user]' -change_logs: [api] +change_logs: [user, api] From 9aa4bb8a7948087397cb3cd1e8f3e8c85edc068c Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Tue, 18 Feb 2025 13:57:37 -0500 Subject: [PATCH 4/7] remove providers and converters from moduleinfo struct --- ... => jackgopack4-add-converters-component-command.yaml} | 8 ++++---- otelcol/collector.go | 2 -- service/internal/moduleinfo/moduleinfo.go | 2 -- 3 files changed, 4 insertions(+), 8 deletions(-) rename .chloggen/{jackgopack4-add-providers-converters-moduleinfos-command.yaml => jackgopack4-add-converters-component-command.yaml} (80%) diff --git a/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml b/.chloggen/jackgopack4-add-converters-component-command.yaml similarity index 80% rename from .chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml rename to .chloggen/jackgopack4-add-converters-component-command.yaml index 9c6a7d0f19a..357cc46999c 100644 --- a/.chloggen/jackgopack4-add-providers-converters-moduleinfos-command.yaml +++ b/.chloggen/jackgopack4-add-converters-component-command.yaml @@ -4,18 +4,18 @@ change_type: enhancement # The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) -component: otelcol, service +component: otelcol # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Converters are now available in the component command. Additionally, Converters and Providers are listed in ModuleInfos in service host implementation +note: Converters are now available in the `components` command. # One or more tracking issues or pull requests related to the change -issues: [11900, 12372, 12375, 12385] +issues: [11900, 12385] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: +subtext: Converters must now implement the "Type()" function to return type # Optional: The change log or logs in which this entry should be included. # e.g. '[user]' or '[user, api]' diff --git a/otelcol/collector.go b/otelcol/collector.go index cc8f47ae674..a216a9636f3 100644 --- a/otelcol/collector.go +++ b/otelcol/collector.go @@ -215,8 +215,6 @@ func (col *Collector) setupConfigurationComponents(ctx context.Context) error { Exporter: buildModuleInfo(factories.ExporterModules), Extension: buildModuleInfo(factories.ExtensionModules), Connector: buildModuleInfo(factories.ConnectorModules), - Provider: buildModuleInfo(col.set.ProviderModules), - Converter: buildModuleInfo(col.set.ConverterModules), }, AsyncErrorChannel: col.asyncErrorChannel, LoggingOptions: col.set.LoggingOptions, diff --git a/service/internal/moduleinfo/moduleinfo.go b/service/internal/moduleinfo/moduleinfo.go index 00582c38656..8e67b89b6ae 100644 --- a/service/internal/moduleinfo/moduleinfo.go +++ b/service/internal/moduleinfo/moduleinfo.go @@ -17,6 +17,4 @@ type ModuleInfos struct { Exporter map[component.Type]ModuleInfo Extension map[component.Type]ModuleInfo Connector map[component.Type]ModuleInfo - Provider map[component.Type]ModuleInfo - Converter map[component.Type]ModuleInfo } From 792623aeb1af11582b096c7911abbfa8f9258f09 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 20 Feb 2025 13:10:01 -0500 Subject: [PATCH 5/7] remove component.Type cast for Providers and converters list. Update command with explicit yaml mapping instructions --- ...ack4-add-converters-component-command.yaml | 2 +- .../internal/builder/templates/main.go.tmpl | 8 ++--- cmd/otelcorecol/main.go | 14 ++++---- confmap/converter.go | 2 -- confmap/resolver_test.go | 9 ++--- otelcol/collector.go | 4 +-- otelcol/collector_test.go | 16 ++++----- otelcol/command_components.go | 33 ++++++++++--------- otelcol/command_components_test.go | 8 ++--- otelcol/testdata/components-output.yaml | 4 +-- 10 files changed, 47 insertions(+), 53 deletions(-) diff --git a/.chloggen/jackgopack4-add-converters-component-command.yaml b/.chloggen/jackgopack4-add-converters-component-command.yaml index 357cc46999c..597f65ae56a 100644 --- a/.chloggen/jackgopack4-add-converters-component-command.yaml +++ b/.chloggen/jackgopack4-add-converters-component-command.yaml @@ -15,7 +15,7 @@ issues: [11900, 12385] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: Converters must now implement the "Type()" function to return type +subtext: buildinfo in components command is now reported as "build_info" for ease of reading. # Optional: The change log or logs in which this entry should be included. # e.g. '[user]' or '[user, api]' diff --git a/cmd/builder/internal/builder/templates/main.go.tmpl b/cmd/builder/internal/builder/templates/main.go.tmpl index b87de3a7566..167df6fafad 100644 --- a/cmd/builder/internal/builder/templates/main.go.tmpl +++ b/cmd/builder/internal/builder/templates/main.go.tmpl @@ -45,13 +45,13 @@ func main() { DefaultScheme: "{{ .ConfResolver.DefaultURIScheme }}", {{- end }} }, - }, ProviderModules: map[component.Type]string{ + }, ProviderModules: map[string]string{ {{- range .ConfmapProviders}} - component.MustNewType({{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "{{.GoMod}}", + {{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "{{.GoMod}}", {{- end}} - }, ConverterModules: map[component.Type]string{ + }, ConverterModules: map[string]string{ {{- range .ConfmapConverters}} - component.MustNewType({{.Name}}.NewFactory().Create(confmap.ConverterSettings{}).Type()): "{{.GoMod}}", + {{.Name}}: "{{.GoMod}}", {{- end}} }, diff --git a/cmd/otelcorecol/main.go b/cmd/otelcorecol/main.go index 25589fb9d9b..7915f8cd353 100644 --- a/cmd/otelcorecol/main.go +++ b/cmd/otelcorecol/main.go @@ -36,13 +36,13 @@ func main() { yamlprovider.NewFactory(), }, }, - }, ProviderModules: map[component.Type]string{ - component.MustNewType(envprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/envprovider v1.26.0", - component.MustNewType(fileprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/fileprovider v1.26.0", - component.MustNewType(httpprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/httpprovider v1.26.0", - component.MustNewType(httpsprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.26.0", - component.MustNewType(yamlprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme()): "go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.26.0", - }, ConverterModules: map[component.Type]string{}, + }, ProviderModules: map[string]string{ + envprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/envprovider v1.26.0", + fileprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/fileprovider v1.26.0", + httpprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpprovider v1.26.0", + httpsprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.26.0", + yamlprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.26.0", + }, ConverterModules: map[string]string{}, } if err := run(set); err != nil { diff --git a/confmap/converter.go b/confmap/converter.go index cc079f0ee00..0e3a5c03f2e 100644 --- a/confmap/converter.go +++ b/confmap/converter.go @@ -35,6 +35,4 @@ func NewConverterFactory(f CreateConverterFunc) ConverterFactory { type Converter interface { // Convert applies the conversion logic to the given "conf". Convert(ctx context.Context, conf *Conf) error - // Type returns the type of the converter. - Type() string } diff --git a/confmap/resolver_test.go b/confmap/resolver_test.go index c4b82c7307e..ec1af21f145 100644 --- a/confmap/resolver_test.go +++ b/confmap/resolver_test.go @@ -106,18 +106,13 @@ func (f *fakeProvider) Shutdown(context.Context) error { } type mockConverter struct { - err error - mockConverterType string + err error } func (m *mockConverter) Convert(context.Context, *Conf) error { return errors.New("converter_err") } -func (m *mockConverter) Type() string { - return m.mockConverterType -} - func TestNewResolverInvalidSchemeInURI(t *testing.T) { _, err := NewResolver(ResolverSettings{URIs: []string{"s_3:has invalid char"}, ProviderFactories: []ProviderFactory{newMockProvider(&mockProvider{scheme: "s3"})}}) assert.EqualError(t, err, `invalid uri: "s_3:has invalid char"`) @@ -179,7 +174,7 @@ func TestResolverErrors(t *testing.T) { name: "converter error", locations: []string{"mock:"}, providers: []Provider{&mockProvider{}}, - converters: []Converter{&mockConverter{err: errors.New("converter_err"), mockConverterType: "mock"}}, + converters: []Converter{&mockConverter{err: errors.New("converter_err")}}, expectResolveErr: true, }, { diff --git a/otelcol/collector.go b/otelcol/collector.go index a216a9636f3..d67b17cfa71 100644 --- a/otelcol/collector.go +++ b/otelcol/collector.go @@ -70,10 +70,10 @@ type CollectorSettings struct { ConfigProviderSettings ConfigProviderSettings // ProviderModules maps provider schemes to their respective go modules. - ProviderModules map[component.Type]string + ProviderModules map[string]string // ConverterModules maps converter names to their respective go modules. - ConverterModules map[component.Type]string + ConverterModules map[string]string // LoggingOptions provides a way to change behavior of zap logging. LoggingOptions []zap.Option diff --git a/otelcol/collector_test.go b/otelcol/collector_test.go index af5dcc131c8..da15d37f2f8 100644 --- a/otelcol/collector_test.go +++ b/otelcol/collector_test.go @@ -600,22 +600,22 @@ func TestProviderAndConverterModules(t *testing.T) { BuildInfo: component.NewDefaultBuildInfo(), Factories: nopFactories, ConfigProviderSettings: newDefaultConfigProviderSettings(t, []string{filepath.Join("testdata", "otelcol-nop.yaml")}), - ProviderModules: map[component.Type]string{ - component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + ProviderModules: map[string]string{ + "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", }, - ConverterModules: map[component.Type]string{ - component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + ConverterModules: map[string]string{ + "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", }, } col, err := NewCollector(set) require.NoError(t, err) wg := startCollector(context.Background(), t, col) require.NoError(t, err) - providerModules := map[component.Type]string{ - component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + providerModules := map[string]string{ + "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", } - converterModules := map[component.Type]string{ - component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + converterModules := map[string]string{ + "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", } assert.Equal(t, providerModules, col.set.ProviderModules) assert.Equal(t, converterModules, col.set.ConverterModules) diff --git a/otelcol/command_components.go b/otelcol/command_components.go index fce05416afa..9a8ef5b4b81 100644 --- a/otelcol/command_components.go +++ b/otelcol/command_components.go @@ -19,25 +19,26 @@ import ( ) type componentWithStability struct { - Name component.Type - Module string - Stability map[string]string + Name component.Type `yaml:"name"` + Module string `yaml:"module"` + Stability map[string]string `yaml:"stability"` } type componentWithoutStability struct { - Scheme string - Module string + Name string `yaml:"name,omitempty"` + Scheme string `yaml:"scheme,omitempty"` + Module string `yaml:"module"` } type componentsOutput struct { - BuildInfo component.BuildInfo - Receivers []componentWithStability - Processors []componentWithStability - Exporters []componentWithStability - Connectors []componentWithStability - Extensions []componentWithStability - Providers []componentWithoutStability - Converters []componentWithoutStability + BuildInfo component.BuildInfo `yaml:"build_info"` + Receivers []componentWithStability `yaml:"receivers"` + Processors []componentWithStability `yaml:"processors"` + Exporters []componentWithStability `yaml:"exporters"` + Connectors []componentWithStability `yaml:"connectors"` + Extensions []componentWithStability `yaml:"extensions"` + Providers []componentWithoutStability `yaml:"providers"` + Converters []componentWithoutStability `yaml:"converters,omitempty"` } // newComponentsCommand constructs a new components command using the given CollectorSettings. @@ -119,14 +120,14 @@ func newComponentsCommand(set CollectorSettings) *cobra.Command { for providerScheme, providerModuleModule := range set.ProviderModules { components.Providers = append(components.Providers, componentWithoutStability{ - Scheme: providerScheme.String(), + Scheme: providerScheme, Module: providerModuleModule, }) } - for converterType, converterModule := range set.ConverterModules { + for converterName, converterModule := range set.ConverterModules { components.Converters = append(components.Converters, componentWithoutStability{ - Scheme: converterType.String(), + Name: converterName, Module: converterModule, }) } diff --git a/otelcol/command_components_test.go b/otelcol/command_components_test.go index 97cff31979a..daae77dd671 100644 --- a/otelcol/command_components_test.go +++ b/otelcol/command_components_test.go @@ -21,11 +21,11 @@ func TestNewBuildSubCommand(t *testing.T) { BuildInfo: component.NewDefaultBuildInfo(), Factories: nopFactories, ConfigProviderSettings: newDefaultConfigProviderSettings(t, []string{filepath.Join("testdata", "otelcol-nop.yaml")}), - ProviderModules: map[component.Type]string{ - component.MustNewType("nop"): "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", + ProviderModules: map[string]string{ + "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", }, - ConverterModules: map[component.Type]string{ - component.MustNewType("nopconverter"): "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + ConverterModules: map[string]string{ + "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", }, } cmd := NewCommand(set) diff --git a/otelcol/testdata/components-output.yaml b/otelcol/testdata/components-output.yaml index b5cb1b0e718..dc403c32e2a 100644 --- a/otelcol/testdata/components-output.yaml +++ b/otelcol/testdata/components-output.yaml @@ -1,4 +1,4 @@ -buildinfo: +build_info: command: otelcol description: OpenTelemetry Collector version: latest @@ -45,5 +45,5 @@ providers: - scheme: nop module: go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3 converters: - - scheme: nopconverter + - name: nopconverter module: go.opentelemetry.io/collector/converter/testconverter v1.2.3 From 6d7ac5b2d440d5fe2d2fc63d7f07804a954b9297 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 20 Feb 2025 13:14:22 -0500 Subject: [PATCH 6/7] tweak chloggen --- .chloggen/jackgopack4-add-converters-component-command.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/jackgopack4-add-converters-component-command.yaml b/.chloggen/jackgopack4-add-converters-component-command.yaml index 597f65ae56a..205ba4b760b 100644 --- a/.chloggen/jackgopack4-add-converters-component-command.yaml +++ b/.chloggen/jackgopack4-add-converters-component-command.yaml @@ -15,7 +15,7 @@ issues: [11900, 12385] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: buildinfo in components command is now reported as "build_info" for ease of reading. +subtext: buildinfo in components command is now reported as "build_info" for legibility. # Optional: The change log or logs in which this entry should be included. # e.g. '[user]' or '[user, api]' From 304e7b6060b42bb5601e0c98c87075b7dfff4330 Mon Sep 17 00:00:00 2001 From: jackgopack4 Date: Thu, 20 Feb 2025 16:51:19 -0500 Subject: [PATCH 7/7] revert unnecessary changes and make converters a simple list --- ...ack4-add-converters-component-command.yaml | 2 +- .../internal/builder/templates/main.go.tmpl | 4 +-- cmd/otelcorecol/main.go | 2 +- otelcol/collector.go | 2 +- otelcol/collector_test.go | 8 ++--- otelcol/command_components.go | 30 +++++++++---------- otelcol/command_components_test.go | 4 +-- otelcol/testdata/components-output.yaml | 5 ++-- 8 files changed, 27 insertions(+), 30 deletions(-) diff --git a/.chloggen/jackgopack4-add-converters-component-command.yaml b/.chloggen/jackgopack4-add-converters-component-command.yaml index 205ba4b760b..0547fb4a8e9 100644 --- a/.chloggen/jackgopack4-add-converters-component-command.yaml +++ b/.chloggen/jackgopack4-add-converters-component-command.yaml @@ -15,7 +15,7 @@ issues: [11900, 12385] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: buildinfo in components command is now reported as "build_info" for legibility. +subtext: # Optional: The change log or logs in which this entry should be included. # e.g. '[user]' or '[user, api]' diff --git a/cmd/builder/internal/builder/templates/main.go.tmpl b/cmd/builder/internal/builder/templates/main.go.tmpl index 167df6fafad..a69b2929967 100644 --- a/cmd/builder/internal/builder/templates/main.go.tmpl +++ b/cmd/builder/internal/builder/templates/main.go.tmpl @@ -49,9 +49,9 @@ func main() { {{- range .ConfmapProviders}} {{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "{{.GoMod}}", {{- end}} - }, ConverterModules: map[string]string{ + }, ConverterModules: []string{ {{- range .ConfmapConverters}} - {{.Name}}: "{{.GoMod}}", + "{{.GoMod}}", {{- end}} }, diff --git a/cmd/otelcorecol/main.go b/cmd/otelcorecol/main.go index 7915f8cd353..13bfbe8297b 100644 --- a/cmd/otelcorecol/main.go +++ b/cmd/otelcorecol/main.go @@ -42,7 +42,7 @@ func main() { httpprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpprovider v1.26.0", httpsprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.26.0", yamlprovider.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.26.0", - }, ConverterModules: map[string]string{}, + }, ConverterModules: []string{}, } if err := run(set); err != nil { diff --git a/otelcol/collector.go b/otelcol/collector.go index d67b17cfa71..29763edec65 100644 --- a/otelcol/collector.go +++ b/otelcol/collector.go @@ -73,7 +73,7 @@ type CollectorSettings struct { ProviderModules map[string]string // ConverterModules maps converter names to their respective go modules. - ConverterModules map[string]string + ConverterModules []string // LoggingOptions provides a way to change behavior of zap logging. LoggingOptions []zap.Option diff --git a/otelcol/collector_test.go b/otelcol/collector_test.go index da15d37f2f8..46b1263cf49 100644 --- a/otelcol/collector_test.go +++ b/otelcol/collector_test.go @@ -603,8 +603,8 @@ func TestProviderAndConverterModules(t *testing.T) { ProviderModules: map[string]string{ "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", }, - ConverterModules: map[string]string{ - "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + ConverterModules: []string{ + "go.opentelemetry.io/collector/converter/testconverter v1.2.3", }, } col, err := NewCollector(set) @@ -614,8 +614,8 @@ func TestProviderAndConverterModules(t *testing.T) { providerModules := map[string]string{ "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", } - converterModules := map[string]string{ - "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + converterModules := []string{ + "go.opentelemetry.io/collector/converter/testconverter v1.2.3", } assert.Equal(t, providerModules, col.set.ProviderModules) assert.Equal(t, converterModules, col.set.ConverterModules) diff --git a/otelcol/command_components.go b/otelcol/command_components.go index 9a8ef5b4b81..1a995a00d12 100644 --- a/otelcol/command_components.go +++ b/otelcol/command_components.go @@ -19,26 +19,25 @@ import ( ) type componentWithStability struct { - Name component.Type `yaml:"name"` - Module string `yaml:"module"` - Stability map[string]string `yaml:"stability"` + Name component.Type + Module string + Stability map[string]string } type componentWithoutStability struct { - Name string `yaml:"name,omitempty"` - Scheme string `yaml:"scheme,omitempty"` - Module string `yaml:"module"` + Scheme string `yaml:",omitempty"` + Module string } type componentsOutput struct { - BuildInfo component.BuildInfo `yaml:"build_info"` - Receivers []componentWithStability `yaml:"receivers"` - Processors []componentWithStability `yaml:"processors"` - Exporters []componentWithStability `yaml:"exporters"` - Connectors []componentWithStability `yaml:"connectors"` - Extensions []componentWithStability `yaml:"extensions"` - Providers []componentWithoutStability `yaml:"providers"` - Converters []componentWithoutStability `yaml:"converters,omitempty"` + BuildInfo component.BuildInfo + Receivers []componentWithStability + Processors []componentWithStability + Exporters []componentWithStability + Connectors []componentWithStability + Extensions []componentWithStability + Providers []componentWithoutStability + Converters []componentWithoutStability `yaml:",omitempty"` } // newComponentsCommand constructs a new components command using the given CollectorSettings. @@ -125,9 +124,8 @@ func newComponentsCommand(set CollectorSettings) *cobra.Command { }) } - for converterName, converterModule := range set.ConverterModules { + for _, converterModule := range set.ConverterModules { components.Converters = append(components.Converters, componentWithoutStability{ - Name: converterName, Module: converterModule, }) } diff --git a/otelcol/command_components_test.go b/otelcol/command_components_test.go index daae77dd671..c88c9ebe608 100644 --- a/otelcol/command_components_test.go +++ b/otelcol/command_components_test.go @@ -24,8 +24,8 @@ func TestNewBuildSubCommand(t *testing.T) { ProviderModules: map[string]string{ "nop": "go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3", }, - ConverterModules: map[string]string{ - "nopconverter": "go.opentelemetry.io/collector/converter/testconverter v1.2.3", + ConverterModules: []string{ + "go.opentelemetry.io/collector/converter/testconverter v1.2.3", }, } cmd := NewCommand(set) diff --git a/otelcol/testdata/components-output.yaml b/otelcol/testdata/components-output.yaml index dc403c32e2a..94e1797f3da 100644 --- a/otelcol/testdata/components-output.yaml +++ b/otelcol/testdata/components-output.yaml @@ -1,4 +1,4 @@ -build_info: +buildinfo: command: otelcol description: OpenTelemetry Collector version: latest @@ -45,5 +45,4 @@ providers: - scheme: nop module: go.opentelemetry.io/collector/confmap/provider/testprovider v1.2.3 converters: - - name: nopconverter - module: go.opentelemetry.io/collector/converter/testconverter v1.2.3 + - module: go.opentelemetry.io/collector/converter/testconverter v1.2.3