in cmd/resource/helm.go [177:269]
func (c *Clients) HelmInstall(config *Config, values map[string]interface{}, chart *Chart, id string) error {
var cp string
var err error
var state ReleaseState
client := action.NewInstall(c.HelmClient)
client.Description = id
client.ReleaseName = *config.Name
state, err = c.HelmVerifyRelease(*config.Name, id)
if err != nil {
return genericError("Helm install", err)
}
switch state {
case ReleasePending:
log.Printf("Release with name: %s and ID: %s is pending state.", *config.Name, id)
return nil
case ReleaseError:
return err
case ReleaseFound:
log.Printf("Found release with name: %s and ID: %s. Please check..", *config.Name, id)
return genericError("Helm install", errors.New(ReleaseAlreadyExistsMsg))
}
log.Printf("Installing release %s", *config.Name)
switch *chart.ChartType {
case "Remote":
if chart.ChartVersion != nil {
client.Version = *chart.ChartVersion
}
err = addHelmRepoUpdate(aws.StringValue(chart.ChartRepo), aws.StringValue(chart.ChartRepoURL), aws.StringValue(chart.ChartUsername), aws.StringValue(chart.ChartPassword), aws.BoolValue(chart.ChartSkipTLSVerify), aws.BoolValue(chart.ChartLocalCA), c.Settings)
if err != nil {
return genericError("Helm Install", err)
}
client.ChartPathOptions.InsecureSkipTLSverify = *chart.ChartSkipTLSVerify
if !IsZero(chart.ChartUsername) && !IsZero(chart.ChartPassword) {
client.ChartPathOptions.Username = *chart.ChartUsername
client.ChartPathOptions.Password = *chart.ChartPassword
}
if *chart.ChartLocalCA {
client.ChartPathOptions.CaFile = caLocalPath
}
cp, err = client.ChartPathOptions.LocateChart(*chart.Chart, c.Settings)
if err != nil {
return genericError("Helm Install", err)
}
default:
err = c.downloadChart(*chart.ChartPath, chartLocalPath, chart.ChartUsername, chart.ChartPassword)
if err != nil {
return err
}
cp = *chart.Chart
}
p := getter.All(c.Settings)
chartRequested, err := loader.Load(cp)
if err != nil {
return genericError("Helm install", err)
}
if req := chartRequested.Metadata.Dependencies; req != nil {
if err := action.CheckDependencies(chartRequested, req); err != nil {
if client.DependencyUpdate {
man := &downloader.Manager{
ChartPath: cp,
Keyring: client.ChartPathOptions.Keyring,
SkipUpdate: false,
Getters: p,
RepositoryConfig: c.Settings.RepositoryConfig,
RepositoryCache: c.Settings.RepositoryCache,
Debug: true,
}
if err := man.Update(); err != nil {
return genericError("Helm install", err)
}
} else {
return genericError("Helm install", err)
}
}
}
err = c.createNamespace(*config.Namespace)
// Here is fine still
if err != nil {
return err
}
client.Namespace = *config.Namespace
_, err = client.Run(chartRequested, values)
if err != nil {
return genericError("Helm install", err)
}
log.Printf("Release installation completed. Waiting for resources to stablize.")
return nil
}