From 4fcb4b7f8d33a98424b9b90e85d752474245e069 Mon Sep 17 00:00:00 2001 From: kargakis Date: Mon, 20 Jul 2015 10:33:50 +0200 Subject: [PATCH] Handle aliases in comma-separated args --- pkg/kubectl/resource/builder.go | 28 +++++++++------------------- pkg/kubectl/resource/builder_test.go | 28 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/pkg/kubectl/resource/builder.go b/pkg/kubectl/resource/builder.go index 9895ed1494e..e83a11ab6fc 100644 --- a/pkg/kubectl/resource/builder.go +++ b/pkg/kubectl/resource/builder.go @@ -256,7 +256,6 @@ func (b *Builder) SelectAllParam(selectAll bool) *Builder { // When two or more arguments are received, they must be a single type and resource name(s). // The allowEmptySelector permits to select all the resources (via Everything func). func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string) *Builder { - args = b.replaceAliases(args) if ok, err := hasCombinedTypeArgs(args); ok { if err != nil { b.errs = append(b.errs, err) @@ -277,6 +276,10 @@ func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string } return b } + if len(args) > 0 { + // Try replacing aliases only in types + args[0] = b.replaceAliases(args[0]) + } switch { case len(args) > 2: b.names = append(b.names, args[1:]...) @@ -296,16 +299,17 @@ func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string return b } -func (b *Builder) replaceAliases(args []string) []string { +// replaceAliases accepts an argument and tries to expand any existing +// aliases found in it +func (b *Builder) replaceAliases(input string) string { replaced := []string{} - for _, arg := range args { + for _, arg := range strings.Split(input, ",") { if aliases, ok := b.mapper.AliasesForResource(arg); ok { arg = strings.Join(aliases, ",") } replaced = append(replaced, arg) } - - return replaced + return strings.Join(replaced, ",") } func hasCombinedTypeArgs(args []string) (bool, error) { @@ -325,20 +329,6 @@ func hasCombinedTypeArgs(args []string) (bool, error) { } } -// ResourceTypeAndNameArgs expects two arguments, a resource type, and a resource name. The resource -// matching that type and and name will be retrieved from the server. -func (b *Builder) ResourceTypeAndNameArgs(args ...string) *Builder { - switch len(args) { - case 2: - b.names = append(b.names, args[1]) - b.ResourceTypes(SplitResourceArgument(args[0])...) - case 0: - default: - b.errs = append(b.errs, fmt.Errorf("when passing arguments, must be resource and name")) - } - return b -} - // Flatten will convert any objects with a field named "Items" that is an array of runtime.Object // compatible types into individual entries and give them their own items. The original object // is not passed to any visitors. diff --git a/pkg/kubectl/resource/builder_test.go b/pkg/kubectl/resource/builder_test.go index df05bf9afd7..5fa39c56cd4 100644 --- a/pkg/kubectl/resource/builder_test.go +++ b/pkg/kubectl/resource/builder_test.go @@ -923,32 +923,32 @@ func TestReceiveMultipleErrors(t *testing.T) { func TestReplaceAliases(t *testing.T) { tests := []struct { name string - args []string - expected []string + arg string + expected string }{ { name: "no-replacement", - args: []string{"service", "pods", "rc"}, - expected: []string{"service", "pods", "rc"}, + arg: "service", + expected: "service", }, { name: "all-replacement", - args: []string{"all"}, - expected: []string{"rc,svc,pods,pvc"}, + arg: "all", + expected: "rc,svc,pods,pvc", + }, + { + name: "alias-in-comma-separated-arg", + arg: "all,secrets", + expected: "rc,svc,pods,pvc,secrets", }, } b := NewBuilder(latest.RESTMapper, api.Scheme, fakeClient()) for _, test := range tests { - replaced := b.replaceAliases(test.args) - if len(replaced) != len(test.expected) { - t.Errorf("%s: unexpected args length: expected %d, got %d", test.name, len(test.expected), len(replaced)) - } - for i, arg := range test.expected { - if arg != replaced[i] { - t.Errorf("%s: unexpected argument: expected %s, got %s", test.name, arg, replaced[i]) - } + replaced := b.replaceAliases(test.arg) + if replaced != test.expected { + t.Errorf("%s: unexpected argument: expected %s, got %s", test.name, test.expected, replaced) } } }