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

Error when running operator tutorial for Go #6729

Closed ggallen closed 2 months ago

ggallen commented 2 months ago

Type of question

Open question

Question

What did you do?

I am trying to step through the building an operator (Go) tutorial. I hit a problem on the step Create a new API and Controller.

What did you expect to see?

I expected the command to complete successfully.

What did you see instead? Under which circumstances?

I get the following error:

[gallen@gallen-thinkpadp1gen5 memcached-operator]$ /home/gallen/work/tutorial/memcached-operator/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa0a20f]

goroutine 178 [running]:
go/types.(*Checker).handleBailout(0xc00057f800, 0xc0017c5d40)
    /usr/local/go/src/go/types/check.go:367 +0x88
panic({0xbc29e0?, 0x12a94e0?})
    /usr/local/go/src/runtime/panic.go:770 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0xdbd6b8, 0x12b1ce0})
    /usr/local/go/src/go/types/sizes.go:228 +0x30f
go/types.(*Config).sizeof(...)
    /usr/local/go/src/go/types/sizes.go:333
go/types.representableConst.func1({0xdbd6b8?, 0x12b1ce0?})
    /usr/local/go/src/go/types/const.go:76 +0x9e
go/types.representableConst({0xdc3a10, 0x127cc60}, 0xc00057f800, 0x12b1ce0, 0x0)
    /usr/local/go/src/go/types/const.go:92 +0x192
go/types.(*Checker).arrayLength(0xc00057f800, {0xdc1cb8, 0xc001a0ad00?})
    /usr/local/go/src/go/types/typexpr.go:510 +0x2d3
go/types.(*Checker).typInternal(0xc00057f800, {0xdc02d8, 0xc001a05c50}, 0x0)
    /usr/local/go/src/go/types/typexpr.go:299 +0x49d
go/types.(*Checker).definedType(0xc00057f800, {0xdc02d8, 0xc001a05c50}, 0xc0017c5328?)
    /usr/local/go/src/go/types/typexpr.go:180 +0x37
go/types.(*Checker).varType(0xc00057f800, {0xdc02d8, 0xc001a05c50})
    /usr/local/go/src/go/types/typexpr.go:145 +0x25
go/types.(*Checker).structType(0xc00057f800, 0xc0012e52c0, 0xc0012e52c0?)
    /usr/local/go/src/go/types/struct.go:113 +0x19f
go/types.(*Checker).typInternal(0xc00057f800, {0xdc0248, 0xc001a0e4c8}, 0xc0012f2000)
    /usr/local/go/src/go/types/typexpr.go:316 +0x1345
go/types.(*Checker).definedType(0xc00057f800, {0xdc0248, 0xc001a0e4c8}, 0xc8bf2e?)
    /usr/local/go/src/go/types/typexpr.go:180 +0x37
go/types.(*Checker).typeDecl(0xc00057f800, 0xc0012f2000, 0xc001a0c9c0, 0x0)
    /usr/local/go/src/go/types/decl.go:615 +0x44d
go/types.(*Checker).objDecl(0xc00057f800, {0xdc8f60, 0xc0012f2000}, 0x0)
    /usr/local/go/src/go/types/decl.go:197 +0xa7f
go/types.(*Checker).packageObjects(0xc00057f800)
    /usr/local/go/src/go/types/resolver.go:681 +0x425
go/types.(*Checker).checkFiles(0xc00057f800, {0xc001a0e018, 0x3, 0x3})
    /usr/local/go/src/go/types/check.go:408 +0x1a5
go/types.(*Checker).Files(...)
    /usr/local/go/src/go/types/check.go:372
sigs.k8s.io/controller-tools/pkg/loader.(*loader).typeCheck(0xc0002f9380, 0xc0006dde00)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/loader.go:286 +0x36a
sigs.k8s.io/controller-tools/pkg/loader.(*Package).NeedTypesInfo(0xc0006dde00)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/loader.go:99 +0x39
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check(0xc0009f8a50, 0xc0006dde00)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:268 +0x2b7
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check.func1(0x0?)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:262 +0x53
created by sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check in goroutine 75
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:260 +0x1c5
[gallen@gallen-thinkpadp1gen5 memcached-operator]$ 

Environment

Operator type:

/language go

Kubernetes cluster type:

N/A

$ operator-sdk version

operator-sdk version: "v1.34.1", commit: "edaed1e5057db0349568e0b02df3743051b54e68", kubernetes version: "1.28.0", go version: "go1.21.7", GOOS: "linux", GOARCH: "amd64"

$ go version (if language is Go)

go version go1.22.2 linux/amd64

