From d84b707d1e7365c0bf436ffa901603491f4942df Mon Sep 17 00:00:00 2001 From: xuhaigang Date: Tue, 1 Aug 2017 16:22:04 +0800 Subject: [PATCH 01/31] fix(helm): Fix the bug in helm dependency update -verify Helm dependency update --verify should fail when verification fails. Closes #2717 --- cmd/helm/dependency_update.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/helm/dependency_update.go b/cmd/helm/dependency_update.go index 735f205ae..d6a998639 100644 --- a/cmd/helm/dependency_update.go +++ b/cmd/helm/dependency_update.go @@ -96,7 +96,7 @@ func (d *dependencyUpdateCmd) run() error { Getters: getter.All(settings), } if d.verify { - man.Verify = downloader.VerifyIfPossible + man.Verify = downloader.VerifyAlways } if settings.Debug { man.Debug = true From c1cbb97348fbd0d8305351251d74ddd196585b95 Mon Sep 17 00:00:00 2001 From: xuhaigang Date: Wed, 30 Aug 2017 19:58:28 +0800 Subject: [PATCH 02/31] Fix(helm): fix the bug of helm search --regexp helm search cannot search for upper case by --regexp, because it lowers all the letters when build repo index. Closes #2865 --- cmd/helm/search/search.go | 5 +++-- cmd/helm/search/search_test.go | 12 ++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cmd/helm/search/search.go b/cmd/helm/search/search.go index 828ebeeb5..a24208a4b 100644 --- a/cmd/helm/search/search.go +++ b/cmd/helm/search/search.go @@ -30,7 +30,6 @@ import ( "strings" "github.com/Masterminds/semver" - "k8s.io/helm/pkg/repo" ) @@ -147,6 +146,8 @@ func (i *Index) SearchLiteral(term string, threshold int) []*Result { term = strings.ToLower(term) buf := []*Result{} for k, v := range i.lines { + k = strings.ToLower(k) + v = strings.ToLower(v) res := strings.Index(v, term) if score := i.calcScore(res, v); res != -1 && score < threshold { parts := strings.Split(k, verSep) // Remove version, if it is there. @@ -231,5 +232,5 @@ func (s scoreSorter) Less(a, b int) bool { func indstr(name string, ref *repo.ChartVersion) string { i := ref.Name + sep + name + "/" + ref.Name + sep + ref.Description + sep + strings.Join(ref.Keywords, " ") - return strings.ToLower(i) + return i } diff --git a/cmd/helm/search/search_test.go b/cmd/helm/search/search_test.go index db1e83a74..949cf7be7 100644 --- a/cmd/helm/search/search_test.go +++ b/cmd/helm/search/search_test.go @@ -135,7 +135,7 @@ func TestAll(t *testing.T) { func TestAddRepo_Sort(t *testing.T) { i := loadTestIndex(t, true) - sr, err := i.Search("testing/santa-maria", 100, false) + sr, err := i.Search("TESTING/SANTA-MARIA", 100, false) if err != nil { t.Fatal(err) } @@ -202,6 +202,14 @@ func TestSearchByName(t *testing.T) { {Name: "ztesting/pinta"}, }, }, + { + name: "description upper search, two results", + query: "TWO", + expect: []*Result{ + {Name: "testing/pinta"}, + {Name: "ztesting/pinta"}, + }, + }, { name: "nothing found", query: "mayflower", @@ -209,7 +217,7 @@ func TestSearchByName(t *testing.T) { }, { name: "regexp, one result", - query: "th[ref]*", + query: "Th[ref]*", expect: []*Result{ {Name: "testing/santa-maria"}, }, From ed24b3199a7e46325f147240f87ac86d4f404f5d Mon Sep 17 00:00:00 2001 From: Justin Scott Date: Wed, 16 Aug 2017 14:05:45 -0700 Subject: [PATCH 03/31] bug(tiller): sort unknown but different kinds alphabetically based on kind name Adds additional manifest sorting logic so that different unknown kinds are sorted alphabetically so that manifest order is more deterministic. --- pkg/tiller/kind_sorter.go | 6 +++++- pkg/tiller/kind_sorter_test.go | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/tiller/kind_sorter.go b/pkg/tiller/kind_sorter.go index f2447143b..a88e1c672 100644 --- a/pkg/tiller/kind_sorter.go +++ b/pkg/tiller/kind_sorter.go @@ -116,8 +116,12 @@ func (k *kindSorter) Less(i, j int) bool { b := k.manifests[j] first, aok := k.ordering[a.Head.Kind] second, bok := k.ordering[b.Head.Kind] + // if same kind (including unknown) sub sort alphanumeric if first == second { - // same kind (including unknown) so sub sort alphanumeric + // if both are unknown and of different kind sort by kind alphabetically + if !aok && !bok && a.Head.Kind != b.Head.Kind { + return a.Head.Kind < b.Head.Kind + } return a.Name < b.Name } // unknown kind is last diff --git a/pkg/tiller/kind_sorter_test.go b/pkg/tiller/kind_sorter_test.go index 6996731ca..df866215d 100644 --- a/pkg/tiller/kind_sorter_test.go +++ b/pkg/tiller/kind_sorter_test.go @@ -175,7 +175,7 @@ func TestKindSorterSubSort(t *testing.T) { Head: &util.SimpleHead{Kind: "ClusterRoleBinding"}, }, { - Name: "u3", + Name: "u2", Head: &util.SimpleHead{Kind: "Unknown"}, }, { @@ -183,8 +183,8 @@ func TestKindSorterSubSort(t *testing.T) { Head: &util.SimpleHead{Kind: "Unknown"}, }, { - Name: "u2", - Head: &util.SimpleHead{Kind: "Unknown"}, + Name: "t3", + Head: &util.SimpleHead{Kind: "Unknown2"}, }, } for _, test := range []struct { @@ -193,7 +193,7 @@ func TestKindSorterSubSort(t *testing.T) { expected string }{ // expectation is sorted by kind (unknown is last) and then sub sorted alphabetically within each group - {"cm,clusterRole,clusterRoleBinding,Unknown", InstallOrder, "01Aa!zu1u2u3"}, + {"cm,clusterRole,clusterRoleBinding,Unknown,Unknown2", InstallOrder, "01Aa!zu1u2t3"}, } { var buf bytes.Buffer t.Run(test.description, func(t *testing.T) { From 0440b54bbff503d4c71e033b2ce7648597c67b05 Mon Sep 17 00:00:00 2001 From: llsheldon Date: Fri, 25 Aug 2017 16:55:43 +0800 Subject: [PATCH 04/31] fix(helm):Fix dependency aliaes not working The alias functionality only works when a hardcoded version is used. Any use of semver logic causes unexpected behavior. I use version.IsCompatibleRange to check the dependency version. Closes #2794 --- pkg/chartutil/requirements.go | 5 +++-- pkg/chartutil/requirements_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/chartutil/requirements.go b/pkg/chartutil/requirements.go index 606b5db88..ce761a6fc 100644 --- a/pkg/chartutil/requirements.go +++ b/pkg/chartutil/requirements.go @@ -23,6 +23,7 @@ import ( "github.com/ghodss/yaml" "k8s.io/helm/pkg/proto/hapi/chart" + "k8s.io/helm/pkg/version" ) const ( @@ -230,7 +231,7 @@ func getAliasDependency(charts []*chart.Chart, aliasChart *Dependency) *chart.Ch if existingChart.Metadata.Name != aliasChart.Name { continue } - if existingChart.Metadata.Version != aliasChart.Version { + if !version.IsCompatibleRange(aliasChart.Version, existingChart.Metadata.Version) { continue } chartFound = *existingChart @@ -266,7 +267,7 @@ func ProcessRequirementsEnabled(c *chart.Chart, v *chart.Config) error { for _, existingDependency := range c.Dependencies { var dependencyFound bool for _, req := range reqs.Dependencies { - if existingDependency.Metadata.Name == req.Name && existingDependency.Metadata.Version == req.Version { + if existingDependency.Metadata.Name == req.Name && version.IsCompatibleRange(req.Version, existingDependency.Metadata.Version) { dependencyFound = true break } diff --git a/pkg/chartutil/requirements_test.go b/pkg/chartutil/requirements_test.go index 502d8ad8d..ef09bcd2e 100644 --- a/pkg/chartutil/requirements_test.go +++ b/pkg/chartutil/requirements_test.go @@ -21,6 +21,7 @@ import ( "strconv" "k8s.io/helm/pkg/proto/hapi/chart" + "k8s.io/helm/pkg/version" ) func TestLoadRequirements(t *testing.T) { @@ -347,11 +348,24 @@ func TestGetAliasDependency(t *testing.T) { t.Fatalf("Dependency chart name should be %s but got %s", req.Dependencies[0].Name, aliasChart.Metadata.Name) } + if req.Dependencies[0].Version != "" { + if !version.IsCompatibleRange(req.Dependencies[0].Version, aliasChart.Metadata.Version) { + t.Fatalf("Dependency chart version is not in the compatible range") + } + + } + // Failure case req.Dependencies[0].Name = "something-else" if aliasChart := getAliasDependency(c.Dependencies, req.Dependencies[0]); aliasChart != nil { t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) } + + req.Dependencies[0].Version = "something else which is not in the compatible range" + if version.IsCompatibleRange(req.Dependencies[0].Version, aliasChart.Metadata.Version) { + t.Fatalf("Dependency chart version which is not in the compatible range should cause a failure other than a success ") + } + } func TestDependentChartAliases(t *testing.T) { From 3508cebbf67304f6e7e210229fcb4f01508c5fa8 Mon Sep 17 00:00:00 2001 From: Kazuki Suda Date: Mon, 11 Sep 2017 10:09:42 +0900 Subject: [PATCH 05/31] Use the same defaults as done in helm lint for Capabilities --- cmd/helm/template.go | 8 +++++++- pkg/chartutil/capabilities.go | 18 ++++++++++++++++-- pkg/lint/rules/template.go | 12 ++---------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/cmd/helm/template.go b/cmd/helm/template.go index 88ca92fc9..76c995d17 100644 --- a/cmd/helm/template.go +++ b/cmd/helm/template.go @@ -35,6 +35,7 @@ import ( util "k8s.io/helm/pkg/releaseutil" "k8s.io/helm/pkg/tiller" "k8s.io/helm/pkg/timeconv" + tversion "k8s.io/helm/pkg/version" ) const templateDesc = ` @@ -171,7 +172,12 @@ func (t *templateCmd) run(cmd *cobra.Command, args []string) error { // Set up engine. renderer := engine.New() - vals, err := chartutil.ToRenderValues(c, config, options) + caps := &chartutil.Capabilities{ + APIVersions: chartutil.DefaultVersionSet, + KubeVersion: chartutil.DefaultKubeVersion, + TillerVersion: tversion.GetVersionProto(), + } + vals, err := chartutil.ToRenderValuesCaps(c, config, options, caps) if err != nil { return err } diff --git a/pkg/chartutil/capabilities.go b/pkg/chartutil/capabilities.go index 82e5e0c0e..e415306d4 100644 --- a/pkg/chartutil/capabilities.go +++ b/pkg/chartutil/capabilities.go @@ -16,12 +16,26 @@ limitations under the License. package chartutil import ( + "fmt" + "runtime" + "k8s.io/apimachinery/pkg/version" tversion "k8s.io/helm/pkg/proto/hapi/version" ) -// DefaultVersionSet is the default version set, which includes only Core V1 ("v1"). -var DefaultVersionSet = NewVersionSet("v1") +var ( + // DefaultVersionSet is the default version set, which includes only Core V1 ("v1"). + DefaultVersionSet = NewVersionSet("v1") + + // DefaultKubeVersion is the default kubernetes version + DefaultKubeVersion = &version.Info{ + Major: "1", + Minor: "7", + GoVersion: runtime.Version(), + Compiler: runtime.Compiler, + Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), + } +) // Capabilities describes the capabilities of the Kubernetes cluster that Tiller is attached to. type Capabilities struct { diff --git a/pkg/lint/rules/template.go b/pkg/lint/rules/template.go index 3ccd9acdb..9343a3a84 100644 --- a/pkg/lint/rules/template.go +++ b/pkg/lint/rules/template.go @@ -21,10 +21,8 @@ import ( "fmt" "os" "path/filepath" - "runtime" "github.com/ghodss/yaml" - "k8s.io/apimachinery/pkg/version" "k8s.io/helm/pkg/chartutil" "k8s.io/helm/pkg/engine" "k8s.io/helm/pkg/lint/support" @@ -55,14 +53,8 @@ func Templates(linter *support.Linter) { options := chartutil.ReleaseOptions{Name: "testRelease", Time: timeconv.Now(), Namespace: "testNamespace"} caps := &chartutil.Capabilities{ - APIVersions: chartutil.DefaultVersionSet, - KubeVersion: &version.Info{ - Major: "1", - Minor: "7", - GoVersion: runtime.Version(), - Compiler: runtime.Compiler, - Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), - }, + APIVersions: chartutil.DefaultVersionSet, + KubeVersion: chartutil.DefaultKubeVersion, TillerVersion: tversion.GetVersionProto(), } valuesToRender, err := chartutil.ToRenderValuesCaps(chart, chart.Values, options, caps) From fa3ee5aecf3cab30c97e8c3e08f9d60511ca8dbb Mon Sep 17 00:00:00 2001 From: Kazuki Suda Date: Mon, 11 Sep 2017 10:45:43 +0900 Subject: [PATCH 06/31] feat(helm): add --kube-version flag to helm template This commit adds --kube-version flag to helm template. It allows you to override the Kubernetes version used as Capabilities.KubeVersion.Major/Minor (e.g. 1.7). --- cmd/helm/template.go | 13 +++++++++++++ cmd/helm/template_test.go | 7 +++++++ docs/helm/helm_template.md | 3 ++- .../subpop/charts/subchart1/templates/service.yaml | 2 ++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cmd/helm/template.go b/cmd/helm/template.go index 76c995d17..92f6ed738 100644 --- a/cmd/helm/template.go +++ b/cmd/helm/template.go @@ -26,6 +26,7 @@ import ( "strings" "time" + "github.com/Masterminds/semver" "github.com/spf13/cobra" "k8s.io/helm/pkg/chartutil" "k8s.io/helm/pkg/engine" @@ -62,6 +63,7 @@ type templateCmd struct { showNotes bool releaseName string renderFiles []string + kubeVersion string } func newTemplateCmd(out io.Writer) *cobra.Command { @@ -85,6 +87,7 @@ func newTemplateCmd(out io.Writer) *cobra.Command { f.StringVar(&t.namespace, "namespace", "", "namespace to install the release into") f.StringArrayVar(&t.values, "set", []string{}, "set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)") f.StringVar(&t.nameTemplate, "name-template", "", "specify template used to name the release") + f.StringVar(&t.kubeVersion, "kube-version", "", "override the Kubernetes version used as Capabilities.KubeVersion.Major/Minor (e.g. 1.7)") return cmd } @@ -177,6 +180,16 @@ func (t *templateCmd) run(cmd *cobra.Command, args []string) error { KubeVersion: chartutil.DefaultKubeVersion, TillerVersion: tversion.GetVersionProto(), } + // If --kube-versionis set, try to parse it as SemVer, and override the + // kubernetes version + if t.kubeVersion != "" { + kv, err := semver.NewVersion(t.kubeVersion) + if err != nil { + return fmt.Errorf("could not parse a kubernetes version: %v", err) + } + caps.KubeVersion.Major = fmt.Sprint(kv.Major()) + caps.KubeVersion.Minor = fmt.Sprint(kv.Minor()) + } vals, err := chartutil.ToRenderValuesCaps(c, config, options, caps) if err != nil { return err diff --git a/cmd/helm/template_test.go b/cmd/helm/template_test.go index b1e080493..06c7edf9a 100644 --- a/cmd/helm/template_test.go +++ b/cmd/helm/template_test.go @@ -104,6 +104,13 @@ func TestTemplateCmd(t *testing.T) { expectKey: "subchart1/templates/service.yaml", expectValue: "release-name: \"foobar-YWJj-baz\"", }, + { + name: "check_kube_version", + desc: "verify --kube-version overrides the kubernetes version", + args: []string{chartPath, "--kube-version", "1.6"}, + expectKey: "subchart1/templates/service.yaml", + expectValue: "kube-version/major: \"1\"\n kube-version/minor: \"6\"", + }, } var buf bytes.Buffer diff --git a/docs/helm/helm_template.md b/docs/helm/helm_template.md index 80ecdec39..adfffa269 100644 --- a/docs/helm/helm_template.md +++ b/docs/helm/helm_template.md @@ -26,6 +26,7 @@ helm template [flags] CHART ``` -x, --execute stringArray only execute the given templates + --kube-version string override the Kubernetes version used as Capabilities.KubeVersion.Major/Minor (e.g. 1.7) -n, --name string release name (default "RELEASE-NAME") --name-template string specify template used to name the release --namespace string namespace to install the release into @@ -47,4 +48,4 @@ helm template [flags] CHART ### SEE ALSO * [helm](helm.md) - The Helm package manager for Kubernetes. -###### Auto generated by spf13/cobra on 24-Aug-2017 +###### Auto generated by spf13/cobra on 11-Sep-2017 diff --git a/pkg/chartutil/testdata/subpop/charts/subchart1/templates/service.yaml b/pkg/chartutil/testdata/subpop/charts/subchart1/templates/service.yaml index bf7672e12..8b6bbaee7 100644 --- a/pkg/chartutil/testdata/subpop/charts/subchart1/templates/service.yaml +++ b/pkg/chartutil/testdata/subpop/charts/subchart1/templates/service.yaml @@ -6,6 +6,8 @@ metadata: chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" namespace: "{{ .Release.Namespace }}" release-name: "{{ .Release.Name }}" + kube-version/major: "{{ .Capabilities.KubeVersion.Major }}" + kube-version/minor: "{{ .Capabilities.KubeVersion.Minor }}" spec: type: {{ .Values.service.type }} ports: From 3458ad8e6ab71f5b50f6a926fc0cbd219355f5dd Mon Sep 17 00:00:00 2001 From: devinyan Date: Wed, 23 Aug 2017 22:50:13 +0800 Subject: [PATCH 07/31] Add the status of pod when using "Helm status" command --- pkg/kube/client.go | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index c0a9a42bb..a642ebc05 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -157,6 +157,9 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) { if err != nil { return "", err } + + var objPods = make(map[string][]api.Pod) + missing := []string{} err = perform(infos, func(info *resource.Info) error { c.Log("Doing get for %s: %q", info.Mapping.GroupVersionKind.Kind, info.Name) @@ -171,12 +174,26 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) { gvk := info.ResourceMapping().GroupVersionKind vk := gvk.Version + "/" + gvk.Kind objs[vk] = append(objs[vk], info.Object) + + //Get the relation pods + objPods, err = c.getSelectRelationPod(info, objPods) + if err != nil { + c.Log("Warning: get the relation pod is failed, err:%s", err.Error()) + } + return nil }) if err != nil { return "", err } + //here, we will add the objPods to the objs + for key, podItems := range objPods { + for i := range podItems { + objs[key+"(related)"] = append(objs[key+"(related)"], &podItems[i]) + } + } + // Ok, now we have all the objects grouped by types (say, by v1/Pod, v1/Service, etc.), so // spin through them and print them. Printer is cool since it prints the header only when // an object type changes, so we can just rely on that. Problem is it doesn't seem to keep @@ -628,3 +645,67 @@ func (c *Client) watchPodUntilComplete(timeout time.Duration, info *resource.Inf return err } + +//get an kubernetes resources's relation pods +// kubernetes resource used select labels to relate pods +func (c *Client) getSelectRelationPod(info *resource.Info, objPods map[string][]api.Pod) (map[string][]api.Pod, error) { + if info == nil { + return objPods, nil + } + + c.Log("get relation pod of object: %s/%s/%s", info.Namespace, info.Mapping.GroupVersionKind.Kind, info.Name) + + versioned, err := c.AsVersionedObject(info.Object) + if runtime.IsNotRegisteredError(err) { + return objPods, nil + } + if err != nil { + return objPods, err + } + + // We can ignore this error because it will only error if it isn't a type that doesn't + // have pods. In that case, we don't care + selector, _ := getSelectorFromObject(versioned) + + selectorString := labels.Set(selector).AsSelector().String() + + // If we have an empty selector, this likely is a service or config map, so bail out now + if selectorString == "" { + return objPods, nil + } + + client, _ := c.ClientSet() + + pods, err := client.Core().Pods(info.Namespace).List(metav1.ListOptions{ + FieldSelector: fields.Everything().String(), + LabelSelector: labels.Set(selector).AsSelector().String(), + }) + if err != nil { + return objPods, err + } + + for _, pod := range pods.Items { + if pod.APIVersion == "" { + pod.APIVersion = "v1" + } + + if pod.Kind == "" { + pod.Kind = "Pod" + } + vk := pod.GroupVersionKind().Version + "/" + pod.GroupVersionKind().Kind + + if !isFoundPod(objPods[vk], pod) { + objPods[vk] = append(objPods[vk], pod) + } + } + return objPods, nil +} + +func isFoundPod(podItem []api.Pod, pod api.Pod) bool { + for _, value := range podItem { + if (value.Namespace == pod.Namespace) && (value.Name == pod.Name) { + return true + } + } + return false +} From b9d3974df0d5130ca9d0c272ca63b14ee8ce0a46 Mon Sep 17 00:00:00 2001 From: carlory Date: Mon, 18 Sep 2017 15:38:35 +0800 Subject: [PATCH 08/31] fix func comment --- pkg/chartutil/files.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/chartutil/files.go b/pkg/chartutil/files.go index 6ce619e89..01ebcc8d7 100644 --- a/pkg/chartutil/files.go +++ b/pkg/chartutil/files.go @@ -183,7 +183,7 @@ func ToYaml(v interface{}) string { // This is not a general-purpose YAML parser, and will not parse all valid // YAML documents. Additionally, because its intended use is within templates // it tolerates errors. It will insert the returned error message string into -// m["error"] in the returned map. +// m["Error"] in the returned map. func FromYaml(str string) map[string]interface{} { m := map[string]interface{}{} From ad2d8e434a3cf18d1c75699f1fae73c47c613c03 Mon Sep 17 00:00:00 2001 From: carlory Date: Mon, 18 Sep 2017 15:46:36 +0800 Subject: [PATCH 09/31] fix fromjson comment --- pkg/chartutil/files.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/chartutil/files.go b/pkg/chartutil/files.go index 01ebcc8d7..687a9a8d6 100644 --- a/pkg/chartutil/files.go +++ b/pkg/chartutil/files.go @@ -225,7 +225,7 @@ func ToJson(v interface{}) string { // This is not a general-purpose JSON parser, and will not parse all valid // YAML documents. Additionally, because its intended use is within templates // it tolerates errors. It will insert the returned error message string into -// m["error"] in the returned map. +// m["Error"] in the returned map. func FromJson(str string) map[string]interface{} { m := map[string]interface{}{} From 48cb6ad63e995f8d2f2143848d9ddddc374d10d0 Mon Sep 17 00:00:00 2001 From: Sean Slattery Date: Mon, 18 Sep 2017 11:46:56 -0700 Subject: [PATCH 10/31] Minor Spelling Corrections --- docs/charts_hooks.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/charts_hooks.md b/docs/charts_hooks.md index 92c50e20c..5fc9462e4 100644 --- a/docs/charts_hooks.md +++ b/docs/charts_hooks.md @@ -87,7 +87,7 @@ in the future.) It is considered good practice to add a hook weight, and set it to `0` if weight is not important. -### Hook resources are not managed with correponding releases +### Hook resources are not managed with corresponding releases The resources that a hook creates are not tracked or managed as part of the release. Once Tiller verifies that the hook has reached its ready state, it @@ -180,5 +180,4 @@ It is also possible to define policies that determine when to delete correspondi "helm.sh/hook-delete-policy": hook-succeeded ``` -When using `"helm.sh/hook-delete-policy"` annoation, you can choose its value from `"hook-succeeded"` and `"hook-failed"`. The value `"hook-succeeded"` specifies Tiller should delete the hook after the hook is successfully excuted, while the value `"hook-failed"`specifies Tiller should delete the hook if the hook is failed during execuation. - +When using `"helm.sh/hook-delete-policy"` annotation, you can choose its value from `"hook-succeeded"` and `"hook-failed"`. The value `"hook-succeeded"` specifies Tiller should delete the hook after the hook is successfully executed, while the value `"hook-failed"`specifies Tiller should delete the hook if the hook failed during execution. From 0acfe016a96539c364ca236cef0a8fdc577d1045 Mon Sep 17 00:00:00 2001 From: "Barrett K. Harber" Date: Wed, 13 Sep 2017 11:56:10 -0400 Subject: [PATCH 11/31] Update to latest sprig --- glide.lock | 6 +++--- glide.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/glide.lock b/glide.lock index 8651e1885..3db9919b2 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: 54e64255ab9112d0183766264214969a8add57903fbe9e96034f9640b9c9cd82 -updated: 2017-07-10T10:52:19.616678852-04:00 +hash: 91eba16992e639203a273b247807bb990901cc0ef7e744991722106fc9db0956 +updated: 2017-09-18T15:49:23.687863166-04:00 imports: - name: cloud.google.com/go version: 3b1ae45394a234c385be014e9a488f2bb6eef821 @@ -172,7 +172,7 @@ imports: - name: github.com/Masterminds/semver version: 517734cc7d6470c0d07130e40fd40bdeb9bcd3fd - name: github.com/Masterminds/sprig - version: 9526be0327b26ad31aa70296a7b10704883976d5 + version: 4c164950cd0a8d3724ddb78982e2c56dc7f47112 - name: github.com/Masterminds/vcs version: 3084677c2c188840777bff30054f2b553729d329 - name: github.com/mattn/go-runewidth diff --git a/glide.yaml b/glide.yaml index 922c4ff05..864eda8f7 100644 --- a/glide.yaml +++ b/glide.yaml @@ -14,7 +14,7 @@ import: - package: github.com/imdario/mergo version: 6633656539c1639d9d78127b7d47c622b5d7b6dc - package: github.com/Masterminds/sprig - version: ^2.12 + version: ^2.13 - package: github.com/ghodss/yaml - package: github.com/Masterminds/semver version: ~1.3.1 From 0089a28dba6a4fbd4e750e1da04d32d6897cb2f4 Mon Sep 17 00:00:00 2001 From: Joshua Dolitsky Date: Tue, 19 Sep 2017 18:18:25 -0500 Subject: [PATCH 12/31] Add ChartMuseum to related.md --- docs/related.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/related.md b/docs/related.md index c450e2607..73db34829 100644 --- a/docs/related.md +++ b/docs/related.md @@ -57,6 +57,7 @@ Tools layered on top of Helm or Tiller. - [Monocular](https://github.com/helm/monocular) - Web UI for Helm Chart repositories - [Helm Chart Publisher](https://github.com/luizbafilho/helm-chart-publisher) - HTTP API for publishing Helm Charts in an easy way - [Armada](https://github.com/att-comdev/armada) - Manage prefixed releases throughout various Kubernetes namespaces, and removes completed jobs for complex deployments. Used by the [Openstack-Helm](https://github.com/openstack/openstack-helm) team. +- [ChartMuseum](https://github.com/chartmuseum/chartmuseum) - Helm Chart Repository with support for Amazon S3 and Google Cloud Storage ## Helm Included From 38c3f58dca47a73c9639de6cafd80d8ea3e23912 Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Fri, 22 Sep 2017 11:34:30 +0100 Subject: [PATCH 13/31] Correctly persists Release upgrade failure When release upgrade fails, updatedRelease is already created in a storage by *ReleaseServer.UpdateRelease, therefore we should be updating it's status, not creating it again. --- pkg/tiller/release_update.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/tiller/release_update.go b/pkg/tiller/release_update.go index 58a8a18c0..18cf56737 100644 --- a/pkg/tiller/release_update.go +++ b/pkg/tiller/release_update.go @@ -155,7 +155,7 @@ func (s *ReleaseServer) performUpdate(originalRelease, updatedRelease *release.R updatedRelease.Info.Status.Code = release.Status_FAILED updatedRelease.Info.Description = msg s.recordRelease(originalRelease, true) - s.recordRelease(updatedRelease, false) + s.recordRelease(updatedRelease, true) return res, err } From c3f9120e02f9f75b4c59ad525f0f6c49e76209ae Mon Sep 17 00:00:00 2001 From: NauxLiu Date: Fri, 22 Sep 2017 21:29:46 +0800 Subject: [PATCH 14/31] Load StorageClass before PersistentVolume is loaded. --- pkg/tiller/kind_sorter.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/tiller/kind_sorter.go b/pkg/tiller/kind_sorter.go index f2447143b..f29e61485 100644 --- a/pkg/tiller/kind_sorter.go +++ b/pkg/tiller/kind_sorter.go @@ -32,6 +32,7 @@ var InstallOrder SortOrder = []string{ "LimitRange", "Secret", "ConfigMap", + "StorageClass", "PersistentVolume", "PersistentVolumeClaim", "ServiceAccount", @@ -74,6 +75,7 @@ var UninstallOrder SortOrder = []string{ "ServiceAccount", "PersistentVolumeClaim", "PersistentVolume", + "StorageClass", "ConfigMap", "Secret", "LimitRange", From b77b7dd3c75e17cc3c48ecc08e6149baed277471 Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Tue, 26 Sep 2017 09:03:00 +0100 Subject: [PATCH 15/31] Update install.go --- cmd/helm/install.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index a9d308908..0c21050b1 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -46,8 +46,8 @@ import ( const installDesc = ` This command installs a chart archive. -The install argument must be either a relative path to a chart directory or the -name of a chart in the current working directory. +The install argument must be a chart reference, a path to a packaged chart, +a path to an unpacked chart directory or a URL. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line. From 9c37643081e98e7a9ace7a4e55d15049fe2e4c3b Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Tue, 26 Sep 2017 09:04:13 +0100 Subject: [PATCH 16/31] Update helm_install.md --- docs/helm/helm_install.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/helm/helm_install.md b/docs/helm/helm_install.md index 8858f534d..a8f00e434 100644 --- a/docs/helm/helm_install.md +++ b/docs/helm/helm_install.md @@ -8,8 +8,8 @@ install a chart archive This command installs a chart archive. -The install argument must be either a relative path to a chart directory or the -name of a chart in the current working directory. +The install argument must be a chart reference, a path to a packaged chart, +a path to an unpacked chart directory or a URL. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line. From bd48fa165e37ef09473192e996b72d6f5d65b9f4 Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Tue, 26 Sep 2017 09:04:36 +0100 Subject: [PATCH 17/31] Update helm_install.1 --- docs/man/man1/helm_install.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/man/man1/helm_install.1 b/docs/man/man1/helm_install.1 index 8fe99acb3..98995d47a 100644 --- a/docs/man/man1/helm_install.1 +++ b/docs/man/man1/helm_install.1 @@ -18,8 +18,8 @@ helm\-install \- install a chart archive This command installs a chart archive. .PP -The install argument must be either a relative path to a chart directory or the -name of a chart in the current working directory. +The install argument must be a chart reference, a path to a packaged chart, +a path to an unpacked chart directory or a URL. .PP To override values in a chart, use either the '\-\-values' flag and pass in a file From 1b8ddac230328502c6cce7c6bc311dc727953da5 Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Tue, 26 Sep 2017 09:10:41 +0100 Subject: [PATCH 18/31] Update install.go --- cmd/helm/install.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 0c21050b1..0447edab2 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -47,7 +47,7 @@ const installDesc = ` This command installs a chart archive. The install argument must be a chart reference, a path to a packaged chart, -a path to an unpacked chart directory or a URL. +a path to an unpacked chart directory or a URL. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line. From b74f6dd769e01aa6c5119c0c38cadbc2ddbd05bf Mon Sep 17 00:00:00 2001 From: Neil Moore Date: Tue, 26 Sep 2017 09:13:54 +0100 Subject: [PATCH 19/31] Update install.go --- cmd/helm/install.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 0447edab2..0c21050b1 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -47,7 +47,7 @@ const installDesc = ` This command installs a chart archive. The install argument must be a chart reference, a path to a packaged chart, -a path to an unpacked chart directory or a URL. +a path to an unpacked chart directory or a URL. To override values in a chart, use either the '--values' flag and pass in a file or use the '--set' flag and pass configuration from the command line. From b69d6ceca0bca9290efb9d1ca89c50cf337cbb08 Mon Sep 17 00:00:00 2001 From: Matt Farina Date: Mon, 18 Sep 2017 16:19:42 -0400 Subject: [PATCH 20/31] fix(deps): fix issues when running glide up When running glide update there are errors due to pinned versions in the glide.yaml file mixed with getting a more recent version of kubernetes. client-go needs a newer version of go-autorest. Note, go-autorest is pinned to v8.0.0 rather than the latest release of v8.4.0 because kubernetes is pinned to v8.0.0. --- glide.lock | 56 ++++++++++++++++++++++++++++++------------------------ glide.yaml | 4 ++-- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/glide.lock b/glide.lock index 3db9919b2..aad582e83 100644 --- a/glide.lock +++ b/glide.lock @@ -1,14 +1,14 @@ -hash: 91eba16992e639203a273b247807bb990901cc0ef7e744991722106fc9db0956 -updated: 2017-09-18T15:49:23.687863166-04:00 +hash: f66b2182102bb19545353d4168a4a02fc58590eeb75b1a41dec60834aad8c29e +updated: 2017-09-26T10:27:19.202679689-04:00 imports: - name: cloud.google.com/go - version: 3b1ae45394a234c385be014e9a488f2bb6eef821 + version: c7cd507af965dbabdcd5611969432dd422f6b628 - name: github.com/aokoli/goutils - version: 9c37978a95bd5c709a15883b6242714ea6709e64 + version: 3391d3790d23d03408670993e957e8f408993c34 - name: github.com/asaskevich/govalidator version: 7664702784775e51966f0885f5cd27435916517b - name: github.com/Azure/go-autorest - version: d7c034a8af24eda120dd6460bfcd6d9ed14e43ca + version: 58f6f26e200fa5dfb40c9cd1c83f3e2c860d779d - name: github.com/beorn7/perks version: 3ac7bf7a47d159a033b107610db8a1b6575507a4 subpackages: @@ -18,7 +18,7 @@ imports: - name: github.com/chai2010/gettext-go version: bf70f2a70fb1b1f36d90d671a72795984eab0fcb - name: github.com/cpuguy83/go-md2man - version: 71acacd42f85e5e82f70a55327789582a5200a90 + version: 1d903dcb749992f3741d744c0f8376b4bd7eb3e1 subpackages: - md2man - name: github.com/davecgh/go-spew @@ -57,7 +57,7 @@ imports: - name: github.com/docker/go-units version: e30f1e79f3cd72542f2026ceec18d3bd67ab859c - name: github.com/docker/spdystream - version: 449fdfce4d962303d702fec724ef0ad181c92528 + version: bc6354cbbc295e925e4c611ffe90c1f287ee54db - name: github.com/emicklei/go-restful version: ff4f55a206334ef123e4f79bbf348980da81ca46 subpackages: @@ -89,7 +89,7 @@ imports: - name: github.com/go-openapi/spec version: 6aced65f8501fe1217321abf0749d354824ba2ff - name: github.com/go-openapi/strfmt - version: d65c7fdb29eca313476e529628176fe17e58c488 + version: 610b6cacdcde6852f4de68998bd20ce1dac85b22 - name: github.com/go-openapi/swag version: 1d0bd113de87027671077d3c71eb3ac5d7dbba72 - name: github.com/gobwas/glob @@ -137,26 +137,26 @@ imports: subpackages: - lru - name: github.com/golang/protobuf - version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef + version: 4bd1920723d7b7c925de087aa32e2187708897f7 subpackages: - proto - ptypes/any - ptypes/timestamp - name: github.com/google/gofuzz - version: bbcb9da2d746f8bdbd6a936686a0a6067ada0ec5 + version: 24818f796faf91cd76ec7bddd72458fbced7a6c1 - name: github.com/gosuri/uitable version: 36ee7e946282a3fb1cfecd476ddc9b35d8847e42 subpackages: - util/strutil - util/wordwrap - name: github.com/grpc-ecosystem/go-grpc-prometheus - version: 0c1b191dbfe51efdabe3c14b9f6f3b96429e0722 + version: 2500245aa6110c562d17020fb31a2c133d737799 - name: github.com/hashicorp/golang-lru - version: a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4 + version: 0a025b7e63adc15a622f29b0b2c4c3848243bbf6 - name: github.com/howeyc/gopass - version: 3ca23474a7c7203e0a0a070fd33508f6efdb9b3d + version: bf9dde6d0d2c004a008c27aaee91170c786f6db8 - name: github.com/huandu/xstrings - version: 3959339b333561bf62a38b424fd41517c2c90f40 + version: d6590c0c31d16526217fa60fbd2067f7afcd78c5 - name: github.com/imdario/mergo version: 6633656539c1639d9d78127b7d47c622b5d7b6dc - name: github.com/inconshreveable/mousetrap @@ -176,17 +176,17 @@ imports: - name: github.com/Masterminds/vcs version: 3084677c2c188840777bff30054f2b553729d329 - name: github.com/mattn/go-runewidth - version: d6bea18f789704b5f83375793155289da36a3c7f + version: 97311d9f7767e3d6f422ea06661bc2c7a19e8a5d - name: github.com/matttproud/golang_protobuf_extensions version: fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a subpackages: - pbutil - name: github.com/mitchellh/mapstructure - version: 740c764bc6149d3f1806231418adb9f52c11bcbf + version: d0303fe809921458f417bcf828397a65db30a7e4 - name: github.com/naoina/go-stringutil version: 6b638e95a32d0c1131db0e7fe83775cbea4a0d0b - name: github.com/pborman/uuid - version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 + version: e790cca94e6cc75c7064b1332e63811d4aae1a53 - name: github.com/prometheus/client_golang version: c5b7fccd204277076155f10851dad72b76a49317 subpackages: @@ -254,9 +254,9 @@ imports: - lex/httplex - trace - name: golang.org/x/oauth2 - version: 3c3a985cb79f52a3190fbc056984415ca6763d01 + version: 13449ad91cb26cb47661c1b080790392170385fd - name: golang.org/x/sys - version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9 + version: 062cd7e4e68206d8bab9b18396626e855c992658 subpackages: - unix - name: golang.org/x/text @@ -298,32 +298,36 @@ imports: subpackages: - bson - name: gopkg.in/yaml.v2 - version: 53feefa2559fb8dfa8d81baad31be332c97d6c77 + version: a3f3340b5840cee44f372bddb5880fcbc419b46a - name: k8s.io/api - version: 4fe9229aaa9d704f8a2a21cdcd50de2bbb6e1b57 + version: 926789af7ddda62752e08bc9b93f1d1ebbc7b2de subpackages: - admissionregistration/v1alpha1 - apps/v1beta1 + - apps/v1beta2 - authentication/v1 - authentication/v1beta1 - authorization/v1 - authorization/v1beta1 - autoscaling/v1 - - autoscaling/v2alpha1 + - autoscaling/v2beta1 - batch/v1 + - batch/v1beta1 - batch/v2alpha1 - certificates/v1beta1 - core/v1 - extensions/v1beta1 - networking/v1 - policy/v1beta1 + - rbac/v1 - rbac/v1alpha1 - rbac/v1beta1 + - scheduling/v1alpha1 - settings/v1alpha1 - storage/v1 - storage/v1beta1 - name: k8s.io/apiserver - version: 087d1a2efeb6296f04bb0f54e7af9890052aa6d7 + version: 19667a1afc13cc13930c40a20f2c12bbdcaaa246 subpackages: - pkg/admission - pkg/apis/apiserver @@ -338,7 +342,7 @@ imports: - pkg/util/feature - pkg/util/flag - name: k8s.io/kubernetes - version: d3ada0119e776222f11ec7945e6d860061339aad + version: 4bc5e7f9a6c25dc4c03d4d656f2cefd21540e28c subpackages: - cmd/kubeadm/app/apis/kubeadm - federation/apis/federation @@ -530,13 +534,15 @@ imports: - plugin/pkg/scheduler/schedulercache - plugin/pkg/scheduler/util - name: k8s.io/metrics - version: 8efbc8e22d00b9c600afec5f1c14073fd2412fce + version: 4faa73f37a1635813affc8fbc36ba49a15e81a24 subpackages: - pkg/apis/metrics - pkg/apis/metrics/v1alpha1 + - pkg/apis/metrics/v1beta1 - pkg/client/clientset_generated/clientset - pkg/client/clientset_generated/clientset/scheme - pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1 + - pkg/client/clientset_generated/clientset/typed/metrics/v1beta1 - name: vbom.ml/util version: db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 repo: https://github.com/fvbommel/util.git diff --git a/glide.yaml b/glide.yaml index 864eda8f7..fb3e8d48c 100644 --- a/glide.yaml +++ b/glide.yaml @@ -20,7 +20,7 @@ import: version: ~1.3.1 - package: github.com/technosophos/moniker - package: github.com/golang/protobuf - version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef + version: 4bd1920723d7b7c925de087aa32e2187708897f7 subpackages: - proto - ptypes/any @@ -56,7 +56,7 @@ import: # hacks for kubernetes v1.7 - package: cloud.google.com/go - package: github.com/Azure/go-autorest - version: d7c034a8af24eda120dd6460bfcd6d9ed14e43ca + version: v8.0.0 - package: github.com/dgrijalva/jwt-go - package: github.com/docker/spdystream - package: github.com/go-openapi/analysis From ff5acc9bd805824bc98b5a033286b2deb51003b6 Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Tue, 26 Sep 2017 15:18:41 +0100 Subject: [PATCH 21/31] Make Memory driver to store copy of releases to stop hiding storage errors during tests --- pkg/storage/driver/records.go | 4 +++- pkg/tiller/release_update_test.go | 35 +++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/pkg/storage/driver/records.go b/pkg/storage/driver/records.go index e6875fb3d..ce72308a8 100644 --- a/pkg/storage/driver/records.go +++ b/pkg/storage/driver/records.go @@ -20,6 +20,8 @@ import ( "sort" "strconv" + "github.com/golang/protobuf/proto" + rspb "k8s.io/helm/pkg/proto/hapi/release" ) @@ -129,5 +131,5 @@ func newRecord(key string, rls *rspb.Release) *record { lbs.set("STATUS", rspb.Status_Code_name[int32(rls.Info.Status.Code)]) lbs.set("VERSION", strconv.Itoa(int(rls.Version))) - return &record{key: key, lbs: lbs, rls: rls} + return &record{key: key, lbs: lbs, rls: proto.Clone(rls).(*rspb.Release)} } diff --git a/pkg/tiller/release_update_test.go b/pkg/tiller/release_update_test.go index 7b1618b20..a3eb37f4a 100644 --- a/pkg/tiller/release_update_test.go +++ b/pkg/tiller/release_update_test.go @@ -20,6 +20,8 @@ import ( "strings" "testing" + "github.com/golang/protobuf/proto" + "k8s.io/helm/pkg/helm" "k8s.io/helm/pkg/proto/hapi/chart" "k8s.io/helm/pkg/proto/hapi/release" @@ -59,10 +61,7 @@ func TestUpdateRelease(t *testing.T) { t.Errorf("Expected release namespace '%s', got '%s'.", rel.Namespace, res.Release.Namespace) } - updated, err := rs.env.Releases.Get(res.Release.Name, res.Release.Version) - if err != nil { - t.Errorf("Expected release for %s (%v).", res.Release.Name, rs.env.Releases) - } + updated := compareStoredAndReturnedRelease(t, *rs, *res) if len(updated.Hooks) != 1 { t.Fatalf("Expected 1 hook, got %d", len(updated.Hooks)) @@ -79,8 +78,8 @@ func TestUpdateRelease(t *testing.T) { t.Errorf("Expected event 0 to be pre upgrade") } - if len(res.Release.Manifest) == 0 { - t.Errorf("No manifest returned: %v", res.Release) + if len(updated.Manifest) == 0 { + t.Errorf("Expected manifest in %v", res) } if res.Release.Config == nil { @@ -89,12 +88,8 @@ func TestUpdateRelease(t *testing.T) { t.Errorf("Expected release values %q, got %q", rel.Config.Raw, res.Release.Config.Raw) } - if len(updated.Manifest) == 0 { - t.Errorf("Expected manifest in %v", res) - } - if !strings.Contains(updated.Manifest, "---\n# Source: hello/templates/hello\nhello: world") { - t.Errorf("unexpected output: %s", rel.Manifest) + t.Errorf("unexpected output: %s", updated.Manifest) } if res.Release.Version != 2 { @@ -167,6 +162,7 @@ func TestUpdateRelease_ReuseValues(t *testing.T) { if res.Release.Config != nil && res.Release.Config.Raw != expect { t.Errorf("Expected request config to be %q, got %q", expect, res.Release.Config.Raw) } + compareStoredAndReturnedRelease(t, *rs, *res) } func TestUpdateRelease_ResetReuseValues(t *testing.T) { @@ -196,6 +192,7 @@ func TestUpdateRelease_ResetReuseValues(t *testing.T) { if res.Release.Config != nil && res.Release.Config.Raw != "" { t.Errorf("Expected chart config to be empty, got %q", res.Release.Config.Raw) } + compareStoredAndReturnedRelease(t, *rs, *res) } func TestUpdateReleaseFailure(t *testing.T) { @@ -204,6 +201,7 @@ func TestUpdateReleaseFailure(t *testing.T) { rel := releaseStub() rs.env.Releases.Create(rel) rs.env.KubeClient = newUpdateFailingKubeClient() + rs.Log = t.Logf req := &services.UpdateReleaseRequest{ Name: rel.Name, @@ -225,6 +223,8 @@ func TestUpdateReleaseFailure(t *testing.T) { t.Errorf("Expected FAILED release. Got %d", updatedStatus) } + compareStoredAndReturnedRelease(t, *rs, *res) + edesc := "Upgrade \"angry-panda\" failed: Failed update in kube client" if got := res.Release.Info.Description; got != edesc { t.Errorf("Expected description %q, got %q", edesc, got) @@ -285,3 +285,16 @@ func TestUpdateReleaseNoChanges(t *testing.T) { t.Fatalf("Failed updated: %s", err) } } + +func compareStoredAndReturnedRelease(t *testing.T, rs ReleaseServer, res services.UpdateReleaseResponse) *release.Release { + storedRelease, err := rs.env.Releases.Get(res.Release.Name, res.Release.Version) + if err != nil { + t.Fatalf("Expected release for %s (%v).", res.Release.Name, rs.env.Releases) + } + + if !proto.Equal(storedRelease, res.Release) { + t.Errorf("Stored release doesn't match returned Release") + } + + return storedRelease +} From 28f57c83b9293a160f3675ac6f98ffddec212d55 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 26 Sep 2017 11:21:54 -0700 Subject: [PATCH 22/31] update link to roadmap --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21a009e2c..b73eb7784 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Get started with the [Quick Start guide](https://docs.helm.sh/using_helm/#quicks ## Roadmap -The [Helm roadmap is currently located on the wiki](https://github.com/kubernetes/helm/wiki/Roadmap). +The [Helm roadmap uses Github milestones](https://github.com/kubernetes/helm/milestones) to track the progress of the project. ## Community, discussion, contribution, and support From 9d1db2851e587f42d4010a1380dd23b5eb1bb5a5 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 15 Sep 2017 08:48:49 -0700 Subject: [PATCH 23/31] Revert "Write repo file using atomicfile" This reverts commit 965cb7fd1c1097e1dc597b02530c1f38c06dbfe3. --- glide.lock | 2 -- glide.yaml | 1 - pkg/repo/repo.go | 14 +------------- pkg/repo/repo_test.go | 10 +--------- 4 files changed, 2 insertions(+), 25 deletions(-) diff --git a/glide.lock b/glide.lock index aad582e83..f749bdd61 100644 --- a/glide.lock +++ b/glide.lock @@ -68,8 +68,6 @@ imports: version: ba18e35c5c1b36ef6334cad706eb681153d2d379 - name: github.com/exponent-io/jsonpath version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5 -- name: github.com/facebookgo/atomicfile - version: 2de1f203e7d5e386a6833233882782932729f27e - name: github.com/facebookgo/symwalk version: 42004b9f322246749dd73ad71008b1f3160c0052 - name: github.com/fatih/camelcase diff --git a/glide.yaml b/glide.yaml index fb3e8d48c..8d42df807 100644 --- a/glide.yaml +++ b/glide.yaml @@ -38,7 +38,6 @@ import: - package: github.com/gobwas/glob version: ^0.2.1 - package: github.com/evanphx/json-patch -- package: github.com/facebookgo/atomicfile - package: github.com/facebookgo/symwalk - package: github.com/BurntSushi/toml version: ~0.3.0 diff --git a/pkg/repo/repo.go b/pkg/repo/repo.go index 5e1b5c6cd..cbf54c572 100644 --- a/pkg/repo/repo.go +++ b/pkg/repo/repo.go @@ -23,7 +23,6 @@ import ( "os" "time" - "github.com/facebookgo/atomicfile" "github.com/ghodss/yaml" ) @@ -135,20 +134,9 @@ func (r *RepoFile) Remove(name string) bool { // WriteFile writes a repositories file to the given path. func (r *RepoFile) WriteFile(path string, perm os.FileMode) error { - f, err := atomicfile.New(path, perm) - if err != nil { - return err - } - data, err := yaml.Marshal(r) if err != nil { return err } - - _, err = f.File.Write(data) - if err != nil { - return err - } - - return f.Close() + return ioutil.WriteFile(path, data, perm) } diff --git a/pkg/repo/repo_test.go b/pkg/repo/repo_test.go index d4500c9e2..6aee41faf 100644 --- a/pkg/repo/repo_test.go +++ b/pkg/repo/repo_test.go @@ -201,18 +201,10 @@ func TestWriteFile(t *testing.T) { t.Errorf("failed to create test-file (%v)", err) } defer os.Remove(repoFile.Name()) - - fileMode := os.FileMode(0744) - if err := sampleRepository.WriteFile(repoFile.Name(), fileMode); err != nil { + if err := sampleRepository.WriteFile(repoFile.Name(), 744); err != nil { t.Errorf("failed to write file (%v)", err) } - info, _ := os.Stat(repoFile.Name()) - mode := info.Mode() - if mode != fileMode { - t.Errorf("incorrect file mode: %s (expected %s)", mode, fileMode) - } - repos, err := LoadRepositoriesFile(repoFile.Name()) if err != nil { t.Errorf("failed to load file (%v)", err) From 211f5f6f33eee7ab6ee2c75fbfd45fcd4262aae7 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 15 Sep 2017 08:55:32 -0700 Subject: [PATCH 24/31] Revert "fix(helm): resolve symlinks when loading chart" This reverts commit edd4e561124d1d9620f510cf020b8227ff08e85e. --- glide.lock | 72 ++++++++++++++----------------------------- glide.yaml | 2 -- pkg/chartutil/load.go | 2 +- 3 files changed, 24 insertions(+), 52 deletions(-) diff --git a/glide.lock b/glide.lock index f749bdd61..bd4c59a49 100644 --- a/glide.lock +++ b/glide.lock @@ -1,10 +1,10 @@ -hash: f66b2182102bb19545353d4168a4a02fc58590eeb75b1a41dec60834aad8c29e -updated: 2017-09-26T10:27:19.202679689-04:00 +hash: 0759b118eb4017d612af767460cdec467d6f78013ad1efff1c82676f1df84a75 +updated: 2017-09-26T15:01:33.961357-07:00 imports: - name: cloud.google.com/go - version: c7cd507af965dbabdcd5611969432dd422f6b628 + version: 3b1ae45394a234c385be014e9a488f2bb6eef821 - name: github.com/aokoli/goutils - version: 3391d3790d23d03408670993e957e8f408993c34 + version: 9c37978a95bd5c709a15883b6242714ea6709e64 - name: github.com/asaskevich/govalidator version: 7664702784775e51966f0885f5cd27435916517b - name: github.com/Azure/go-autorest @@ -18,7 +18,7 @@ imports: - name: github.com/chai2010/gettext-go version: bf70f2a70fb1b1f36d90d671a72795984eab0fcb - name: github.com/cpuguy83/go-md2man - version: 1d903dcb749992f3741d744c0f8376b4bd7eb3e1 + version: 71acacd42f85e5e82f70a55327789582a5200a90 subpackages: - md2man - name: github.com/davecgh/go-spew @@ -57,7 +57,7 @@ imports: - name: github.com/docker/go-units version: e30f1e79f3cd72542f2026ceec18d3bd67ab859c - name: github.com/docker/spdystream - version: bc6354cbbc295e925e4c611ffe90c1f287ee54db + version: 449fdfce4d962303d702fec724ef0ad181c92528 - name: github.com/emicklei/go-restful version: ff4f55a206334ef123e4f79bbf348980da81ca46 subpackages: @@ -87,7 +87,7 @@ imports: - name: github.com/go-openapi/spec version: 6aced65f8501fe1217321abf0749d354824ba2ff - name: github.com/go-openapi/strfmt - version: 610b6cacdcde6852f4de68998bd20ce1dac85b22 + version: d65c7fdb29eca313476e529628176fe17e58c488 - name: github.com/go-openapi/swag version: 1d0bd113de87027671077d3c71eb3ac5d7dbba72 - name: github.com/gobwas/glob @@ -141,7 +141,7 @@ imports: - ptypes/any - ptypes/timestamp - name: github.com/google/gofuzz - version: 24818f796faf91cd76ec7bddd72458fbced7a6c1 + version: 44d81051d367757e1c7c6a5a86423ece9afcf63c - name: github.com/gosuri/uitable version: 36ee7e946282a3fb1cfecd476ddc9b35d8847e42 subpackages: @@ -150,11 +150,11 @@ imports: - name: github.com/grpc-ecosystem/go-grpc-prometheus version: 2500245aa6110c562d17020fb31a2c133d737799 - name: github.com/hashicorp/golang-lru - version: 0a025b7e63adc15a622f29b0b2c4c3848243bbf6 + version: a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4 - name: github.com/howeyc/gopass - version: bf9dde6d0d2c004a008c27aaee91170c786f6db8 + version: 3ca23474a7c7203e0a0a070fd33508f6efdb9b3d - name: github.com/huandu/xstrings - version: d6590c0c31d16526217fa60fbd2067f7afcd78c5 + version: 3959339b333561bf62a38b424fd41517c2c90f40 - name: github.com/imdario/mergo version: 6633656539c1639d9d78127b7d47c622b5d7b6dc - name: github.com/inconshreveable/mousetrap @@ -174,17 +174,17 @@ imports: - name: github.com/Masterminds/vcs version: 3084677c2c188840777bff30054f2b553729d329 - name: github.com/mattn/go-runewidth - version: 97311d9f7767e3d6f422ea06661bc2c7a19e8a5d + version: d6bea18f789704b5f83375793155289da36a3c7f - name: github.com/matttproud/golang_protobuf_extensions version: fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a subpackages: - pbutil - name: github.com/mitchellh/mapstructure - version: d0303fe809921458f417bcf828397a65db30a7e4 + version: 740c764bc6149d3f1806231418adb9f52c11bcbf - name: github.com/naoina/go-stringutil version: 6b638e95a32d0c1131db0e7fe83775cbea4a0d0b - name: github.com/pborman/uuid - version: e790cca94e6cc75c7064b1332e63811d4aae1a53 + version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 - name: github.com/prometheus/client_golang version: c5b7fccd204277076155f10851dad72b76a49317 subpackages: @@ -221,7 +221,7 @@ imports: - name: github.com/spf13/pflag version: 9ff6c6923cfffbcd502984b8e0c80539a94968b7 - name: github.com/technosophos/moniker - version: ab470f5e105a44d0c87ea21bacd6a335c4816d83 + version: 9f956786b91d9786ca11aa5be6104542fa911546 - name: github.com/ugorji/go version: ded73eae5db7e7a0ef6f55aace87a2873c5d2b74 subpackages: @@ -252,9 +252,9 @@ imports: - lex/httplex - trace - name: golang.org/x/oauth2 - version: 13449ad91cb26cb47661c1b080790392170385fd + version: a6bd8cefa1811bd24b86f8902872e4e8225f74c4 - name: golang.org/x/sys - version: 062cd7e4e68206d8bab9b18396626e855c992658 + version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9 subpackages: - unix - name: golang.org/x/text @@ -296,42 +296,18 @@ imports: subpackages: - bson - name: gopkg.in/yaml.v2 - version: a3f3340b5840cee44f372bddb5880fcbc419b46a + version: 53feefa2559fb8dfa8d81baad31be332c97d6c77 - name: k8s.io/api - version: 926789af7ddda62752e08bc9b93f1d1ebbc7b2de - subpackages: - - admissionregistration/v1alpha1 - - apps/v1beta1 - - apps/v1beta2 - - authentication/v1 - - authentication/v1beta1 - - authorization/v1 - - authorization/v1beta1 - - autoscaling/v1 - - autoscaling/v2beta1 - - batch/v1 - - batch/v1beta1 - - batch/v2alpha1 - - certificates/v1beta1 + version: 4fe9229aaa9d704f8a2a21cdcd50de2bbb6e1b57 + subpackages: - core/v1 - - extensions/v1beta1 - - networking/v1 - - policy/v1beta1 - - rbac/v1 - - rbac/v1alpha1 - - rbac/v1beta1 - - scheduling/v1alpha1 - - settings/v1alpha1 - - storage/v1 - - storage/v1beta1 - name: k8s.io/apiserver - version: 19667a1afc13cc13930c40a20f2c12bbdcaaa246 + version: 2308857ad3b8b18abf74ff734853973eda9da94d subpackages: - pkg/admission - pkg/apis/apiserver - pkg/apis/apiserver/install - pkg/apis/apiserver/v1alpha1 - - pkg/apis/audit - pkg/authentication/authenticator - pkg/authentication/serviceaccount - pkg/authentication/user @@ -340,7 +316,7 @@ imports: - pkg/util/feature - pkg/util/flag - name: k8s.io/kubernetes - version: 4bc5e7f9a6c25dc4c03d4d656f2cefd21540e28c + version: d3faa3f8f2e85c8089e80a661955626ae24abf80 subpackages: - cmd/kubeadm/app/apis/kubeadm - federation/apis/federation @@ -532,15 +508,13 @@ imports: - plugin/pkg/scheduler/schedulercache - plugin/pkg/scheduler/util - name: k8s.io/metrics - version: 4faa73f37a1635813affc8fbc36ba49a15e81a24 + version: 8efbc8e22d00b9c600afec5f1c14073fd2412fce subpackages: - pkg/apis/metrics - pkg/apis/metrics/v1alpha1 - - pkg/apis/metrics/v1beta1 - pkg/client/clientset_generated/clientset - pkg/client/clientset_generated/clientset/scheme - pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1 - - pkg/client/clientset_generated/clientset/typed/metrics/v1beta1 - name: vbom.ml/util version: db5cfe13f5cc80a4990d98e2e1b0707a4d1a5394 repo: https://github.com/fvbommel/util.git diff --git a/glide.yaml b/glide.yaml index 8d42df807..6b231c417 100644 --- a/glide.yaml +++ b/glide.yaml @@ -38,7 +38,6 @@ import: - package: github.com/gobwas/glob version: ^0.2.1 - package: github.com/evanphx/json-patch -- package: github.com/facebookgo/symwalk - package: github.com/BurntSushi/toml version: ~0.3.0 - package: github.com/naoina/go-stringutil @@ -80,7 +79,6 @@ import: ignore: - k8s.io/client-go - k8s.io/apimachinery - testImports: - package: github.com/stretchr/testify version: ^1.1.4 diff --git a/pkg/chartutil/load.go b/pkg/chartutil/load.go index 03ba20e12..81c12b6c2 100644 --- a/pkg/chartutil/load.go +++ b/pkg/chartutil/load.go @@ -244,7 +244,7 @@ func LoadDir(dir string) (*chart.Chart, error) { files := []*BufferedFile{} topdir += string(filepath.Separator) - err = symwalk.Walk(topdir, func(name string, fi os.FileInfo, err error) error { + err = filepath.Walk(topdir, func(name string, fi os.FileInfo, err error) error { n := strings.TrimPrefix(name, topdir) // Normalize to / since it will also work on Windows From f278675f987ca3288d2f28219d830be4228875ed Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 26 Sep 2017 15:21:40 -0700 Subject: [PATCH 25/31] remove references to facebookgo/symwalk --- glide.lock | 4 +--- pkg/chartutil/load.go | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/glide.lock b/glide.lock index bd4c59a49..c368466fb 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ hash: 0759b118eb4017d612af767460cdec467d6f78013ad1efff1c82676f1df84a75 -updated: 2017-09-26T15:01:33.961357-07:00 +updated: 2017-09-26T15:21:30.833774-07:00 imports: - name: cloud.google.com/go version: 3b1ae45394a234c385be014e9a488f2bb6eef821 @@ -68,8 +68,6 @@ imports: version: ba18e35c5c1b36ef6334cad706eb681153d2d379 - name: github.com/exponent-io/jsonpath version: d6023ce2651d8eafb5c75bb0c7167536102ec9f5 -- name: github.com/facebookgo/symwalk - version: 42004b9f322246749dd73ad71008b1f3160c0052 - name: github.com/fatih/camelcase version: f6a740d52f961c60348ebb109adde9f4635d7540 - name: github.com/ghodss/yaml diff --git a/pkg/chartutil/load.go b/pkg/chartutil/load.go index 81c12b6c2..cf11ae2e4 100644 --- a/pkg/chartutil/load.go +++ b/pkg/chartutil/load.go @@ -28,7 +28,6 @@ import ( "path/filepath" "strings" - "github.com/facebookgo/symwalk" "github.com/golang/protobuf/ptypes/any" "k8s.io/helm/pkg/ignore" From cd8bae1df53e29a7089590c7c8f8beb2acb453cc Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Wed, 27 Sep 2017 17:52:06 +0100 Subject: [PATCH 26/31] More helpful wait messages in tiller logs --- pkg/kube/wait.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/kube/wait.go b/pkg/kube/wait.go index 30173167e..99a9bb15e 100644 --- a/pkg/kube/wait.go +++ b/pkg/kube/wait.go @@ -122,22 +122,22 @@ func (c *Client) waitForResources(timeout time.Duration, created Result) error { services = append(services, *svc) } } - isReady := podsReady(pods) && servicesReady(services) && volumesReady(pvc) && deploymentsReady(deployments) - c.Log("resources ready: %v", isReady) + isReady := c.podsReady(pods) && c.servicesReady(services) && c.volumesReady(pvc) && c.deploymentsReady(deployments) return isReady, nil }) } -func podsReady(pods []v1.Pod) bool { +func (c *Client) podsReady(pods []v1.Pod) bool { for _, pod := range pods { if !podutil.IsPodReady(&pod) { + c.Log("Pod is not ready: %s/%s", pod.GetNamespace(), pod.GetName()) return false } } return true } -func servicesReady(svc []v1.Service) bool { +func (c *Client) servicesReady(svc []v1.Service) bool { for _, s := range svc { // ExternalName Services are external to cluster so helm shouldn't be checking to see if they're 'ready' (i.e. have an IP Set) if s.Spec.Type == v1.ServiceTypeExternalName { @@ -146,28 +146,32 @@ func servicesReady(svc []v1.Service) bool { // Make sure the service is not explicitly set to "None" before checking the IP if s.Spec.ClusterIP != v1.ClusterIPNone && !helper.IsServiceIPSet(&s) { + c.Log("Service is not ready: %s/%s", s.GetNamespace(), s.GetName()) return false } // This checks if the service has a LoadBalancer and that balancer has an Ingress defined if s.Spec.Type == v1.ServiceTypeLoadBalancer && s.Status.LoadBalancer.Ingress == nil { + c.Log("Service is not ready: %s/%s", s.GetNamespace(), s.GetName()) return false } } return true } -func volumesReady(vols []v1.PersistentVolumeClaim) bool { +func (c *Client) volumesReady(vols []v1.PersistentVolumeClaim) bool { for _, v := range vols { if v.Status.Phase != v1.ClaimBound { + c.Log("PersistentVolumeClaim is not ready: %s/%s", v.GetNamespace(), v.GetName()) return false } } return true } -func deploymentsReady(deployments []deployment) bool { +func (c *Client) deploymentsReady(deployments []deployment) bool { for _, v := range deployments { if !(v.replicaSets.Status.ReadyReplicas >= *v.deployment.Spec.Replicas-deploymentutil.MaxUnavailable(*v.deployment)) { + c.Log("Deployment is not ready: %s/%s", v.deployment.GetNamespace(), v.deployment.GetName()) return false } } From a6872c124ac1c89b740f81200fb4bf9e2c71b34c Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Thu, 28 Sep 2017 13:54:40 +0100 Subject: [PATCH 27/31] Avoid panics if test is failing --- pkg/lint/lint_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/lint/lint_test.go b/pkg/lint/lint_test.go index 1162ee972..02040f079 100644 --- a/pkg/lint/lint_test.go +++ b/pkg/lint/lint_test.go @@ -68,7 +68,7 @@ func TestBadChart(t *testing.T) { func TestInvalidYaml(t *testing.T) { m := All(badYamlFileDir).Messages if len(m) != 1 { - t.Errorf("All didn't fail with expected errors, got %#v", m) + t.Fatalf("All didn't fail with expected errors, got %#v", m) } if !strings.Contains(m[0].Err.Error(), "deliberateSyntaxError") { t.Errorf("All didn't have the error for deliberateSyntaxError") @@ -78,7 +78,7 @@ func TestInvalidYaml(t *testing.T) { func TestBadValues(t *testing.T) { m := All(badValuesFileDir).Messages if len(m) != 1 { - t.Errorf("All didn't fail with expected errors, got %#v", m) + t.Fatalf("All didn't fail with expected errors, got %#v", m) } if !strings.Contains(m[0].Err.Error(), "cannot unmarshal") { t.Errorf("All didn't have the error for invalid key format: %s", m[0].Err) From 333f8dd35493bff310fe27faf90103f4557ccc64 Mon Sep 17 00:00:00 2001 From: Taylor Thomas Date: Thu, 28 Sep 2017 08:51:12 -0700 Subject: [PATCH 28/31] fix(sorter): Adds missing unit test Adds a unit test that was missed as part of #2961 --- pkg/tiller/kind_sorter_test.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/tiller/kind_sorter_test.go b/pkg/tiller/kind_sorter_test.go index 6996731ca..ab53274ab 100644 --- a/pkg/tiller/kind_sorter_test.go +++ b/pkg/tiller/kind_sorter_test.go @@ -49,6 +49,10 @@ func TestKindSorter(t *testing.T) { Name: "r", Head: &util.SimpleHead{Kind: "Deployment"}, }, + { + Name: "1", + Head: &util.SimpleHead{Kind: "StorageClass"}, + }, { Name: "!", Head: &util.SimpleHead{Kind: "HonkyTonkSet"}, @@ -128,8 +132,8 @@ func TestKindSorter(t *testing.T) { order SortOrder expected string }{ - {"install", InstallOrder, "abcdefghijklmnopqrstuvw!"}, - {"uninstall", UninstallOrder, "wvmutsrqponlkjihgfedcba!"}, + {"install", InstallOrder, "abcde1fghijklmnopqrstuvw!"}, + {"uninstall", UninstallOrder, "wvmutsrqponlkjihgf1edcba!"}, } { var buf bytes.Buffer t.Run(test.description, func(t *testing.T) { From c4581c8b402d8af35c3bcc401080088375217a01 Mon Sep 17 00:00:00 2001 From: flyer103 Date: Sun, 1 Oct 2017 17:03:38 +0800 Subject: [PATCH 29/31] docs/developers.md: add notes for `k8s.io` dir --- docs/developers.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/developers.md b/docs/developers.md index e0aeb374a..4bae913ca 100644 --- a/docs/developers.md +++ b/docs/developers.md @@ -21,7 +21,9 @@ We use Make to build our programs. The simplest way to get started is: $ make bootstrap build ``` -NOTE: This will fail if not run from the path: `$GOPATH/src/k8s.io/helm`. +NOTE: This will fail if not running from the path `$GOPATH/src/k8s.io/helm`. The +directory `k8s.io` should not be a symlink or `build` couldn't find the relevant +packages. This will build both Helm and Tiller. `make bootstrap` will attempt to install certain tools if they are missing. From ac533d98be24adb902967240f9bc909ec1b81158 Mon Sep 17 00:00:00 2001 From: flyer103 Date: Tue, 3 Oct 2017 12:56:15 +0800 Subject: [PATCH 30/31] docs/developers.md: change tense --- docs/developers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers.md b/docs/developers.md index 4bae913ca..9720b99f0 100644 --- a/docs/developers.md +++ b/docs/developers.md @@ -22,7 +22,7 @@ $ make bootstrap build ``` NOTE: This will fail if not running from the path `$GOPATH/src/k8s.io/helm`. The -directory `k8s.io` should not be a symlink or `build` couldn't find the relevant +directory `k8s.io` should not be a symlink or `build` will not find the relevant packages. This will build both Helm and Tiller. `make bootstrap` will attempt to From 6afbb70d47181b072c339bbd450e00d9c4bb423c Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 4 Oct 2017 11:17:51 -0700 Subject: [PATCH 31/31] chore(*): bump version to v2.6.2 (cherry picked from commit a4f965e075e13e7f0479b37f8ac7159f16805166) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b73eb7784..66cb8579a 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,10 @@ Think of it like apt/yum/homebrew for Kubernetes. Binary downloads of the Helm client can be found at the following links: -- [OSX](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.1-darwin-amd64.tar.gz) -- [Linux](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.1-linux-amd64.tar.gz) -- [Linux 32-bit](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.1-linux-386.tar.gz) -- [Windows](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.1-windows-amd64.tar.gz) +- [OSX](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.2-darwin-amd64.tar.gz) +- [Linux](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.2-linux-amd64.tar.gz) +- [Linux 32-bit](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.2-linux-386.tar.gz) +- [Windows](https://kubernetes-helm.storage.googleapis.com/helm-v2.6.2-windows-amd64.tar.gz) Unpack the `helm` binary and add it to your PATH and you are good to go! macOS/[homebrew](https://brew.sh/) users can also use `brew install kubernetes-helm`.