func()

in cmd/resource/helm.go [361:431]


func (c *Clients) HelmUpgrade(name string, config *Config, values map[string]interface{}, chart *Chart, id string) error {
	log.Printf("Upgrading release %s", name)
	client := action.NewUpgrade(c.HelmClient)
	var cp string
	var err error
	var state ReleaseState
	client.Description = id

	state, err = c.HelmVerifyRelease(name, id)
	if err != nil {
		return genericError("Helm Upgrade", err)
	}
	switch state {
	case ReleasePending:
		log.Printf("Release with name: %s and ID: %s is pending state.", name, id)
		return nil
	case ReleaseNotFound:
		return errors.New(ErrCodeNotFound)
	case ReleaseError:
		return err
	case ReleaseFound:
		log.Printf("Found release with name: %s and ID: %s. Proceeding with upgrade..", name, id)
		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 Upgrade", 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 Upgrade", err)
			}
		default:
			err = c.downloadChart(*chart.ChartPath, chartLocalPath, chart.ChartUsername, chart.ChartPassword)
			if err != nil {
				return err
			}
			cp = *chart.Chart
		}
		// Check chart dependencies to make sure all are present in /charts
		ch, err := loader.Load(cp)
		if err != nil {
			return genericError("Helm Upgrade", err)
		}
		if req := ch.Metadata.Dependencies; req != nil {
			if err := action.CheckDependencies(ch, req); err != nil {
				return genericError("Helm Upgrade", err)
			}
		}

		rel, err := client.Run(name, ch, values)
		if err != nil {
			return genericError("Helm Upgrade", err)
		}
		log.Printf("Release %q has been upgraded. Happy Helming!\n", rel.Name)
		return nil
	}

	return errors.New("unknown error")
}