diff --git a/_proto/hapi/services/tiller.proto b/_proto/hapi/services/tiller.proto index 1843c1332ef0f4cbb28c5e9037fd3cae96008214..a1e8ed25a70ead6b116641d9cf62b7e95786a6bc 100644 --- a/_proto/hapi/services/tiller.proto +++ b/_proto/hapi/services/tiller.proto @@ -189,7 +189,7 @@ message UpdateReleaseRequest { // DisableHooks causes the server to skip running any hooks for the upgrade. bool disable_hooks = 5; // Performs pods restart for resources if applicable - bool restart = 6; + bool recreate = 6; } // UpdateReleaseResponse is the response to an update request. @@ -207,7 +207,7 @@ message RollbackReleaseRequest { // Version is the version of the release to deploy. int32 version = 4; // Performs pods restart for resources if applicable - bool restart = 5; + bool recreate = 5; } // RollbackReleaseResponse is the response to an update request. diff --git a/cmd/helm/rollback.go b/cmd/helm/rollback.go index 151cc94ef313b3f79bc9e0a62363a8e2697b4e5c..fd41e4d76eafe43c9b747a7b6336504bb57feb4e 100644 --- a/cmd/helm/rollback.go +++ b/cmd/helm/rollback.go @@ -82,7 +82,7 @@ func (r *rollbackCmd) run() error { _, err := r.client.RollbackRelease( r.name, helm.RollbackDryRun(r.dryRun), - helm.RollbackRestart(r.restart), + helm.RollbackRecreate(r.restart), helm.RollbackDisableHooks(r.disableHooks), helm.RollbackVersion(r.revision), ) diff --git a/cmd/helm/upgrade.go b/cmd/helm/upgrade.go index d8627e42367310ece95caf11d4b6eff1b03f2c16..b279b8fd2012eda186e58185e8b49805c936e00b 100644 --- a/cmd/helm/upgrade.go +++ b/cmd/helm/upgrade.go @@ -151,7 +151,7 @@ func (u *upgradeCmd) run() error { chartPath, helm.UpdateValueOverrides(rawVals), helm.UpgradeDryRun(u.dryRun), - helm.UpgradeRestart(u.restart), + helm.UpgradeRecreate(u.restart), helm.UpgradeDisableHooks(u.disableHooks)) if err != nil { return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) diff --git a/pkg/helm/client.go b/pkg/helm/client.go index bb1793bb5650245edc6a2c227a78de151b8c1d1c..eef5c13e9fe5f18d0c930e32c527354e45521fed 100644 --- a/pkg/helm/client.go +++ b/pkg/helm/client.go @@ -133,7 +133,7 @@ func (h *Client) UpdateRelease(rlsName string, chstr string, opts ...UpdateOptio req.DryRun = h.opts.dryRun req.Name = rlsName req.DisableHooks = h.opts.disableHooks - req.Restart = h.opts.restart + req.Restart = h.opts.recreate ctx := NewContext() if h.opts.before != nil { diff --git a/pkg/helm/option.go b/pkg/helm/option.go index f8c7b198c4a0a57ca79b898306e154c1068bc92f..24cbfb141b146720e4d806bc284cf183c70ce809 100644 --- a/pkg/helm/option.go +++ b/pkg/helm/option.go @@ -41,7 +41,7 @@ type options struct { // if set, re-use an existing name reuseName bool // if set, performs pod restart during upgrade/rollback - restart bool + recreate bool // if set, skip running hooks disableHooks bool // name of release @@ -214,10 +214,10 @@ func RollbackDryRun(dry bool) RollbackOption { } } -// RollbackDryRun will (if true) execute a rollback as a dry run. -func RollbackRestart(restart bool) RollbackOption { +// RollbackRecreate will (if true) recreate pods after rollback. +func RollbackRecreate(recreate bool) RollbackOption { return func(opts *options) { - opts.restart = restart + opts.recreate = recreate } } @@ -242,10 +242,10 @@ func UpgradeDryRun(dry bool) UpdateOption { } } -// UpgradeDryRun will (if true) execute an upgrade as a dry run. -func UpgradeRestart(restart bool) UpdateOption { +// UpgradeRecreate will (if true) recreate pods after upgrade. +func UpgradeRecreate(recreate bool) UpdateOption { return func(opts *options) { - opts.restart = restart + opts.recreate = recreate } } diff --git a/pkg/kube/client.go b/pkg/kube/client.go index c8bc7c7fbe224f750b5318cb43bfabcbc77212c3..cc4762ac24a343fef8764b1137f9bec496d4d56e 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -164,7 +164,7 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) { // not present in the target configuration // // Namespace will set the namespaces -func (c *Client) Update(namespace string, currentReader, targetReader io.Reader, restart bool) error { +func (c *Client) Update(namespace string, currentReader, targetReader io.Reader, recreate bool) error { currentInfos, err := c.newBuilder(namespace, currentReader).Do().Infos() if err != nil { return fmt.Errorf("failed decoding reader into objects: %s", err) @@ -205,7 +205,7 @@ func (c *Client) Update(namespace string, currentReader, targetReader io.Reader, return err } - if err := updateResource(c, info, currentObj, restart); err != nil { + if err := updateResource(c, info, currentObj, recreate); err != nil { if alreadyExistErr, ok := err.(ErrAlreadyExists); ok { log.Printf(alreadyExistErr.errorMsg) } else { @@ -301,7 +301,7 @@ func deleteResource(info *resource.Info) error { return resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name) } -func updateResource(c *Client, target *resource.Info, currentObj runtime.Object, restart bool) error { +func updateResource(c *Client, target *resource.Info, currentObj runtime.Object, recreate bool) error { encoder := api.Codecs.LegacyCodec(registered.EnabledVersions()...) original, err := runtime.Encode(encoder, currentObj) if err != nil { @@ -330,30 +330,30 @@ func updateResource(c *Client, target *resource.Info, currentObj runtime.Object, return err } - if restart { + if recreate { kind := target.Mapping.GroupVersionKind.Kind client, _ := c.ClientSet() switch kind { case "ReplicationController": rc := currentObj.(*v1.ReplicationController) - err = restartPods(client, target.Namespace, rc.Spec.Selector) + err = recreatePods(client, target.Namespace, rc.Spec.Selector) case "DaemonSet": daemonSet := currentObj.(*v1beta1.DaemonSet) - err = restartPods(client, target.Namespace, daemonSet.Spec.Selector.MatchLabels) + err = recreatePods(client, target.Namespace, daemonSet.Spec.Selector.MatchLabels) case "StatefulSet": petSet := currentObj.(*apps.StatefulSet) - err = restartPods(client, target.Namespace, petSet.Spec.Selector.MatchLabels) + err = recreatePods(client, target.Namespace, petSet.Spec.Selector.MatchLabels) case "ReplicaSet": replicaSet := currentObj.(*v1beta1.ReplicaSet) - err = restartPods(client, target.Namespace, replicaSet.Spec.Selector.MatchLabels) + err = recreatePods(client, target.Namespace, replicaSet.Spec.Selector.MatchLabels) } } return err } -func restartPods(client *internalclientset.Clientset, namespace string, selector map[string]string) error { +func recreatePods(client *internalclientset.Clientset, namespace string, selector map[string]string) error { pods, err := client.Pods(namespace).List(api.ListOptions{ FieldSelector: fields.Everything(), LabelSelector: labels.Set(selector).AsSelector(), diff --git a/pkg/tiller/environment/environment.go b/pkg/tiller/environment/environment.go index 6cd20d786114a38e382e931613b93df5d6d0206b..1bddb187120fc97864411141ec415e31c09a00b8 100644 --- a/pkg/tiller/environment/environment.go +++ b/pkg/tiller/environment/environment.go @@ -131,7 +131,7 @@ type KubeClient interface { // // reader must contain a YAML stream (one or more YAML documents separated // by "\n---\n"). - Update(namespace string, originalReader, modifiedReader io.Reader, restart bool) error + Update(namespace string, originalReader, modifiedReader io.Reader, recreate bool) error } // PrintingKubeClient implements KubeClient, but simply prints the reader to @@ -167,7 +167,7 @@ func (p *PrintingKubeClient) WatchUntilReady(ns string, r io.Reader) error { } // Update implements KubeClient Update. -func (p *PrintingKubeClient) Update(ns string, currentReader, modifiedReader io.Reader, restart bool) error { +func (p *PrintingKubeClient) Update(ns string, currentReader, modifiedReader io.Reader, recreate bool) error { _, err := io.Copy(p.Out, modifiedReader) return err } diff --git a/pkg/tiller/environment/environment_test.go b/pkg/tiller/environment/environment_test.go index 3e5a7e5ee68620379ba40fa1ddc22aa9eaa589ef..523efda3b41173029d02e87b9e898b32d2236cbc 100644 --- a/pkg/tiller/environment/environment_test.go +++ b/pkg/tiller/environment/environment_test.go @@ -44,7 +44,7 @@ func (k *mockKubeClient) Get(ns string, r io.Reader) (string, error) { func (k *mockKubeClient) Delete(ns string, r io.Reader) error { return nil } -func (k *mockKubeClient) Update(ns string, currentReader, modifiedReader io.Reader, restart bool) error { +func (k *mockKubeClient) Update(ns string, currentReader, modifiedReader io.Reader, recreate bool) error { return nil } func (k *mockKubeClient) WatchUntilReady(ns string, r io.Reader) error { diff --git a/pkg/tiller/release_server.go b/pkg/tiller/release_server.go index 62d8a3c534b3b87e23bbd84ac1c2cfc756bdcd9a..605c2fcaca32b2857555f299a6d9b906ede1c3fd 100644 --- a/pkg/tiller/release_server.go +++ b/pkg/tiller/release_server.go @@ -496,11 +496,11 @@ func (s *ReleaseServer) performRollback(currentRelease, targetRelease *release.R return res, nil } -func (s *ReleaseServer) performKubeUpdate(currentRelease, targetRelease *release.Release, restart bool) error { +func (s *ReleaseServer) performKubeUpdate(currentRelease, targetRelease *release.Release, recreate bool) error { kubeCli := s.env.KubeClient current := bytes.NewBufferString(currentRelease.Manifest) target := bytes.NewBufferString(targetRelease.Manifest) - return kubeCli.Update(targetRelease.Namespace, current, target, restart) + return kubeCli.Update(targetRelease.Namespace, current, target, recreate) } // prepareRollback finds the previous release and prepares a new release object with diff --git a/pkg/tiller/release_server_test.go b/pkg/tiller/release_server_test.go index 5db9b6e3ef50464834c043887f963dc1fd187969..b2b4b81d5019ce1363985853e877dae6fd1767ec 100644 --- a/pkg/tiller/release_server_test.go +++ b/pkg/tiller/release_server_test.go @@ -1361,7 +1361,7 @@ type updateFailingKubeClient struct { environment.PrintingKubeClient } -func (u *updateFailingKubeClient) Update(namespace string, originalReader, modifiedReader io.Reader, restart bool) error { +func (u *updateFailingKubeClient) Update(namespace string, originalReader, modifiedReader io.Reader, recreate bool) error { return errors.New("Failed update in kube client") }