Kubernetes code-generator使用

Kubernetes目前常使用CRD+Controller的方式擴展API,官方提供了CRD代碼的自動生成器code-generator,主要介紹下如何使用code-generator去生成CRD中重複的代碼。git

準備環境

首先準備go語言環境,配置好環境變量。以我當前爲例,GOPATH以下:github

準備初始化代碼

由於code-generator是在kubernetes官網代碼中截取的,因此按照kubernetes的代碼生成規則,在$GOPATH/src/下新建文件夾k8s.io,在k8s.io文件夾下載code-generator代碼庫,git clone https://github.com/kubernetes/code-generator, cd code-generator/,git checkout kubernetes-1.13.3,當前以最新版的1.13.3版本爲準。api

生成代碼

默認的生成腳本在code-generator下的generate-groups.sh,如我想生成./generate-groups.sh all github.com/nevermore/project/pkg/client github.com/nevermore/project/pkg/apis "foo:v1 bar:v1beta1",則須要在$GOPATH/src/新建好相應的路徑,mkdir -p $GOPATH/src/github.com/nevermore/project/pkg/clientmkdir -p $GOPATH/src/github.com/nevermore/project/pkg/apis/foo/v1,進入到v1路徑下,新建三個文件touch doc.go types.go regsiter.go,修改每一個文件開頭爲package v1;同理配置apis/bar/v1beta1相應的文件。 最終生成相應的clientsetlistersinformers。如圖:3d

遺留問題

因爲在doc.go types.go regsiter.go三個文件中,只是聲明瞭package,並未在代碼中添加一些初始化的定義,因此目前看到目錄下沒有生成listersinformers。後續補充如何生成相應的代碼。code

相關文章
相關標籤/搜索