Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Following documentation to contribute new Vault API does not seem to work #257

Open
yann-soubeyrand opened this issue Jan 16, 2025 · 0 comments

Comments

@yann-soubeyrand
Copy link

Hello,

I have tried to follow the documentation to bootstrap a new Vault API (https://github.com/redhat-cop/vault-config-operator/blob/main/docs/contributing-vault-apis.md), but it did not work for me.

I first tried with the latest operator-sdk version (v1.39.1), but it seems that this version does not support kubebuilder v3 projects:

❯ operator-sdk create api --group redhatcop --version v1alpha1 --kind CertAuthEngineConfig --resource --controller
Error: no plugin could be resolved with key "go.kubebuilder.io/v3" for project version "3"
Usage:
  operator-sdk [flags]

Examples:
The first step is to initialize your project:
    operator-sdk init [--plugins=<PLUGIN KEYS> [--project-version=<PROJECT VERSION>]]

<PLUGIN KEYS> is a comma-separated list of plugin keys from the following table
and <PROJECT VERSION> a supported project version for these plugins.

                             Plugin keys | Supported project versions
-----------------------------------------+----------------------------
     ansible.sdk.operatorframework.io/v1 |                          3
 deploy-image.go.kubebuilder.io/v1-alpha |                          3
                    go.kubebuilder.io/v4 |                          3
         grafana.kubebuilder.io/v1-alpha |                          3
        helm.sdk.operatorframework.io/v1 |                          3

For more specific help for the init command of a certain plugins and project version
configuration please run:
    operator-sdk init --help --plugins=<PLUGIN KEYS> [--project-version=<PROJECT VERSION>]

Default plugin keys: "go.kubebuilder.io/v4"
Default project version: "3"


Flags:
  -h, --help                     help for operator-sdk
      --plugins strings          plugin keys to be used for this subcommand execution
      --project-version string   project version (default "3")

FATA[0000] no plugin could be resolved with key "go.kubebuilder.io/v3" for project version "3" 

I then tried to use previous versions of the operator-sdk, but it did not work either (it seems to be due to kubernetes-sigs/controller-tools#851):

❯ operator-sdk create api --group redhatcop --version v1alpha1 --kind CertAuthEngineConfig --resource --controller
[Deprecation Notice] This version is deprecated.The `go/v3` cannot scaffold projects using kustomize versions v4x+ and cannot fully support Kubernetes 1.25+.It is recommended to upgrade your project to the latest versions available (go/v4).Please, check the migration guide to learn how to upgrade your project

INFO[0000] Writing kustomize manifests for you to edit... 
INFO[0000] Writing scaffold for you to edit...          
INFO[0000] api/v1alpha1/certauthengineconfig_types.go   
INFO[0000] controllers/certauthengineconfig_controller.go 
INFO[0000] Update dependencies:
$ go mod tidy           
INFO[0000] Running make:
$ make generate                
mkdir -p /home/yann/Projets/Professionnel/kubernetes/vault-config-operator/bin
test -s /home/yann/Projets/Professionnel/kubernetes/vault-config-operator/bin/controller-gen || echo "Downloading controller-gen to /home/yann/Projets/Professionnel/kubernetes/vault-config-operator/bin/controller-gen..." && GOBIN=/home/yann/Projets/Professionnel/kubernetes/vault-config-operator/bin go install sigs.k8s.io/controller-tools/cmd/[email protected]
Downloading controller-gen to /home/yann/Projets/Professionnel/kubernetes/vault-config-operator/bin/controller-gen...
/home/yann/Projets/Professionnel/kubernetes/vault-config-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=0xa40c2f]

goroutine 146 [running]:
go/types.(*Checker).handleBailout(0xc000507340, 0xc000a39d60)
	/usr/lib/golang/src/go/types/check.go:404 +0x88
panic({0xc00400?, 0x13240e0?})
	/usr/lib/golang/src/runtime/panic.go:785 +0x132
go/types.(*StdSizes).Sizeof(0x0, {0xe03800, 0x132ca80})
	/usr/lib/golang/src/go/types/sizes.go:229 +0x30f
go/types.(*Config).sizeof(...)
	/usr/lib/golang/src/go/types/sizes.go:334
go/types.representableConst.func1({0xe03800?, 0x132ca80?})
	/usr/lib/golang/src/go/types/const.go:77 +0x86
go/types.representableConst({0xe0a170, 0x12f8960}, 0xc000507340, 0x132ca80, 0x0)
	/usr/lib/golang/src/go/types/const.go:93 +0x173
go/types.(*Checker).arrayLength(0xc000507340, {0xe08520, 0xc000ab41e0?})
	/usr/lib/golang/src/go/types/typexpr.go:537 +0x1db
go/types.(*Checker).typInternal(0xc000507340, {0xe06b40, 0xc000814720}, 0x0)
	/usr/lib/golang/src/go/types/typexpr.go:320 +0x4b5
go/types.(*Checker).definedType(0xc000507340, {0xe06b40, 0xc000814720}, 0xe0fe40?)
	/usr/lib/golang/src/go/types/typexpr.go:201 +0x2f
go/types.(*Checker).varType(0xc000507340, {0xe06b40, 0xc000814720})
	/usr/lib/golang/src/go/types/typexpr.go:166 +0x25
go/types.(*Checker).structType(0xc000507340, 0xc000b433e0, 0xc000b433e0?)
	/usr/lib/golang/src/go/types/struct.go:114 +0x18a
go/types.(*Checker).typInternal(0xc000507340, {0xe06ab0, 0xc000c1aa08}, 0xc000b34dc0)
	/usr/lib/golang/src/go/types/typexpr.go:337 +0xf45
go/types.(*Checker).definedType(0xc000507340, {0xe06ab0, 0xc000c1aa08}, 0xcd0fb8?)
	/usr/lib/golang/src/go/types/typexpr.go:201 +0x2f
go/types.(*Checker).typeDecl(0xc000507340, 0xc000b34dc0, 0xc000ab2600, 0x0)
	/usr/lib/golang/src/go/types/decl.go:649 +0x4e8
go/types.(*Checker).objDecl(0xc000507340, {0xe0fe40, 0xc000b34dc0}, 0x0)
	/usr/lib/golang/src/go/types/decl.go:191 +0xa3f
go/types.(*Checker).packageObjects(0xc000507340)
	/usr/lib/golang/src/go/types/resolver.go:702 +0x3a5
go/types.(*Checker).checkFiles(0xc000507340, {0xc000866648, 0x3, 0x3})
	/usr/lib/golang/src/go/types/check.go:459 +0x15a
go/types.(*Checker).Files(0xc000342920?, {0xc000866648?, 0xc0000a9560?, 0x6?})
	/usr/lib/golang/src/go/types/check.go:422 +0x75
sigs.k8s.io/controller-tools/pkg/loader.(*loader).typeCheck(0xc0003472c0, 0xc00014e0e0)
	/home/yann/Projets/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/loader.go:286 +0x36a
sigs.k8s.io/controller-tools/pkg/loader.(*Package).NeedTypesInfo(0xc00014e0e0)
	/home/yann/Projets/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/loader.go:99 +0x39
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check(0xc000a41c20, 0xc00014e0e0)
	/home/yann/Projets/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:268 +0x2b2
sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check.func1(0x5a?)
	/home/yann/Projets/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:262 +0x4d
created by sigs.k8s.io/controller-tools/pkg/loader.(*TypeChecker).check in goroutine 82
	/home/yann/Projets/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/loader/refs.go:260 +0x1bc
make: *** [Makefile:114: generate] Error 2
Error: failed to create API: unable to run post-scaffold tasks of "base.go.kubebuilder.io/v3": exit status 2
Usage:
  operator-sdk create api [flags]

Examples:
  # Create a frigates API with Group: ship, Version: v1beta1 and Kind: Frigate
  operator-sdk create api --group ship --version v1beta1 --kind Frigate

  # Edit the API Scheme
  nano api/v1beta1/frigate_types.go

  # Edit the Controller
  nano controllers/frigate/frigate_controller.go

  # Edit the Controller Test
  nano controllers/frigate/frigate_controller_test.go

  # Generate the manifests
  make manifests

  # Install CRDs into the Kubernetes cluster using kubectl apply
  make install

  # Regenerate code and run against the Kubernetes cluster configured by ~/.kube/config
  make run


Flags:
      --controller           if set, generate the controller without prompting the user (default true)
      --force                attempt to create resource even if it already exists
      --group string         resource Group
  -h, --help                 help for api
      --kind string          resource Kind
      --make make generate   if true, run make generate after generating files (default true)
      --namespaced           resource is namespaced (default true)
      --plural string        resource irregular plural form
      --resource             if set, generate the resource without prompting the user (default true)
      --version string       resource Version

Global Flags:
      --plugins strings   plugin keys to be used for this subcommand execution
      --verbose           Enable verbose logging

FATA[0003] failed to create API: unable to run post-scaffold tasks of "base.go.kubebuilder.io/v3": exit status 2 

As a workaround, I used a previous version of operator-sdk and set the GOTOOLCHAIN environment variable to go1.21.8 (the one used in go.mod).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant