From a124b4f56f252fee38077854a7c5586d07ea640c Mon Sep 17 00:00:00 2001 From: Michelle Noorali Date: Thu, 18 Aug 2016 11:52:38 -0400 Subject: [PATCH] feat(helm): add rollback cmd --- cmd/helm/helm.go | 1 + cmd/helm/rollback.go | 76 +++++++++++++++++++++++++++++++++++++++ cmd/helm/rollback_test.go | 43 ++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 cmd/helm/rollback.go create mode 100644 cmd/helm/rollback_test.go diff --git a/cmd/helm/helm.go b/cmd/helm/helm.go index 12156c038..ebe139fb6 100644 --- a/cmd/helm/helm.go +++ b/cmd/helm/helm.go @@ -93,6 +93,7 @@ func newRootCmd(out io.Writer) *cobra.Command { newListCmd(nil, out), newStatusCmd(nil, out), newUpgradeCmd(nil, out), + newRollbackCmd(nil, out), ) return cmd } diff --git a/cmd/helm/rollback.go b/cmd/helm/rollback.go new file mode 100644 index 000000000..bb6326f7a --- /dev/null +++ b/cmd/helm/rollback.go @@ -0,0 +1,76 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "io" + + "github.com/spf13/cobra" + + "k8s.io/helm/pkg/helm" +) + +const rollbackDesc = ` +This command rolls back a release to the previous version. + +The rollback argument is the name of a release. + +` + +type rollbackCmd struct { + name string + dryRun bool + disableHooks bool + out io.Writer + client helm.Interface +} + +func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command { + rollback := &rollbackCmd{ + out: out, + client: c, + } + + cmd := &cobra.Command{ + Use: "rollback [RELEASE]", + Short: "roll back a release to the previous version", + Long: rollbackDesc, + PersistentPreRunE: setupConnection, + RunE: func(cmd *cobra.Command, args []string) error { + if err := checkArgsLength(1, len(args), "release name"); err != nil { + return err + } + rollback.client = ensureHelmClient(rollback.client) + return rollback.run() + }, + } + + f := cmd.Flags() + f.BoolVar(&rollback.dryRun, "dry-run", false, "simulate an install") + f.BoolVar(&rollback.disableHooks, "no-hooks", false, "prevent hooks from running during rollback") + return cmd +} + +func (r *rollbackCmd) run() error { + + msg := "This command is under construction. Coming soon to a Helm near you!" + + fmt.Fprintf(r.out, msg) + + return nil +} diff --git a/cmd/helm/rollback_test.go b/cmd/helm/rollback_test.go new file mode 100644 index 000000000..0c641b66e --- /dev/null +++ b/cmd/helm/rollback_test.go @@ -0,0 +1,43 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "io" + "testing" + + "github.com/spf13/cobra" +) + +func TestRollbackCmd(t *testing.T) { + + tests := []releaseCase{ + { + name: "rollback a release", + args: []string{"funny-honey"}, + resp: nil, + expected: "This command is under construction. Coming soon to a Helm near you!", + }, + } + + cmd := func(c *fakeReleaseClient, out io.Writer) *cobra.Command { + return newRollbackCmd(c, out) + } + + runReleaseCases(t, tests, cmd) + +}