func()

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
}