mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 01:14:22 +00:00
Fix for #818 - Added support for quoted values
This commit is contained in:
@@ -135,13 +135,28 @@ func (o *addMetadataOptions) convertToMap(arg string) (map[string]string, error)
|
|||||||
return nil, o.makeError(input, "empty key")
|
return nil, o.makeError(input, "empty key")
|
||||||
}
|
}
|
||||||
if len(kv) > 2 {
|
if len(kv) > 2 {
|
||||||
return nil, o.makeError(input, "too many colons")
|
// more than one colon found
|
||||||
}
|
// check if value is quoted
|
||||||
if len(kv) > 1 {
|
qc := strings.Index(input, ":\"")
|
||||||
|
if qc >= 1 && input[len(input)-1:] == "\"" {
|
||||||
|
//value is quoted
|
||||||
|
result[kv[0]] = input[qc+1:]
|
||||||
|
} else {
|
||||||
|
// value is not quoted, return error
|
||||||
|
return nil, o.makeError(input, "too many colons, quote the values")
|
||||||
|
}
|
||||||
|
} else if len(kv) == 2 {
|
||||||
result[kv[0]] = kv[1]
|
result[kv[0]] = kv[1]
|
||||||
} else {
|
} else {
|
||||||
result[kv[0]] = ""
|
result[kv[0]] = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// remove quotes if value is quoted
|
||||||
|
if len(result[kv[0]]) > 0 &&
|
||||||
|
result[kv[0]][:1] == "\"" &&
|
||||||
|
result[kv[0]][len(result[kv[0]])-1:] == "\"" {
|
||||||
|
result[kv[0]] = result[kv[0]][1 : len(result[kv[0]])-1]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package add
|
package add
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"sigs.k8s.io/kustomize/pkg/commands/kustfile"
|
"sigs.k8s.io/kustomize/pkg/commands/kustfile"
|
||||||
@@ -103,6 +104,32 @@ func TestAddAnnotationManyArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAddAnnotationValueQuoted(t *testing.T) {
|
||||||
|
fakeFS := fs.MakeFakeFS()
|
||||||
|
fakeFS.WriteTestKustomization()
|
||||||
|
v := validators.MakeHappyMapValidator(t)
|
||||||
|
cmd := newCmdAddAnnotation(fakeFS, v.Validator)
|
||||||
|
args := []string{"k1:\"v1\""}
|
||||||
|
err := cmd.RunE(cmd, args)
|
||||||
|
v.VerifyCall()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddAnnotationValueWithColon(t *testing.T) {
|
||||||
|
fakeFS := fs.MakeFakeFS()
|
||||||
|
fakeFS.WriteTestKustomization()
|
||||||
|
v := validators.MakeHappyMapValidator(t)
|
||||||
|
cmd := newCmdAddAnnotation(fakeFS, v.Validator)
|
||||||
|
args := []string{"k1:\"v1:v2\""}
|
||||||
|
err := cmd.RunE(cmd, args)
|
||||||
|
v.VerifyCall()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAddAnnotationNoKey(t *testing.T) {
|
func TestAddAnnotationNoKey(t *testing.T) {
|
||||||
fakeFS := fs.MakeFakeFS()
|
fakeFS := fs.MakeFakeFS()
|
||||||
v := validators.MakeHappyMapValidator(t)
|
v := validators.MakeHappyMapValidator(t)
|
||||||
@@ -128,7 +155,7 @@ func TestAddAnnotationTooManyColons(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected an error")
|
t.Errorf("expected an error")
|
||||||
}
|
}
|
||||||
if err.Error() != "invalid annotation: key:v1:v2 (too many colons)" {
|
if err.Error() != "invalid annotation: key:v1:v2 (too many colons, quote the values)" {
|
||||||
t.Errorf("incorrect error: %v", err.Error())
|
t.Errorf("incorrect error: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,7 +265,7 @@ func TestAddLabelTooManyColons(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected an error")
|
t.Errorf("expected an error")
|
||||||
}
|
}
|
||||||
if err.Error() != "invalid label: key:v1:v2 (too many colons)" {
|
if err.Error() != "invalid label: key:v1:v2 (too many colons, quote the values)" {
|
||||||
t.Errorf("incorrect error: %v", err.Error())
|
t.Errorf("incorrect error: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -271,3 +298,35 @@ func TestAddLabelMultipleArgs(t *testing.T) {
|
|||||||
t.Errorf("incorrect error: %v", err.Error())
|
t.Errorf("incorrect error: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConvertToMap(t *testing.T) {
|
||||||
|
var o addMetadataOptions
|
||||||
|
args := "a:b,c:\"d\",e:\"f:g\""
|
||||||
|
expected := make(map[string]string)
|
||||||
|
expected["a"] = "b"
|
||||||
|
expected["c"] = "d"
|
||||||
|
expected["e"] = "f:g"
|
||||||
|
|
||||||
|
result, err := o.convertToMap(args)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
eq := reflect.DeepEqual(expected, result)
|
||||||
|
if !eq {
|
||||||
|
t.Errorf("Converted map does not match expected, expected: %v, result: %v\n", expected, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConvertToMapError(t *testing.T) {
|
||||||
|
var o addMetadataOptions
|
||||||
|
args := "a:b,c:\"d\",e:f:g"
|
||||||
|
|
||||||
|
_, err := o.convertToMap(args)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("expected an error")
|
||||||
|
}
|
||||||
|
if err.Error() != "invalid annotation: e:f:g (too many colons, quote the values)" {
|
||||||
|
t.Errorf("incorrect error: %v", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user