mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
Update go files
This commit is contained in:
@@ -9,6 +9,7 @@ require (
|
||||
github.com/sergi/go-diff v1.1.0
|
||||
github.com/stretchr/testify v1.4.0
|
||||
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca
|
||||
gopkg.in/yaml.v2 v2.2.4
|
||||
gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 // indirect
|
||||
gopkg.in/yaml.v2 v2.2.7
|
||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2
|
||||
)
|
||||
|
||||
10
kyaml/go.sum
10
kyaml/go.sum
@@ -39,18 +39,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d h1:LCPbGQ34PMrwad11aMZ+dbz5SAsq/0ySjRwQ8I9Qwd8=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo=
|
||||
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2 h1:XZx7nhd5GMaZpmDaEHFVafUZC7ya0fuo7cSJ3UCKYmM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -4,11 +4,10 @@
|
||||
package settersutil
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/kind/pkg/errors"
|
||||
"sigs.k8s.io/kustomize/kyaml/errors"
|
||||
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||
"sigs.k8s.io/kustomize/kyaml/openapi"
|
||||
"sigs.k8s.io/kustomize/kyaml/setters2"
|
||||
@@ -78,13 +77,7 @@ func (c SubstitutionCreator) Create(openAPIPath, resourcesPath string) error {
|
||||
// CreateSettersForSubstitution creates the setters for all the references in the substitution
|
||||
// values if they don't already exist in openAPIPath file.
|
||||
func (c SubstitutionCreator) CreateSettersForSubstitution(openAPIPath string) error {
|
||||
b, err := ioutil.ReadFile(openAPIPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// parse the yaml file
|
||||
y, err := yaml.Parse(string(b))
|
||||
y, err := yaml.ReadFile(openAPIPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -129,58 +122,55 @@ func (c SubstitutionCreator) GetValuesForMarkers() (map[string]string, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s := c.FieldValue
|
||||
p := c.Pattern
|
||||
i := 0
|
||||
j := 0
|
||||
// iterate s, p with indices i, j respectively and when j hits the index of a marker, freeze j and iterate
|
||||
// i and capture string till we find the substring just after current marker and before next marker
|
||||
fv := c.FieldValue
|
||||
pattern := c.Pattern
|
||||
fvInd := 0
|
||||
patternInd := 0
|
||||
// iterate fv, pattern with indices fvInd, patternInd respectively and when patternInd hits the index of a marker,
|
||||
// freeze patternInd and iterate fvInd and capture string till we find the substring just after current marker
|
||||
// and before next marker
|
||||
|
||||
// Ex: s = "something/ubuntu:0.1.0", p = "something/IMAGE::VERSION", till j reaches 10
|
||||
// just proceed i and j and check if s[i]==p[j]
|
||||
// when j is 10, freeze j and move i till it sees substring '::' which derives IMAGE = ubuntu and so on.
|
||||
for i < len(s) && j < len(p) {
|
||||
if marker, ok := indices[j]; ok {
|
||||
value := ""
|
||||
e := j + len(marker)
|
||||
|
||||
for i < len(s) && (e == len(p) ||
|
||||
s[i:min(len(s), i+lenToNextMarker(indices, e))] != p[e:min(e+lenToNextMarker(indices, e), len(p))]) {
|
||||
value += string(s[i])
|
||||
i++
|
||||
}
|
||||
// Ex: fv = "something/ubuntu:0.1.0", pattern = "something/IMAGE:VERSION", till patternInd reaches 10
|
||||
// just proceed fvInd and patternInd and check if fv[fvInd]==pattern[patternInd] when patternInd is 10,
|
||||
// freeze patternInd and move fvInd till it sees substring ':' which derives IMAGE = ubuntu and so on.
|
||||
for fvInd < len(fv) && patternInd < len(pattern) {
|
||||
// if we hit marker index, extract its corresponding value
|
||||
if marker, ok := indices[patternInd]; ok {
|
||||
// increment the patternInd to end of marker. This helps us to extract the substring before next marker.
|
||||
patternInd += len(marker)
|
||||
value := c.extractValueForMarker(&fvInd, fv, patternInd, indices)
|
||||
// if marker is repeated in the pattern, make sure that the corresponding values
|
||||
// are same and throw error if not.
|
||||
if prevValue, ok := m[marker]; ok && prevValue != value {
|
||||
return nil, errors.Errorf("Same marker is found to have different values in field value.")
|
||||
return nil, errors.Errorf("same marker is found to have different values in field value")
|
||||
}
|
||||
m[marker] = value
|
||||
j += len(marker)
|
||||
} else {
|
||||
if s[i] != p[j] {
|
||||
return nil, errors.Errorf("Unable to derive values for markers. Create setters for all markers and then try again.")
|
||||
// Ex: fv = "samething/ubuntu:0.1.0" pattern = "something/IMAGE:VERSION". Error out at 'a' in fv.
|
||||
if fv[fvInd] != pattern[patternInd] {
|
||||
return nil, errors.Errorf("unable to derive values for markers, create setters for all markers and then try again")
|
||||
}
|
||||
i++
|
||||
j++
|
||||
fvInd++
|
||||
patternInd++
|
||||
}
|
||||
}
|
||||
// check if both strings are completely visited or throw error
|
||||
if i < len(s) || j < len(p) {
|
||||
return nil, errors.Errorf("Unable to derive values for markers. Create setters for all markers and then try again.")
|
||||
if fvInd < len(fv) || patternInd < len(pattern) {
|
||||
return nil, errors.Errorf("unable to derive values for markers, create setters for all markers and then try again")
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetStartIndices returns the start indices of all the markers in the pattern
|
||||
func (c SubstitutionCreator) GetStartIndices() (map[int]string, error) {
|
||||
inds := make(map[int]string)
|
||||
indices := make(map[int]string)
|
||||
p := c.Pattern
|
||||
for _, value := range c.Values {
|
||||
m := value.Marker
|
||||
found := false
|
||||
for i := range p {
|
||||
if strings.HasPrefix(p[i:], m) {
|
||||
inds[i] = m
|
||||
indices[i] = m
|
||||
found = true
|
||||
}
|
||||
}
|
||||
@@ -188,12 +178,27 @@ func (c SubstitutionCreator) GetStartIndices() (map[int]string, error) {
|
||||
return nil, errors.Errorf("Unable to find marker " + m + " in the pattern")
|
||||
}
|
||||
}
|
||||
return inds, nil
|
||||
return indices, nil
|
||||
}
|
||||
|
||||
func (c SubstitutionCreator) extractValueForMarker(fvInd *int, fv string, patternInd int, indices map[int]string) string {
|
||||
value := ""
|
||||
lm := lenTillNextMarker(indices, patternInd)
|
||||
|
||||
// keep appending chars to value till we find the substring between 2 markers in fv
|
||||
// In example fv = "something/ubuntu:0.1.0", pattern = "something/IMAGE:VERSION",
|
||||
// proceed till we find substring ":" in fv which makes value = ubuntu for marker IMAGE
|
||||
for *fvInd < len(fv) && (patternInd == len(c.Pattern) ||
|
||||
fv[*fvInd:min(len(fv), *fvInd+lm)] != c.Pattern[patternInd:min(patternInd+lm, len(c.Pattern))]) {
|
||||
value += string(fv[*fvInd])
|
||||
*fvInd++
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
// lenToNextMarker takes in the indices map, an index and returns the distance to
|
||||
// next greater index
|
||||
func lenToNextMarker(m map[int]string, j int) int {
|
||||
// next marker start index in indices map
|
||||
func lenTillNextMarker(m map[int]string, j int) int {
|
||||
res := math.MaxInt32
|
||||
for k := range m {
|
||||
if k > j {
|
||||
|
||||
@@ -11,19 +11,9 @@ import (
|
||||
)
|
||||
|
||||
func TestGetValuesForMarkersPositive(t *testing.T) {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
values := []setters2.Value{value1, value2}
|
||||
|
||||
c := SubstitutionCreator{
|
||||
Pattern: "something/IMAGE::VERSION/otherthing/IMAGE::VERSION/",
|
||||
Values: values,
|
||||
Values: Values(),
|
||||
FieldValue: "something/nginx::0.1.0/otherthing/nginx::0.1.0/",
|
||||
}
|
||||
|
||||
@@ -38,19 +28,9 @@ func TestGetValuesForMarkersPositive(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetValuesForMarkersDiffMarkerValues(t *testing.T) {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
values := []setters2.Value{value1, value2}
|
||||
|
||||
c := SubstitutionCreator{
|
||||
Pattern: "something/IMAGE:VERSION/IMAGE",
|
||||
Values: values,
|
||||
Values: Values(),
|
||||
FieldValue: "something/nginx:0.1.0/ubuntu",
|
||||
}
|
||||
|
||||
@@ -60,25 +40,15 @@ func TestGetValuesForMarkersDiffMarkerValues(t *testing.T) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if !assert.Equal(t, err.Error(), "Same marker is found to have different values in field value.") {
|
||||
if !assert.Equal(t, err.Error(), "same marker is found to have different values in field value") {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetValuesForMarkersNoMatch(t *testing.T) {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
values := []setters2.Value{value1, value2}
|
||||
|
||||
c := SubstitutionCreator{
|
||||
Pattern: "something/IMAGE:VERSION",
|
||||
Values: values,
|
||||
Values: Values(),
|
||||
FieldValue: "otherthing/nginx:0.1.0",
|
||||
}
|
||||
|
||||
@@ -88,25 +58,15 @@ func TestGetValuesForMarkersNoMatch(t *testing.T) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if !assert.Equal(t, err.Error(), "Unable to derive values for markers. Create setters for all markers and then try again.") {
|
||||
if !assert.Equal(t, err.Error(), "unable to derive values for markers, create setters for all markers and then try again") {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetValuesForMarkersNoMatch2(t *testing.T) {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
values := []setters2.Value{value1, value2}
|
||||
|
||||
c := SubstitutionCreator{
|
||||
Pattern: "something/IMAGE:VERSION/abc",
|
||||
Values: values,
|
||||
Values: Values(),
|
||||
FieldValue: "something/nginx:0.1.0/abcd",
|
||||
}
|
||||
|
||||
@@ -116,29 +76,19 @@ func TestGetValuesForMarkersNoMatch2(t *testing.T) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if !assert.Equal(t, err.Error(), "Unable to derive values for markers. Create setters for all markers and then try again.") {
|
||||
if !assert.Equal(t, err.Error(), "unable to derive values for markers, create setters for all markers and then try again") {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetValuesForMarkersSubStngMarkers(t *testing.T) {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
value3 := setters2.Value{
|
||||
Marker: "MAGE",
|
||||
}
|
||||
|
||||
values := []setters2.Value{value1, value2, value3}
|
||||
|
||||
c := SubstitutionCreator{
|
||||
Pattern: "something/IMAGE:VERSION/abc/MAGE",
|
||||
Values: values,
|
||||
Values: append(Values(), value3),
|
||||
FieldValue: "something/nginx:0.1.0/abc/ubuntu",
|
||||
}
|
||||
|
||||
@@ -152,3 +102,15 @@ func TestGetValuesForMarkersSubStngMarkers(t *testing.T) {
|
||||
assert.Equal(t, m["VERSION"], "0.1.0")
|
||||
assert.Equal(t, m["MAGE"], "ubuntu")
|
||||
}
|
||||
|
||||
func Values() []setters2.Value {
|
||||
value1 := setters2.Value{
|
||||
Marker: "IMAGE",
|
||||
}
|
||||
|
||||
value2 := setters2.Value{
|
||||
Marker: "VERSION",
|
||||
}
|
||||
|
||||
return []setters2.Value{value1, value2}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user