生成Kubernetes类型的YAML清单文件。

huangapple go评论118阅读模式
英文:

Generate YAML manifest from Kubernetes types

问题

我正在研究编写一个工具,用于为我们的项目以编程方式生成 Kubernetes 定义。

我发现 Kubernetes 中的 API 类型可以在 k8s.io/kubernetes/pkg/api 中找到。我想根据这些类型输出 YAML。

给定这样一个对象:

  1. ns := &api.Namespace{
  2. ObjectMeta: api.ObjectMeta{
  3. Name: "test",
  4. },
  5. }

生成符合 kubectl create 预期的 YAML 输出的最佳方法是什么?

英文:

I'm looking into writing a tool that generates Kubernetes definitions programatically for our project.

I've found that the API types in Kubernetes can be found in k8s.io/kubernetes/pkg/api. I would like to output YAML based on these types.

Given an object like this:

  1. ns := &api.Namespace{
  2. ObjectMeta: api.ObjectMeta{
  3. Name: "test",
  4. },
  5. }

What's the best way to generate the YAML output expected by kubectl create?

答案1

得分: 2

找到了,供参考,以下是你可能想要做的:

  1. package main
  2. import (
  3. "os"
  4. "k8s.io/kubernetes/pkg/api/unversioned"
  5. "k8s.io/kubernetes/pkg/api/v1"
  6. "k8s.io/kubernetes/pkg/runtime/serializer/json"
  7. )
  8. func main() {
  9. ns := &v1.Namespace{
  10. TypeMeta: unversioned.TypeMeta{
  11. Kind: "Namespace",
  12. APIVersion: "v1",
  13. },
  14. ObjectMeta: v1.ObjectMeta{
  15. Name: "test",
  16. },
  17. }
  18. e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)
  19. err := e.EncodeToStream(ns, os.Stdout)
  20. if err != nil {
  21. panic(err)
  22. }
  23. }

这可能不是最佳实践(欢迎提出更好的建议),但它能完成工作。

英文:

Found it, for future reference, here's what you might want to do:

  1. package main
  2. import (
  3. "os"
  4. "k8s.io/kubernetes/pkg/api/unversioned"
  5. "k8s.io/kubernetes/pkg/api/v1"
  6. "k8s.io/kubernetes/pkg/runtime/serializer/json"
  7. )
  8. func main() {
  9. ns := &v1.Namespace{
  10. TypeMeta: unversioned.TypeMeta{
  11. Kind: "Namespace",
  12. APIVersion: "v1",
  13. },
  14. ObjectMeta: v1.ObjectMeta{
  15. Name: "test",
  16. },
  17. }
  18. e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)
  19. err := e.EncodeToStream(ns, os.Stdout)
  20. if err != nil {
  21. panic(err)
  22. }
  23. }

This might not be the best practice (better suggestions welcome), but it does the job.

答案2

得分: 2

他们的API已经更新了,所以现在看起来是这样的:

  1. import k8sJson "k8s.io/apimachinery/pkg/runtime/serializer/json"
  2. ...
  3. serializer := k8sJson.NewSerializerWithOptions(
  4. k8sJson.DefaultMetaFactory, nil, nil,
  5. k8sJson.SerializerOptions{
  6. Yaml: true,
  7. Pretty: true,
  8. Strict: true,
  9. },
  10. )
英文:

Their API has updated, so this is how it looks like:

  1. import k8sJson "k8s.io/apimachinery/pkg/runtime/serializer/json"
  2. ...
  3. serializer := k8sJson.NewSerializerWithOptions(
  4. k8sJson.DefaultMetaFactory, nil, nil,
  5. k8sJson.SerializerOptions{
  6. Yaml: true,
  7. Pretty: true,
  8. Strict: true,
  9. },
  10. )

答案3

得分: 1

  1. package main
  2. import (
  3. "os"
  4. v1 "k8s.io/api/core/v1"
  5. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  6. "k8s.io/apimachinery/pkg/runtime/serializer/json"
  7. )
  8. func main() {
  9. ns := &v1.Namespace{
  10. TypeMeta: metav1.TypeMeta{
  11. Kind: "Namespace",
  12. APIVersion: "v1",
  13. },
  14. ObjectMeta: metav1.ObjectMeta{
  15. Name: "test",
  16. },
  17. }
  18. e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)
  19. //err := e.EncodeToStream(ns, os.Stdout)
  20. err := e.Encode(ns, os.Stdout)
  21. if err != nil {
  22. panic(err)
  23. }
  24. }
英文:
  1. package main
  2. import (
  3. "os"
  4. v1 "k8s.io/api/core/v1"
  5. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  6. "k8s.io/apimachinery/pkg/runtime/serializer/json"
  7. )
  8. func main() {
  9. ns := &v1.Namespace{
  10. TypeMeta: metav1.TypeMeta{
  11. Kind: "Namespace",
  12. APIVersion: "v1",
  13. },
  14. ObjectMeta: metav1.ObjectMeta{
  15. Name: "test",
  16. },
  17. }
  18. e := json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil)
  19. //err := e.EncodeToStream(ns, os.Stdout)
  20. err := e.Encode(ns, os.Stdout)
  21. if err != nil {
  22. panic(err)
  23. }
  24. }

huangapple
  • 本文由 发表于 2016年1月27日 18:59:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/35035464.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定