diff --git a/pkg/util/system/BUILD b/pkg/util/system/BUILD index 50a3fcd1309..2a76dea7e76 100644 --- a/pkg/util/system/BUILD +++ b/pkg/util/system/BUILD @@ -16,3 +16,11 @@ go_library( tags = ["automanaged"], deps = ["//pkg/api:go_default_library"], ) + +go_test( + name = "go_default_test", + srcs = ["system_utils_test.go"], + library = "go_default_library", + tags = ["automanaged"], + deps = ["//pkg/api:go_default_library"], +) diff --git a/pkg/util/system/system_utils.go b/pkg/util/system/system_utils.go index e0998872bfd..c4060935e40 100644 --- a/pkg/util/system/system_utils.go +++ b/pkg/util/system/system_utils.go @@ -17,12 +17,13 @@ limitations under the License. package system import ( - "strings" + "regexp" "k8s.io/kubernetes/pkg/api" ) // TODO: find a better way of figuring out if given node is a registered master. func IsMasterNode(node *api.Node) bool { - return strings.HasSuffix(node.Name, "master") + r := regexp.MustCompile("master(-...)?$") + return r.MatchString(node.Name) } diff --git a/pkg/util/system/system_utils_test.go b/pkg/util/system/system_utils_test.go new file mode 100644 index 00000000000..c92c53332c6 --- /dev/null +++ b/pkg/util/system/system_utils_test.go @@ -0,0 +1,46 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package system + +import ( + "testing" + + "k8s.io/kubernetes/pkg/api" +) + +func TestIsMasterNode(t *testing.T) { + testCases := []struct { + input string + result bool + }{ + {"foo-master", true}, + {"foo-master-", false}, + {"foo-master-a", false}, + {"foo-master-ab", false}, + {"foo-master-abc", true}, + {"foo-master-abdc", false}, + {"foo-bar", false}, + } + + for _, tc := range testCases { + node := api.Node{ObjectMeta: api.ObjectMeta{Name: tc.input}} + res := IsMasterNode(&node) + if res != tc.result { + t.Errorf("case \"%s\": expected %t, got %t", tc.input, tc.result, res) + } + } +}