繁体   English   中英

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

[英]Convert *extensions.Deployment to *v1beta1.Deployment (Kubernetes client-go)

通过Kubernetes客户端访问,如何将Convert()用于* extensions.Deployment到* v1beta1.Deployment? 当我在下面运行程序时,出现此错误:

2017/01/12 22:40:42转换失败:将(扩展名。部署).CreationTimestamp.Time.sec转换为(v1beta1.Deployment).CreationTimestamp.Time.sec:无法设置目标。 (试图对具有未导出字段的内容进行深度复制吗?)

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\n%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)
    }
}

我希望v1beta1.Convert_extensions_Deployment_To_v1beta1_Deployment()被调用并处理未导出的字段。 该函数在main_init()中注册,但Convert()不会调用该函数。

我甚至可以使用Convert()进行这种转换,还是应该使用json.Unmarshal()和json.Marshal()?

使用api.Scheme.Convert代替runtime.NewScheme().Convert

https://github.com/kubernetes/client-go/issues/151找到解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM