From fb7a92ca5e15ef7d050e3ebc242cd4624aefbfd3 Mon Sep 17 00:00:00 2001 From: Hang Yan Date: Fri, 5 Apr 2019 03:31:06 +0800 Subject: [PATCH] Fix placement parser panic (#1121) --- pkg/loader/compose/compose_test.go | 5 ++++- pkg/loader/compose/v3.go | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pkg/loader/compose/compose_test.go b/pkg/loader/compose/compose_test.go index 44011576..5cdfa28a 100644 --- a/pkg/loader/compose/compose_test.go +++ b/pkg/loader/compose/compose_test.go @@ -386,7 +386,10 @@ func TestCheckLabelsPorts(t *testing.T) { func TestCheckPlacementCustomLabels(t *testing.T) { placement := types.Placement{ - Constraints: []string{"node.labels.something == anything"}, + Constraints: []string{ + "node.labels.something == anything", + "node.labels.monitor != xxx", + }, } output := loadV3Placement(placement.Constraints) diff --git a/pkg/loader/compose/v3.go b/pkg/loader/compose/v3.go index 7c513df7..10bb3367 100644 --- a/pkg/loader/compose/v3.go +++ b/pkg/loader/compose/v3.go @@ -134,8 +134,13 @@ func parseV3(files []string) (kobject.KomposeObject, error) { func loadV3Placement(constraints []string) map[string]string { placement := make(map[string]string) + errMsg := " constraints in placement is not supported, only 'node.hostname', 'engine.labels.operatingsystem' and 'node.labels.xxx' (ex: node.labels.something == anything) is supported as a constraint " for _, j := range constraints { p := strings.Split(j, " == ") + if len(p) < 2 { + log.Warn(p[0], errMsg) + continue + } if p[0] == "node.hostname" { placement["kubernetes.io/hostname"] = p[1] } else if p[0] == "engine.labels.operatingsystem" { @@ -144,7 +149,7 @@ func loadV3Placement(constraints []string) map[string]string { label := strings.TrimPrefix(p[0], "node.labels.") placement[label] = p[1] } else { - log.Warn(p[0], " constraints in placement is not supported, only 'node.hostname', 'engine.labels.operatingsystem' and 'node.labels.xxx' (ex: node.labels.something == anything) is supported as a constraint ") + log.Warn(p[0], errMsg) } } return placement