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\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)
}
}
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()?
Use api.Scheme.Convert
instead of runtime.NewScheme().Convert
.
Found solution at https://github.com/kubernetes/client-go/issues/151