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/client
,mkdir -p $GOPATH/src/github.com/nevermore/project/pkg/apis/foo/v1
,進入到v1路徑下,新建三個文件touch doc.go types.go regsiter.go
,修改每一個文件開頭爲package v1
;同理配置apis/bar/v1beta1
相應的文件。 最終生成相應的clientset
、listers
、informers
。如圖:3d
因爲在doc.go types.go regsiter.go
三個文件中,只是聲明瞭package
,並未在代碼中添加一些初始化的定義,因此目前看到目錄下沒有生成listers
和informers
。後續補充如何生成相應的代碼。code