$ kubectl version

Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.10", GitCommit:"0fa26aea1d5c21516b0d96fea95a77d8d429912e", GitTreeState:"clean", BuildDate:"2024-01-17T13:46:28Z", GoVersion:"go1.20.13", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v5.0.1

Additional context

iaincalderfh commented 2 months ago

I get the same error when running make generate

ggallen commented 2 months ago

I've tracked it down to this command:

[gallen@gallen-thinkpadp1gen5 memcached-operator]$ /home/gallen/work/tutorial/memcached-operator/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa0a20f]

goroutine 209 [running]:
go/types.(*Checker).handleBailout(0xc001902800, 0xc000a35d40)
    /usr/local/go/src/go/types/check.go:367 +0x88
panic({0xbc29e0?, 0x12a94e0?})
    /usr/local/go/src/runtime/panic.go:770 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0xdbd6b8, 0x12b1ce0})
    /usr/local/go/src/go/types/sizes.go:228 +0x30f
go/types.(*Config).sizeof(...)
    /usr/local/go/src/go/types/sizes.go:333
go/types.representableConst.func1({0xdbd6b8?, 0x12b1ce0?})
    /usr/local/go/src/go/types/const.go:76 +0x9e
go/types.representableConst({0xdc3a10, 0x127cc60}, 0xc001902800, 0x12b1ce0, 0x0)
    /usr/local/go/src/go/types/const.go:92 +0x192
go/types.(*Checker).arrayLength(0xc001902800, {0xdc1cb8, 0xc000d71160?})
    /usr/local/go/src/go/types/typexpr.go:510 +0x2d3
go/types.(*Checker).typInternal(0xc001902800, {0xdc02d8, 0xc0019101e0}, 0x0)
    /usr/local/go/src/go/types/typexpr.go:299 +0x49d
go/types.(*Checker).definedType(0xc001902800, {0xdc02d8, 0xc0019101e0}, 0x10?)
    /usr/local/go/src/go/types/typexpr.go:180 +0x37
go/types.(*Checker).varType(0xc001902800, {0xdc02d8, 0xc0019101e0})
    /usr/local/go/src/go/types/typexpr.go:145 +0x25
go/types.(*Checker).structType(0xc001902800, 0xc00191d860, 0xc00191d860?)
    /usr/local/go/src/go/types/struct.go:113 +0x19f
go/types.(*Checker).typInternal(0xc001902800, {0xdc0248, 0xc0019005d0}, 0xc001921cc0)
    /usr/local/go/src/go/types/typexpr.go:316 +0x1345
go/types.(*Checker).definedType(0xc001902800, {0xdc0248, 0xc0019005d0}, 0xc8bf2e?)
    /usr/local/go/src/go/types/typexpr.go:180 +0x37
go/types.(*Checker).typeDecl(0xc001902800, 0xc001921cc0, 0xc000d6d640, 0x0)
    /usr/local/go/src/go/types/decl.go:615 +0x44d
go/types.(*Checker).objDecl(0xc001902800, {0xdc8f60, 0xc001921cc0}, 0x0)
    /usr/local/go/src/go/types/decl.go:197 +0xa7f
go/types.(*Checker).packageObjects(0xc001902800)
    /usr/local/go/src/go/types/resolver.go:681 +0x425
go/types.(*Checker).checkFiles(0xc001902800, {0xc000ab1458, 0x3, 0x3})
    /usr/local/go/src/go/types/check.go:408 +0x1a5
go/types.(*Checker).Files(...)
    /usr/local/go/src/go/types/check.go:372
sigs.k8s.io/controller-tools/pkg/loader.(*loader).typeCheck(0xc0002a7380, 0xc0008ea3c0)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/loader.go:286 +0x36a
sigs.k8s.io/controller-tools/pkg/loader.(*Package).NeedTypesInfo(0xc0008ea3c0)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/loader.go:99 +0x39
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check(0xc00024c6f0, 0xc0008ea3c0)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:268 +0x2b7
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check.func1(0x49?)
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:262 +0x53
created by sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check in goroutine 145
    /home/gallen/go/pkg/mod/sigs.k8s.io/controller-tools@v0.13.0/pkg/loader/refs.go:260 +0x1c5
[gallen@gallen-thinkpadp1gen5 memcached-operator]$ 
ggallen commented 2 months ago

OK, I made the incorrect assumption the go version wasn't that important. And a later go version would probably work just fine.

I was using go 1.22, when the instructions clearly say to use go 1.21.

Thanks to @joelanford for pointing this out. Once I downgraded to 1.21 the command works.