Почему результат декодирования возврата пуст - PullRequest
1 голос
/ 04 мая 2019

У меня есть код ниже, я хотел бы преобразовать yaml в структуру данных go go клиента и получить из нее имя объекта

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 
""

Не знаю почему.спасибо

1 Ответ

4 голосов
/ 04 мая 2019

проблема в ямле.Поле 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
`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...