go - Go中的编码(marshal)Yaml错误

标签 go kubernetes

我是新手,我找不到使用“gopkg.in/yaml.v2”解码Yaml的方法
我认为错误在于我定义结构的方式。

我需要解析kubernetes作业Yaml并在go中进行编辑以生成更新yaml。
该结构几乎是静态的,但是其中有两个列表,这些键内部可能有不同的东西。

我将yaml缩小为一个列表(卷)以简化示例。

apiVersion: batch/v1
kind: Job
metadata:
  name: jobname
  namespace: namespace
spec:
  ttlSecondsAfterFinished: 86400
  template:
    spec:
      containers:
      - name: container-name
        image: containerimage:tag
        command:
        - php
        - cli/migrations.php
        - up
      restartPolicy: Never
      volumes:
      - name: filestore
        persistentVolumeClaim:
          claimName: data-pvc
          readOnly: false
      - name: stackdriver
        secret:
          secretName: stackdriver-prod
  backoffLimit: 1

这些是我的结构定义:
type PersistentVolumeClaims struct {
                ClaimName string `yaml:"claimName,omitempty"`
                ReadOnly bool `yaml:"readOnly,omitempty"`

            }
type Secrets  struct {
                SecretName string `yaml:"secretName,omitempty"`

    }

type Names struct {
    Name     string `yaml:"name"`
    PersistentVolumeClaim PersistentVolumeClaims `yaml:"persistentVolumeClaim,omitempty"`
    Secret Secrets `yaml:"secret,omitempty"`
}


type Jobs struct {
    ApiVersion string `yaml:"apiVersion"`
    Kind string `yaml:"kind"`
    Metadata struct {
      Name string `yaml:"name"`
      Namespace string `yaml:"namespace"`
    }
    Spec struct {
      TtlSecondsAfterFinished int `yaml:"ttlSecondsAfterFinished"`
      Template struct {
        Spec struct {
          Containers []struct {
            Name string
            Image string `yaml:"image"`
            Command []string `yaml:"command"`
            VolumeMounts []struct {
                    Name string 
                    SubPath string `yaml:"subPath"`
                    MountPath string `yaml:"mountPath"`
                    ReadOnly bool `yaml:"readOnly"`
          }
          RestartPolicy string `yaml:"restartPolicy"`
        }
        Volumes map[string][]Names
      }
      BackoffLimit int `yaml:"backoffLimit"`
    }
  }
}

我尝试了不同的结构,但我没有解决方案。
任何帮助将不胜感激。

- - 解决了

我已经按照Jonas的建议使用官方的go-client https://github.com/kubernetes/client-go重做了该工具。现在一切正常!

最佳答案

I need to parse a kubernetes job yaml and edit in go to generate an update yaml. The structure is almost static but have two lists in wich the keys could have different things inside.



听起来您的应用程序正在集群中运行,想要检索Job,对其进行修改然后进行更新。

我建议为此使用官方的Kubernetes client-go。它具有用于Kubernetes资源的库,例如Job。参见the example using a Deployment

关于go - Go中的编码(marshal)Yaml错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726991/

相关文章:

google-app-engine - 从应用引擎连接到 kubernetes 引擎

java - 我们是否应该在 kubernetes 容器中设置 -Xmx(最大 Java 堆大小)

Kubernetes Pod 一次性初始任务

go - 有错误的表测试

methods - Go 中的方法图

generics - 在go中获取不同属性的通用函数

go - 在 Go 中获取枚举的字符串表示的惯用方法是什么?

Kubernetes 启用 HTTPS 服务

arrays - 在 Golang 中创建哈希数组

库伯内特斯 : Failed to retrieve auth configuration for ingress