Introdução
O SDK Go do Helm permite que software personalizado aproveite os charts do Helm e a funcionalidade do Helm para gerenciar a implantação de software no Kubernetes (Na verdade, a CLI do Helm é efetivamente apenas uma dessas ferramentas!)
Atualmente, o SDK foi funcionalmente separado da CLI do Helm. O SDK pode ser (e é) utilizado por ferramentas independentes. O projeto Helm se comprometeu com a estabilidade da API para o SDK. Vale ressaltar que o SDK ainda tem algumas arestas, remanescentes do trabalho inicial de separação entre a CLI e o SDK, que o projeto Helm pretende melhorar ao longo do tempo.
A documentação completa da API pode ser encontrada em https://pkg.go.dev/helm.sh/helm/v3.
Uma breve visão geral de alguns dos principais tipos de pacotes e um exemplo simples seguem abaixo. Consulte a seção Exemplos para mais exemplos e um 'driver' mais completo.
Visão geral dos principais pacotes
- pkg/action: Contém o "cliente" principal para executar ações do Helm. Este é o mesmo pacote que a CLI usa internamente. Se você precisa apenas executar comandos básicos do Helm a partir de outro programa Go, este pacote é para você
- pkg/chart, pkg/chartutil: Métodos e utilitários utilizados para carregar e manipular charts
- pkg/cli e seus subpacotes: Contém todos os manipuladores para as variáveis de ambiente padrão do Helm e seus subpacotes contêm manipulação de saída e arquivos de valores
- pkg/release:
Define o objeto
Releasee seus status
Existem muitos outros pacotes além desses, então consulte a documentação para mais informações!
Exemplo simples
Este é um exemplo simples de como executar um helm list usando o SDK Go.
Consulte a seção Exemplos para exemplos mais completos.
package main
import (
"log"
"os"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/cli"
)
func main() {
settings := cli.New()
actionConfig := new(action.Configuration)
// You can pass an empty string instead of settings.Namespace() to list
// all namespaces
if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil {
log.Printf("%+v", err)
os.Exit(1)
}
client := action.NewList(actionConfig)
// Only list deployed
client.Deployed = true
results, err := client.Run()
if err != nil {
log.Printf("%+v", err)
os.Exit(1)
}
for _, rel := range results {
log.Printf("%+v", rel)
}
}
Compatibilidade
O SDK do Helm segue explicitamente as garantias de compatibilidade retroativa do Helm:
https://github.com/helm/community/blob/main/hips/hip-0004.md
Ou seja, mudanças que quebram compatibilidade só serão feitas em versões principais (major).