k8s runtime.Extention marshal unmarshal

一、问题背景
针对 runtime.Extention 字段,采用  “k8s.io/apimachinery/pkg/util/yaml”  NewYAMLOrJSONDecoder.Decode → “gopkg.in/yaml.v3” yaml.marshal → “k8s.io/apimachinery/pkg/util/yaml”    NewYAMLOrJSONDecoder.Decode 的形式走不通

check_sum 为 runtime.Extension 结构体,采用 yaml.Unmarshal 会丢失该字段的值

因此原先的实现是通过 k8s.io/apimachinery 库函数的  NewYAMLOrJSONDecoder.Decode 方法把上图的 check_sum 结构  unmarshal 到 runtime.Extension 的 Raw []byte 数组,将该 byte 数组转化为 string 为

但由于没有找到  NewYAMLOrJSONDecoder.Decode 对应的 encode 方法,采用 yaml.marshal 的话,会变成这类形式:

再对上述结构 采用 k8s.io/apimachinery 库函数的  NewYAMLOrJSONDecoder.Decode 方法 unmarshal 成 algometa,对应的 byte 数组转化成 string 变成了这个形式,

出现了数据的错误

解决方法:

使用  k8s.io/apimachinery  NewYAMLOrJSONDecoder.Decode 和  “sigs.k8s.io/yaml” 的 marshal 方法
或者更改 runtime.Extention 结构体为 map

教训:

不要 decode 方法就非得对应 encode 方法,找找 marshal 方法;翻翻源代码或者别人的仓库是怎么使用的来看怎么 marshal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值