gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:14:04 24 4
gpt4 key购买 nike

我是新手,我找不到使用“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com