feat(helm): add --app-version flag to 'helm install/upgrade'

Signed-off-by: Kevin Labesse <kevin@labesse.me>
pull/5492/head
Kevin Labesse 7 years ago
parent d3357fad37
commit a2e0ec74d4

@ -90,4 +90,7 @@ message Metadata {
// KubeVersion is a SemVer constraint specifying the version of Kubernetes required.
string kubeVersion = 17;
// Whether or not the app version can be override by flag --app-version (during install or update)
bool overrideAppVersion = 18;
}

@ -129,6 +129,7 @@ type installCmd struct {
fileValues []string
nameTemplate string
version string
appVersion string
timeout int64
wait bool
repoURL string
@ -209,6 +210,7 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command {
f.BoolVar(&inst.verify, "verify", false, "verify the package before installing it")
f.StringVar(&inst.keyring, "keyring", defaultKeyring(), "location of public keys used for verification")
f.StringVar(&inst.version, "version", "", "specify the exact chart version to install. If this is not specified, the latest version is installed")
f.StringVar(&inst.appVersion, "app-version", "", "specify an app version for the release")
f.Int64Var(&inst.timeout, "timeout", 300, "time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks)")
f.BoolVar(&inst.wait, "wait", false, "if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment are in a ready state before marking the release as successful. It will wait for as long as --timeout")
f.StringVar(&inst.repoURL, "repo", "", "chart repository url where to locate the requested chart")
@ -291,6 +293,14 @@ func (i *installCmd) run() error {
return fmt.Errorf("cannot load requirements: %v", err)
}
if i.appVersion != "" {
if !chartRequested.Metadata.OverrideAppVersion {
return fmt.Errorf("override app version is not allowed on this chart")
}
chartRequested.Metadata.AppVersion = i.appVersion
}
res, err := i.client.InstallReleaseFromChart(
chartRequested,
i.namespace,

@ -101,6 +101,7 @@ type upgradeCmd struct {
install bool
namespace string
version string
appVersion string
timeout int64
resetValues bool
reuseValues bool
@ -162,6 +163,7 @@ func newUpgradeCmd(client helm.Interface, out io.Writer) *cobra.Command {
f.BoolVarP(&upgrade.install, "install", "i", false, "if a release by this name doesn't already exist, run an install")
f.StringVar(&upgrade.namespace, "namespace", "", "namespace to install the release into (only used if --install is set). Defaults to the current kube config namespace")
f.StringVar(&upgrade.version, "version", "", "specify the exact chart version to use. If this is not specified, the latest version is used")
f.StringVar(&upgrade.appVersion, "app-version", "", "specify the app version to use for the upgrade")
f.Int64Var(&upgrade.timeout, "timeout", 300, "time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks)")
f.BoolVar(&upgrade.resetValues, "reset-values", false, "when upgrading, reset the values to the ones built into the chart")
f.BoolVar(&upgrade.reuseValues, "reuse-values", false, "when upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored.")
@ -240,22 +242,32 @@ func (u *upgradeCmd) run() error {
return err
}
// load the chart to update
chart, err := chartutil.Load(chartPath)
if err != nil {
return prettyError(err)
}
// Check chart requirements to make sure all dependencies are present in /charts
if ch, err := chartutil.Load(chartPath); err == nil {
if req, err := chartutil.LoadRequirements(ch); err == nil {
if err := renderutil.CheckDependencies(ch, req); err != nil {
if req, err := chartutil.LoadRequirements(chart); err == nil {
if err := renderutil.CheckDependencies(chart, req); err != nil {
return err
}
} else if err != chartutil.ErrRequirementsNotFound {
return fmt.Errorf("cannot load requirements: %v", err)
}
} else {
return prettyError(err)
if u.appVersion != "" {
if !chart.Metadata.OverrideAppVersion {
return fmt.Errorf("override app version is not allowed on this chart")
}
chart.Metadata.AppVersion = u.appVersion
}
resp, err := u.client.UpdateRelease(
resp, err := u.client.UpdateReleaseFromChart(
u.release,
chartPath,
chart,
helm.UpdateValueOverrides(rawVals),
helm.UpgradeDryRun(u.dryRun),
helm.UpgradeRecreate(u.recreate),

@ -78,6 +78,7 @@ helm install [CHART] [flags]
### Options
```
--app-version string specify an app version for the release
--ca-file string verify certificates of HTTPS-enabled servers using this CA bundle
--cert-file string identify HTTPS client using this SSL certificate file
--dep-up run helm dependency update before installing the chart
@ -128,4 +129,4 @@ helm install [CHART] [flags]
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 10-Aug-2018
###### Auto generated by spf13/cobra on 21-Mar-2019

@ -65,6 +65,7 @@ helm upgrade [RELEASE] [CHART] [flags]
### Options
```
--app-version string specify the app version to use for the upgrade
--ca-file string verify certificates of HTTPS-enabled servers using this CA bundle
--cert-file string identify HTTPS client using this SSL certificate file
--description string specify the description to use for the upgrade, rather than the default
@ -115,4 +116,4 @@ helm upgrade [RELEASE] [CHART] [flags]
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 24-Aug-2018
###### Auto generated by spf13/cobra on 21-Mar-2019

@ -109,6 +109,8 @@ type Metadata struct {
Annotations map[string]string `protobuf:"bytes,16,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
// KubeVersion is a SemVer constraint specifying the version of Kubernetes required.
KubeVersion string `protobuf:"bytes,17,opt,name=kubeVersion" json:"kubeVersion,omitempty"`
// Whether or not the app version can be override by flag --app-version (during install or update)
OverrideAppVersion bool `protobuf:"varint,18,opt,name=overrideAppVersion" json:"overrideAppVersion,omitempty"`
}
func (m *Metadata) Reset() { *m = Metadata{} }
@ -235,6 +237,13 @@ func (m *Metadata) GetKubeVersion() string {
return ""
}
func (m *Metadata) GetOverrideAppVersion() bool {
if m != nil {
return m.OverrideAppVersion
}
return false
}
func init() {
proto.RegisterType((*Maintainer)(nil), "hapi.chart.Maintainer")
proto.RegisterType((*Metadata)(nil), "hapi.chart.Metadata")
@ -244,33 +253,34 @@ func init() {
func init() { proto.RegisterFile("hapi/chart/metadata.proto", fileDescriptor2) }
var fileDescriptor2 = []byte{
// 435 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0x5d, 0x6b, 0xd4, 0x40,
0x14, 0x35, 0xcd, 0x66, 0x77, 0x73, 0x63, 0x35, 0x0e, 0x52, 0xc6, 0x22, 0x12, 0x16, 0x85, 0x7d,
0xda, 0x82, 0xbe, 0x14, 0x1f, 0x04, 0x85, 0x52, 0x41, 0xbb, 0x95, 0xe0, 0x07, 0xf8, 0x36, 0x4d,
0x2e, 0xdd, 0x61, 0x93, 0x99, 0x30, 0x99, 0xad, 0xec, 0xaf, 0xf0, 0x2f, 0xcb, 0xdc, 0x64, 0x9a,
0xac, 0xf4, 0xed, 0x9e, 0x73, 0x66, 0xce, 0xcc, 0xbd, 0xf7, 0xc0, 0x8b, 0x8d, 0x68, 0xe4, 0x59,
0xb1, 0x11, 0xc6, 0x9e, 0xd5, 0x68, 0x45, 0x29, 0xac, 0x58, 0x35, 0x46, 0x5b, 0xcd, 0xc0, 0x49,
0x2b, 0x92, 0x16, 0x9f, 0x01, 0xae, 0x84, 0x54, 0x56, 0x48, 0x85, 0x86, 0x31, 0x98, 0x28, 0x51,
0x23, 0x0f, 0xb2, 0x60, 0x19, 0xe7, 0x54, 0xb3, 0xe7, 0x10, 0x61, 0x2d, 0x64, 0xc5, 0x8f, 0x88,
0xec, 0x00, 0x4b, 0x21, 0xdc, 0x99, 0x8a, 0x87, 0xc4, 0xb9, 0x72, 0xf1, 0x37, 0x82, 0xf9, 0x55,
0xff, 0xd0, 0x83, 0x46, 0x0c, 0x26, 0x1b, 0x5d, 0x63, 0xef, 0x43, 0x35, 0xe3, 0x30, 0x6b, 0xf5,
0xce, 0x14, 0xd8, 0xf2, 0x30, 0x0b, 0x97, 0x71, 0xee, 0xa1, 0x53, 0xee, 0xd0, 0xb4, 0x52, 0x2b,
0x3e, 0xa1, 0x0b, 0x1e, 0xb2, 0x0c, 0x92, 0x12, 0xdb, 0xc2, 0xc8, 0xc6, 0x3a, 0x35, 0x22, 0x75,
0x4c, 0xb1, 0x53, 0x98, 0x6f, 0x71, 0xff, 0x47, 0x9b, 0xb2, 0xe5, 0x53, 0xb2, 0xbd, 0xc7, 0xec,
0x1c, 0x92, 0xfa, 0xbe, 0xe1, 0x96, 0xcf, 0xb2, 0x70, 0x99, 0xbc, 0x3d, 0x59, 0x0d, 0x23, 0x59,
0x0d, 0xf3, 0xc8, 0xc7, 0x47, 0xd9, 0x09, 0x4c, 0x51, 0xdd, 0x4a, 0x85, 0x7c, 0x4e, 0x4f, 0xf6,
0xc8, 0xf5, 0x25, 0x0b, 0xad, 0x78, 0xdc, 0xf5, 0xe5, 0x6a, 0xf6, 0x0a, 0x40, 0x34, 0xf2, 0x67,
0xdf, 0x00, 0x90, 0x32, 0x62, 0xd8, 0x4b, 0x88, 0x0b, 0xad, 0x4a, 0x49, 0x1d, 0x24, 0x24, 0x0f,
0x84, 0x73, 0xb4, 0xe2, 0xb6, 0xe5, 0x8f, 0x3b, 0x47, 0x57, 0x77, 0x8e, 0x8d, 0x77, 0x3c, 0xf6,
0x8e, 0x9e, 0x71, 0x7a, 0x89, 0x8d, 0xc1, 0x42, 0x58, 0x2c, 0xf9, 0x93, 0x2c, 0x58, 0xce, 0xf3,
0x11, 0xc3, 0x5e, 0xc3, 0xb1, 0x95, 0x55, 0x85, 0xc6, 0x5b, 0x3c, 0x25, 0x8b, 0x43, 0x92, 0x5d,
0x42, 0x22, 0x94, 0xd2, 0x56, 0xb8, 0x7f, 0xb4, 0x3c, 0xa5, 0xe9, 0xbc, 0x39, 0x98, 0x8e, 0xcf,
0xd2, 0xc7, 0xe1, 0xdc, 0x85, 0xb2, 0x66, 0x9f, 0x8f, 0x6f, 0xba, 0x25, 0x6d, 0x77, 0x37, 0xe8,
0x1f, 0x7b, 0xd6, 0x2d, 0x69, 0x44, 0x9d, 0x7e, 0x80, 0xf4, 0x7f, 0x0b, 0x97, 0xaa, 0x2d, 0xee,
0xfb, 0xd4, 0xb8, 0xd2, 0xa5, 0xef, 0x4e, 0x54, 0x3b, 0x9f, 0x9a, 0x0e, 0xbc, 0x3f, 0x3a, 0x0f,
0x16, 0x19, 0x4c, 0x2f, 0xba, 0x05, 0x24, 0x30, 0xfb, 0xb1, 0xfe, 0xb2, 0xbe, 0xfe, 0xb5, 0x4e,
0x1f, 0xb1, 0x18, 0xa2, 0xcb, 0xeb, 0xef, 0xdf, 0xbe, 0xa6, 0xc1, 0xa7, 0xd9, 0xef, 0x88, 0xfe,
0x7c, 0x33, 0xa5, 0xdc, 0xbf, 0xfb, 0x17, 0x00, 0x00, 0xff, 0xff, 0x36, 0xf9, 0x0d, 0xa6, 0x14,
// 451 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x5d, 0x6b, 0xd4, 0x40,
0x14, 0x35, 0xcd, 0x66, 0x77, 0x73, 0x63, 0x35, 0x5e, 0xa4, 0x8c, 0x45, 0x24, 0x2c, 0x0a, 0xfb,
0x94, 0x82, 0xbe, 0x14, 0x1f, 0x84, 0x0a, 0xa5, 0x82, 0x76, 0x2b, 0xc1, 0x0f, 0xf0, 0x6d, 0x9a,
0x5c, 0xba, 0xc3, 0x26, 0x33, 0x61, 0x32, 0xbb, 0xb2, 0xbf, 0xce, 0xbf, 0x26, 0x33, 0x49, 0x9a,
0xb4, 0xec, 0xdb, 0x3d, 0xe7, 0x64, 0xce, 0x9d, 0x73, 0xe7, 0x06, 0x5e, 0xad, 0x79, 0x2d, 0xce,
0xf2, 0x35, 0xd7, 0xe6, 0xac, 0x22, 0xc3, 0x0b, 0x6e, 0x78, 0x5a, 0x6b, 0x65, 0x14, 0x82, 0x95,
0x52, 0x27, 0x2d, 0xbe, 0x00, 0x5c, 0x73, 0x21, 0x0d, 0x17, 0x92, 0x34, 0x22, 0x4c, 0x24, 0xaf,
0x88, 0x79, 0x89, 0xb7, 0x0c, 0x33, 0x57, 0xe3, 0x4b, 0x08, 0xa8, 0xe2, 0xa2, 0x64, 0x47, 0x8e,
0x6c, 0x01, 0xc6, 0xe0, 0x6f, 0x75, 0xc9, 0x7c, 0xc7, 0xd9, 0x72, 0xf1, 0x2f, 0x80, 0xf9, 0x75,
0xd7, 0xe8, 0xa0, 0x11, 0xc2, 0x64, 0xad, 0x2a, 0xea, 0x7c, 0x5c, 0x8d, 0x0c, 0x66, 0x8d, 0xda,
0xea, 0x9c, 0x1a, 0xe6, 0x27, 0xfe, 0x32, 0xcc, 0x7a, 0x68, 0x95, 0x1d, 0xe9, 0x46, 0x28, 0xc9,
0x26, 0xee, 0x40, 0x0f, 0x31, 0x81, 0xa8, 0xa0, 0x26, 0xd7, 0xa2, 0x36, 0x56, 0x0d, 0x9c, 0x3a,
0xa6, 0xf0, 0x14, 0xe6, 0x1b, 0xda, 0xff, 0x55, 0xba, 0x68, 0xd8, 0xd4, 0xd9, 0xde, 0x63, 0x3c,
0x87, 0xa8, 0xba, 0x0f, 0xdc, 0xb0, 0x59, 0xe2, 0x2f, 0xa3, 0xf7, 0x27, 0xe9, 0x30, 0x92, 0x74,
0x98, 0x47, 0x36, 0xfe, 0x14, 0x4f, 0x60, 0x4a, 0xf2, 0x4e, 0x48, 0x62, 0x73, 0xd7, 0xb2, 0x43,
0x36, 0x97, 0xc8, 0x95, 0x64, 0x61, 0x9b, 0xcb, 0xd6, 0xf8, 0x06, 0x80, 0xd7, 0xe2, 0x57, 0x17,
0x00, 0x9c, 0x32, 0x62, 0xf0, 0x35, 0x84, 0xb9, 0x92, 0x85, 0x70, 0x09, 0x22, 0x27, 0x0f, 0x84,
0x75, 0x34, 0xfc, 0xae, 0x61, 0x4f, 0x5b, 0x47, 0x5b, 0xb7, 0x8e, 0x75, 0xef, 0x78, 0xdc, 0x3b,
0xf6, 0x8c, 0xd5, 0x0b, 0xaa, 0x35, 0xe5, 0xdc, 0x50, 0xc1, 0x9e, 0x25, 0xde, 0x72, 0x9e, 0x8d,
0x18, 0x7c, 0x0b, 0xc7, 0x46, 0x94, 0x25, 0xe9, 0xde, 0xe2, 0xb9, 0xb3, 0x78, 0x48, 0xe2, 0x15,
0x44, 0x5c, 0x4a, 0x65, 0xb8, 0xbd, 0x47, 0xc3, 0x62, 0x37, 0x9d, 0x77, 0x0f, 0xa6, 0xd3, 0xef,
0xd2, 0xc5, 0xf0, 0xdd, 0xa5, 0x34, 0x7a, 0x9f, 0x8d, 0x4f, 0xda, 0x47, 0xda, 0x6c, 0x6f, 0xa9,
0x6f, 0xf6, 0xa2, 0x7d, 0xa4, 0x11, 0x85, 0x29, 0xa0, 0xda, 0x91, 0xd6, 0xa2, 0xa0, 0x8b, 0x21,
0x18, 0xba, 0x8b, 0x1f, 0x50, 0x4e, 0x3f, 0x41, 0xfc, 0xb8, 0xa5, 0xdd, 0xc2, 0x0d, 0xed, 0xbb,
0x2d, 0xb3, 0xa5, 0xdd, 0xd6, 0x1d, 0x2f, 0xb7, 0xfd, 0x96, 0xb5, 0xe0, 0xe3, 0xd1, 0xb9, 0xb7,
0x48, 0x60, 0x7a, 0xd9, 0x3e, 0x58, 0x04, 0xb3, 0x9f, 0xab, 0xaf, 0xab, 0x9b, 0xdf, 0xab, 0xf8,
0x09, 0x86, 0x10, 0x5c, 0xdd, 0xfc, 0xf8, 0xfe, 0x2d, 0xf6, 0x3e, 0xcf, 0xfe, 0x04, 0x2e, 0xe3,
0xed, 0xd4, 0xfd, 0x27, 0x1f, 0xfe, 0x07, 0x00, 0x00, 0xff, 0xff, 0x72, 0xe2, 0x55, 0x08, 0x44,
0x03, 0x00, 0x00,
}

Loading…
Cancel
Save