Merge pull request #6674 from kargakis/error-on-invalid-label-spec

Tighten label parsing
This commit is contained in:
Brian Grant 2015-04-23 16:41:52 -07:00
commit 24cad22a88
3 changed files with 17 additions and 9 deletions

View File

@ -21,7 +21,6 @@ import (
"strings" "strings"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/golang/glog"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -81,19 +80,18 @@ func MakeLabels(labels map[string]string) string {
} }
// ParseLabels turns a string representation of a label set into a map[string]string // ParseLabels turns a string representation of a label set into a map[string]string
func ParseLabels(labelString string) map[string]string { func ParseLabels(labelString string) (map[string]string, error) {
if len(labelString) == 0 { if len(labelString) == 0 {
return nil return nil, fmt.Errorf("no label spec passed")
} }
labels := map[string]string{} labels := map[string]string{}
labelSpecs := strings.Split(labelString, ",") labelSpecs := strings.Split(labelString, ",")
for ix := range labelSpecs { for ix := range labelSpecs {
labelSpec := strings.Split(labelSpecs[ix], "=") labelSpec := strings.Split(labelSpecs[ix], "=")
if len(labelSpec) != 2 { if len(labelSpec) != 2 {
glog.Errorf("unexpected label spec: %s", labelSpecs[ix]) return nil, fmt.Errorf("unexpected label spec: %s", labelSpecs[ix])
continue
} }
labels[labelSpec[0]] = labelSpec[1] labels[labelSpec[0]] = labelSpec[1]
} }
return labels return labels, nil
} }

View File

@ -39,8 +39,12 @@ func (BasicReplicationController) Generate(params map[string]string) (runtime.Ob
// TODO: extract this flag to a central location. // TODO: extract this flag to a central location.
labelString, found := params["labels"] labelString, found := params["labels"]
var labels map[string]string var labels map[string]string
var err error
if found && len(labelString) > 0 { if found && len(labelString) > 0 {
labels = ParseLabels(labelString) labels, err = ParseLabels(labelString)
if err != nil {
return nil, err
}
} else { } else {
labels = map[string]string{ labels = map[string]string{
"run-container": params["name"], "run-container": params["name"],

View File

@ -45,12 +45,18 @@ func (ServiceGenerator) Generate(params map[string]string) (runtime.Object, erro
if !found || len(selectorString) == 0 { if !found || len(selectorString) == 0 {
return nil, fmt.Errorf("'selector' is a required parameter.") return nil, fmt.Errorf("'selector' is a required parameter.")
} }
selector := ParseLabels(selectorString) selector, err := ParseLabels(selectorString)
if err != nil {
return nil, err
}
labelsString, found := params["labels"] labelsString, found := params["labels"]
var labels map[string]string var labels map[string]string
if found && len(labelsString) > 0 { if found && len(labelsString) > 0 {
labels = ParseLabels(labelsString) labels, err = ParseLabels(labelsString)
if err != nil {
return nil, err
}
} }
name, found := params["name"] name, found := params["name"]