如何在Go项目vendor目录安装依赖以运行k8s code-generator脚本
一、generate-groups.sh脚本参数详解
先把命令重新对齐以便对应参数理解:
vendor/k8s.io/code-generator/generate-groups.sh all \ github.com/programming-kubernetes/cnat/cnat-client-go/pkg/generated \ github.com/programming-kubernetes/cnat/cnat-client-go/pkg/apis \ cnat:v1alpha1 \ --output-base "${GOPATH}/src" \ --go-header-file "hack/boilerplate.go.txt"
各参数作用:
all:指定生成的代码范围,all表示生成全套客户端代码,包含ClientSet、Lister、Informer三类核心组件- 第一个路径参数:生成代码的目标根目录,最终各类客户端代码会放在该路径的子目录(比如
generated/clientset、generated/listers) - 第二个路径参数:自定义CRD API定义文件的根目录,脚本会从这里读取
cnat/v1alpha1下的API类型定义 cnat:v1alpha1:指定要处理的API组和版本,格式为<组名>:<版本号>,脚本仅处理该组对应版本的API--output-base "${GOPATH}/src":代码输出的基础路径,脚本会把前面的目标根目录拼接到该路径下,最终代码实际位置为${GOPATH}/src/github.com/programming-kubernetes/cnat/cnat-client-go/pkg/generated--go-header-file "hack/boilerplate.go.txt":指定生成代码时自动添加的头部模板文件,通常用于放置版权声明、许可证信息这类通用头部内容
二、Go Modules下生成vendor目录的步骤
你已经用go mod init <module_path>初始化了模块,按以下步骤操作即可:
- 对齐依赖版本:执行
go get k8s.io/code-generator@<对应版本>,版本要和项目中其他Kubernetes依赖版本保持一致(比如书中案例使用的K8s版本),这会将code-generator添加到go.mod的依赖列表 - 生成vendor目录:在项目根目录执行
go mod vendor,该命令会自动下载go.mod中声明的所有依赖包,并复制到项目根目录的vendor文件夹 - 验证并运行脚本:检查项目根目录下是否出现
vendor文件夹且包含k8s.io/code-generator目录,之后即可正常运行目标脚本
内容的提问来源于stack exchange,提问作者imawful
相关产品推荐
相关产品推荐

