Skip to content

Commit

Permalink
Enable confmap expand feature (#6276)
Browse files Browse the repository at this point in the history
Signed-off-by: Bogdan <bogdandrutu@gmail.com>

Signed-off-by: Bogdan <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu authored Oct 11, 2022
1 parent b42fc0d commit b15179e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
- `receiver/otlp`: Make logs related to gRCPC and HTTP server startup clearer (#6174)
- Add prometheus metric prefix and constant service attributes to Collector's own telemetry when using OpenTelemetry for internal telemetry (#6223)
- `exporter/logging`: Apply consistent rendering of map values (#6244)
- Add support in the confmap.Resolver to expand embedded config URIs inside configuration. (#6276)

### 🧰 Bug fixes 🧰

Expand Down
18 changes: 14 additions & 4 deletions confmap/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
"sync"

"go.uber.org/multierr"

"go.opentelemetry.io/collector/featuregate"
)

var (
Expand All @@ -37,6 +39,17 @@ var (
errTooManyRecursiveExpansions = errors.New("too many recursive expansions")
)

const expandEnabled = "confmap.expandEnabled"

func init() {
// TODO: Remove this if by v0.64.0 no complains from distros.
featuregate.GetRegistry().MustRegister(featuregate.Gate{
ID: expandEnabled,
Description: "controls whether expending embedded external config providers URIs",
Enabled: true,
})
}

// Resolver resolves a configuration as a Conf.
type Resolver struct {
uris []location
Expand All @@ -46,8 +59,6 @@ type Resolver struct {
sync.Mutex
closers []CloseFunc
watcher chan error

enableExpand bool
}

// ResolverSettings are the settings to configure the behavior of the Resolver.
Expand Down Expand Up @@ -149,7 +160,7 @@ func (mr *Resolver) Resolve(ctx context.Context) (*Conf, error) {
}
}

if mr.enableExpand {
if featuregate.GetRegistry().IsEnabled(expandEnabled) {
cfgMap := make(map[string]interface{})
for _, k := range retMap.AllKeys() {
val, err := mr.expandValueRecursively(ctx, retMap.Get(k))
Expand All @@ -160,7 +171,6 @@ func (mr *Resolver) Resolve(ctx context.Context) (*Conf, error) {
}
retMap = NewFromStringMap(cfgMap)
}

// Apply the converters in the given order.
for _, confConv := range mr.converters {
if err := confConv.Convert(ctx, retMap); err != nil {
Expand Down
10 changes: 2 additions & 8 deletions confmap/resolver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ func TestResolverExpandEnvVars(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
resolver, err := NewResolver(ResolverSettings{URIs: []string{filepath.Join("testdata", test.name)}, Providers: makeMapProvidersMap(fileProvider, envProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

// Test that expanded configs are the same with the simple config with no env vars.
cfgMap, err := resolver.Resolve(context.Background())
require.NoError(t, err)
Expand All @@ -373,7 +373,7 @@ func TestResolverDoneNotExpandOldEnvVars(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"test:"}, Providers: makeMapProvidersMap(fileProvider, envProvider, emptySchemeProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

// Test that expanded configs are the same with the simple config with no env vars.
cfgMap, err := resolver.Resolve(context.Background())
require.NoError(t, err)
Expand All @@ -394,7 +394,6 @@ func TestResolverExpandMapAndSliceValues(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

cfgMap, err := resolver.Resolve(context.Background())
require.NoError(t, err)
Expand All @@ -416,7 +415,6 @@ func TestResolverInfiniteExpand(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

_, err = resolver.Resolve(context.Background())
assert.ErrorIs(t, err, errTooManyRecursiveExpansions)
Expand All @@ -433,7 +431,6 @@ func TestResolverExpandSliceValueError(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

_, err = resolver.Resolve(context.Background())
assert.EqualError(t, err, "unsupported type=*errors.errorString for retrieved config")
Expand All @@ -450,7 +447,6 @@ func TestResolverExpandMapValueError(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

_, err = resolver.Resolve(context.Background())
assert.EqualError(t, err, "unsupported type=*errors.errorString for retrieved config")
Expand All @@ -468,7 +464,6 @@ func TestResolverExpandInvalidScheme(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

_, err = resolver.Resolve(context.Background())
assert.EqualError(t, err, `invalid uri: "g_c_s:VALUE"`)
Expand All @@ -485,7 +480,6 @@ func TestResolverExpandInvalidOpaqueValue(t *testing.T) {

resolver, err := NewResolver(ResolverSettings{URIs: []string{"input:"}, Providers: makeMapProvidersMap(provider, testProvider), Converters: nil})
require.NoError(t, err)
resolver.enableExpand = true

_, err = resolver.Resolve(context.Background())
assert.EqualError(t, err, `the uri "test:$VALUE" contains unsupported characters ('$')`)
Expand Down

0 comments on commit b15179e

Please sign in to comment.