Как использовать runtime.Object для создания универсальных функций CRD в go

Я пишу контроллер Kubernetes, в котором мне нужно запустить функцию для разных видов ресурсов, включая мои собственные ресурсы и другие виды ресурсов (эта функция интересует только имя ресурса).

Я понимаю, что это выполнимо, используя runtime.Object но я не могу заставить его работать.
Вот подпись функции:

func myFunc(foo []runtime.Object) []runtime.Object

При вызове функции я передаю типизированный объект и ожидаю, что он будет назначен runtime.Object:

foo := []v1alpha1.MyCRD{}
bar := myFunc(foo)

Я получаю ошибку компилятора:

cannot use foo (type []v1alpha1.MyCRD) as []runtime.Object in argument to myFunc

Глядя на определение runtime.Object:

type Object interface {
  GetObjectKind() schema.ObjectKind
  DeepCopyObject() Object
}

MyCRD тип встраивания metav1.TypeMeta поэтому он имеет необходимый GetObjectKind() функция.

Это также отмечено с:

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

Так что он также имеет необходимые DeepCopyObject() (см. в сгенерированном файле).

Я боролся с этим некоторое время, и я думаю, что это может иметь отношение к регистрации типа с scheme но я не уверен, как это работает, и не могу найти никакой документации по этому вопросу. Я пытался скопировать регистрационный код типа из других проектов, которые я нашел, не понимая, что он делает (как я уже сказал, не могу найти документы по этому вопросу).. все еще не работает.


связанные с:

0 ответов

Другие вопросы по тегам