Skip to content

Commit e32b348

Browse files
committed
fixes bug where we tried to default config for the wrong components
1 parent 098afda commit e32b348

File tree

9 files changed

+86
-71
lines changed

9 files changed

+86
-71
lines changed

apis/v1beta1/collector_webhook.go

+31-17
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@ var (
4343
// +kubebuilder:object:generate=false
4444

4545
type CollectorWebhook struct {
46-
logger logr.Logger
47-
cfg config.Config
48-
scheme *runtime.Scheme
49-
reviewer *rbac.Reviewer
50-
metrics *Metrics
51-
bv BuildValidator
52-
fips fips.FIPSCheck
46+
logger logr.Logger
47+
cfg config.Config
48+
scheme *runtime.Scheme
49+
reviewer *rbac.Reviewer
50+
metrics *Metrics
51+
bv BuildValidator
52+
fips fips.FIPSCheck
53+
disableDefaulting bool
5354
}
5455

5556
func (c CollectorWebhook) Default(_ context.Context, obj runtime.Object) error {
@@ -100,6 +101,9 @@ func (c CollectorWebhook) Default(_ context.Context, obj runtime.Object) error {
100101
if len(otelcol.Spec.ManagementState) == 0 {
101102
otelcol.Spec.ManagementState = ManagementStateManaged
102103
}
104+
if c.disableDefaulting {
105+
return nil
106+
}
103107
return otelcol.Spec.Config.ApplyDefaults(c.logger)
104108
}
105109

@@ -431,20 +435,30 @@ func NewCollectorWebhook(
431435
metrics *Metrics,
432436
bv BuildValidator,
433437
fips fips.FIPSCheck,
434-
) *CollectorWebhook {
438+
disableDefaulting bool) *CollectorWebhook {
435439
return &CollectorWebhook{
436-
logger: logger,
437-
scheme: scheme,
438-
cfg: cfg,
439-
reviewer: reviewer,
440-
metrics: metrics,
441-
bv: bv,
442-
fips: fips,
440+
logger: logger,
441+
scheme: scheme,
442+
cfg: cfg,
443+
reviewer: reviewer,
444+
metrics: metrics,
445+
bv: bv,
446+
fips: fips,
447+
disableDefaulting: disableDefaulting,
443448
}
444449
}
445450

446-
func SetupCollectorWebhook(mgr ctrl.Manager, cfg config.Config, reviewer *rbac.Reviewer, metrics *Metrics, bv BuildValidator, fipsCheck fips.FIPSCheck) error {
447-
cvw := NewCollectorWebhook(mgr.GetLogger().WithValues("handler", "CollectorWebhook", "version", "v1beta1"), mgr.GetScheme(), cfg, reviewer, metrics, bv, fipsCheck)
451+
func SetupCollectorWebhook(mgr ctrl.Manager, cfg config.Config, reviewer *rbac.Reviewer, metrics *Metrics, bv BuildValidator, fipsCheck fips.FIPSCheck, disableDefaulting bool) error {
452+
cvw := NewCollectorWebhook(
453+
mgr.GetLogger().WithValues("handler", "CollectorWebhook", "version", "v1beta1"),
454+
mgr.GetScheme(),
455+
cfg,
456+
reviewer,
457+
metrics,
458+
bv,
459+
fipsCheck,
460+
disableDefaulting,
461+
)
448462
return ctrl.NewWebhookManagedBy(mgr).
449463
For(&OpenTelemetryCollector{}).
450464
WithValidator(cvw).

apis/v1beta1/collector_webhook_test.go

+16-48
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,10 @@ func TestValidate(t *testing.T) {
103103

104104
for _, tt := range tests {
105105
test := tt
106-
webhook := v1beta1.NewCollectorWebhook(
107-
logr.Discard(),
108-
testScheme,
109-
config.New(
110-
config.WithCollectorImage("collector:v0.0.0"),
111-
config.WithTargetAllocatorImage("ta:v0.0.0"),
112-
),
113-
getReviewer(test.shouldFailSar),
114-
nil,
115-
bv,
116-
nil,
117-
)
106+
webhook := v1beta1.NewCollectorWebhook(logr.Discard(), testScheme, config.New(
107+
config.WithCollectorImage("collector:v0.0.0"),
108+
config.WithTargetAllocatorImage("ta:v0.0.0"),
109+
), getReviewer(test.shouldFailSar), nil, bv, nil, false)
118110
t.Run(tt.name, func(t *testing.T) {
119111
tt := tt
120112
warnings, err := webhook.Validate(context.Background(), &tt.collector)
@@ -539,18 +531,10 @@ func TestCollectorDefaultingWebhook(t *testing.T) {
539531
for _, test := range tests {
540532
test := test
541533
t.Run(test.name, func(t *testing.T) {
542-
cvw := v1beta1.NewCollectorWebhook(
543-
logr.Discard(),
544-
testScheme,
545-
config.New(
546-
config.WithCollectorImage("collector:v0.0.0"),
547-
config.WithTargetAllocatorImage("ta:v0.0.0"),
548-
),
549-
getReviewer(test.shouldFailSar),
550-
nil,
551-
bv,
552-
nil,
553-
)
534+
cvw := v1beta1.NewCollectorWebhook(logr.Discard(), testScheme, config.New(
535+
config.WithCollectorImage("collector:v0.0.0"),
536+
config.WithTargetAllocatorImage("ta:v0.0.0"),
537+
), getReviewer(test.shouldFailSar), nil, bv, nil, false)
554538
ctx := context.Background()
555539
err := cvw.Default(ctx, &test.otelcol)
556540
assert.NoError(t, err)
@@ -1331,18 +1315,10 @@ func TestOTELColValidatingWebhook(t *testing.T) {
13311315
for _, test := range tests {
13321316
test := test
13331317
t.Run(test.name, func(t *testing.T) {
1334-
cvw := v1beta1.NewCollectorWebhook(
1335-
logr.Discard(),
1336-
testScheme,
1337-
config.New(
1338-
config.WithCollectorImage("collector:v0.0.0"),
1339-
config.WithTargetAllocatorImage("ta:v0.0.0"),
1340-
),
1341-
getReviewer(test.shouldFailSar),
1342-
nil,
1343-
bv,
1344-
nil,
1345-
)
1318+
cvw := v1beta1.NewCollectorWebhook(logr.Discard(), testScheme, config.New(
1319+
config.WithCollectorImage("collector:v0.0.0"),
1320+
config.WithTargetAllocatorImage("ta:v0.0.0"),
1321+
), getReviewer(test.shouldFailSar), nil, bv, nil, false)
13461322
ctx := context.Background()
13471323
warnings, err := cvw.ValidateCreate(ctx, &test.otelcol)
13481324
if test.expectedErr == "" {
@@ -1399,18 +1375,10 @@ func TestOTELColValidateUpdateWebhook(t *testing.T) {
13991375
for _, test := range tests {
14001376
test := test
14011377
t.Run(test.name, func(t *testing.T) {
1402-
cvw := v1beta1.NewCollectorWebhook(
1403-
logr.Discard(),
1404-
testScheme,
1405-
config.New(
1406-
config.WithCollectorImage("collector:v0.0.0"),
1407-
config.WithTargetAllocatorImage("ta:v0.0.0"),
1408-
),
1409-
getReviewer(test.shouldFailSar),
1410-
nil,
1411-
bv,
1412-
nil,
1413-
)
1378+
cvw := v1beta1.NewCollectorWebhook(logr.Discard(), testScheme, config.New(
1379+
config.WithCollectorImage("collector:v0.0.0"),
1380+
config.WithTargetAllocatorImage("ta:v0.0.0"),
1381+
), getReviewer(test.shouldFailSar), nil, bv, nil, false)
14141382
ctx := context.Background()
14151383
warnings, err := cvw.ValidateUpdate(ctx, &test.otelcolOld, &test.otelcolNew)
14161384
if test.expectedErr == "" {

config/manager/kustomization.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
11
resources:
22
- manager.yaml
3+
apiVersion: kustomize.config.k8s.io/v1beta1
4+
kind: Kustomization
5+
images:
6+
- name: controller
7+
newName: jaronoff/opentelemetry-operator
8+
newTag: op-v177

controllers/suite_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func TestMain(m *testing.M) {
182182
}
183183
reviewer := rbac.NewReviewer(clientset)
184184

185-
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil); err != nil {
185+
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil, false); err != nil {
186186
fmt.Printf("failed to SetupWebhookWithManager: %v", err)
187187
os.Exit(1)
188188
}

internal/components/generic_parser.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ func (g *GenericParser[T]) GetDefaultConfig(logger logr.Logger, config interface
4444
return config, nil
4545
}
4646

47-
if g.settings.defaultRecAddr == "" {
47+
if g.settings.defaultRecAddr == "" || g.settings.port == 0 {
4848
return config, nil
4949
}
5050

5151
var parsed T
5252
if err := mapstructure.Decode(config, &parsed); err != nil {
5353
return nil, err
5454
}
55-
return g.defaultsApplier(logger, g.settings.defaultRecAddr, g.settings.GetServicePort().Port, parsed)
55+
return g.defaultsApplier(logger, g.settings.defaultRecAddr, g.settings.port, parsed)
5656
}
5757

5858
func (g *GenericParser[T]) GetLivenessProbe(logger logr.Logger, config interface{}) (*corev1.Probe, error) {

internal/components/receivers/single_endpoint_receiver_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package receivers_test
1616

1717
import (
18+
"fmt"
1819
"testing"
1920

2021
"github.com/stretchr/testify/assert"
@@ -82,6 +83,7 @@ func TestDownstreamParsers(t *testing.T) {
8283
{"awsxray", "awsxray", "__awsxray", 2000, false},
8384
{"tcplog", "tcplog", "__tcplog", 0, true},
8485
{"udplog", "udplog", "__udplog", 0, true},
86+
{"k8s_cluster", "k8s_cluster", "__k8s_cluster", 0, false},
8587
} {
8688
t.Run(tt.receiverName, func(t *testing.T) {
8789
t.Run("builds successfully", func(t *testing.T) {
@@ -143,6 +145,28 @@ func TestDownstreamParsers(t *testing.T) {
143145
assert.EqualValues(t, 65535, ports[0].Port)
144146
assert.Equal(t, naming.PortName(tt.receiverName, int32(tt.defaultPort)), ports[0].Name)
145147
})
148+
149+
t.Run("returns a default config", func(t *testing.T) {
150+
// prepare
151+
parser := receivers.ReceiverFor(tt.receiverName)
152+
153+
// test
154+
config, err := parser.GetDefaultConfig(logger, map[string]interface{}{})
155+
156+
// verify
157+
assert.NoError(t, err)
158+
configMap, ok := config.(map[string]interface{})
159+
assert.True(t, ok)
160+
if tt.defaultPort == 0 {
161+
assert.Empty(t, configMap, 0)
162+
return
163+
}
164+
if tt.listenAddrParser {
165+
assert.Equal(t, configMap["listen_address"], fmt.Sprintf("0.0.0.0:%d", tt.defaultPort))
166+
} else {
167+
assert.Equal(t, configMap["endpoint"], fmt.Sprintf("0.0.0.0:%d", tt.defaultPort))
168+
}
169+
})
146170
})
147171
}
148172
}

internal/webhook/podmutation/webhookhandler_suite_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestMain(m *testing.M) {
105105
}
106106
reviewer := rbac.NewReviewer(clientset)
107107

108-
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil); err != nil {
108+
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil, false); err != nil {
109109
fmt.Printf("failed to SetupWebhookWithManager: %v", err)
110110
os.Exit(1)
111111
}

main.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ func main() {
123123
enableNodeJSInstrumentation bool
124124
enableJavaInstrumentation bool
125125
enableCRMetrics bool
126+
disableEndpointDefaulting bool
126127
collectorImage string
127128
targetAllocatorImage string
128129
operatorOpAMPBridgeImage string
@@ -162,6 +163,7 @@ func main() {
162163
pflag.BoolVar(&enableNodeJSInstrumentation, constants.FlagNodeJS, true, "Controls whether the operator supports nodejs auto-instrumentation")
163164
pflag.BoolVar(&enableJavaInstrumentation, constants.FlagJava, true, "Controls whether the operator supports java auto-instrumentation")
164165
pflag.BoolVar(&enableCRMetrics, constants.FlagCRMetrics, false, "Controls whether exposing the CR metrics is enabled")
166+
pflag.BoolVar(&disableEndpointDefaulting, "disable-event-defaulting", false, "Controls whether the operator should attempt to default the configuration for components")
165167

166168
stringFlagOrEnv(&collectorImage, "collector-image", "RELATED_IMAGE_COLLECTOR", fmt.Sprintf("ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector:%s", v.OpenTelemetryCollector), "The default OpenTelemetry collector image. This image is used when no image is specified in the CustomResource.")
167169
stringFlagOrEnv(&targetAllocatorImage, "target-allocator-image", "RELATED_IMAGE_TARGET_ALLOCATOR", fmt.Sprintf("ghcr.io/open-telemetry/opentelemetry-operator/target-allocator:%s", v.TargetAllocator), "The default OpenTelemetry target allocator image. This image is used when no image is specified in the CustomResource.")
@@ -216,6 +218,7 @@ func main() {
216218
"go-version", v.Go,
217219
"go-arch", runtime.GOARCH,
218220
"go-os", runtime.GOOS,
221+
"disable-event-defaulting", disableEndpointDefaulting,
219222
"labels-filter", labelsFilter,
220223
"annotations-filter", annotationsFilter,
221224
"enable-multi-instrumentation", enableMultiInstrumentation,
@@ -447,7 +450,7 @@ func main() {
447450
logger.Info("Fips disabled components", "receivers", receivers, "exporters", exporters, "processors", processors, "extensions", extensions)
448451
fipsCheck = fips.NewFipsCheck(receivers, exporters, processors, extensions)
449452
}
450-
if err = otelv1beta1.SetupCollectorWebhook(mgr, cfg, reviewer, crdMetrics, bv, fipsCheck); err != nil {
453+
if err = otelv1beta1.SetupCollectorWebhook(mgr, cfg, reviewer, crdMetrics, bv, fipsCheck, disableEndpointDefaulting); err != nil {
451454
setupLog.Error(err, "unable to create webhook", "webhook", "OpenTelemetryCollector")
452455
os.Exit(1)
453456
}

pkg/collector/upgrade/suite_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestMain(m *testing.M) {
105105
}
106106
reviewer := rbac.NewReviewer(clientset)
107107

108-
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil); err != nil {
108+
if err = v1beta1.SetupCollectorWebhook(mgr, config.New(), reviewer, nil, nil, nil, false); err != nil {
109109
fmt.Printf("failed to SetupWebhookWithManager: %v", err)
110110
os.Exit(1)
111111
}

0 commit comments

Comments
 (0)