diff --git a/compose/internal/helm/chart.go b/compose/internal/helm/chart.go deleted file mode 100644 index 36f7e4487..000000000 --- a/compose/internal/helm/chart.go +++ /dev/null @@ -1,70 +0,0 @@ -package helm - -import ( - "gopkg.in/yaml.v2" - action "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart" - loader "helm.sh/helm/v3/pkg/chart/loader" -) - -type HelmChart struct { - chart *chart.Chart - actionConfig *HelmConfig - Path string - Name string -} - -func NewChart(name, chartpath string) *HelmChart { - chart, err := loader.Load(chartpath) - if err != nil { - return nil - } - return &HelmChart{ - chart: chart, - Path: chartpath, - Name: name, - } -} -func (chart *HelmChart) SetActionConfig(config *HelmConfig) error { - chart.actionConfig = config - return nil -} - -func (chart *HelmChart) Validate() error { - _, err := yaml.Marshal(chart.chart.Metadata) - if err != nil { - return nil - } - - return nil -} - -func (chart *HelmChart) Install() error { - err := chart.actionConfig.InitKubeClient() - if err != nil { - return err - } - - actInstall := action.NewInstall(chart.actionConfig.Config) - actInstall.ReleaseName = chart.Name - actInstall.Namespace = chart.actionConfig.Settings.Namespace() - - release, err := actInstall.Run(chart.chart, map[string]interface{}{}) - if err != nil { - return err - } - - println("Release status: ", release.Info.Status) - println("Release description: ", release.Info.Description) - return chart.actionConfig.Config.Releases.Update(release) -} - -func (chart *HelmChart) Uninstall() error { - err := chart.actionConfig.InitKubeClient() - if err != nil { - return err - } - actUninstall := action.NewUninstall(chart.actionConfig.Config) - _, err = actUninstall.Run(chart.Name) - return err -} diff --git a/compose/internal/helm/helm.go b/compose/internal/helm/helm.go index b73a81ec5..277a2c85f 100644 --- a/compose/internal/helm/helm.go +++ b/compose/internal/helm/helm.go @@ -1,34 +1,43 @@ package helm import ( + "errors" "log" + "os" action "helm.sh/helm/v3/pkg/action" + loader "helm.sh/helm/v3/pkg/chart/loader" env "helm.sh/helm/v3/pkg/cli" + "helm.sh/helm/v3/pkg/release" ) -type HelmConfig struct { +type HelmActions struct { Config *action.Configuration Settings *env.EnvSettings kube_conn_init bool } -func NewHelmConfig(settings *env.EnvSettings) *HelmConfig { +func NewHelmActions(settings *env.EnvSettings) *HelmActions { if settings == nil { settings = env.New() } - return &HelmConfig{ + return &HelmActions{ Config: new(action.Configuration), Settings: settings, kube_conn_init: false, } } -func (hc *HelmConfig) InitKubeClient() error { +func (hc *HelmActions) InitKubeClient() error { if hc.kube_conn_init { return nil } - if err := hc.Config.Init(hc.Settings.RESTClientGetter(), hc.Settings.Namespace(), "memory", log.Printf); err != nil { + if err := hc.Config.Init( + hc.Settings.RESTClientGetter(), + hc.Settings.Namespace(), + "configmap", + log.Printf, + ); err != nil { log.Fatal(err) } if err := hc.Config.KubeClient.IsReachable(); err != nil { @@ -37,3 +46,52 @@ func (hc *HelmConfig) InitKubeClient() error { hc.kube_conn_init = true return nil } + +func (hc *HelmActions) Install(name, chartpath string) error { + hc.InitKubeClient() + + if chartpath == "" { + cwd, err := os.Getwd() + if err != nil { + return nil + } + chartpath = cwd + } + chart, err := loader.Load(chartpath) + if err != nil { + return nil + } + actInstall := action.NewInstall(hc.Config) + actInstall.ReleaseName = name + actInstall.Namespace = hc.Settings.Namespace() + + release, err := actInstall.Run(chart, map[string]interface{}{}) + if err != nil { + return err + } + + println("Release status: ", release.Info.Status) + println("Release description: ", release.Info.Description) + return hc.Config.Releases.Update(release) +} + +func (hc *HelmActions) Uninstall(name string) error { + hc.InitKubeClient() + release, err := hc.Get(name) + if err != nil { + return err + } + if release == nil { + return errors.New("No release found with the name provided.") + } + actUninstall := action.NewUninstall(hc.Config) + _, err = actUninstall.Run(name) + return err +} + +func (hc *HelmActions) Get(name string) (*release.Release, error) { + hc.InitKubeClient() + + actGet := action.NewGet(hc.Config) + return actGet.Run(name) +} diff --git a/compose/internal/project.go b/compose/internal/project.go index f35515482..314a7b341 100644 --- a/compose/internal/project.go +++ b/compose/internal/project.go @@ -39,8 +39,7 @@ func GetDefault() *Engine { type Project struct { Config *types.Config - HelmConfig *helm.HelmConfig - HelmChart *helm.HelmChart + Helm *helm.HelmActions ProjectDir string Name string `yaml:"-" json:"-"` } @@ -53,8 +52,7 @@ func NewProject(config types.ConfigDetails, name string) (*Project, error) { p := Project{ Config: model, - HelmConfig: helm.NewHelmConfig(nil), - HelmChart: nil, + Helm: helm.NewHelmActions(nil), ProjectDir: config.WorkingDir, Name: name, } @@ -95,18 +93,10 @@ func (p *Project) ExportToCharts(path string) error { } func (p *Project) Install(name, path string) error { - if p.HelmChart == nil { - chart := helm.NewChart(name, path) - chart.SetActionConfig(p.HelmConfig) - p.HelmChart = chart - } - return p.HelmChart.Install() + return p.Helm.Install(name, path) } func (p *Project) Uninstall(name string) error { - if p.HelmChart == nil { - p.HelmChart = helm.NewChart(name, "") - p.HelmChart.SetActionConfig(p.HelmConfig) - } - return p.HelmChart.Uninstall() + + return p.Helm.Uninstall(name) }