2016-01-27 2 views
0

Я ищу в написании инструмента, который программным путем генерирует определения Kubernetes для нашего проекта.Сгенерировать манифест YAML из типов Kubernetes

Я обнаружил, что типы API в Кубернесе можно найти в k8s.io/kubernetes/pkg/api. Я хотел бы вывести YAML на основе этих типов.

Учитывая объект вроде этого:

ns := &api.Namespace{ 
    ObjectMeta: api.ObjectMeta{ 
     Name: "test", 
    }, 
} 

Какой самый лучший способ для создания выходного сигнала YAML ожидаемый kubectl create?

+0

попробуйте библиотеку yaml.v2 и маршал с ней, посмотрите, совместим ли выход с кубернетами. https://github.com/go-yaml/yaml –

+0

Это не сработает, Kubernetes не имеет аннотации yaml. Они, похоже, сериализуются в JSON, а затем конвертируются в YAML, но я еще не нашел правильные API-интерфейсы, но все же вернул их в правильный конверт (включая apiVersion и добрые поля). –

+0

это некрасиво, но вы можете попытаться сгенерировать json и использовать python для правильного форматирования json как yaml. –

ответ

1

Нашел, на будущее, вот что вы можете сделать:

package main 

import (
    "os" 

    "k8s.io/kubernetes/pkg/api/unversioned" 
    "k8s.io/kubernetes/pkg/api/v1" 
    "k8s.io/kubernetes/pkg/runtime/serializer/json" 
) 

func main() { 
    ns := &v1.Namespace{ 
     TypeMeta: unversioned.TypeMeta{ 
      Kind:  "Namespace", 
      APIVersion: "v1", 
     }, 

     ObjectMeta: v1.ObjectMeta{ 
      Name: "test", 
     }, 
    } 

    e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil) 

    err := e.EncodeToStream(ns, os.Stdout) 
    if err != nil { 
     panic(err) 
    } 
} 

Это может быть не лучшей практики (лучше предложения приветствуются), но это делает работу.

+0

В качестве побочного примечания это может быть ненужным, если вы не планируете поддерживать их вручную. Кубнеретские проявления могут быть определены в json или yaml. Можно использовать расширение файла .yaml, .yml и .json. Таким образом, вы можете просто маршалировать JSON и записать его в файл '.json', если вы подаете вывод на' kubectl' https://kubernetes.io/docs/user-guide/kubectl-cheatsheet/ – jqualls

Смежные вопросы