operator-framework / operator-sdk

SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.
https://sdk.operatorframework.io
Apache License 2.0
7.1k stars 1.73k forks source link

go.opentelemetry.io/otel/trace broken when scaffolding webhook #6693

Open criscola opened 4 months ago

criscola commented 4 months ago

Bug Report

What did you do?

I generated a webhook with operator-sdk create webhook --group group --version v1alpha1 --kind Resource --programmatic-validation

What did you expect to see?

I then ran make run and expected the operator to run.

What did you see instead? Under which circumstances?

go fmt ./...
go vet ./...
# go.opentelemetry.io/otel/sdk/trace
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/provider.go:90:30: cannot use &TracerProvider{} (value of type *TracerProvider) as "go.opentelemetry.io/otel/trace".TracerProvider value in variable declaration: *TracerProvider does not implement "go.opentelemetry.io/otel/trace".TracerProvider (missing method tracerProvider)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/provider.go:170:10: cannot use t (variable of type *tracer) as "go.opentelemetry.io/otel/trace".Tracer value in return statement: *tracer does not implement "go.opentelemetry.io/otel/trace".Tracer (missing method tracer)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/span.go:161:23: cannot use (*recordingSpan)(nil) (value of type *recordingSpan) as ReadWriteSpan value in variable declaration: *recordingSpan does not implement ReadWriteSpan (missing method span)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/span.go:692:9: cannot use s.tracer.provider (variable of type *TracerProvider) as "go.opentelemetry.io/otel/trace".TracerProvider value in return statement: *TracerProvider does not implement "go.opentelemetry.io/otel/trace".TracerProvider (missing method tracerProvider)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/span.go:780:20: cannot use nonRecordingSpan{} (value of type nonRecordingSpan) as "go.opentelemetry.io/otel/trace".Span value in variable declaration: nonRecordingSpan does not implement "go.opentelemetry.io/otel/trace".Span (missing method span)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/span.go:811:74: cannot use s.tracer.provider (variable of type *TracerProvider) as "go.opentelemetry.io/otel/trace".TracerProvider value in return statement: *TracerProvider does not implement "go.opentelemetry.io/otel/trace".TracerProvider (missing method tracerProvider)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/tracer.go:30:22: cannot use &tracer{} (value of type *tracer) as "go.opentelemetry.io/otel/trace".Tracer value in variable declaration: *tracer does not implement "go.opentelemetry.io/otel/trace".Tracer (missing method tracer)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/tracer.go:47:21: impossible type assertion: p.(*recordingSpan)
        *recordingSpan does not implement "go.opentelemetry.io/otel/trace".Span (missing method span)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/tracer.go:117:10: cannot use tr.newNonRecordingSpan(sc) (value of type nonRecordingSpan) as "go.opentelemetry.io/otel/trace".Span value in return statement: nonRecordingSpan does not implement "go.opentelemetry.io/otel/trace".Span (missing method span)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/tracer.go:119:9: cannot use tr.newRecordingSpan(psc, sc, name, samplingResult, config) (value of type *recordingSpan) as "go.opentelemetry.io/otel/trace".Span value in return statement: *recordingSpan does not implement "go.opentelemetry.io/otel/trace".Span (missing method span)
../../../go/pkg/mod/go.opentelemetry.io/otel/sdk@v1.19.0/trace/tracer.go:119:9: too many errors
# git.helio.dev/carbon-aware-scheduling/cabws-workload-controller/api/v1alpha1
# [git.helio.dev/carbon-aware-scheduling/cabws-workload-controller/api/v1alpha1]
vet: api/v1alpha1/webhook_suite_test.go:94:3: unknown field Host in struct literal of type manager.Options
make: *** [Makefile:112: vet] Error 1

Environment

Operator type:

/language go

Kubernetes cluster type:

vanilla

$ operator-sdk version

operator-sdk version: "v1.33.0", commit: "542966812906456a8d67cf7284fc6410b104e118", kubernetes version: "1.27.0", go version: "go1.21.5", GOOS: "linux", GOARCH: "amd64"

$ go version (if language is Go)

go1.22.0

$ kubectl version

Client Version: v1.29.1 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 Server Version: v1.29.2

Possible Solution

I tried to update opentelemetry packages in the go.mod:

go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.24.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 // indirect
jberkhahn commented 3 months ago

Can you try downgrading your Golang version ti 1.21.7? We're currently experiencing versioning issues with go 1.22.

jberkhahn commented 3 months ago

relates #6651

criscola commented 3 months ago

Hi yes sorry forgot to update the issue, downgrading to go 1.21 fixed the issue

openshift-bot commented 1 day ago

Issues go stale after 90d of inactivity.

Mark the issue as fresh by commenting /remove-lifecycle stale. Stale issues rot after an additional 30d of inactivity and eventually close. Exclude this issue from closing by commenting /lifecycle frozen.

If this issue is safe to close now please do so with /close.

/lifecycle stale