golang利用helm的sdk写一个chats转换成yaml文件

发布时间 2024-01-11 17:26:54作者: 汉克书

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)
}