你想添加什么?
A GroupVersionResource() schema.GroupVersionResource
被添加到所有表示Kubernetes对象的类型中,包括核心和(鼓励)CRDs。
为什么需要这个?
目前,没有从对象到资源的好方法。这使得使用动态客户端、 #106846 等变得具有挑战性。
尽管如此,所有这些信息都已经知道并用于其他代码生成工具,如informers和listers。然而,它并不容易从外部获得。
我想生成的代码示例:
var gatewayclassesGroupVersionResource = schema.GroupVersionResource{Group: GroupVersion.Group, Version: GroupVersion.Version, Resource: "gatewayclasses"}
func (GatewayClass) GroupVersionResource() schema.GroupVersionResource {
return gatewayclassesGroupVersionResource
}
var httproutesGroupVersionResource = schema.GroupVersionResource{Group: GroupVersion.Group, Version: GroupVersion.Version, Resource: "httproutes"}
func (HTTPRoute) GroupVersionResource() schema.GroupVersionResource {
return httproutesGroupVersionResource
}
var gatewaysGroupVersionResource = schema.GroupVersionResource{Group: GroupVersion.Group, Version: GroupVersion.Version, Resource: "gateways"}
func (Gateway) GroupVersionResource() schema.GroupVersionResource {
return gatewaysGroupVersionResource
}
我原型了一个register-gen的分支,用于生成此代码,但失望地发现k/k实际上并未使用此代码,因此我们可能需要采用不同的方法。
6条答案
按热度按时间ifsvaxew1#
/sig api-machinery
liwlm1x92#
在分配之前,让我们澄清一些事情。
deployments
、deployment
、deploy
您是否尝试过RESTMapper并看看它是否符合您的用例?谢谢。
i7uaboj43#
你能帮我解释一下为什么给定的类型没有一个GVR吗?生成的informer和listener客户端(可能还有更多)已经为给定类型编码了资源(否则你需要一个RESTMapper来使用基本客户端,对吧?)
a64a0gku4#
/assign
/triage accepted
xcitsw885#
/assign @jpbetz
我在使用类型解析器时也遇到了这类问题。
资源名称与存储一起在API服务器处理器中注册,而不是作为类型定义的一部分。如果我们要在不进行往返发现的情况下查找它,我们需要扩展模式注册以包含其GVRs。
h7appiyu6#
一般来说,GVR:GVK基数是N:1(有许多种类的Scale资源),但对于根资源始终是1:1(除非我知道有例外情况)。我对此问题感兴趣的PR在某种程度上仍然能够处理这种微妙之处。