我有下面的代码,我想将yaml转换为客户端转到数据结构并从中获取对象名称
package main
import (
"fmt"
"k8s.io/api/extensions/v1beta1"
"k8s.io/client-go/kubernetes/scheme"
)
var yml = `
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: testnginx
replicas: 1
spec:
template:
metadata:
labels:
run: testnginx
spec:
containers:
- image: nginx
name: testnginx
ports:
- containerPort: 8080
`
func main() {
decode := scheme.Codecs.UniversalDeserializer().Decode
obj, _, err := decode([]byte(yml), nil, nil)
if err != nil {
fmt.Printf("%#v", err)
}
//fmt.Printf("%#v\n", obj)
deployment := obj.(*v1beta1.Deployment)
fmt.Printf("%#v\n", deployment.ObjectMeta.Name)
}
返回结果应该是testnginx,但为空
$ ./decode-k8s-exercise
""
不知道为什么。谢谢
问题出在yaml中。该name
字段应该是内部的属性,metadata
但它们当前处于同一级别。如果您在空格上缩进名称,则该名称应该起作用(template
以后也一样)。relicas
也应该在里面spec
:
var yml = `
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: testnginx
spec:
replicas: 1
template:
metadata:
labels:
run: testnginx
spec:
containers:
- image: nginx
name: testnginx
ports:
- containerPort: 8080
`
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句