k8s.io/code-generator操作

 

教程辦法

源碼位置:${GOPATH}/src/k8s-crd

k8s.io/code-generator位置:${GOPATH}/src/k8s.io

按照code-generator的提示操作的,報錯了

[root@node-01 code-generator]# ./generate-groups.sh all demo/pkg/client \
> demo/pkg/apis \
> foo:v1
Generating deepcopy funcs
F0319 09:01:37.153577   20541 main.go:82] Error: Failed making a parser: unable to add directory "demo/pkg/apis/foo/v1": unable to import "demo/pkg/apis/foo/v1": go/build: importGo demo/pkg/apis/foo/v1: exit status 1
can't load package: package demo/pkg/apis/foo/v1: malformed module path "demo/pkg/apis/foo": missing dot in first path element

不知道什麼原因。

笨辦法

找到k8s.io/code-generator代碼的運行腳本:generate-groups.sh

腳本里面其實是根據參數的不同執行了不同的代碼,遇是把需要運行的代碼編譯成二進制。

看腳本是需要以下程序

deepcopy-gen
client-gen
lister-gen
informer-gen

我把這4個 程序全部編譯好了放在了${GOPATH}/src下。

[root@node-01 src]# pwd
/usr/local/gopath/src
[root@node-01 src]# ls
client-gen  deepcopy-gen  demo  github.com  informer-gen  k8s.io  lister-gen

--help查看參數

可以看到這4個程序都需要哪些參數

[root@node-01 src]# ./client-gen --help
Usage of ./client-gen:
      --add_dir_header                     If true, adds the file directory to the header
      --alsologtostderr                    log to standard error as well as files
      --build-tag string                   A Go build tag to use to identify files generated by this command. Should be unique. (default "ignore_autogenerated")
      --clientset-api-path string          the value of default API HTTP path, starting with / and without trailing /. (default "/apis")
  -n, --clientset-name string              the name of the generated clientset package. (default "internalclientset")
      --clientset-only                     when set, client-gen only generates the clientset shell, without generating the individual typed clients
      --fake-clientset                     when set, client-gen will generate the fake clientset that can be used in tests (default true)
  -h, --go-header-file string              File containing boilerplate header text. The string YEAR will be replaced with the current 4-digit year. (default "/usr/local/gopath/src/k8s.io/code-generator/hack/boilerplate.go.txt")
      --included-types-overrides strings   list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient will be used for other group versions. (default [])
      --input strings                      group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format "group1/version1,group2/version2...". (default [])
      --input-base string                  base path to look for the api group. (default "k8s.io/kubernetes/pkg/apis")
  -i, --input-dirs strings                 Comma-separated list of import paths to get input types from.
      --log_backtrace_at traceLocation     when logging hits line file:N, emit a stack trace (default :0)
      --log_dir string                     If non-empty, write log files in this directory
      --log_file string                    If non-empty, use this log file
      --log_file_max_size uint             Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --logtostderr                        log to standard error instead of files (default true)
  -o, --output-base string                 Output base; defaults to $GOPATH/src/ or ./ if $GOPATH is not set. (default "/usr/local/gopath/src")
  -O, --output-file-base string            Base name (without .go suffix) for output files.
  -p, --output-package string              Base package path. (default "k8s.io/kubernetes/pkg/client/clientset_generated/")
      --plural-exceptions strings          list of comma separated plural exception definitions in Type:PluralizedType form (default [Endpoints:Endpoints])
      --skip_headers                       If true, avoid header prefixes in the log messages
      --skip_log_headers                   If true, avoid headers when opening log files
      --stderrthreshold severity           logs at or above this threshold go to stderr (default 2)
  -v, --v Level                            number for the log level verbosity
      --verify-only                        If true, only verify existing output, do not write anything.
      --vmodule moduleSpec                 comma-separated list of pattern=N settings for file-filtered logging
pflag: help requested

生成客戶端代碼

以demo項目爲例

// 用deepcopy-gen生成
./deepcopy-gen --input-dirs demo/pkg/apis/foo/v1 --output-package demo/pkg/client

執行完後,進入demo/pkg/apis/foo/v1,可以看到已經生成了deepcopy_generated.go,符合要求了。
再以相同的方法執行client-gen, informer-gen, lister-gen

[root@node-01 src]# ./client-gen --input-dirs demo/pkg/apis/foo/v1 --output-package demo/pkg/client
[root@node-01 src]# ./informer-gen --input-dirs demo/pkg/apis/foo/v1 --output-package demo/pkg/client
[root@node-01 src]# ./lister-gen --input-dirs demo/pkg/apis/foo/v1 --output-package demo/pkg/client

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章