【发布时间】:2021-07-08 06:03:23
【问题描述】:
- client-go v0.19.2
- golang 1.13
我正在构建一个从 json 创建 k8s 资源的工具(就像 kubectl create -f 一样)。
我发现动态客户端可以做这样的事情,但是当我将它与下面的代码一起使用时,我发现很难找到给定资源的 json 的 schema.GroupVersionResource。我错过了什么或者获取资源的唯一方法是通过恢复映射器?
container := &unstructured.Unstructured{}
if err := container.UnmarshalJSON([]byte(jsonstring); err != nil {
return err
}
_, err := k8sclient.Dynamic.Resource(?).Create(ctx, container, metav1.CreateOptions{})
if err != nil {
return err
}
我知道一种解决方法是编写如下代码,但我确信这不是最佳实践,除了 crds 之外还有太多。
var kindResourceMap = map[string]schema.GroupVersionResource{
"Deployment": {
Group: "apps",
Version: "v1",
Resource: "deployments",
},
"ConfigMap": {
Group: "apps",
Version: "v1",
Resource: "configmaps",
},
"Job": {
Group: "batch",
Version: "v1",
Resource: "jobs",
},
"Secret": {
Group: "api",
Version: "v1",
Resource: "secrets",
},
"Service": {
Group: "api",
Version: "v1",
Resource: "services",
},
"StatefulSet": {
Group: "apps",
Version: "v1",
Resource: "statefulsets",
},
"PersistentVolume": {
Group: "api",
Version: "v1",
Resource: "persistentvolumes",
},
"CustomResourceDefinition": {
Group: "apiextensions.k8s.io",
Version: "v1beta1",
Resource: "customresourcedefinitions",
},
}
【问题讨论】:
标签: go kubernetes client-go