目标
已经有了go版本的模型定义,需要生成java版本
看了下官方介绍的文档 generate-model-from-third-party-resources.md 感觉不会太难,照着尝试一下。
开始干活
首先看到要k8s 1.15以上的版本,我只有1.14,只好使用minikube重新装了1.16的版本,具体安装不细说了。
然后把CRD apply进集群里面,注意CRD得带有openAPIV3Schema的validation(我的是kubebuilder生成的)
执行这个命令生成swagger json文件
1
| kubectl get --raw="/openapi/v2" > /tmp/swagger
|
然后执行这个命令生成代码
1
| docker run -i --rm dockerhub.azk8s.cn/yue9944882/java-model-gen < /tmp/swagger | tar -xzf - -C /tmp/
|
这里我添加了dockerhub.azk8s.cn镜像加速,这个镜像应该是别人构建好的,如果想自己构建,要用首页介绍的项目kubernetes-client/gen ,里面还会用到maven下载也是比较慢的,可以加一下mirrors
我写了个简单的Dockerfile
1
2
| FROM dockerhub.azk8s.cn/yue9944882/java-model-gen
COPY ./settings.xml /usr/share/maven/conf/settings.xml
|
把settings.xml放到同一个目录,内容大概这样,可以加更多一些mirror
1
2
3
4
5
6
7
8
9
10
11
12
| <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyun-central</id>
<mirrorOf>*</mirrorOf>
<name>aliyun central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>
|
执行完成后,生成的文件在/tmp/java里面,找一下自己要的文件在哪里。???文件呢?为什么只有个*List文件??
试了下文档给出的CRD文件,确实可以生成,但为什么我的不行?
试了执行一下explain, 发现字段没有显示出来。
1
| kubectl explain my_crd_name --recursive
|
最终使用排除法的方式,对比例子和我crd的差异,找出了这里的差异
1
2
3
4
5
| spec:
preserveUnknownFields: false # 需要添加这个,这个值默认为true
validation:
openAPIV3Schema:
type: object # 这里也要
|
修改后使用 kubectl explain 可以正确识别字段