mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
fix: add --namespace flag to edit add configmap
* Add the option to specify a namespace when using 'kustomize edit add configmap' for code parity with 'edit add secret'. * Rename constants for 'add configmap'/'add secret' so they are standardized. * Create new constant for the 'namespace' flag. * Update test cases to cover new scenarios.
This commit is contained in:
@@ -22,7 +22,7 @@ func newCmdAddConfigMap(
|
|||||||
) *cobra.Command {
|
) *cobra.Command {
|
||||||
var flags configmapSecretFlagsAndArgs
|
var flags configmapSecretFlagsAndArgs
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "configmap NAME [--behavior={create|merge|replace}] [--from-file=[key=]source] [--from-literal=key1=value1]",
|
Use: "configmap NAME [--namespace=namespace-name] [--behavior={create|merge|replace}] [--from-file=[key=]source] [--from-literal=key1=value1]",
|
||||||
Short: "Adds a configmap to the kustomization file",
|
Short: "Adds a configmap to the kustomization file",
|
||||||
Long: "",
|
Long: "",
|
||||||
Example: `
|
Example: `
|
||||||
@@ -36,7 +36,10 @@ func newCmdAddConfigMap(
|
|||||||
kustomize edit add configmap my-configmap --from-env-file=env/path.env
|
kustomize edit add configmap my-configmap --from-env-file=env/path.env
|
||||||
|
|
||||||
# Adds a configmap from env-file with behavior merge
|
# Adds a configmap from env-file with behavior merge
|
||||||
kustomize edit add configmap my-configmap --behavior=merge --from-env-file=env/path.env
|
kustomize edit add configmap my-configmap --behavior=merge --from-env-file=env/path.env
|
||||||
|
|
||||||
|
# Adds a configmap to the kustomization file with a specific namespace
|
||||||
|
kustomize edit add configmap my-configmap --namespace test-ns --from-literal=my-key=my-value
|
||||||
`,
|
`,
|
||||||
RunE: func(_ *cobra.Command, args []string) error {
|
RunE: func(_ *cobra.Command, args []string) error {
|
||||||
return runEditAddConfigMap(flags, fSys, args, ldr, rf)
|
return runEditAddConfigMap(flags, fSys, args, ldr, rf)
|
||||||
@@ -62,16 +65,21 @@ func newCmdAddConfigMap(
|
|||||||
"Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).")
|
"Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file).")
|
||||||
cmd.Flags().BoolVar(
|
cmd.Flags().BoolVar(
|
||||||
&flags.DisableNameSuffixHash,
|
&flags.DisableNameSuffixHash,
|
||||||
flagDisableNameSuffixHash,
|
disableNameSuffixHashFlag,
|
||||||
false,
|
false,
|
||||||
"Disable the name suffix for the configmap")
|
"Disable the name suffix for the configmap")
|
||||||
cmd.Flags().StringVar(
|
cmd.Flags().StringVar(
|
||||||
&flags.Behavior,
|
&flags.Behavior,
|
||||||
flagBehavior,
|
behaviorFlag,
|
||||||
"",
|
"",
|
||||||
"Specify the behavior for config map generation, i.e whether to create a new configmap (the default), "+
|
"Specify the behavior for config map generation, i.e whether to create a new configmap (the default), "+
|
||||||
"to merge with a previously defined one, or to replace an existing one. Merge and replace should be used only "+
|
"to merge with a previously defined one, or to replace an existing one. Merge and replace should be used only "+
|
||||||
" when overriding an existing configmap defined in a base")
|
" when overriding an existing configmap defined in a base")
|
||||||
|
cmd.Flags().StringVar(
|
||||||
|
&flags.Namespace,
|
||||||
|
namespaceFlag,
|
||||||
|
"",
|
||||||
|
"Specify the namespace of the ConfigMap")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
@@ -128,7 +136,7 @@ func addConfigMap(
|
|||||||
flags configmapSecretFlagsAndArgs,
|
flags configmapSecretFlagsAndArgs,
|
||||||
rf *resource.Factory,
|
rf *resource.Factory,
|
||||||
) error {
|
) error {
|
||||||
args := findOrMakeConfigMapArgs(k, flags.Name)
|
args := findOrMakeConfigMapArgs(k, flags.Name, flags.Namespace)
|
||||||
mergeFlagsIntoGeneratorArgs(&args.GeneratorArgs, flags)
|
mergeFlagsIntoGeneratorArgs(&args.GeneratorArgs, flags)
|
||||||
// Validate by trying to create corev1.configmap.
|
// Validate by trying to create corev1.configmap.
|
||||||
args.Options = types.MergeGlobalOptionsIntoLocal(
|
args.Options = types.MergeGlobalOptionsIntoLocal(
|
||||||
@@ -137,15 +145,15 @@ func addConfigMap(
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func findOrMakeConfigMapArgs(m *types.Kustomization, name string) *types.ConfigMapArgs {
|
func findOrMakeConfigMapArgs(m *types.Kustomization, name, namespace string) *types.ConfigMapArgs {
|
||||||
for i, v := range m.ConfigMapGenerator {
|
for i, v := range m.ConfigMapGenerator {
|
||||||
if name == v.Name {
|
if name == v.Name && namespace == v.Namespace {
|
||||||
return &m.ConfigMapGenerator[i]
|
return &m.ConfigMapGenerator[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// config map not found, create new one and add it to the kustomization file.
|
// config map not found, create new one and add it to the kustomization file.
|
||||||
cm := &types.ConfigMapArgs{
|
cm := &types.ConfigMapArgs{
|
||||||
GeneratorArgs: types.GeneratorArgs{Name: name},
|
GeneratorArgs: types.GeneratorArgs{Name: name, Namespace: namespace},
|
||||||
}
|
}
|
||||||
m.ConfigMapGenerator = append(m.ConfigMapGenerator, *cm)
|
m.ConfigMapGenerator = append(m.ConfigMapGenerator, *cm)
|
||||||
return &m.ConfigMapGenerator[len(m.ConfigMapGenerator)-1]
|
return &m.ConfigMapGenerator[len(m.ConfigMapGenerator)-1]
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
|
|
||||||
"sigs.k8s.io/kustomize/kustomize/v5/commands/internal/util"
|
"sigs.k8s.io/kustomize/kustomize/v5/commands/internal/util"
|
||||||
"sigs.k8s.io/kustomize/kyaml/filesys"
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
||||||
)
|
)
|
||||||
@@ -17,8 +16,9 @@ const (
|
|||||||
fromFileFlag = "from-file"
|
fromFileFlag = "from-file"
|
||||||
fromLiteralFlag = "from-literal"
|
fromLiteralFlag = "from-literal"
|
||||||
fromEnvFileFlag = "from-env-file"
|
fromEnvFileFlag = "from-env-file"
|
||||||
flagDisableNameSuffixHash = "disableNameSuffixHash"
|
disableNameSuffixHashFlag = "disableNameSuffixHash"
|
||||||
flagBehavior = "behavior"
|
behaviorFlag = "behavior"
|
||||||
|
namespaceFlag = "namespace"
|
||||||
flagFormat = "--%s=%s"
|
flagFormat = "--%s=%s"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ import (
|
|||||||
"sigs.k8s.io/kustomize/kyaml/filesys"
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
configMapNamespace = "test-ns"
|
||||||
|
)
|
||||||
|
|
||||||
func TestNewAddConfigMapIsNotNil(t *testing.T) {
|
func TestNewAddConfigMapIsNotNil(t *testing.T) {
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
assert.NotNil(t, newCmdAddConfigMap(
|
assert.NotNil(t, newCmdAddConfigMap(
|
||||||
@@ -39,17 +43,17 @@ func TestMakeConfigMapArgs(t *testing.T) {
|
|||||||
if len(kustomization.ConfigMapGenerator) != 0 {
|
if len(kustomization.ConfigMapGenerator) != 0 {
|
||||||
t.Fatal("Initial kustomization should not have any configmaps")
|
t.Fatal("Initial kustomization should not have any configmaps")
|
||||||
}
|
}
|
||||||
args := findOrMakeConfigMapArgs(kustomization, cmName)
|
args := findOrMakeConfigMapArgs(kustomization, cmName, configMapNamespace)
|
||||||
assert.NotNil(t, args)
|
assert.NotNil(t, args)
|
||||||
assert.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
assert.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
||||||
assert.Equal(t, &kustomization.ConfigMapGenerator[len(kustomization.ConfigMapGenerator)-1], args)
|
assert.Equal(t, &kustomization.ConfigMapGenerator[len(kustomization.ConfigMapGenerator)-1], args)
|
||||||
assert.Equal(t, args, findOrMakeConfigMapArgs(kustomization, cmName))
|
assert.Equal(t, args, findOrMakeConfigMapArgs(kustomization, cmName, configMapNamespace))
|
||||||
assert.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
assert.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeFlagsIntoConfigMapArgs_LiteralSources(t *testing.T) {
|
func TestMergeFlagsIntoConfigMapArgs_LiteralSources(t *testing.T) {
|
||||||
k := &types.Kustomization{}
|
k := &types.Kustomization{}
|
||||||
args := findOrMakeConfigMapArgs(k, "foo")
|
args := findOrMakeConfigMapArgs(k, "foo", configMapNamespace)
|
||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
configmapSecretFlagsAndArgs{LiteralSources: []string{"k1=v1"}})
|
configmapSecretFlagsAndArgs{LiteralSources: []string{"k1=v1"}})
|
||||||
@@ -62,7 +66,7 @@ func TestMergeFlagsIntoConfigMapArgs_LiteralSources(t *testing.T) {
|
|||||||
|
|
||||||
func TestMergeFlagsIntoConfigMapArgs_FileSources(t *testing.T) {
|
func TestMergeFlagsIntoConfigMapArgs_FileSources(t *testing.T) {
|
||||||
k := &types.Kustomization{}
|
k := &types.Kustomization{}
|
||||||
args := findOrMakeConfigMapArgs(k, "foo")
|
args := findOrMakeConfigMapArgs(k, "foo", configMapNamespace)
|
||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
configmapSecretFlagsAndArgs{FileSources: []string{"file1"}})
|
configmapSecretFlagsAndArgs{FileSources: []string{"file1"}})
|
||||||
@@ -75,7 +79,7 @@ func TestMergeFlagsIntoConfigMapArgs_FileSources(t *testing.T) {
|
|||||||
|
|
||||||
func TestMergeFlagsIntoConfigMapArgs_EnvSource(t *testing.T) {
|
func TestMergeFlagsIntoConfigMapArgs_EnvSource(t *testing.T) {
|
||||||
k := &types.Kustomization{}
|
k := &types.Kustomization{}
|
||||||
args := findOrMakeConfigMapArgs(k, "foo")
|
args := findOrMakeConfigMapArgs(k, "foo", configMapNamespace)
|
||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
configmapSecretFlagsAndArgs{EnvFileSource: "env1"})
|
configmapSecretFlagsAndArgs{EnvFileSource: "env1"})
|
||||||
@@ -88,7 +92,7 @@ func TestMergeFlagsIntoConfigMapArgs_EnvSource(t *testing.T) {
|
|||||||
|
|
||||||
func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
||||||
k := &types.Kustomization{}
|
k := &types.Kustomization{}
|
||||||
args := findOrMakeConfigMapArgs(k, "foo")
|
args := findOrMakeConfigMapArgs(k, "foo", configMapNamespace)
|
||||||
|
|
||||||
createBehaviorFlags := configmapSecretFlagsAndArgs{
|
createBehaviorFlags := configmapSecretFlagsAndArgs{
|
||||||
Behavior: "create",
|
Behavior: "create",
|
||||||
@@ -97,6 +101,7 @@ func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
|||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
createBehaviorFlags)
|
createBehaviorFlags)
|
||||||
|
require.Equal(t, configMapNamespace, k.ConfigMapGenerator[0].Namespace)
|
||||||
assert.Equal(t, "create", k.ConfigMapGenerator[0].Behavior)
|
assert.Equal(t, "create", k.ConfigMapGenerator[0].Behavior)
|
||||||
|
|
||||||
mergeBehaviorFlags := configmapSecretFlagsAndArgs{
|
mergeBehaviorFlags := configmapSecretFlagsAndArgs{
|
||||||
@@ -106,6 +111,7 @@ func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
|||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
mergeBehaviorFlags)
|
mergeBehaviorFlags)
|
||||||
|
require.Equal(t, configMapNamespace, k.ConfigMapGenerator[0].Namespace)
|
||||||
assert.Equal(t, "merge", k.ConfigMapGenerator[0].Behavior)
|
assert.Equal(t, "merge", k.ConfigMapGenerator[0].Behavior)
|
||||||
|
|
||||||
replaceBehaviorFlags := configmapSecretFlagsAndArgs{
|
replaceBehaviorFlags := configmapSecretFlagsAndArgs{
|
||||||
@@ -115,6 +121,7 @@ func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
|||||||
mergeFlagsIntoGeneratorArgs(
|
mergeFlagsIntoGeneratorArgs(
|
||||||
&args.GeneratorArgs,
|
&args.GeneratorArgs,
|
||||||
replaceBehaviorFlags)
|
replaceBehaviorFlags)
|
||||||
|
require.Equal(t, configMapNamespace, k.ConfigMapGenerator[0].Namespace)
|
||||||
assert.Equal(t, "replace", k.ConfigMapGenerator[0].Behavior)
|
assert.Equal(t, "replace", k.ConfigMapGenerator[0].Behavior)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,40 +130,65 @@ func TestMergeFlagsIntoConfigMapArgs_Behavior(t *testing.T) {
|
|||||||
func TestEditAddConfigMapWithLiteralSource(t *testing.T) {
|
func TestEditAddConfigMapWithLiteralSource(t *testing.T) {
|
||||||
const (
|
const (
|
||||||
configMapName = "test-kustomization"
|
configMapName = "test-kustomization"
|
||||||
literalSource = "test-key=test-value"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fSys := filesys.MakeEmptyDirInMemory()
|
testCases := []struct {
|
||||||
testutils_test.WriteTestKustomization(fSys)
|
name string
|
||||||
|
literalSource string
|
||||||
pvd := provider.NewDefaultDepProvider()
|
configMapName string
|
||||||
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
configMapNamespace string
|
||||||
|
}{
|
||||||
args := []string{
|
{
|
||||||
configMapName,
|
name: "use literal-source with default namespace",
|
||||||
fmt.Sprintf(flagFormat, fromLiteralFlag, literalSource),
|
literalSource: "test-key=test-value",
|
||||||
|
configMapName: configMapName,
|
||||||
|
configMapNamespace: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "use literal-source with specified namespace",
|
||||||
|
literalSource: "other-key=other-value",
|
||||||
|
configMapName: configMapName,
|
||||||
|
configMapNamespace: configMapNamespace,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
|
||||||
cmd.SetArgs(args)
|
|
||||||
require.NoError(t, cmd.Execute())
|
|
||||||
|
|
||||||
_, err := testutils_test.ReadTestKustomization(fSys)
|
for _, tc := range testCases {
|
||||||
require.NoError(t, err)
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
fSys := filesys.MakeEmptyDirInMemory()
|
||||||
|
testutils_test.WriteTestKustomization(fSys)
|
||||||
|
|
||||||
mf, err := kustfile.NewKustomizationFile(fSys)
|
pvd := provider.NewDefaultDepProvider()
|
||||||
require.NoError(t, err)
|
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
||||||
|
|
||||||
kustomization, err := mf.Read()
|
args := []string{
|
||||||
require.NoError(t, err)
|
tc.configMapName,
|
||||||
|
fmt.Sprintf(flagFormat, fromLiteralFlag, tc.literalSource),
|
||||||
|
fmt.Sprintf(flagFormat, namespaceFlag, tc.configMapNamespace),
|
||||||
|
}
|
||||||
|
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
||||||
|
cmd.SetArgs(args)
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
|
||||||
require.NotNil(t, kustomization)
|
_, err := testutils_test.ReadTestKustomization(fSys)
|
||||||
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
|
||||||
|
|
||||||
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
mf, err := kustfile.NewKustomizationFile(fSys)
|
||||||
require.NotNil(t, newCmGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, configMapName, newCmGenerator.Name)
|
|
||||||
require.Contains(t, newCmGenerator.LiteralSources, literalSource)
|
kustomization, err := mf.Read()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NotNil(t, kustomization)
|
||||||
|
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
||||||
|
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
||||||
|
|
||||||
|
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
||||||
|
require.NotNil(t, newCmGenerator)
|
||||||
|
require.Equal(t, tc.configMapName, newCmGenerator.Name)
|
||||||
|
require.Equal(t, tc.configMapNamespace, newCmGenerator.Namespace)
|
||||||
|
require.Contains(t, newCmGenerator.LiteralSources, tc.literalSource)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestEditAddConfigMapWithEnvSource executes the same command flow as the CLI invocation
|
// TestEditAddConfigMapWithEnvSource executes the same command flow as the CLI invocation
|
||||||
@@ -165,48 +197,79 @@ func TestEditAddConfigMapWithEnvSource(t *testing.T) {
|
|||||||
const (
|
const (
|
||||||
configMapName = "test-kustomization"
|
configMapName = "test-kustomization"
|
||||||
envSource = "test-env-source"
|
envSource = "test-env-source"
|
||||||
|
content = "TEST=value"
|
||||||
)
|
)
|
||||||
|
|
||||||
fSys := filesys.MakeEmptyDirInMemory()
|
testCases := []struct {
|
||||||
testutils_test.WriteTestKustomization(fSys)
|
name string
|
||||||
|
envSource string
|
||||||
|
content string
|
||||||
|
configMapName string
|
||||||
|
configMapNamespace string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "use env-source with default namespace",
|
||||||
|
envSource: envSource,
|
||||||
|
content: content,
|
||||||
|
configMapName: configMapName,
|
||||||
|
configMapNamespace: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "use env-source with a specified namespace",
|
||||||
|
|
||||||
pvd := provider.NewDefaultDepProvider()
|
envSource: envSource,
|
||||||
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
content: content,
|
||||||
|
configMapName: configMapName,
|
||||||
envFileContent, err := fSys.Create("test-env-source")
|
configMapNamespace: configMapNamespace,
|
||||||
require.NoError(t, err)
|
},
|
||||||
|
|
||||||
_, err = envFileContent.Write([]byte("TEST=value"))
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
err = envFileContent.Close()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
args := []string{
|
|
||||||
configMapName,
|
|
||||||
fmt.Sprintf(flagFormat, fromEnvFileFlag, envSource),
|
|
||||||
}
|
}
|
||||||
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
|
||||||
cmd.SetArgs(args)
|
|
||||||
require.NoError(t, cmd.Execute())
|
|
||||||
|
|
||||||
_, err = testutils_test.ReadTestKustomization(fSys)
|
for _, tc := range testCases {
|
||||||
require.NoError(t, err)
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
fSys := filesys.MakeEmptyDirInMemory()
|
||||||
|
testutils_test.WriteTestKustomization(fSys)
|
||||||
|
|
||||||
mf, err := kustfile.NewKustomizationFile(fSys)
|
pvd := provider.NewDefaultDepProvider()
|
||||||
require.NoError(t, err)
|
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
||||||
|
|
||||||
kustomization, err := mf.Read()
|
envFileContent, err := fSys.Create(tc.envSource)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.NotNil(t, kustomization)
|
_, err = envFileContent.Write([]byte(tc.content))
|
||||||
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
|
||||||
|
|
||||||
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
err = envFileContent.Close()
|
||||||
require.NotNil(t, newCmGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, configMapName, newCmGenerator.Name)
|
|
||||||
require.Contains(t, newCmGenerator.EnvSources, envSource)
|
args := []string{
|
||||||
|
tc.configMapName,
|
||||||
|
fmt.Sprintf(flagFormat, fromEnvFileFlag, tc.envSource),
|
||||||
|
fmt.Sprintf(flagFormat, namespaceFlag, tc.configMapNamespace),
|
||||||
|
}
|
||||||
|
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
||||||
|
cmd.SetArgs(args)
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
|
||||||
|
_, err = testutils_test.ReadTestKustomization(fSys)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
mf, err := kustfile.NewKustomizationFile(fSys)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
kustomization, err := mf.Read()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NotNil(t, kustomization)
|
||||||
|
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
||||||
|
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
||||||
|
|
||||||
|
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
||||||
|
require.NotNil(t, newCmGenerator)
|
||||||
|
require.Equal(t, tc.configMapName, newCmGenerator.Name)
|
||||||
|
require.Equal(t, tc.configMapNamespace, newCmGenerator.Namespace)
|
||||||
|
require.Contains(t, newCmGenerator.EnvSources, tc.envSource)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestEditAddConfigMapWithFileSource executes the same command flow as the CLI invocation
|
// TestEditAddConfigMapWithFileSource executes the same command flow as the CLI invocation
|
||||||
@@ -215,46 +278,77 @@ func TestEditAddConfigMapWithFileSource(t *testing.T) {
|
|||||||
const (
|
const (
|
||||||
configMapName = "test-kustomization"
|
configMapName = "test-kustomization"
|
||||||
fileSource = "test-file-source"
|
fileSource = "test-file-source"
|
||||||
|
content = "any content here"
|
||||||
)
|
)
|
||||||
|
|
||||||
fSys := filesys.MakeEmptyDirInMemory()
|
testCases := []struct {
|
||||||
testutils_test.WriteTestKustomization(fSys)
|
name string
|
||||||
|
fileSource string
|
||||||
pvd := provider.NewDefaultDepProvider()
|
content string
|
||||||
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
configMapName string
|
||||||
|
configMapNamespace string
|
||||||
fileContent, err := fSys.Create("test-file-source")
|
}{
|
||||||
require.NoError(t, err)
|
{
|
||||||
|
name: "use file-source with default namespace",
|
||||||
_, err = fileContent.Write([]byte("any content here"))
|
fileSource: fileSource,
|
||||||
require.NoError(t, err)
|
content: content,
|
||||||
|
configMapName: configMapName,
|
||||||
err = fileContent.Close()
|
configMapNamespace: "",
|
||||||
require.NoError(t, err)
|
},
|
||||||
|
{
|
||||||
args := []string{
|
name: "use file-source with specified namespace",
|
||||||
configMapName,
|
fileSource: fileSource,
|
||||||
fmt.Sprintf(flagFormat, fromFileFlag, fileSource),
|
content: content,
|
||||||
|
configMapName: configMapName,
|
||||||
|
configMapNamespace: configMapNamespace,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
|
||||||
cmd.SetArgs(args)
|
|
||||||
require.NoError(t, cmd.Execute())
|
|
||||||
|
|
||||||
_, err = testutils_test.ReadTestKustomization(fSys)
|
for _, tc := range testCases {
|
||||||
require.NoError(t, err)
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
|
||||||
mf, err := kustfile.NewKustomizationFile(fSys)
|
fSys := filesys.MakeEmptyDirInMemory()
|
||||||
require.NoError(t, err)
|
testutils_test.WriteTestKustomization(fSys)
|
||||||
|
|
||||||
kustomization, err := mf.Read()
|
pvd := provider.NewDefaultDepProvider()
|
||||||
require.NoError(t, err)
|
ldr := kv.NewLoader(loader.NewFileLoaderAtCwd(fSys), pvd.GetFieldValidator())
|
||||||
|
|
||||||
require.NotNil(t, kustomization)
|
fileContent, err := fSys.Create(tc.fileSource)
|
||||||
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
|
||||||
|
|
||||||
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
_, err = fileContent.Write([]byte(tc.content))
|
||||||
require.NotNil(t, newCmGenerator)
|
require.NoError(t, err)
|
||||||
require.Equal(t, configMapName, newCmGenerator.Name)
|
|
||||||
require.Contains(t, newCmGenerator.FileSources, fileSource)
|
err = fileContent.Close()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
args := []string{
|
||||||
|
tc.configMapName,
|
||||||
|
fmt.Sprintf(flagFormat, fromFileFlag, tc.fileSource),
|
||||||
|
fmt.Sprintf(flagFormat, namespaceFlag, tc.configMapNamespace),
|
||||||
|
}
|
||||||
|
cmd := newCmdAddConfigMap(fSys, ldr, pvd.GetResourceFactory())
|
||||||
|
cmd.SetArgs(args)
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
|
||||||
|
_, err = testutils_test.ReadTestKustomization(fSys)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
mf, err := kustfile.NewKustomizationFile(fSys)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
kustomization, err := mf.Read()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NotNil(t, kustomization)
|
||||||
|
require.NotEmpty(t, kustomization.ConfigMapGenerator)
|
||||||
|
require.Equal(t, 1, len(kustomization.ConfigMapGenerator))
|
||||||
|
|
||||||
|
newCmGenerator := kustomization.ConfigMapGenerator[0]
|
||||||
|
require.NotNil(t, newCmGenerator)
|
||||||
|
require.Equal(t, tc.configMapName, newCmGenerator.Name)
|
||||||
|
require.Equal(t, tc.configMapNamespace, newCmGenerator.Namespace)
|
||||||
|
require.Contains(t, newCmGenerator.FileSources, tc.fileSource)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,12 +64,12 @@ func newCmdAddSecret(
|
|||||||
"Specify the secret type this can be 'Opaque' (default), or 'kubernetes.io/tls'")
|
"Specify the secret type this can be 'Opaque' (default), or 'kubernetes.io/tls'")
|
||||||
cmd.Flags().StringVar(
|
cmd.Flags().StringVar(
|
||||||
&flags.Namespace,
|
&flags.Namespace,
|
||||||
"namespace",
|
namespaceFlag,
|
||||||
"",
|
"",
|
||||||
"Specify the namespace of the secret")
|
"Specify the namespace of the secret")
|
||||||
cmd.Flags().BoolVar(
|
cmd.Flags().BoolVar(
|
||||||
&flags.DisableNameSuffixHash,
|
&flags.DisableNameSuffixHash,
|
||||||
flagDisableNameSuffixHash,
|
disableNameSuffixHashFlag,
|
||||||
false,
|
false,
|
||||||
"Disable the name suffix for the secret")
|
"Disable the name suffix for the secret")
|
||||||
|
|
||||||
@@ -125,7 +125,9 @@ func runEditAddSecret(
|
|||||||
func addSecret(
|
func addSecret(
|
||||||
ldr ifc.KvLoader,
|
ldr ifc.KvLoader,
|
||||||
k *types.Kustomization,
|
k *types.Kustomization,
|
||||||
flags configmapSecretFlagsAndArgs, rf *resource.Factory) error {
|
flags configmapSecretFlagsAndArgs,
|
||||||
|
rf *resource.Factory,
|
||||||
|
) error {
|
||||||
args := findOrMakeSecretArgs(k, flags.Name, flags.Namespace, flags.Type)
|
args := findOrMakeSecretArgs(k, flags.Name, flags.Namespace, flags.Type)
|
||||||
mergeFlagsIntoGeneratorArgs(&args.GeneratorArgs, flags)
|
mergeFlagsIntoGeneratorArgs(&args.GeneratorArgs, flags)
|
||||||
// Validate by trying to create corev1.secret.
|
// Validate by trying to create corev1.secret.
|
||||||
|
|||||||
Reference in New Issue
Block a user