golang利用helm的sdk写一个chats转换成yaml文件
chats_dir: 就是 helm pull下来的仓库
可以用命令直接生成 helm3 template chats_dir --release-name hank
可以变成yaml文件,然后就可以直接apply了
下面利用helm的sdk把chats生成yaml代码
package main
import (
"fmt"
"log"
"os"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart/loader"
"helm.sh/helm/v3/pkg/cli"
"helm.sh/helm/v3/pkg/cli/values"
"helm.sh/helm/v3/pkg/getter"
)
func main() {
// 创建一个 helm 配置对象
settings := cli.New()
client := action.NewInstall(&action.Configuration{})
// 加载 chart 文件,这里应该说是加载chart的目录代码,其中values写好了
chartPath, err := client.ChartPathOptions.LocateChart("./chart", settings)
if err != nil {
log.Fatal(err)
}
chart, err := loader.Load(chartPath)
if err != nil {
log.Fatal(err)
}
// 创建一个 values 对象,用于存储 chart 的值
vals := values.Options{}
valueOpts := &vals
p := getter.All(settings)
val, err := valueOpts.MergeValues(p)
if err != nil {
log.Fatal(err)
}
// 创建一个 action 对象,用于执行 helm 操作
client.DryRun = true // 设置为 dry-run 模式,不实际安装 chart
client.ReleaseName = "my-release" // 设置 release 名称
client.Replace = true // 设置为替换模式,如果 release 已存在则覆盖
client.ClientOnly = true // 设置为客户端模式,不与集群交互
// 执行 helm template 操作,并获取结果
rel, err := client.Run(chart, val)
if err != nil {
log.Fatal(err)
}
// 将结果输出为 yaml 格式
fmt.Fprintln(os.Stdout, rel.Manifest)
}