Skip to content

Commit a318d4d

Browse files
feat: incorporate feedback from review
* Incorporate feedback from reviews. * Add extra test cases to increase coverage. * Tiny refactors for code parity with remove configmap. * Update copyright notice.
1 parent 0cfafdd commit a318d4d

File tree

2 files changed

+67
-28
lines changed

2 files changed

+67
-28
lines changed

kustomize/commands/edit/remove/removesecret.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2019 The Kubernetes Authors.
1+
// Copyright 2023 The Kubernetes Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package remove
@@ -12,22 +12,23 @@ import (
1212
"github.com/spf13/cobra"
1313
"sigs.k8s.io/kustomize/api/konfig"
1414
"sigs.k8s.io/kustomize/api/types"
15-
"sigs.k8s.io/kustomize/kustomize/v4/commands/internal/kustfile"
15+
"sigs.k8s.io/kustomize/kustomize/v5/commands/internal/kustfile"
1616
"sigs.k8s.io/kustomize/kyaml/filesys"
1717
)
1818

1919
type removeSecretOptions struct {
2020
secretNamesToRemove []string
2121
}
2222

23-
// newCmdRemoveSecret remove the name of a file containing a secret to the kustomization file.
23+
// newCmdRemoveSecret removes secretGenerator(s) with the specified name(s).
2424
func newCmdRemoveSecret(fSys filesys.FileSystem) *cobra.Command {
2525
var o removeSecretOptions
2626

2727
cmd := &cobra.Command{
2828
Use: "secret",
29-
Short: "Removes specified secret" +
29+
Short: "Removes the specified secret(s) from " +
3030
konfig.DefaultKustomizationFileName(),
31+
Long: "",
3132
Example: `
3233
remove secret my-secret
3334
`,
@@ -44,12 +45,13 @@ func newCmdRemoveSecret(fSys filesys.FileSystem) *cobra.Command {
4445

4546
// Validate validates removeSecret command.
4647
func (o *removeSecretOptions) Validate(args []string) error {
47-
if len(args) == 0 {
48-
return errors.New("must specify a Secret name")
49-
}
50-
if len(args) > 1 {
51-
return fmt.Errorf("too many arguments: %s; to provide multiple Secrets to remove, please separate Secret names by commas", args)
48+
switch {
49+
case len(args) == 0:
50+
return errors.New("at least one secret name must be specified")
51+
case len(args) > 1:
52+
return fmt.Errorf("too many arguments: %s; to provide multiple secrets to remove, please separate secret names by commas", args)
5253
}
54+
5355
o.secretNamesToRemove = strings.Split(args[0], ",")
5456
return nil
5557
}
@@ -63,7 +65,7 @@ func (o *removeSecretOptions) RunRemoveSecret(fSys filesys.FileSystem) error {
6365

6466
m, err := mf.Read()
6567
if err != nil {
66-
return fmt.Errorf("could not read kustomization file: %w", err)
68+
return fmt.Errorf("could not read kustomization file contents: %w", err)
6769
}
6870

6971
foundSecrets := make(map[string]struct{})
@@ -77,6 +79,11 @@ func (o *removeSecretOptions) RunRemoveSecret(fSys filesys.FileSystem) error {
7779
newSecrets = append(newSecrets, currentSecret)
7880
}
7981

82+
if len(foundSecrets) == 0 {
83+
return fmt.Errorf("no specified secret(s) were found in the %s file",
84+
konfig.DefaultKustomizationFileName())
85+
}
86+
8087
for _, name := range o.secretNamesToRemove {
8188
if _, found := foundSecrets[name]; !found {
8289
log.Printf("secret %s doesn't exist in kustomization file", name)
@@ -86,7 +93,7 @@ func (o *removeSecretOptions) RunRemoveSecret(fSys filesys.FileSystem) error {
8693

8794
err = mf.Write(m)
8895
if err != nil {
89-
return fmt.Errorf("secret cannot write back to file, got %w", err)
96+
return fmt.Errorf("failed to write kustomization file: %w", err)
9097
}
9198
return nil
9299
}

kustomize/commands/edit/remove/removesecret_test.go

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
// Copyright 2019 The Kubernetes Authors.
1+
// Copyright 2023 The Kubernetes Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

44
package remove //nolint:testpackage
55

66
import (
77
"fmt"
8-
"strings"
98
"testing"
109

11-
"github.com/stretchr/testify/assert"
12-
testutils_test "sigs.k8s.io/kustomize/kustomize/v4/commands/internal/testutils"
10+
"github.com/stretchr/testify/require"
11+
testutils_test "sigs.k8s.io/kustomize/kustomize/v5/commands/internal/testutils"
1312
"sigs.k8s.io/kustomize/kyaml/filesys"
1413
)
1514

@@ -18,9 +17,10 @@ func TestRemoveSecret(t *testing.T) {
1817
const secretName02 = "example-secret-02"
1918

2019
tests := map[string]struct {
21-
input string
22-
args []string
23-
expectedErr string
20+
input string
21+
args []string
22+
expectedOutput string
23+
expectedErr string
2424
}{
2525
"happy path": {
2626
input: fmt.Sprintf(`
@@ -32,6 +32,10 @@ secretGenerator:
3232
- longsecret.txt
3333
`, secretName01),
3434
args: []string{secretName01},
35+
expectedOutput: `
36+
apiVersion: kustomize.config.k8s.io/v1beta1
37+
kind: Kustomization
38+
`,
3539
},
3640
"multiple": {
3741
input: fmt.Sprintf(`
@@ -48,6 +52,10 @@ secretGenerator:
4852
args: []string{
4953
fmt.Sprintf("%s,%s", secretName01, secretName02),
5054
},
55+
expectedOutput: `
56+
apiVersion: kustomize.config.k8s.io/v1beta1
57+
kind: Kustomization
58+
`,
5159
},
5260
"miss": {
5361
input: fmt.Sprintf(`
@@ -58,7 +66,31 @@ secretGenerator:
5866
files:
5967
- longsecret.txt
6068
`, secretName01),
61-
args: []string{"foo"},
69+
args: []string{"foo"},
70+
expectedErr: "no specified secret(s) were found",
71+
},
72+
"no secret name specified": {
73+
args: []string{},
74+
expectedErr: "at least one secret name must be specified",
75+
},
76+
"too many secret names specified": {
77+
args: []string{"test1", "test2"},
78+
expectedErr: "too many arguments",
79+
},
80+
"one existing and one non-existing": {
81+
input: fmt.Sprintf(`
82+
apiVersion: kustomize.config.k8s.io/v1beta1
83+
kind: Kustomization
84+
secretGenerator:
85+
- name: %s
86+
files:
87+
- application.properties
88+
`, secretName01),
89+
args: []string{fmt.Sprintf("%s,%s", secretName01, "foo")},
90+
expectedOutput: `
91+
apiVersion: kustomize.config.k8s.io/v1beta1
92+
kind: Kustomization
93+
`,
6294
},
6395
}
6496

@@ -68,17 +100,17 @@ secretGenerator:
68100
testutils_test.WriteTestKustomizationWith(fSys, []byte(tc.input))
69101
cmd := newCmdRemoveSecret(fSys)
70102
err := cmd.RunE(cmd, tc.args)
103+
71104
if tc.expectedErr != "" {
72-
assert.Error(t, err)
73-
assert.Contains(t, err.Error(), tc.expectedErr)
74-
} else {
75-
assert.NoError(t, err)
76-
content, err := testutils_test.ReadTestKustomization(fSys)
77-
assert.NoError(t, err)
78-
for _, opt := range strings.Split(tc.args[0], ",") {
79-
assert.NotContains(t, string(content), opt)
80-
}
105+
require.Error(t, err)
106+
require.Contains(t, err.Error(), tc.expectedErr)
107+
return
81108
}
109+
110+
require.NoError(t, err)
111+
content, err := testutils_test.ReadTestKustomization(fSys)
112+
require.NoError(t, err)
113+
require.Equal(t, tc.expectedOutput, string(content))
82114
})
83115
}
84116
}

0 commit comments

Comments
 (0)