kubernets code-generator
REF:
how-to-generate-client-codes-for-kubernetes-custom-resource-definitions-crd
Firstly we need to install golang.
1. the api spec looks like:
- # Definition
- ---
- apiVersion: apiextensions.k8s.io/v1beta1
- kind: CustomResourceDefinition
- metadata:
- name: hellotypes.foo.com
- spec:
- group: foo.com
- version: v1
- scope: Namespaced
- names:
- kind: HelloType
- shortNames: ht
- plural: hellotypes
- singular: hellotype
- # HelloType
- ---
- apiVersion: foo.com/v1
- kind: HelloType
- metadata:
- name: superman-hello
- spec:
- message: hello world
2. create the project workspace
- mkdir -p $GOPATH/src/github.com/superman/demo/pkg/apis/foo/v1
cd $GOPATH/src/github.com/superman/demo/pkg/apis
3. create foo/v1/types.go
- cat foo/v1/types.go
- package v1
- import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- // +genclient
- // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
- // HelloType is a top-level type
- type HelloType struct {
- metav1.TypeMeta `json:",inline"`
- // +optional
- metav1.ObjectMeta `json:"metadata,omitempty"`
- // +optional
- Status HelloTypeStatus `json:"status,omitempty"`
- // This is where you can define
- // your own custom spec
- Spec HelloSpec `json:"spec,omitempty"`
- }
- // custom spec
- type HelloSpec struct {
- Message string `json:"message,omitempty"`
- }
- // custom status
- type HelloTypeStatus struct {
- Name string
- }
- // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
- // no client needed for list as it's been created in above
- type HelloTypeList struct {
- metav1.TypeMeta `json:",inline"`
- // +optional
- metav1.ListMeta `son:"metadata,omitempty"`
- Items []HelloType `json:"items"`
- }
4. create foo/v1/doc.go
- cat foo/v1/doc.go
- // +k8s:deepcopy-gen=package
- // +k8s:defaulter-gen=TypeMeta
- // +groupName=foo.com
- package v1
5. ceate foo/v1/register.go
- cat foo/v1/register.go
- package v1
- import (
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/runtime/schema"
- )
- // Define your schema name and the version
- var SchemeGroupVersion = schema.GroupVersion{
- Group: "foo.com",
- Version: "v1",
- }
- var (
- SchemeBuilder runtime.SchemeBuilder
- localSchemeBuilder = &SchemeBuilder
- AddToScheme = localSchemeBuilder.AddToScheme
- )
- func init() {
- // We only register manually written functions here. The registration of the
- // generated functions takes place in the generated files. The separation
- // makes the code compile even when the generated files are missing.
- localSchemeBuilder.Register(addKnownTypes)
- }
- // Resource takes an unqualified resource and returns a Group qualified GroupResource
- func Resource(resource string) schema.GroupResource {
- return SchemeGroupVersion.WithResource(resource).GroupResource()
- }
- // Adds the list of known types to the given scheme.
- func addKnownTypes(scheme *runtime.Scheme) error {
- scheme.AddKnownTypes(
- SchemeGroupVersion,
- &HelloType{},
- &HelloTypeList{},
- )
- scheme.AddKnownTypes(
- SchemeGroupVersion,
- &metav1.Status{},
- )
- metav1.AddToGroupVersion(
- scheme,
- SchemeGroupVersion,
- )
- return nil
- }
- cd d $GOPATH/src/github.com/superman/demo/pkg/apis
.- ├── apis
- │ └── foo
- │ └── v1
- │ ├── doc.go
- │ ├── register.go
- │ ├── types.go
5. gen code
- go get k8s.io/code-generator
- go get k8s.io/apimachinery
- cd $GOPATH/src/k8s.io/code-generator
- ./generate-groups.sh all \
- "github.com/superman/demo/pkg/client" \
- "github.com/superman/demo/pkg/apis" \
- foo:v1
- cd $GOPATH/src/github.com/superman/demo/pkg/
- tree
- .
- ├── apis
- │ └── foo
- │ └── v1
- │ ├── doc.go
- │ ├── register.go
- │ ├── types.go
- │ └── zz_generated.deepcopy.go
- └── client
- ├── clientset
- │ └── versioned
- │ ├── clientset.go
- │ ├── doc.go
- │ ├── fake
- │ │ ├── clientset_generated.go
- │ │ ├── doc.go
- │ │ └── register.go
- │ ├── scheme
- │ │ ├── doc.go
- │ │ └── register.go
- │ └── typed
- │ └── foo
- │ └── v1
- │ ├── doc.go
- │ ├── fake
- │ │ ├── doc.go
- │ │ ├── fake_foo_client.go
- │ │ └── fake_hellotype.go
- │ ├── foo_client.go
- │ ├── generated_expansion.go
- │ └── hellotype.go
- ├── informers
- │ └── externalversions
- │ ├── factory.go
- │ ├── foo
- │ │ ├── interface.go
- │ │ └── v1
- │ │ ├── hellotype.go
- │ │ └── interface.go
- │ ├── generic.go
- │ └── internalinterfaces
- │ └── factory_interfaces.go
- └── listers
- └── foo
- └── v1
- ├── expansion_generated.go
- └── hellotype.go
REF:
Kubernetes Deep Dive: Code Generation for CustomResources (翻译)
Extending Kubernetes: Create Controllers for Core and Custom Resources (total example)
Writing Kubernetes Custom Controllers
How to generate client codes for Kubernetes Custom Resource Definitions (CRD)
code-generator git hub(各种概念定义)
Accessing Kubernetes CRDs from the client-go package (存手工代码,没有自动生成)
创建和管理CRD的client库位于:github.com/kubernetes/…
writing-your-first-kubernetes-operator
search "kubernetes operator example" or "kubernetes operator tutorial" for operator auto gen
kubernets code-generator的更多相关文章
- ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始化.多语言.automapper自动注 ...
- OData Client Code Generator
转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...
- Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator
Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Gen ...
- JAVA 调用Axis2 code generator 生成的webservice
以下代码为调用 JAVA 调用Axis2 code generator 生成的webservice的代码. package test; import java.rmi.RemoteException; ...
- DNN - Modules - QR Code Generator
Dotnetnuke 平台上的二维码模块.支持DNN 7.x平台的安装 QR码(快速响应码)是二维条形码.随着移动设备市场正以快速的步伐,QR码正在成为非常重要的营销工具.与移动电话或平板电脑的扫描, ...
- there was an error running the selected code generator unable to retrieve metadata for
there was an error running the selected code generator unable to retrieve metadata for PROBLEM: I ha ...
- Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率
前言 大家好,给大家带来Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率的概述,希望你们喜欢 学习目标 掌握两个插件的安装和使用,能够实现 ...
- 安卓自动生成代码插件-Android code Generator(转)
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 介绍 A ...
- 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发
ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...
- FSM Code Generator
FSM Code Generator is a script code generator for Finite State Machine, it has a viaual designer bas ...
随机推荐
- .gitignore文件的配置和生效
1.配置 a)确保.gitignore文件和.git文件夹在同级目录 b)配置语法 # # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a ...
- Install sublime text for elementary os
1. download sublime_text_3_build_3176_x86.tar.gz from http://www.sublimetext.com/3 2. extract it to ...
- IP协议号 IP首部中有8位协议号,用于指明IP的上层协议.
IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网 ...
- 图片上传组件webuploader
前端组件webuploader 当时也是搞了很久参考这种demo,但是没记.现在事后大致总结下.直接上大概代码(我使用asp.net MVC来做的): 执行顺序:(get)Record/Add——A ...
- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
约束字段为自动增长,被约束的字段必须同时被key约束 没有设置成primary key 时,会报错. 加上primary key 则设置成功.
- PySe-007-解决“Chrome正在受到自动软件的控制”
python使用selenium启动chrome的代码如下所示: #!/usr/local/bin/python # -*- coding: utf-8 -*- from selenium impor ...
- 记录一个bootstrap惨痛的错误
记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...
- 学号 20175201张驰 《Java程序设计》第5周学习总结
学号 20175201张驰 <Java程序设计>第5周学习总结 教材学习内容总结 第六章 ·1.接口的接口体中只可以有常量和abstract方法. ·2.和类一样,接口也是Java中一种重 ...
- windows环境在本地配nginx
本地搭建了前端项目,但奈何有时候需要https访问的需求,所以做了一个尝试在本地(windows环境)下配置nginx,最终的效果就是 搭建的时候,遇到两个问题: 第一个是如果要在本地搭建https, ...
- vue axios中文文档详解
英文文档:https://github.com/axios/axios 参考:https://www.jb51.net/article/123485.htm