我们正在使用kubebuilder来构建自定义控制器,问题是当您应用文件时,无法解析原始数据,因为它为空。
我已经创建了一个非常简单的示例来描述这个问题。
apiVersion:mygroup.test.com/v1alpha1
在运行时,我能够获得
我创建了这个非常简单的项目来演示这个问题,可以查看api/type文件夹,在获取协调对象之后(应用config/sample/文件后),您会发现
我已经创建了一个非常简单的示例来描述这个问题。
apiVersion:mygroup.test.com/v1alpha1
kind: Rawtest
metadata:
name: rawtest-sample
spec:
system:
type: test
provider:
type: aws
infrastructureConfig:
kind: InfrastructureConfig
apiVersion: v1alpha1
networks:
vpc:
cidr: aaa
zones:
- name: abc
internal: 123
workers:
- name: myworker
machine:
type: "mt"
image:
name: name1
version: "2"
maximum: 2
minimum: 1
maxUnavailable: 0
volume:
type: a1
size: 20Gi
zones:
- zone1
在运行时,我能够获得
spec.system.type
的值为test和spec.system.provider.type
的值为"aws",但是我无法获取infrastructureConfig:
下的所有数据(第10行),你有什么想法如何克服这个问题吗?我创建了这个非常简单的项目来演示这个问题,可以查看api/type文件夹,在获取协调对象之后(应用config/sample/文件后),您会发现
infrastructureconfig
和所有相关数据都在那里。
以下是试图读取原始值的代码: https://github.com/JennyMet/kuberaw/blob/master/controllers/rawtest_controller.go#L57
&rawtest
应包含所有数据
请查看类型 https://github.com/JennyMet/kuberaw/blob/master/api/v1alpha1/rawtest_types.go#L32
我需要一种方法让它在kubebuilder中工作,因为当我应用文件时,调试中没有得到值... 调试图片 如果有遗漏,请告诉我。
go.sum
时,我发现您的代码似乎使用了ghodss/yaml来加载YAML。这否定了我之前的推断,即json:
被忽略了(然而,使用该yaml包装库有自己的问题集)。可能是这个YAML以两种不同的方式进行处理,具有不同的代码路径,其中第一种导致您在评论中显示的错误,而第二种不使用ghodss,从而跳过infrastructureConfig
? - flyxgo.sum
中存在gopkg.in/yaml.v3
的存在意味着某些东西正在使用原始的go-yaml,因为ghodss/yaml
仍然可与gopkg.in/yaml.v2
一起使用。但它也可能只是一些不相关的依赖关系。 - flyx&rawtest
应该包含所有数据,但目前它除了InfrastructureConfig
值之外都包含。 - Jenny M