1

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


有关的:

4

0 回答 0