mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-19 02:36:34 +02:00
Create DeleteWait and DeleteTimeout parameters for Destroy (#1177)
* Create DeleteWait and DeleteTimeout parameters Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> * Create tests for deleteWait and deleteTimeout Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> * build(deps): bump github.com/aws/aws-sdk-go from 1.48.6 to 1.48.7 (#1176) Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.48.6 to 1.48.7. - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.48.6...v1.48.7) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Update temp_test.go with DeleteWait and DeleteTimeout Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> * Create deleteWait function in state.go Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> * Fix comments from review Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> --------- Signed-off-by: Virginia Tavares <briosovirginia@gmail.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Virginia Tavares <virginia.tavares@ericsson.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
dependabot[bot]
Virginia Tavares
parent
4659b2fdd8
commit
b10692dc9b
+30
-1
@@ -192,6 +192,10 @@ type HelmSpec struct {
|
||||
DisableOpenAPIValidation *bool `yaml:"disableOpenAPIValidation,omitempty"`
|
||||
// InsecureSkipTLSVerify is true if the TLS verification should be skipped when fetching remote chart
|
||||
InsecureSkipTLSVerify bool `yaml:"insecureSkipTLSVerify,omitempty"`
|
||||
// Wait, if set to true, will wait until all resources are deleted before mark delete command as successful
|
||||
DeleteWait bool `yaml:"deleteWait"`
|
||||
// Timeout is the time in seconds to wait for helmfile delete command (default 300)
|
||||
DeleteTimeout int `yaml:"deleteTimeout"`
|
||||
}
|
||||
|
||||
// RepositorySpec that defines values for a helm repo
|
||||
@@ -370,6 +374,11 @@ type ReleaseSpec struct {
|
||||
|
||||
// SuppressDiff skip the helm diff output. Useful for charts which produces large not helpful diff.
|
||||
SuppressDiff *bool `yaml:"suppressDiff,omitempty"`
|
||||
|
||||
// --wait flag for destroy/delete, if set to true, will wait until all resources are deleted before mark delete command as successful
|
||||
DeleteWait *bool `yaml:"deleteWait,omitempty"`
|
||||
// Timeout is the time in seconds to wait for helmfile delete command (default 300)
|
||||
DeleteTimeout *int `yaml:"deleteTimeout,omitempty"`
|
||||
}
|
||||
|
||||
func (r *Inherits) UnmarshalYAML(unmarshal func(any) error) error {
|
||||
@@ -765,6 +774,22 @@ func ReleaseToID(r *ReleaseSpec) string {
|
||||
return id
|
||||
}
|
||||
|
||||
func (st *HelmState) appendDeleteWaitFlags(args []string, release *ReleaseSpec) []string {
|
||||
if release.DeleteWait != nil && *release.DeleteWait || release.DeleteWait == nil && st.HelmDefaults.DeleteWait {
|
||||
args = append(args, "--wait")
|
||||
timeout := st.HelmDefaults.DeleteTimeout
|
||||
if release.DeleteTimeout != nil {
|
||||
timeout = *release.DeleteTimeout
|
||||
}
|
||||
if timeout != 0 {
|
||||
duration := strconv.Itoa(timeout)
|
||||
duration += "s"
|
||||
args = append(args, "--timeout", duration)
|
||||
}
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
// DeleteReleasesForSync deletes releases that are marked for deletion
|
||||
func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, helm helmexec.Interface, workerLimit int, cascade string) []error {
|
||||
errs := []error{}
|
||||
@@ -800,6 +825,7 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h
|
||||
if release.Namespace != "" {
|
||||
args = append(args, "--namespace", release.Namespace)
|
||||
}
|
||||
args = st.appendDeleteWaitFlags(args, release)
|
||||
args = st.appendConnectionFlags(args, release)
|
||||
deletionFlags := st.appendCascadeFlags(args, helm, release, cascade)
|
||||
|
||||
@@ -1047,6 +1073,9 @@ type ChartPrepareOptions struct {
|
||||
Concurrency int
|
||||
KubeVersion string
|
||||
Set []string
|
||||
// Delete wait
|
||||
DeleteWait bool
|
||||
DeleteTimeout int
|
||||
}
|
||||
|
||||
type chartPrepareResult struct {
|
||||
@@ -2063,10 +2092,10 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel
|
||||
flags := make([]string, 0)
|
||||
flags = st.appendConnectionFlags(flags, &release)
|
||||
flags = st.appendCascadeFlags(flags, helm, &release, cascade)
|
||||
flags = st.appendDeleteWaitFlags(flags, &release)
|
||||
if release.Namespace != "" {
|
||||
flags = append(flags, "--namespace", release.Namespace)
|
||||
}
|
||||
|
||||
context := st.createHelmContext(&release, workerIndex)
|
||||
|
||||
start := time.Now()
|
||||
|
||||
+24
-1
@@ -2590,7 +2590,28 @@ func TestHelmState_Delete(t *testing.T) {
|
||||
namespace string
|
||||
kubeContext string
|
||||
defKubeContext string
|
||||
deleteWait bool
|
||||
deleteTimeout int
|
||||
}{
|
||||
{
|
||||
name: "delete wait enabled",
|
||||
deleteWait: true,
|
||||
wantErr: false,
|
||||
desired: boolValue(true),
|
||||
installed: true,
|
||||
purge: false,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--wait"}}},
|
||||
},
|
||||
{
|
||||
name: "delete wait with deleteTimeout",
|
||||
deleteWait: true,
|
||||
deleteTimeout: 800,
|
||||
wantErr: false,
|
||||
desired: boolValue(true),
|
||||
installed: true,
|
||||
purge: false,
|
||||
deleted: []exectest.Release{{Name: "releaseA", Flags: []string{"--wait", "--timeout", "800s"}}},
|
||||
},
|
||||
{
|
||||
name: "desired and installed (purge=false)",
|
||||
wantErr: false,
|
||||
@@ -2721,7 +2742,9 @@ func TestHelmState_Delete(t *testing.T) {
|
||||
state := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
HelmDefaults: HelmSpec{
|
||||
KubeContext: tt.defKubeContext,
|
||||
KubeContext: tt.defKubeContext,
|
||||
DeleteWait: tt.deleteWait,
|
||||
DeleteTimeout: tt.deleteTimeout,
|
||||
},
|
||||
Releases: releases,
|
||||
},
|
||||
|
||||
@@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
|
||||
run(testcase{
|
||||
subject: "baseline",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
want: "foo-values-c7464bdc5",
|
||||
want: "foo-values-b5df4fc58",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different bytes content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: []byte(`{"k":"v"}`),
|
||||
want: "foo-values-79f8658596",
|
||||
want: "foo-values-5bd95d98d5",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different map content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: map[string]any{"k": "v"},
|
||||
want: "foo-values-7996cc88d6",
|
||||
want: "foo-values-5cb8d75d9f",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different chart",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
||||
want: "foo-values-7cdb6bd8b6",
|
||||
want: "foo-values-5f6b44cff5",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different name",
|
||||
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
||||
want: "bar-values-59cd6576c4",
|
||||
want: "bar-values-546889667f",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "specific ns",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
||||
want: "myns-foo-values-5d5d46c98d",
|
||||
want: "myns-foo-values-78f4c8794f",
|
||||
})
|
||||
|
||||
for id, n := range ids {
|
||||
|
||||
Reference in New Issue
Block a user