Localize configMapGenerator, secretGenerator fields (#4894)

* Localize configMapGenerator, secretGenerator fields

* Improve readability

* Expose kv parseFileSource

* Add localizeGenerator to Localizer

* Improve and test ParseFileSource error messages
This commit is contained in:
Anna Song
2022-12-02 15:31:53 -08:00
committed by GitHub
parent a502717460
commit 71eb865cea
5 changed files with 222 additions and 28 deletions

View File

@@ -8,6 +8,7 @@ import (
"path/filepath"
"sigs.k8s.io/kustomize/api/ifc"
"sigs.k8s.io/kustomize/api/internal/generators"
pLdr "sigs.k8s.io/kustomize/api/internal/plugins/loader"
"sigs.k8s.io/kustomize/api/internal/target"
"sigs.k8s.io/kustomize/api/konfig"
@@ -128,8 +129,50 @@ func (lc *localizer) localizeNativeFields(kust *types.Kustomization) error {
kust.Patches[i].Path = newPath
}
}
for i := range kust.ConfigMapGenerator {
if err := lc.localizeGenerator(&kust.ConfigMapGenerator[i].GeneratorArgs); err != nil {
return errors.WrapPrefixf(err, "unable to localize configMapGenerator")
}
}
for i := range kust.SecretGenerator {
if err := lc.localizeGenerator(&kust.SecretGenerator[i].GeneratorArgs); err != nil {
return errors.WrapPrefixf(err, "unable to localize secretGenerator")
}
}
// TODO(annasong): localize all other kustomization fields: resources, bases, crds, configurations,
// openapi, patchesJson6902, patchesStrategicMerge, replacements, configMapGenerators, secretGenerators
// openapi, patchesJson6902, patchesStrategicMerge, replacements
return nil
}
// localizeGenerator localizes the file paths on generator.
func (lc *localizer) localizeGenerator(generator *types.GeneratorArgs) error {
locEnvs := make([]string, len(generator.EnvSources))
for i, env := range generator.EnvSources {
newPath, err := lc.localizeFile(env)
if err != nil {
return errors.WrapPrefixf(err, "unable to localize generator envs file")
}
locEnvs[i] = newPath
}
locFiles := make([]string, len(generator.FileSources))
for i, file := range generator.FileSources {
k, f, err := generators.ParseFileSource(file)
if err != nil {
return errors.WrapPrefixf(err, "unable to parse generator files entry %q", file)
}
newFile, err := lc.localizeFile(f)
if err != nil {
return errors.WrapPrefixf(err, "unable to localize generator files path in entry %q", file)
}
if f != file {
newFile = k + "=" + newFile
}
locFiles[i] = newFile
}
generator.EnvSources = locEnvs
generator.FileSources = locFiles
return nil
}

View File

@@ -220,6 +220,34 @@ patches:
checkFSys(t, fSysExpected, fSys)
}
func TestLocalizeUnreferencedIgnored(t *testing.T) {
fSys := makeMemoryFs(t)
targetAndUnreferenced := map[string]string{
"kustomization.yaml": `apiVersion: kustomize.config.k8s.io/v1beta1
configMapGenerator:
- envs:
- env
name: referenced-file
kind: Kustomization
`,
"env": "APPLE=orange",
"env.properties": "USERNAME=password",
"resource.yaml": podConfiguration,
}
addFiles(t, fSys, "/alpha/beta", targetAndUnreferenced)
err := Run("/alpha/beta", "/alpha", "/beta", fSys)
require.NoError(t, err)
fSysExpected := makeMemoryFs(t)
addFiles(t, fSysExpected, "/alpha/beta", targetAndUnreferenced)
addFiles(t, fSysExpected, "/beta/beta", map[string]string{
"kustomization.yaml": targetAndUnreferenced["kustomization.yaml"],
"env": targetAndUnreferenced["env"],
})
checkFSys(t, fSysExpected, fSys)
}
func TestLocalizePatches(t *testing.T) {
fSys := makeMemoryFs(t)
kustAndPatch := map[string]string{
@@ -262,6 +290,76 @@ spec:
checkFSys(t, fSysExpected, fSys)
}
func TestLocalizeConfigMapGenerator(t *testing.T) {
fSys := makeMemoryFs(t)
kustAndData := map[string]string{
"kustomization.yaml": `apiVersion: kustomize.config.k8s.io/v1beta1
configMapGenerator:
- envs:
- standard.env
namespace: my
options:
immutable: true
- behavior: merge
files:
- key.properties
literals:
- PEAR=pineapple
kind: Kustomization
metadata:
name: test
`,
"standard.env": `SIZE=0.1
IS_GLOBAL=true`,
"key.properties": "value",
}
addFiles(t, fSys, "/a/b", kustAndData)
err := Run("/a/b", "", "", fSys)
require.NoError(t, err)
fSysExpected := makeMemoryFs(t)
addFiles(t, fSysExpected, "/a/b", kustAndData)
addFiles(t, fSysExpected, "/localized-b", kustAndData)
checkFSys(t, fSysExpected, fSys)
}
func TestLocalizeSecretGenerator(t *testing.T) {
fSys := makeMemoryFs(t)
kustAndData := map[string]string{
"kustomization.yaml": `apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
secretGenerator:
- behavior: create
files:
- key=b/value.properties
- b/value
name: secret
- envs:
- crt
- key
type: kubernetes.io/tls
- literals:
- APPLE=b3Jhbmdl
- PLUM=cGx1b3Q=
name: no-files
`,
"crt": "tls.crt=LS0tLS1CRUd...0tLQo=",
"key": "tls.key=LS0tLS1CRUd...0tLQo=",
"b/value.properties": "dmFsdWU=",
"b/value": "dmFsdWU=",
}
addFiles(t, fSys, "/a", kustAndData)
err := Run("/a", "/", "/localized-a", fSys)
require.NoError(t, err)
fSysExpected := makeMemoryFs(t)
addFiles(t, fSysExpected, "/a", kustAndData)
addFiles(t, fSysExpected, "/localized-a/a", kustAndData)
checkFSys(t, fSysExpected, fSys)
}
func TestLocalizeFileNoFile(t *testing.T) {
fSys := makeMemoryFs(t)
kustAndPatch := map[string]string{