This question is very similar to How to deserialize Kubernetes YAML file, but this question is a bit outdated, since the package names changed.
Also it doesn't directly use the go client, which means there might be another solution to this.
Here is a example:
package main
import (
"fmt"
"k8s.io/kubernetes/pkg/api"
_ "k8s.io/kubernetes/pkg/api/install"
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
)
var json = `
{
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"metadata": null,
"name": "my-nginx",
"replicas": 2,
"spec": null,
"template": {
"metadata": {
"labels": {
"run": "my-nginx"
}
},
"spec": {
"containers": [
{
"image": "nginx",
"name": "my-nginx",
"ports": [
{
"containerPort": 80
}
]
}
]
}
}
}
`
func main() {
// decode := api.Codecs.UniversalDecoder().Decode
decode := api.Codecs.UniversalDeserializer().Decode
obj, _, err := decode([]byte(json), nil, nil)
if err != nil {
fmt.Printf("%#v", err)
}
deployment := obj.(*v1beta1.Deployment)
fmt.Printf("%#v
", deployment)
}
Notes
- the
.../install
packages are important, since they define which types can get decoded
- it's able to decode JSON, YAML and probably also all other supported file types
- not sure where the difference between
UniversalDecoder
and UniversalDeserializer
is