mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
Expose smart path splitter as a utility.
This commit is contained in:
@@ -5,7 +5,6 @@ package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/kustomize/api/resid"
|
||||
)
|
||||
@@ -34,11 +33,6 @@ type FieldSpec struct {
|
||||
CreateIfNotPresent bool `json:"create,omitempty" yaml:"create,omitempty"`
|
||||
}
|
||||
|
||||
const (
|
||||
escapedForwardSlash = "\\/"
|
||||
tempSlashReplacement = "???"
|
||||
)
|
||||
|
||||
func (fs FieldSpec) String() string {
|
||||
return fmt.Sprintf(
|
||||
"%s:%v:%s", fs.Gvk.String(), fs.CreateIfNotPresent, fs.Path)
|
||||
@@ -49,34 +43,6 @@ func (fs FieldSpec) effectivelyEquals(other FieldSpec) bool {
|
||||
return fs.IsSelected(&other.Gvk) && fs.Path == other.Path
|
||||
}
|
||||
|
||||
// PathSlice converts the path string to a slice of strings,
|
||||
// separated by a '/'. Forward slash can be contained in a
|
||||
// fieldname. such as ingress.kubernetes.io/auth-secret in
|
||||
// Ingress annotations. To deal with this special case, the
|
||||
// path to this field should be formatted as
|
||||
//
|
||||
// metadata/annotations/ingress.kubernetes.io\/auth-secret
|
||||
//
|
||||
// Then PathSlice will return
|
||||
//
|
||||
// []string{
|
||||
// "metadata",
|
||||
// "annotations",
|
||||
// "ingress.auth-secretkubernetes.io/auth-secret"
|
||||
// }
|
||||
func (fs FieldSpec) PathSlice() []string {
|
||||
if !strings.Contains(fs.Path, escapedForwardSlash) {
|
||||
return strings.Split(fs.Path, "/")
|
||||
}
|
||||
s := strings.Replace(fs.Path, escapedForwardSlash, tempSlashReplacement, -1)
|
||||
paths := strings.Split(s, "/")
|
||||
var result []string
|
||||
for _, path := range paths {
|
||||
result = append(result, strings.Replace(path, tempSlashReplacement, "/", -1))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
type FsSlice []FieldSpec
|
||||
|
||||
func (s FsSlice) Len() int { return len(s) }
|
||||
|
||||
@@ -13,30 +13,6 @@ import (
|
||||
. "sigs.k8s.io/kustomize/api/types"
|
||||
)
|
||||
|
||||
func TestPathSlice(t *testing.T) {
|
||||
type path struct {
|
||||
input string
|
||||
parsed []string
|
||||
}
|
||||
paths := []path{
|
||||
{
|
||||
input: "spec/metadata/annotations",
|
||||
parsed: []string{"spec", "metadata", "annotations"},
|
||||
},
|
||||
{
|
||||
input: `metadata/annotations/nginx.ingress.kubernetes.io\/auth-secret`,
|
||||
parsed: []string{"metadata", "annotations", "nginx.ingress.kubernetes.io/auth-secret"},
|
||||
},
|
||||
}
|
||||
for _, p := range paths {
|
||||
fs := FieldSpec{Path: p.input}
|
||||
actual := fs.PathSlice()
|
||||
if !reflect.DeepEqual(actual, p.parsed) {
|
||||
t.Fatalf("expected %v, but got %v", p.parsed, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var mergeTests = []struct {
|
||||
name string
|
||||
original FsSlice
|
||||
|
||||
Reference in New Issue
Block a user