From ee2f9c95e7367602c0e9b34ff7789838f3f672fc Mon Sep 17 00:00:00 2001 From: juanvallejo Date: Tue, 17 Oct 2017 13:24:50 -0400 Subject: [PATCH 1/2] update resource selector - kubectl drain --- pkg/kubectl/cmd/drain.go | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/pkg/kubectl/cmd/drain.go b/pkg/kubectl/cmd/drain.go index 7d0a9b4ba08..9a678e771c0 100644 --- a/pkg/kubectl/cmd/drain.go +++ b/pkg/kubectl/cmd/drain.go @@ -237,20 +237,18 @@ func (o *DrainOptions) SetupDrain(cmd *cobra.Command, args []string) error { return err } - nameArgs := []string{"nodes"} - if len(args) > 0 { - nameArgs = append(nameArgs, args[0]) - if strings.Contains(args[0], "/") { - nameArgs = []string{args[0]} - } + builder := o.Factory.NewBuilder(). + NamespaceParam(cmdNamespace).DefaultNamespace(). + ResourceNames("nodes", args...). + SingleResourceType(). + Flatten() + + if len(o.Selector) > 0 { + builder = builder.SelectorParam(o.Selector). + ResourceTypes("nodes") } - r := o.Factory.NewBuilder(). - NamespaceParam(cmdNamespace).DefaultNamespace(). - SelectorParam(o.Selector). - ResourceTypeOrNameArgs(true, nameArgs...). - Flatten(). - Do() + r := builder.Do() if err = r.Err(); err != nil { return err @@ -260,6 +258,10 @@ func (o *DrainOptions) SetupDrain(cmd *cobra.Command, args []string) error { if err != nil { return err } + if info.Mapping.Resource != "nodes" { + return fmt.Errorf("error: expected resource of type node, got %q", info.Mapping.Resource) + } + o.nodeInfos = append(o.nodeInfos, info) return nil }) From bb86297edf9df03455d3017ea6601fd8167d0560 Mon Sep 17 00:00:00 2001 From: juanvallejo Date: Wed, 18 Oct 2017 11:14:32 -0400 Subject: [PATCH 2/2] minor test fixes; update test-cmd tests to match updated resource selector behavior --- hack/make-rules/test-cmd-util.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hack/make-rules/test-cmd-util.sh b/hack/make-rules/test-cmd-util.sh index 685cffa0907..c3e1c6013d3 100755 --- a/hack/make-rules/test-cmd-util.sh +++ b/hack/make-rules/test-cmd-util.sh @@ -916,7 +916,7 @@ __EOF__ } # runs specific kubectl create tests -run_create_tests() { +run_create_secret_tests() { set -o nounset set -o errexit @@ -4289,11 +4289,17 @@ run_cluster_management_tests() { response=$(! kubectl cordon 2>&1) kube::test::if_has_string "${response}" 'error\: USAGE\: cordon NODE' - ### kubectl cordon selects all nodes with an empty --selector= + ### kubectl cordon selects no nodes with an empty --selector= # Pre-condition: node "127.0.0.1" is uncordoned kubectl uncordon "127.0.0.1" - response=$(kubectl cordon --selector=) + response=$(! kubectl cordon --selector= 2>&1) + kube::test::if_has_string "${response}" 'must provide one or more resources' + # test=label matches our node + response=$(kubectl cordon --selector test=label) kube::test::if_has_string "${response}" 'node "127.0.0.1" cordoned' + # invalid=label does not match any nodes + response=$(kubectl cordon --selector invalid=label) + kube::test::if_has_not_string "${response}" 'cordoned' # Post-condition: node "127.0.0.1" is cordoned kube::test::get_object_assert "nodes 127.0.0.1" "{{.spec.unschedulable}}" 'true' @@ -4599,7 +4605,7 @@ runTests() { # Create # ###################### if kube::test::if_supports_resource "${secrets}" ; then - record_command run_create_tests + record_command run_create_secret_tests fi ##################