我试图从操作员CR处获得RAW个数据,我得到empty object个数据.(所有其他值均按预期工作)

The tricky part here that my struct is reference to another struct which have a property type rawdata

https://github.com/JennyMet/gardner_test

这里是简单的CR

https://github.com/JennyMet/gardner_test/blob/main/config/samples/mygroup_v1alpha1_rawtest.yaml#L11

这里我想读取数据并得到一个空对象,你知道吗?

https://github.com/JennyMet/gardner_test/blob/main/controllers/rawtest_controller.go#L70

这是我使用的类型的引用

I think its related to fields

x-kubernetes-preserve-unknown-fields: true

https://github.com/JennyMet/gardner_test/blob/main/api/v1alpha1/rawtest_types.go#L32,在发动机罩下使用

https://github.com/gardener/gardener/blob/5522be0e17ccf38aae36efb9fdb6463c66d6e4f1/pkg/apis/core/v1beta1/types_shoot.go#L1184

我的意思是,我试过了,但它不起作用,因为生的InfrastructureConfig个在

type System struct {
    Type     system           `json:"type,omitempty"`
    // +kubebuilder:pruning:PreserveUnknownFields
    Provider v1beta1.Provider `json:"provider,omitempty"`
}

但是原始数据低于Provider,这不是我的 struct ,im just using it.

就像这样,看InfrastructureConfig型...

type Provider struct {

    Type string `json:"type" protobuf:"bytes,1,opt,name=type"`
    ControlPlaneConfig *runtime.RawExtension `json:"controlPlaneConfig,omitempty" protobuf:"bytes,2,opt,name=controlPlaneConfig"`
    InfrastructureConfig *runtime.RawExtension `json:"infrastructureConfig,omitempty" protobuf:"bytes,3,opt,name=infrastructureConfig"`

}

推荐答案

目前,您只能将// +kubebuilder:pruning:PreserveUnknownFields放在Provider v1beta1.Provider上,这意味着其中的所有子字段都将允许包含其他未知字段.

好消息是,您的问题将在https://github.com/kubernetes-sigs/controller-tools/pull/683个合并后得到解决.之后,您不必使用// +kubebuilder:pruning:PreserveUnknownFields,控制器工具将自动为所有RawExtension个字段添加x-kubernetes-preserve-unknown-fields: true.

Go相关问答推荐

如何使用Promela建模语言对Golang RWLock进行建模

在Go中根据命名空间/字符串生成UUID

迭代字符串并用映射值替换原始字符串中的值的惯用方法

如何根据中间件的请求设置上下文值?获取 go-staticcheck 问题

使用 httptest 对 http 请求进行单元测试重试

golang gin 获取 cookie json

hyperledger fabric - go:在 $PATH 中找不到可执行文件

使用 LINQ 对内部数组进行排序

当图像是对象数组的元素时,如何显示存储为页面资源的图像?

如何在 Go 中编写示例测试?

从Go中的随机日期开始以天为单位获取时间

如何将 npm 安装进度条通过管道传输到终端?

对所有标志进行 ORing 的简短方法

Golang模板无法访问embedFS中的文件

Golang prometheus 显示自定义指标

Grafana/Prometheus 将多个 ip 可视化为查询

使用 bolthold 3 条件进行 boltDB 查询

在 Go 中将十六进制转换为带符号的 Int

测试包外文件时的 Golang 测试覆盖率

有没有一种方法可以确保传递的值具有使用泛型的某些字段?