REF:

how-to-generate-client-codes-for-kubernetes-custom-resource-definitions-crd

Firstly we need to install golang.

1. the api spec looks like:

  1. # Definition
  2. ---
  3. apiVersion: apiextensions.k8s.io/v1beta1
  4. kind: CustomResourceDefinition
  5. metadata:
  6. name: hellotypes.foo.com
  7. spec:
  8. group: foo.com
  9. version: v1
  10. scope: Namespaced
  11. names:
  12. kind: HelloType
  13. shortNames: ht
  14. plural: hellotypes
  15. singular: hellotype
  16. # HelloType
  17. ---
  18. apiVersion: foo.com/v1
  19. kind: HelloType
  20. metadata:
  21. name: superman-hello
  22. spec:
  23. message: hello world

2. create the project workspace

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

  1. cat foo/v1/types.go
  1. package v1
  2.  
  3. import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  4.  
  5. // +genclient
  6. // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
  7.  
  8. // HelloType is a top-level type
  9. type HelloType struct {
  10. metav1.TypeMeta `json:",inline"`
  11. // +optional
  12. metav1.ObjectMeta `json:"metadata,omitempty"`
  13.  
  14. // +optional
  15. Status HelloTypeStatus `json:"status,omitempty"`
  16. // This is where you can define
  17. // your own custom spec
  18. Spec HelloSpec `json:"spec,omitempty"`
  19. }
  20.  
  21. // custom spec
  22. type HelloSpec struct {
  23. Message string `json:"message,omitempty"`
  24. }
  25.  
  26. // custom status
  27. type HelloTypeStatus struct {
  28. Name string
  29. }
  30.  
  31. // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
  32.  
  33. // no client needed for list as it's been created in above
  34. type HelloTypeList struct {
  35. metav1.TypeMeta `json:",inline"`
  36. // +optional
  37. metav1.ListMeta `son:"metadata,omitempty"`
  38.  
  39. Items []HelloType `json:"items"`
  40. }

4. create foo/v1/doc.go

  1. cat foo/v1/doc.go
  1. // +k8s:deepcopy-gen=package
  2. // +k8s:defaulter-gen=TypeMeta
  3. // +groupName=foo.com
  4.  
  5. package v1

5. ceate foo/v1/register.go

  1. cat foo/v1/register.go
  1. package v1
  2.  
  3. import (
  4. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  5. "k8s.io/apimachinery/pkg/runtime"
  6. "k8s.io/apimachinery/pkg/runtime/schema"
  7. )
  8.  
  9. // Define your schema name and the version
  10. var SchemeGroupVersion = schema.GroupVersion{
  11. Group: "foo.com",
  12. Version: "v1",
  13. }
  14.  
  15. var (
  16. SchemeBuilder runtime.SchemeBuilder
  17. localSchemeBuilder = &SchemeBuilder
  18. AddToScheme = localSchemeBuilder.AddToScheme
  19. )
  20.  
  21. func init() {
  22. // We only register manually written functions here. The registration of the
  23. // generated functions takes place in the generated files. The separation
  24. // makes the code compile even when the generated files are missing.
  25. localSchemeBuilder.Register(addKnownTypes)
  26. }
  27.  
  28. // Resource takes an unqualified resource and returns a Group qualified GroupResource
  29. func Resource(resource string) schema.GroupResource {
  30. return SchemeGroupVersion.WithResource(resource).GroupResource()
  31. }
  32.  
  33. // Adds the list of known types to the given scheme.
  34. func addKnownTypes(scheme *runtime.Scheme) error {
  35. scheme.AddKnownTypes(
  36. SchemeGroupVersion,
  37. &HelloType{},
  38. &HelloTypeList{},
  39. )
  40.  
  41. scheme.AddKnownTypes(
  42. SchemeGroupVersion,
  43. &metav1.Status{},
  44. )
  45.  
  46. metav1.AddToGroupVersion(
  47. scheme,
  48. SchemeGroupVersion,
  49. )
  50.  
  51. return nil
  52. }
  1. cd d $GOPATH/src/github.com/superman/demo/pkg/apis
    .
  2. ├── apis
  3.    └── foo
  4.    └── v1
  5.    ├── doc.go
  6.    ├── register.go
  7.    ├── types.go

5. gen code

  1. go get k8s.io/code-generator
  2. go get k8s.io/apimachinery
  3. cd $GOPATH/src/k8s.io/code-generator
  4. ./generate-groups.sh all \
  5. "github.com/superman/demo/pkg/client" \
  6. "github.com/superman/demo/pkg/apis" \
  7. foo:v1

  1. cd $GOPATH/src/github.com/superman/demo/pkg/
  2. tree
  3. .
  4. ├── apis
  5.    └── foo
  6.    └── v1
  7.    ├── doc.go
  8.    ├── register.go
  9.    ├── types.go
  10.    └── zz_generated.deepcopy.go
  11. └── client
  12. ├── clientset
  13.    └── versioned
  14.    ├── clientset.go
  15.    ├── doc.go
  16.    ├── fake
  17.       ├── clientset_generated.go
  18.       ├── doc.go
  19.       └── register.go
  20.    ├── scheme
  21.       ├── doc.go
  22.       └── register.go
  23.    └── typed
  24.    └── foo
  25.    └── v1
  26.    ├── doc.go
  27.    ├── fake
  28.       ├── doc.go
  29.       ├── fake_foo_client.go
  30.       └── fake_hellotype.go
  31.    ├── foo_client.go
  32.    ├── generated_expansion.go
  33.    └── hellotype.go
  34. ├── informers
  35.    └── externalversions
  36.    ├── factory.go
  37.    ├── foo
  38.       ├── interface.go
  39.       └── v1
  40.       ├── hellotype.go
  41.       └── interface.go
  42.    ├── generic.go
  43.    └── internalinterfaces
  44.    └── factory_interfaces.go
  45. └── listers
  46. └── foo
  47. └── v1
  48. ├── expansion_generated.go
  49. └── 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. .gitignore文件的配置和生效

    1.配置 a)确保.gitignore文件和.git文件夹在同级目录 b)配置语法 # # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a ...

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

  3. IP协议号 IP首部中有8位协议号,用于指明IP的上层协议.

    IP协议号   IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网 ...

  4. 图片上传组件webuploader

    前端组件webuploader 当时也是搞了很久参考这种demo,但是没记.现在事后大致总结下.直接上大概代码(我使用asp.net  MVC来做的): 执行顺序:(get)Record/Add——A ...

  5. 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 则设置成功.

  6. PySe-007-解决“Chrome正在受到自动软件的控制”

    python使用selenium启动chrome的代码如下所示: #!/usr/local/bin/python # -*- coding: utf-8 -*- from selenium impor ...

  7. 记录一个bootstrap惨痛的错误

    记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...

  8. 学号 20175201张驰 《Java程序设计》第5周学习总结

    学号 20175201张驰 <Java程序设计>第5周学习总结 教材学习内容总结 第六章 ·1.接口的接口体中只可以有常量和abstract方法. ·2.和类一样,接口也是Java中一种重 ...

  9. windows环境在本地配nginx

    本地搭建了前端项目,但奈何有时候需要https访问的需求,所以做了一个尝试在本地(windows环境)下配置nginx,最终的效果就是 搭建的时候,遇到两个问题: 第一个是如果要在本地搭建https, ...

  10. vue axios中文文档详解

    英文文档:https://github.com/axios/axios 参考:https://www.jb51.net/article/123485.htm