Создание пустой структуры ресурсов Kubernetes, когда известно только вид / тип ресурса (в golang) - PullRequest
0 голосов
/ 14 апреля 2019

Как создать пустую структуру определенного ресурса Kubernetes, когда вид / тип ресурса задан в виде строки?

Т.е.

var object *runtime.Object

object = factory.NewResourceFromKind("pod")

и object должны содержать &apiv1.Pod{}?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Знания Kind недостаточно, однако комбинация API Group + API Version + object Kind (GroupVersionKind) позволит вам использовать информацию, содержащуюся по умолчанию scheme.Scheme переменная для создания нового объекта.

package main

import (
    "fmt"

    "k8s.io/apimachinery/pkg/runtime/schema"
    "k8s.io/client-go/kubernetes/scheme"
)

func main() {
    // apiVersion's syntax is "group/version" for non-core API groups
    // e.g. "apps/v1"
    podGvk := schema.FromAPIVersionAndKind("v1", "Pod")

    obj, err := scheme.Scheme.New(podGvk)  // error handling omitted

    fmt.Printf("%T", obj)
    /* prints '*v1.Pod' */
}

См. Годок для func (*Scheme) New

1 голос
/ 14 апреля 2019

Нет красивого способа сделать это.

Это потребует двух шагов:

  1. Построение карты типов: карта [строка] отражает. Тип

Вы можете написать свой собственный код, чтобы пройти через каждый тип API k8s и вставить в карту, как в этом ответе: Есть ли способ создать экземпляр структуры из строки?

Или вы можете использовать крайне непереносимый метод для извлечения типов из двоичных файлов, что позволяет избежать знания того, какие типы добавить на карту: Как обнаружить все типы пакетов во время выполнения?

  1. Используйте карту для создания экземпляра. Найдите myType из строки, используя карту, затем:

    reflect.New (MyType) .Elem ()

где myType является экземпляром рефлекса. Тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...