Merge pull request #142 from mumoshu/make-purge-optional
Make purge optional when running "helmfile delete"
This commit is contained in:
		
						commit
						a7e35b7316
					
				|  | @ -186,6 +186,12 @@ To supply the diff functionality Helmfile needs the [helm-diff](https://github.c | ||||||
| you should be able to simply execute `helm plugin install https://github.com/databus23/helm-diff`. For more details | you should be able to simply execute `helm plugin install https://github.com/databus23/helm-diff`. For more details | ||||||
| please look at their [documentation](https://github.com/databus23/helm-diff#helm-diff-plugin). | please look at their [documentation](https://github.com/databus23/helm-diff#helm-diff-plugin). | ||||||
| 
 | 
 | ||||||
|  | ### delete | ||||||
|  | 
 | ||||||
|  | The `helmfile delete` sub-command deletes all the releases defined in the manfiests | ||||||
|  | 
 | ||||||
|  | Note that `delete` doesn't purge releases. So `helmfile delete && helmfile sync` results in sync failed due to that releases names are not deleted but preserved for future references. If you really want to remove releases for reuse, add `--purge` flag to run it like `helmfile delete --purge`. | ||||||
|  | 
 | ||||||
| ### secrets | ### secrets | ||||||
| 
 | 
 | ||||||
| The `secrets` parameter in a `helmfile.yaml` causes the [helm-secrets](https://github.com/futuresimple/helm-secrets) plugin to be executed to decrypt the file. | The `secrets` parameter in a `helmfile.yaml` causes the [helm-secrets](https://github.com/futuresimple/helm-secrets) plugin to be executed to decrypt the file. | ||||||
|  |  | ||||||
|  | @ -79,8 +79,8 @@ func (helm *execer) DiffRelease(name, chart string, flags ...string) error { | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (helm *execer) DeleteRelease(name string) error { | func (helm *execer) DeleteRelease(name string, flags ...string) error { | ||||||
| 	out, err := helm.exec("delete", "--purge", name) | 	out, err := helm.exec(append([]string{"delete", name}, flags...)...) | ||||||
| 	helm.write(out) | 	helm.write(out) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -149,7 +149,16 @@ func Test_DeleteRelease(t *testing.T) { | ||||||
| 	var buffer bytes.Buffer | 	var buffer bytes.Buffer | ||||||
| 	helm := MockExecer(&buffer, "dev") | 	helm := MockExecer(&buffer, "dev") | ||||||
| 	helm.DeleteRelease("release") | 	helm.DeleteRelease("release") | ||||||
| 	expected := "exec: helm delete --purge release --kube-context dev\n" | 	expected := "exec: helm delete release --kube-context dev\n" | ||||||
|  | 	if buffer.String() != expected { | ||||||
|  | 		t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | func Test_DeleteRelease_Flags(t *testing.T) { | ||||||
|  | 	var buffer bytes.Buffer | ||||||
|  | 	helm := MockExecer(&buffer, "dev") | ||||||
|  | 	helm.DeleteRelease("release", "--purge") | ||||||
|  | 	expected := "exec: helm delete release --purge --kube-context dev\n" | ||||||
| 	if buffer.String() != expected { | 	if buffer.String() != expected { | ||||||
| 		t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected) | 		t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ type Interface interface { | ||||||
| 	SyncRelease(name, chart string, flags ...string) error | 	SyncRelease(name, chart string, flags ...string) error | ||||||
| 	DiffRelease(name, chart string, flags ...string) error | 	DiffRelease(name, chart string, flags ...string) error | ||||||
| 	ReleaseStatus(name string) error | 	ReleaseStatus(name string) error | ||||||
| 	DeleteRelease(name string) error | 	DeleteRelease(name string, flags ...string) error | ||||||
| 
 | 
 | ||||||
| 	DecryptSecret(name string) (string, error) | 	DecryptSecret(name string) (string, error) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								main.go
								
								
								
								
							
							
						
						
									
										12
									
								
								main.go
								
								
								
								
							|  | @ -252,14 +252,22 @@ func main() { | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			Name:  "delete", | 			Name:  "delete", | ||||||
| 			Usage: "delete charts from state file (helm delete)", | 			Usage: "delete releases from state file (helm delete)", | ||||||
|  | 			Flags: []cli.Flag{ | ||||||
|  | 				cli.BoolFlag{ | ||||||
|  | 					Name:  "purge", | ||||||
|  | 					Usage: "purge releases i.e. free release names and histories", | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
| 			Action: func(c *cli.Context) error { | 			Action: func(c *cli.Context) error { | ||||||
| 				state, helm, err := before(c) | 				state, helm, err := before(c) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return err | 					return err | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				errs := state.DeleteReleases(helm) | 				purge := c.Bool("purge") | ||||||
|  | 
 | ||||||
|  | 				errs := state.DeleteReleases(helm, purge) | ||||||
| 				return clean(state, errs) | 				return clean(state, errs) | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
|  | @ -356,14 +356,18 @@ func (state *HelmState) ReleaseStatuses(helm helmexec.Interface, workerLimit int | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeleteReleases wrapper for executing helm delete on the releases
 | // DeleteReleases wrapper for executing helm delete on the releases
 | ||||||
| func (state *HelmState) DeleteReleases(helm helmexec.Interface) []error { | func (state *HelmState) DeleteReleases(helm helmexec.Interface, purge bool) []error { | ||||||
| 	var wg sync.WaitGroup | 	var wg sync.WaitGroup | ||||||
| 	errs := []error{} | 	errs := []error{} | ||||||
| 
 | 
 | ||||||
| 	for _, release := range state.Releases { | 	for _, release := range state.Releases { | ||||||
| 		wg.Add(1) | 		wg.Add(1) | ||||||
| 		go func(wg *sync.WaitGroup, release ReleaseSpec) { | 		go func(wg *sync.WaitGroup, release ReleaseSpec) { | ||||||
| 			if err := helm.DeleteRelease(release.Name); err != nil { | 			flags := []string{} | ||||||
|  | 			if purge { | ||||||
|  | 				flags = append(flags, "--purge") | ||||||
|  | 			} | ||||||
|  | 			if err := helm.DeleteRelease(release.Name, flags...); err != nil { | ||||||
| 				errs = append(errs, err) | 				errs = append(errs, err) | ||||||
| 			} | 			} | ||||||
| 			wg.Done() | 			wg.Done() | ||||||
|  |  | ||||||
|  | @ -546,7 +546,7 @@ func (helm *mockHelmExec) ReleaseStatus(release string) error { | ||||||
| 	helm.releases = append(helm.releases, mockRelease{name: release, flags: []string{}}) | 	helm.releases = append(helm.releases, mockRelease{name: release, flags: []string{}}) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| func (helm *mockHelmExec) DeleteRelease(name string) error { | func (helm *mockHelmExec) DeleteRelease(name string, flags ...string) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| func (helm *mockHelmExec) DecryptSecret(name string) (string, error) { | func (helm *mockHelmExec) DecryptSecret(name string) (string, error) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue