K8s的五种代码生成器

概述

代码生成器 说明
Conversion-gen 自动生成convert函数的代码是生成器,用于资源对象的版本转换函数
deepcopy-gen 自动生成deepcopy的函数代码生成器,用于资源对象的深复制函数
defaulter-gen 自动生成defaulter的函数代码生成器,用于资源对象的默认值函数
prerelese- lifecycle-gen 自动生成api-status.csv文件的工具
openapi-gen 自动生成openapi定义文件的代码生成器

除了上述之外,其实还支持很多,比如client-gen、lister-gen、informer-gen

Conversion-gen

自动生成convert函数的代码是生成器,用于资源对象的版本转换函数

常规引入tag

+k8s:conversion-gen=<peer-pkg>

生成规则

https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go

Conversion-gen会遍历包中所有类型,如果类型为types.Map,type.Slice,type.Pointer,types.Struct,type.Alias:且过滤掉了私有的types.Map,types.Slice,type.Pointer,type.Alias,且生产convert函数,同时为该类型同时生成RegisterConversions注册函数

deep copy-gen

实现类型的深拷贝

// +k8s:deepcopy-gen=package						

通过在表单的类型定义上指定注释,可以单个类型而不是整个包生成DeepCopy函数

// +k8s:deepcopy-gen=true

default-gen

自动生成Defaulter函数

# 为拥有ListMeta属性的类型生成Default相关函数,其Tag形式如下
+k8s:defaulter-gen=ListMeta

# 为拥有ObjectMeta属性的类型生成Defaulter相关函数时,其Tag形式如下
+k8s:defaulter-gen=ObjectMeta

openapi-gen

根据OpenAPI规范生成代码,为客户端库、服务器存根

# 为特定类型|包生成
+k8s:openapi-gen=true
# 排除特定类型|包生成
+k8s:openapi-gen=false

prerelese- lifecycle-gen

主要为beta API生成zz_api_status.go文件,该文件指示种类、引入版本,将被弃用的版本以及被删除的版本。

// +k8s:prereplease-lifecycle-gen=package
# 注册是一个整体选项,不适用单个对象
// +k8s:prereplease-lifecycle-gen:introduced=1.19