我正在编写一个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
中注册类型有关,但是我不确定它是如何工作的,并且找不到关于它的任何文档。 。我尝试从发现的其他项目中复制类型注册代码,但并没有真正了解它的功能(如我所说,无法找到有关此文档的文档)。仍然无法正常工作。
相关: