dongsigan2636 2017-01-12 21:49
浏览 223

将* extensions.Deployment转换为* v1beta1.Deployment(Kubernetes client-go)

With the Kubernetes client-go, how can I use Convert() for *extensions.Deployment to *v1beta1.Deployment? When I run the program below I get this error:

2017/01/12 22:40:42 failed to convert: converting (extensions.Deployment).CreationTimestamp.Time.sec to (v1beta1.Deployment).CreationTimestamp.Time.sec: Cannot set dest. (Tried to deep copy something with unexported fields?)

package main

import (
    "log"

    _ "k8s.io/client-go/1.4/kubernetes"
    "k8s.io/client-go/1.4/pkg/api"
    "k8s.io/client-go/1.4/pkg/apis/extensions"
    "k8s.io/client-go/1.4/pkg/apis/extensions/v1beta1"
    "k8s.io/client-go/1.4/pkg/runtime"
)

const yaml = `
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: push
`

func main() {

    d := api.Codecs.UniversalDecoder()
    obj, _, err := d.Decode([]byte(yaml), nil, nil)
    if err != nil {
        log.Fatalf("could not decode yaml: %s
%s", yaml, err)
    }

    src := obj.(*extensions.Deployment)
    s := runtime.NewScheme()
    dst := &v1beta1.Deployment{}
    err = s.Convert(src, dst, 0)
    if err != nil {
        log.Fatalf("failed to convert: %s", err)
    }
}

I would expect v1beta1.Convert_extensions_Deployment_To_v1beta1_Deployment() to be called and take care of unexported fields. The function is registered in main_init(), but it is not called by Convert().

Can I even use Convert() for this kind of conversion, or should I use json.Unmarshal() and json.Marshal()?

  • 写回答

1条回答 默认 最新

  • duanduo3712 2017-06-20 12:37
    关注

    Use api.Scheme.Convert instead of runtime.NewScheme().Convert.

    Found solution at https://github.com/kubernetes/client-go/issues/151

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败