Kubernetes client code generator: Can the code exist only locally and not on a repository for the core-generator to work?

2/6/2020

I am trying to generate client code using k8s.io/code-generator. These are the instructions that I am following: https://itnext.io/how-to-generate-client-codes-for-kubernetes-custom-resource-definitions-crd-b4b9907769ba

My question is, does my go module need to be present on a repository or can I simply run the generate-groups.sh script on a go module that is ONLY present on my local system and not on any repository?

I have already tried running it and from what I understand, there needs to be a repository having ALL the contents of my local go module. Is my understanding correct?

-- Saloni Kogta
client-go
code-generation
go
kubernetes

1 Answer

3/22/2020

You CAN run kubernetes/code-generator's generate-groups.sh on a go module that is only present on your local system. Neither code-generator nor your module needs to be in your GOPATH.

Verification

Cloned kubernetes/code-generator into a new directory.

$HOME/somedir
├── code-generator

Created a project called myrepo and mocked it with content to resemble sample-controller. Did this in the same directory to keep it simple.

somedir
├── code-generator
└── myorg.com
    └── myrepo        # mock of sample-controller
        ├── go.mod
        ├── go.sum
        └── pkg
            └── apis
                └── myorg
                    ├── register.go
                    └── v1alpha1
                        ├── doc.go
                        ├── register.go
                        └── types.go

My go.mod looked like

module myorg.com/myrepo

go 1.14

require k8s.io/apimachinery v0.17.4

Ran generate-group.sh. The -h flag specifies which header file to use. The -o flag specifies the output base which is necessary here because we're not in GOPATH.

$HOME/somedir/code-generator/generate-groups.sh all myorg.com/myrepo/pkg/client myorg.com/myrepo/pkg/apis "myorg:v1alpha1" \
-h $HOME/somedir/code-generator/hack/boilerplate.go.txt \
-o $HOME/somedir

Confirmed code generated in correct locations

myrepo
├── go.mod
├── go.sum
└── pkg
    ├── apis
    │   └── myorg
    │       ├── register.go
    │       └── v1alpha1
    │           ├── doc.go
    │           ├── register.go
    │           ├── types.go
    │           └── zz_generated.deepcopy.go
    └── client
        ├── clientset
        │   └── versioned
        │       ├── clientset.go
        │       ├── doc.go
        │       ├── fake
        │       ├── scheme
        │       └── typed
        ├── informers
        │   └── externalversions
        │       ├── factory.go
        │       ├── generic.go
        │       ├── internalinterfaces
        │       └── myorg
        └── listers
            └── myorg
                └── v1alpha1

Sources

-- Daniel Nguyen
Source: StackOverflow