如何获取给定 k8s 资源的 json 的 schema.GroupVersionResource

时间:2021-04-13 07:35:43

标签: go kubernetes client-go

  • 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
}

我知道一种解决方法是编写一些类似波纹管的代码,但我确信这不是最佳实践,而且除了 crd 之外还有太多这样的代码。

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",
    },
}

0 个答案:

没有答案
相关问题