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

crd-code-generation

How to generate client codes for Kubernetes Custom Resource Definitions (CRD)

code-generator  git hub(各种概念定义)

官方的sample-controller项目

github上的crd-code-generation项目

Accessing Kubernetes CRDs from the client-go package (存手工代码,没有自动生成)

Pod client set的实现

deep copy

github上client-go官方项目工程

sample-controller示例

kubernetes-crd-example

创建和管理CRD的client库位于:github.com/kubernetes/…

kubernetes-operator-tutorial

writing-your-first-kubernetes-operator

search "kubernetes operator example" or "kubernetes operator tutorial" for operator  auto gen

kubernets code-generator的更多相关文章

  1. ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始化.多语言.automapper自动注 ...

  2. OData Client Code Generator

    转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...

  3. Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator

    Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Gen ...

  4. JAVA 调用Axis2 code generator 生成的webservice

    以下代码为调用 JAVA 调用Axis2 code generator 生成的webservice的代码. package test; import java.rmi.RemoteException; ...

  5. DNN - Modules - QR Code Generator

    Dotnetnuke 平台上的二维码模块.支持DNN 7.x平台的安装 QR码(快速响应码)是二维条形码.随着移动设备市场正以快速的步伐,QR码正在成为非常重要的营销工具.与移动电话或平板电脑的扫描, ...

  6. 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 ...

  7. Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率

    前言 大家好,给大家带来Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率的概述,希望你们喜欢 学习目标 掌握两个插件的安装和使用,能够实现 ...

  8. 安卓自动生成代码插件-Android code Generator(转)

    编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 介绍 A ...

  9. 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...

  10. FSM Code Generator

    FSM Code Generator is a script code generator for Finite State Machine, it has a viaual designer bas ...

随机推荐

  1. 由PHP实现单向链表引发的对象赋值,对象传参,链表操作引发的一系列问题

    2019年2月25日14:21:13 测试版本php 5.4 ,5.6,7.0,7.2 代码请看: https://www.cnblogs.com/zx-admin/p/10373866.html 1 ...

  2. java_爬虫_从腾讯视频播放界面爬取视频真实地址

    由于想在微信公众号里爬一点儿考研的视频 花了差不多一天的时间把这个爬虫做好(其实也不算爬虫吧,就算个能批量处理的地址解析器,半个爬虫) 不多说,进正题 (本文适合有java基础的同学,没基础的用客户端 ...

  3. 内置对象之request对象

    内置对象就是(容器)已经创建好的对象,可以被直接使用.当用户发送一个请求给容器,它就会自动创建一个对象来处理客户端发送来的消息,如request这个对象,可以获取到用户(客户端)发送来的信息.它的常见 ...

  4. [05-02]红帽linux常用操作命令

    命令怎么用(三种方式) shutdown --help shutdown --? man shutdown  (man 就是manual  手册, 指南) 服务 service 怎么知道服务的名字呢? ...

  5. 2018-2019-2 网络对抗技术 20165336 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165336 Exp3 免杀原理与实践 1.基础问题回答 (1)杀软是如何检测出恶意代码的? 根据计算机病毒课程知道了每个病毒都有其对应的特征码,杀软是根据这 ...

  6. java并发请求多个接口,顺序返回

    最近有个需求,从一个api拿数据,但是api时间参数又有范围限制,因此需要自己将时间分成多段,多次请求api,并且最终返回的数据需要保持原有的顺序 代码如下: package com.test001. ...

  7. less命令查看文件时的常用操作

    下键或者回车:往下一行 D:往下半页 空格和f:往下一页 上键:往上一行 B:往上一页 shift+G:直接切到末尾 ?+搜索条件:从下往上搜索 /+搜索条件:从上往下搜索

  8. ASP.NET微信支付XXE漏洞修复

    1. XXE场景 关于XML解析存在的安全问题指引 微信支付商户,最近暴露的XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件 ...

  9. pymongo基础

    PyMongo是MongoDB数据库的python模块 MongoDB是由C++语音编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统. win10 安装 4.0 使用官网的配置 使用 n ...

  10. studio-3t 配置文件位置

    换电脑了,原来的studio-3t的配置 在 C:\Users\用户名\.3T. 将这个目录下的所有文件拷贝到 新电脑里的 相同文件夹,覆盖即可