Nic*_*Zin 5 api client go kubernetes kubernetes-go-client
我想解析 kubernetes 清单文件(json/yaml)并能够将它们转换为 k8s 结构(稍后操作它们)
我知道有 NewYAMLOrJSONDecoder().Decode() 函数(https://github.com/kubernetes/apimachinery/blob/master/pkg/util/yaml/decoder.go)来读取 json/yaml 文件,但是下一步是:如何将它们转换为 k8s 结构/类型?
即,如果我读取带有 Namespace 对象的 yaml 文件,例如如何将其转换为 core/v1/namespace 接口
问候,
这个问题与How to deserialize Kubernetes YAML file非常相似,但是这个问题有点过时,因为包名称发生了变化。
而且它不直接使用 go 客户端,这意味着可能还有另一种解决方案。
这是一个例子:
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\n", deployment)
}
Run Code Online (Sandbox Code Playgroud)
笔记
.../install
很重要,因为它们定义了可以解码哪些类型UniversalDecoder
和UniversalDeserializer
之间的区别在哪里 归档时间: |
|
查看次数: |
9600 次 |
最近记录: |