Search code examples
gokubernetescode-generationclient-go

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


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?


Solution

  • 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