问题描述
我正试图取消对以下flux
HelmRelease
文件的保护。
apiVersion: helm.fluxcd.io/v1
kind: HelmRelease
Metadata:
annotations:
fluxcd.io/automated: 'false'
fluxcd.io/tag.ats: glob:*
name: ats
namespace: myns
spec:
chart:
git: git@github.com:reponame/project.git
path: charts/path1/path1/myapp
ref: master
releaseName: foobar
values:
allowAllEgress: true
recycleApp: true
hooks:
slackChannel: https://hooks.slack.com/services/something/somethingelse/
这是我的模特
type HelmReleaseValues struct {
AllowAllEgress bool `yaml:"allowAllEgress"`
RecycleApp bool `yaml:"recycleApp"`
Hooks `yaml:"hooks"`
}
type Hooks struct {
SlackChannel string `yaml:"slackChannel"`
}
type Values struct {
HelmReleaseValues `yaml:"values"`
ReleaseName string `yaml:"releaseName"`
Chart `yaml:"chart"`
}
type Spec struct {
Values `yaml:"spec"`
}
问题在于allowAllEgress
和recycleApp
字段已被解组。
但是我的结构中的Hooks
字段为空。
在结构建模/标记中我做错了什么?
package main
import (
"fmt"
"io/IoUtil"
"os"
"github.com/davecgh/go-spew/spew"
"gopkg.in/yaml.v3"
)
const ExitCodeCmdErr = 1
func main() {
rawYaml := parseHelmReleaseFile("myfile.yaml")
spew.Dump(rawYaml)
}
func parseHelmReleaseFile(fileName string) Spec {
var v Spec
yamlFile,err := IoUtil.ReadFile(fileName)
if err != nil {
fmt.Printf("yaml file err #%v ",err)
os.Exit(ExitCodeCmdErr)
}
err = yaml.Unmarshal(yamlFile,&v)
if err != nil {
fmt.Printf("Unmarshal: %v",err)
os.Exit(ExitCodeCmdErr)
}
return v
}
我正在运行程序并为输出进行grepping(实际的头盔发布文件很大)
▶ go clean && gb .
~/Desktop/yamltutorial
./foobar | grep -i hooks -A 3
--
Hooks: (main.Hooks) {
SlackChannel: (string) ""
}
},
解决方法
您没有Chart结构
type Chart struct {
Git string `yaml:"git"`
Path string `yaml:"path"`
Ref string `yaml:"ref"`
}
添加并获得以下输出
{Values:{HelmReleaseValues:{AllowAllEgress:true RecycleApp:true Hooks:{SlackChannel:https://hooks.slack.com/services/something/somethingelse/}} ReleaseName:foobar Chart:{Git:git@github.com:reponame/project.git Path:charts/path1/path1/myapp Ref:master}}}
带有完整代码的游乐场文件。