From 7f703f50a95a48ce960ccc83cb7ed6d1801588cb Mon Sep 17 00:00:00 2001 From: Arash Deshmeh Date: Thu, 17 May 2018 16:50:34 -0400 Subject: [PATCH] feat(helm): added new helm notes command to display notes provided by the chart of a release Signed-off-by: Arash Deshmeh --- cmd/helm/get.go | 1 + cmd/helm/get_notes.go | 77 +++++++++++++++++++++++++++++++++++++ cmd/helm/get_notes_test.go | 52 +++++++++++++++++++++++++ docs/helm/helm.md | 2 +- docs/helm/helm_get.md | 3 +- docs/helm/helm_get_notes.md | 44 +++++++++++++++++++++ 6 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 cmd/helm/get_notes.go create mode 100644 cmd/helm/get_notes_test.go create mode 100644 docs/helm/helm_get_notes.md diff --git a/cmd/helm/get.go b/cmd/helm/get.go index 5744beb62..4170a7cef 100644 --- a/cmd/helm/get.go +++ b/cmd/helm/get.go @@ -75,6 +75,7 @@ func newGetCmd(client helm.Interface, out io.Writer) *cobra.Command { cmd.AddCommand(addFlagsTLS(newGetValuesCmd(nil, out))) cmd.AddCommand(addFlagsTLS(newGetManifestCmd(nil, out))) cmd.AddCommand(addFlagsTLS(newGetHooksCmd(nil, out))) + cmd.AddCommand(addFlagsTLS(newGetNotesCmd(nil, out))) return cmd } diff --git a/cmd/helm/get_notes.go b/cmd/helm/get_notes.go new file mode 100644 index 000000000..5b1135ba5 --- /dev/null +++ b/cmd/helm/get_notes.go @@ -0,0 +1,77 @@ +/* +Copyright The Helm Authors. + +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" +) + +var getNotesHelp = ` +This command shows notes provided by the chart of a named release. +` + +type getNotesCmd struct { + release string + out io.Writer + client helm.Interface + version int32 +} + +func newGetNotesCmd(client helm.Interface, out io.Writer) *cobra.Command { + get := &getNotesCmd{ + out: out, + client: client, + } + + cmd := &cobra.Command{ + Use: "notes [flags] RELEASE_NAME", + Short: "displays the notes of the named release", + Long: getNotesHelp, + PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() }, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return errReleaseRequired + } + get.release = args[0] + if get.client == nil { + get.client = newClient() + } + return get.run() + }, + } + + cmd.PersistentFlags().Int32Var(&get.version, "revision", 0, "get the notes of the named release with revision") + + return cmd +} + +func (n *getNotesCmd) run() error { + res, err := n.client.ReleaseStatus(n.release, helm.StatusReleaseVersion(n.version)) + if err != nil { + return prettyError(err) + } + + if len(res.Info.Status.Notes) > 0 { + fmt.Fprintf(n.out, "NOTES:\n%s\n", res.Info.Status.Notes) + } + return nil +} diff --git a/cmd/helm/get_notes_test.go b/cmd/helm/get_notes_test.go new file mode 100644 index 000000000..de655fef3 --- /dev/null +++ b/cmd/helm/get_notes_test.go @@ -0,0 +1,52 @@ +/* +Copyright The Helm Authors. + +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" + + "k8s.io/helm/pkg/helm" + "k8s.io/helm/pkg/proto/hapi/release" +) + +func TestGetNotesCmd(t *testing.T) { + tests := []releaseCase{ + { + name: "get notes of a deployed release", + args: []string{"flummoxed-chickadee"}, + expected: "NOTES:\nrelease notes\n", + rels: []*release.Release{ + releaseMockWithStatus(&release.Status{ + Code: release.Status_DEPLOYED, + Notes: "release notes", + }), + }, + }, + { + name: "get notes requires release name arg", + err: true, + }, + } + + runReleaseCases(t, tests, func(c *helm.FakeClient, out io.Writer) *cobra.Command { + return newGetNotesCmd(c, out) + }) + +} diff --git a/docs/helm/helm.md b/docs/helm/helm.md index 67ac9a4a2..c1a11c4a3 100644 --- a/docs/helm/helm.md +++ b/docs/helm/helm.md @@ -70,4 +70,4 @@ Environment: * [helm verify](helm_verify.md) - verify that a chart at the given path has been signed and is valid * [helm version](helm_version.md) - print the client/server version information -###### Auto generated by spf13/cobra on 1-Aug-2018 +###### Auto generated by spf13/cobra on 1-Sep-2018 diff --git a/docs/helm/helm_get.md b/docs/helm/helm_get.md index e7337b533..3b99c93d5 100644 --- a/docs/helm/helm_get.md +++ b/docs/helm/helm_get.md @@ -51,6 +51,7 @@ helm get [flags] RELEASE_NAME * [helm](helm.md) - The Helm package manager for Kubernetes. * [helm get hooks](helm_get_hooks.md) - download all hooks for a named release * [helm get manifest](helm_get_manifest.md) - download the manifest for a named release +* [helm get notes](helm_get_notes.md) - displays the notes of the named release * [helm get values](helm_get_values.md) - download the values file for a named release -###### Auto generated by spf13/cobra on 10-Aug-2018 +###### Auto generated by spf13/cobra on 1-Sep-2018 diff --git a/docs/helm/helm_get_notes.md b/docs/helm/helm_get_notes.md new file mode 100644 index 000000000..076aaaa59 --- /dev/null +++ b/docs/helm/helm_get_notes.md @@ -0,0 +1,44 @@ +## helm get notes + +displays the notes of the named release + +### Synopsis + + +This command shows notes provided by the chart of a named release. + + +``` +helm get notes [flags] RELEASE_NAME +``` + +### Options + +``` + -h, --help help for notes + --revision int32 get the notes of the named release with revision + --tls enable TLS for request + --tls-ca-cert string path to TLS CA certificate file (default "$HELM_HOME/ca.pem") + --tls-cert string path to TLS certificate file (default "$HELM_HOME/cert.pem") + --tls-hostname string the server name used to verify the hostname on the returned certificates from the server + --tls-key string path to TLS key file (default "$HELM_HOME/key.pem") + --tls-verify enable TLS for request and verify remote +``` + +### Options inherited from parent commands + +``` + --debug enable verbose output + --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") + --host string address of Tiller. Overrides $HELM_HOST + --kube-context string name of the kubeconfig context to use + --kubeconfig string absolute path to the kubeconfig file to use + --tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300) + --tiller-namespace string namespace of Tiller (default "kube-system") +``` + +### SEE ALSO + +* [helm get](helm_get.md) - download a named release + +###### Auto generated by spf13/cobra on 1-Sep-2018