mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-29 17:41:13 +00:00
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:
@@ -5,6 +5,8 @@ package generators
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/go-errors/errors"
|
||||
"sigs.k8s.io/kustomize/api/ifc"
|
||||
@@ -95,3 +97,28 @@ func setImmutable(
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ParseFileSource parses the source given.
|
||||
//
|
||||
// Acceptable formats include:
|
||||
// 1. source-path: the basename will become the key name
|
||||
// 2. source-name=source-path: the source-name will become the key name and
|
||||
// source-path is the path to the key file.
|
||||
//
|
||||
// Key names cannot include '='.
|
||||
func ParseFileSource(source string) (keyName, filePath string, err error) {
|
||||
numSeparators := strings.Count(source, "=")
|
||||
switch {
|
||||
case numSeparators == 0:
|
||||
return path.Base(source), source, nil
|
||||
case numSeparators == 1 && strings.HasPrefix(source, "="):
|
||||
return "", "", errors.Errorf("missing key name for file path %q in source %q", strings.TrimPrefix(source, "="), source)
|
||||
case numSeparators == 1 && strings.HasSuffix(source, "="):
|
||||
return "", "", errors.Errorf("missing file path for key name %q in source %q", strings.TrimSuffix(source, "="), source)
|
||||
case numSeparators > 1:
|
||||
return "", "", errors.Errorf("source %q key name or file path contains '='", source)
|
||||
default:
|
||||
components := strings.Split(source, "=")
|
||||
return components[0], components[1], nil
|
||||
}
|
||||
}
|
||||
|
||||
51
api/internal/generators/utils_test.go
Normal file
51
api/internal/generators/utils_test.go
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright 2020 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package generators_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
. "sigs.k8s.io/kustomize/api/internal/generators"
|
||||
)
|
||||
|
||||
func TestParseFileSource(t *testing.T) {
|
||||
tests := map[string]*struct {
|
||||
Input string
|
||||
Error string
|
||||
Key string
|
||||
Filename string
|
||||
}{
|
||||
"filename only": {
|
||||
Input: "./path/myfile",
|
||||
Key: "myfile",
|
||||
Filename: "./path/myfile",
|
||||
},
|
||||
"key and filename": {
|
||||
Input: "newName.ini=oldName",
|
||||
Key: "newName.ini",
|
||||
Filename: "oldName",
|
||||
},
|
||||
"multiple =": {
|
||||
Input: "newName.ini==oldName",
|
||||
Error: `source "newName.ini==oldName" key name or file path contains '='`,
|
||||
},
|
||||
"missing key": {
|
||||
Input: "=myfile",
|
||||
Error: `missing key name for file path "myfile" in source "=myfile"`,
|
||||
},
|
||||
}
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
key, file, err := ParseFileSource(test.Input)
|
||||
if test.Error != "" {
|
||||
require.EqualError(t, err, test.Error)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, test.Key, key)
|
||||
require.Equal(t, test.Filename, file)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user