根据CRD的yaml文件生成java的models类

这篇博客介绍了如何根据CRD的yaml文件生成java的models类,主要涉及两种方式:通过Github Action远程生成(未成功尝试)和在本地环境中生成。本地生成包括拉取代码生成器镜像、运行容器,并提供了具体的命令示例。
摘要由CSDN通过智能技术生成

根据CRD的yaml文件生成java的models类

首先这里生成的类对应kubernetes-client/java

参考:https://github.com/kubernetes-client/java/blob/master/docs/generate-model-from-third-party-resources.md?spm=a2c6h.12873639.article-detail.14.54981476uqaym8&file=generate-model-from-third-party-resources.md

两种方式

1.通过 Github Action 远程生成

​ 具体可参考https://blog.csdn.net/wsdlll/article/details/125385113

​ 本人未尝试成功,有童鞋实现后帮忙分享下

2.在本地环境中生成

  1. 拉取代码生成器的镜像

    docker pull ghcr.io/kubernetes-client/java/crd-model-gen:v1.0.6
    
  2. 运行代码生成器的镜像文件

    基本上,代码生成器容器会本地 docker 守护进程上自动配置一个 kubernetes 集群并将您的 CRD 应用到集群上来工作。在验证所有 CRD 都已正确安装后,会下载 OpenAPI 模式并生成一个最小的 Java 项目,其中包含为您的 CRD 生成的类模型。

    要使代码生成器容器工作,您需要将docker.sock和相应的主机路径挂载到容器,以便它可以连接到 docker 服务并将生成的项目保存到您的主机路径。还有一些配置项可以调整代码生成行为:

    -u: <CRD's download URL or file path, use it multiple times to read multiple CRDs>
    
    -n: <the target CRD group name, which is in the reverse order of ".spec.group">
    
    -p: <output package name for the generated java classes>
    
    -o: <output path of the generated project>
    

    注意

    -n 此处填写的是CRD group name,倒序目录,例如group name为 kubeovn.io,则此处填写io.kubeovn

示例:

为如下yaml(kube-ovn网络插件对应的ips crd)生成对应的java类模型

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: ips.kubeovn.io
spec:
  group: kubeovn.io
  versions:
    - name: v1
      served: true
      storage: true
      additionalPrinterColumns:
      - name: V4IP
        type: string
        jsonPath: .spec.v4IpAddress
      - name: V6IP
        type: string
        jsonPath: .spec.v6IpAddress
      - name: Mac
        type: string
        jsonPath: .spec.macAddress
      - name: Node
        type: string
        jsonPath: .spec.nodeName
      - name: Subnet
        type: string
        jsonPath: .spec.subnet
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                podName:
                  type: string
                namespace:
                  type: string
                subnet:
                  type: string
                attachSubnets:
                  type: array
                  items:
                    type: string
                nodeName:
                  type: string
                ipAddress:
                  type: string
                v4IpAddress:
                  type: string
                v6IpAddress:
                  type: string
                attachIps:
                  type: array
                  items:
                    type: string
                macAddress:
                  type: string
                attachMacs:
                  type: array
                  items:
                    type: string
                containerID:
                  type: string
                podType:
                  type: string
  scope: Cluster
  names:
    plural: ips
    singular: ip
    kind: IP
    shortNames:
      - ip
  1. 首先,确保 CRD yaml 存在于你的本地主机路径中,在以下示例中,我们手动将清单下载到 directory /tmp/crds/

    //这里拷贝至 /tmp/ctds
    [root@xxx crds]# pwd
    /tmp/crds
    [root@xxx crds]# ls -lrht
    total 48K
    -rw-r--r-- 1 root root 1.3K Jan  9 17:19 crontab-crd.yaml
    -rw-r--r-- 1 root root  31K Jan 11 11:26 crd.yaml
    -rw-r--r-- 1 root root 5.9K Jan 11 12:47 subnet.yaml
    -rw-r--r-- 1 root root 1.8K Jan 11 14:26 ips.yaml
    
  2. 执行如下命令生成

    LOCAL_MANIFEST_FILE=/tmp/crds/ips.yaml
    mkdir -p /tmp/java && cd /tmp/java
    docker run \
      --rm \
      -v "$LOCAL_MANIFEST_FILE":"$LOCAL_MANIFEST_FILE" \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v "$(pwd)":"$(pwd)" \
      -ti \
      --network host \
      ghcr.io/kubernetes-client/java/crd-model-gen:v1.0.6 \
      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值