diff --git a/.chloggen/configauth-omitempty.yaml b/.chloggen/configauth-omitempty.yaml new file mode 100644 index 00000000000..1aeaf7caa6d --- /dev/null +++ b/.chloggen/configauth-omitempty.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: configauth + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Add the `omitempty` mapstructure tag to struct fields + +# One or more tracking issues or pull requests related to the change +issues: [12191] + +# (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: This results in unset fields not being rendered when marshaling. + +# 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 a69b2929967..e3b1e8499f6 100644 --- a/cmd/builder/internal/builder/templates/main.go.tmpl +++ b/cmd/builder/internal/builder/templates/main.go.tmpl @@ -45,16 +45,17 @@ func main() { DefaultScheme: "{{ .ConfResolver.DefaultURIScheme }}", {{- end }} }, - }, ProviderModules: map[string]string{ + }, + ProviderModules: map[string]string{ {{- range .ConfmapProviders}} {{.Name}}.NewFactory().Create(confmap.ProviderSettings{}).Scheme(): "{{.GoMod}}", {{- end}} - }, ConverterModules: []string{ - {{- range .ConfmapConverters}} + }, + ConverterModules: []string{ + {{- range .ConfmapConverters}} "{{.GoMod}}", {{- end}} }, - } if err := run(set); err != nil { diff --git a/cmd/mdatagen/metadata-schema.yaml b/cmd/mdatagen/metadata-schema.yaml index 5a40cbade75..d0ab413207f 100644 --- a/cmd/mdatagen/metadata-schema.yaml +++ b/cmd/mdatagen/metadata-schema.yaml @@ -133,8 +133,6 @@ tests: # Optional: map of metric names with the key being the metric name and value # being described below. telemetry: - # Optional: level allows components to specify the minimum telemetry level for metrics to be produced. defaults to basic if not set. - level: string metrics: : # Required: whether the metric is collected by default. diff --git a/cmd/otelcorecol/main.go b/cmd/otelcorecol/main.go index 13bfbe8297b..e0257b0a2b2 100644 --- a/cmd/otelcorecol/main.go +++ b/cmd/otelcorecol/main.go @@ -36,13 +36,15 @@ func main() { yamlprovider.NewFactory(), }, }, - }, ProviderModules: map[string]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: []string{}, + }, + ConverterModules: []string{}, } if err := run(set); err != nil { diff --git a/config/configauth/configauth.go b/config/configauth/configauth.go index f2e5d8ec29b..d2e7f45ff0c 100644 --- a/config/configauth/configauth.go +++ b/config/configauth/configauth.go @@ -24,7 +24,7 @@ var ( // Authentication defines the auth settings for the receiver. type Authentication struct { // AuthenticatorID specifies the name of the extension to use in order to authenticate the incoming data point. - AuthenticatorID component.ID `mapstructure:"authenticator"` + AuthenticatorID component.ID `mapstructure:"authenticator,omitempty"` } // GetServerAuthenticator attempts to select the appropriate extensionauth.Server from the list of extensions, diff --git a/exporter/exporterbatcher/config.go b/exporter/exporterbatcher/config.go index a3c56e5cf43..4a3ef0d3789 100644 --- a/exporter/exporterbatcher/config.go +++ b/exporter/exporterbatcher/config.go @@ -56,11 +56,11 @@ func (c *Config) Unmarshal(conf *confmap.Conf) error { return err } - if c.MinSizeItems != nil { + if c.MinSizeItems != nil && !conf.IsSet("min_size") { c.SizeConfig.MinSize = *c.MinSizeItems } - if c.MaxSizeItems != nil { + if c.MaxSizeItems != nil && !conf.IsSet("max_size") { c.SizeConfig.MaxSize = *c.MaxSizeItems } diff --git a/exporter/exporterbatcher/config_test.go b/exporter/exporterbatcher/config_test.go index cf247367bb7..90b4c2fe4aa 100644 --- a/exporter/exporterbatcher/config_test.go +++ b/exporter/exporterbatcher/config_test.go @@ -7,6 +7,8 @@ import ( "testing" "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/confmap" ) func TestValidateConfig(t *testing.T) { @@ -40,3 +42,72 @@ func TestValidateSizeConfig(t *testing.T) { } require.EqualError(t, cfg.Validate(), "`max_size` must be greater than or equal to mix_size") } + +func TestUnmarshalDeprecatedFields(t *testing.T) { + p111 := 111 + p222 := 222 + tests := []struct { + name string + input map[string]any + expected Config + }{ + { + name: "only_deprecated_fields_used", + input: map[string]any{ + "enabled": true, + "flush_timeout": 200, + "min_size_items": 111, + "max_size_items": 222, + }, + expected: Config{ + Enabled: true, + FlushTimeout: 200, + SizeConfig: SizeConfig{ + Sizer: SizerTypeItems, + MinSize: 111, + MaxSize: 222, + }, + MinSizeConfig: MinSizeConfig{ + MinSizeItems: &p111, + }, + MaxSizeConfig: MaxSizeConfig{ + MaxSizeItems: &p222, + }, + }, + }, + { + name: "both_new_and_deprecated_fields_used", + input: map[string]any{ + "enabled": true, + "flush_timeout": 200, + "min_size_items": 111, + "max_size_items": 222, + "min_size": 11, + "max_size": 22, + }, + expected: Config{ + Enabled: true, + FlushTimeout: 200, + SizeConfig: SizeConfig{ + Sizer: SizerTypeItems, + MinSize: 11, + MaxSize: 22, + }, + MinSizeConfig: MinSizeConfig{ + MinSizeItems: &p111, + }, + MaxSizeConfig: MaxSizeConfig{ + MaxSizeItems: &p222, + }, + }, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + cfg := NewDefaultConfig() + require.NoError(t, cfg.Unmarshal(confmap.NewFromStringMap(test.input))) + require.Equal(t, test.expected, cfg) + require.NoError(t, cfg.Validate()) + }) + } +} diff --git a/exporter/exporterhelper/internal/base_exporter.go b/exporter/exporterhelper/internal/base_exporter.go index d7bbd26406f..579b0e310d6 100644 --- a/exporter/exporterhelper/internal/base_exporter.go +++ b/exporter/exporterhelper/internal/base_exporter.go @@ -6,11 +6,7 @@ package internal // import "go.opentelemetry.io/collector/exporter/exporterhelpe import ( "context" "errors" - "testing" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/otel/codes" - sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.uber.org/multierr" "go.uber.org/zap" @@ -284,12 +280,3 @@ func WithUnmarshaler(unmarshaler exporterqueue.Unmarshaler[request.Request]) Opt return nil } } - -func CheckStatus(t *testing.T, sd sdktrace.ReadOnlySpan, err error) { - if err != nil { - require.Equal(t, codes.Error, sd.Status().Code, "SpanData %v", sd) - require.EqualError(t, err, sd.Status().Description, "SpanData %v", sd) - } else { - require.Equal(t, codes.Unset, sd.Status().Code, "SpanData %v", sd) - } -} diff --git a/exporter/exporterhelper/internal/oteltest/tracetest.go b/exporter/exporterhelper/internal/oteltest/tracetest.go new file mode 100644 index 00000000000..a05bf302978 --- /dev/null +++ b/exporter/exporterhelper/internal/oteltest/tracetest.go @@ -0,0 +1,21 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package oteltest // import "go.opentelemetry.io/collector/exporter/exporterhelper/internal/oteltest" + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/codes" + sdktrace "go.opentelemetry.io/otel/sdk/trace" +) + +func CheckStatus(t *testing.T, sd sdktrace.ReadOnlySpan, err error) { + if err != nil { + require.Equal(t, codes.Error, sd.Status().Code) + require.EqualError(t, err, sd.Status().Description) + } else { + require.Equal(t, codes.Unset, sd.Status().Code) + } +} diff --git a/exporter/exporterhelper/logs_test.go b/exporter/exporterhelper/logs_test.go index 6a873639257..a9ee80fe47c 100644 --- a/exporter/exporterhelper/logs_test.go +++ b/exporter/exporterhelper/logs_test.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadatatest" + "go.opentelemetry.io/collector/exporter/exporterhelper/internal/oteltest" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest" "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/exporter/internal/storagetest" @@ -421,7 +422,7 @@ func checkWrapSpanForLogs(t *testing.T, sr *tracetest.SpanRecorder, tracer trace require.Equalf(t, fakeLogsParentSpanName, parentSpan.Name(), "SpanData %v", parentSpan) for _, sd := range gotSpanData[:numRequests] { require.Equalf(t, parentSpan.SpanContext(), sd.Parent(), "Exporter span not a child\nSpanData %v", sd) - internal.CheckStatus(t, sd, wantError) + oteltest.CheckStatus(t, sd, wantError) sentLogRecords := int64(1) failedToSendLogRecords := int64(0) diff --git a/exporter/exporterhelper/metrics_test.go b/exporter/exporterhelper/metrics_test.go index 82303a222cb..6d15988c443 100644 --- a/exporter/exporterhelper/metrics_test.go +++ b/exporter/exporterhelper/metrics_test.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadatatest" + "go.opentelemetry.io/collector/exporter/exporterhelper/internal/oteltest" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest" "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/exporter/internal/storagetest" @@ -428,7 +429,7 @@ func checkWrapSpanForMetrics(t *testing.T, sr *tracetest.SpanRecorder, tracer tr require.Equalf(t, fakeMetricsParentSpanName, parentSpan.Name(), "SpanData %v", parentSpan) for _, sd := range gotSpanData[:numRequests] { require.Equalf(t, parentSpan.SpanContext(), sd.Parent(), "Exporter span not a child\nSpanData %v", sd) - internal.CheckStatus(t, sd, wantError) + oteltest.CheckStatus(t, sd, wantError) sentMetricPoints := int64(2) failedToSendMetricPoints := int64(0) diff --git a/exporter/exporterhelper/traces_test.go b/exporter/exporterhelper/traces_test.go index 5a9d9e9d5d1..a032d963a1a 100644 --- a/exporter/exporterhelper/traces_test.go +++ b/exporter/exporterhelper/traces_test.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper/internal" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/metadatatest" + "go.opentelemetry.io/collector/exporter/exporterhelper/internal/oteltest" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest" "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/exporter/internal/storagetest" @@ -430,7 +431,7 @@ func checkWrapSpanForTraces(t *testing.T, sr *tracetest.SpanRecorder, tracer tra for _, sd := range gotSpanData[:numRequests] { require.Equalf(t, parentSpan.SpanContext(), sd.Parent(), "Exporter span not a child\nSpanData %v", sd) - internal.CheckStatus(t, sd, wantError) + oteltest.CheckStatus(t, sd, wantError) sentSpans := int64(1) failedToSendSpans := int64(0) diff --git a/exporter/exporterhelper/xexporterhelper/profiles_test.go b/exporter/exporterhelper/xexporterhelper/profiles_test.go index 0fb0561a546..a064f86de46 100644 --- a/exporter/exporterhelper/xexporterhelper/profiles_test.go +++ b/exporter/exporterhelper/xexporterhelper/profiles_test.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/exporter/exporterhelper/internal" + "go.opentelemetry.io/collector/exporter/exporterhelper/internal/oteltest" "go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest" "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/exporter/internal/storagetest" @@ -312,7 +313,7 @@ func checkWrapSpanForProfilesExporter(t *testing.T, sr *tracetest.SpanRecorder, require.Equalf(t, fakeProfilesParentSpanName, parentSpan.Name(), "SpanData %v", parentSpan) for _, sd := range gotSpanData[:numRequests] { require.Equalf(t, parentSpan.SpanContext(), sd.Parent(), "Exporter span not a child\nSpanData %v", sd) - internal.CheckStatus(t, sd, wantError) + oteltest.CheckStatus(t, sd, wantError) sentSampleRecords := int64(1) failedToSendSampleRecords := int64(0) diff --git a/internal/e2e/configauth_test.go b/internal/e2e/configauth_test.go new file mode 100644 index 00000000000..859b45c9367 --- /dev/null +++ b/internal/e2e/configauth_test.go @@ -0,0 +1,20 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package e2e + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/config/configauth" + "go.opentelemetry.io/collector/confmap" +) + +func TestConfmapMarshalConfigAuth(t *testing.T) { + conf := confmap.New() + require.NoError(t, conf.Marshal(configauth.Authentication{})) + assert.Equal(t, map[string]any{}, conf.ToStringMap()) +} diff --git a/internal/e2e/go.mod b/internal/e2e/go.mod index 50b4a3bb5d0..4f74d4dc739 100644 --- a/internal/e2e/go.mod +++ b/internal/e2e/go.mod @@ -8,6 +8,7 @@ require ( go.opentelemetry.io/collector/component v0.120.0 go.opentelemetry.io/collector/component/componentstatus v0.120.0 go.opentelemetry.io/collector/component/componenttest v0.120.0 + go.opentelemetry.io/collector/config/configauth v0.120.0 go.opentelemetry.io/collector/config/configgrpc v0.120.0 go.opentelemetry.io/collector/config/confighttp v0.120.0 go.opentelemetry.io/collector/config/confignet v1.26.0 @@ -80,7 +81,6 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/collector/client v1.26.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.120.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.26.0 // indirect go.opentelemetry.io/collector/connector/xconnector v0.120.0 // indirect go.opentelemetry.io/collector/consumer/consumererror v0.120.0 // indirect