1 回答
TA贡献1784条经验 获得超2个赞
我终于能够让它工作了!操作方法如下:
import (
"k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
)
func deserialize(data []byte) (*client.Object, error) {
apiextensionsv1.AddToScheme(scheme.Scheme)
apiextensionsv1beta1.AddToScheme(scheme.Scheme)
decoder := scheme.Codecs.UniversalDeserializer()
runtimeObject, groupVersionKind, err := decoder.Decode(data, nil, nil)
if err != nil {
return nil, err
}
return runtime
}
有几件事看起来很关键(但我不确定我的理解在这里是100%正确的):
而声明的返回类型是 ,该元组返回的第一项实际上是 a,并且可以毫无问题地强制转换。
decoder.Decode
(runtime.Object, *scheme.GroupVersionKind, error)
client.Object
通过在添加组之前使用作为基线,我可以免费注册所有“标准”资源。
scheme.Scheme
apiextensions.k8s.io
如果我使用 ,我会得到有关 的错误,并且返回的实例显示版本。不知道为什么会发生这种情况,或者为什么当我使用时它没有发生。
scheme.Codecs.UniversalDecoder()
no kind "CustomResourceDefinition" is registered for the internal version of group "apiextensions.k8s.io" in scheme "pkg/runtime/scheme.go:100"
groupVersionKind
__internal
UniversalDeserializer()
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报