From 25ed62c3ea133f57c458212c13f43bfc86af549e Mon Sep 17 00:00:00 2001 From: derekwaynecarr Date: Fri, 29 Apr 2016 13:09:46 -0400 Subject: [PATCH] Fix kubectl create secret/configmap to allow = values --- pkg/kubectl/configmap_test.go | 15 +++++++++++++++ pkg/kubectl/kubectl.go | 7 ++++++- pkg/kubectl/kubectl_test.go | 12 +++++++++--- pkg/kubectl/secret_test.go | 15 +++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/pkg/kubectl/configmap_test.go b/pkg/kubectl/configmap_test.go index 2fc936c9ec3..d4458bdd0ff 100644 --- a/pkg/kubectl/configmap_test.go +++ b/pkg/kubectl/configmap_test.go @@ -91,6 +91,21 @@ func TestConfigMapGenerate(t *testing.T) { }, expectErr: true, }, + { + params: map[string]interface{}{ + "name": "foo", + "from-literal": []string{"key1==value1"}, + }, + expected: &api.ConfigMap{ + ObjectMeta: api.ObjectMeta{ + Name: "foo", + }, + Data: map[string]string{ + "key1": "=value1", + }, + }, + expectErr: false, + }, } generator := ConfigMapGeneratorV1{} for _, test := range tests { diff --git a/pkg/kubectl/kubectl.go b/pkg/kubectl/kubectl.go index 7caf86ddd79..dd13dd458bf 100644 --- a/pkg/kubectl/kubectl.go +++ b/pkg/kubectl/kubectl.go @@ -229,7 +229,12 @@ func parseFileSource(source string) (keyName, filePath string, err error) { // parseLiteralSource parses the source key=val pair func parseLiteralSource(source string) (keyName, value string, err error) { - items := strings.Split(source, "=") + // leading equal is invalid + if strings.Index(source, "=") == 0 { + return "", "", fmt.Errorf("invalid literal source %v, expected key=value", source) + } + // split after the first equal (so values can have the = character) + items := strings.SplitN(source, "=", 2) if len(items) != 2 { return "", "", fmt.Errorf("invalid literal source %v, expected key=value", source) } diff --git a/pkg/kubectl/kubectl_test.go b/pkg/kubectl/kubectl_test.go index 6381b492067..1cd69d11e9d 100644 --- a/pkg/kubectl/kubectl_test.go +++ b/pkg/kubectl/kubectl_test.go @@ -142,17 +142,23 @@ func TestParseLiteralSource(t *testing.T) { { name: "err 1", input: "key==value", - err: true, + key: "key", + value: "=value", + err: false, }, { name: "err 2", input: "key=value=", - err: true, + key: "key", + value: "value=", + err: false, }, { name: "err 3", input: "key2=value==", - err: true, + key: "key2", + value: "value==", + err: false, }, { name: "err 4", diff --git a/pkg/kubectl/secret_test.go b/pkg/kubectl/secret_test.go index e713c991182..944c42356b3 100644 --- a/pkg/kubectl/secret_test.go +++ b/pkg/kubectl/secret_test.go @@ -92,6 +92,21 @@ func TestSecretGenerate(t *testing.T) { }, expectErr: true, }, + { + params: map[string]interface{}{ + "name": "foo", + "from-literal": []string{"key1==value1"}, + }, + expected: &api.Secret{ + ObjectMeta: api.ObjectMeta{ + Name: "foo", + }, + Data: map[string][]byte{ + "key1": []byte("=value1"), + }, + }, + expectErr: false, + }, } generator := SecretGeneratorV1{} for _, test := range tests {