diff --git a/pkg/kubectl/cmd/auth/cani.go b/pkg/kubectl/cmd/auth/cani.go index 7a29e369c0c..5538496bf9f 100644 --- a/pkg/kubectl/cmd/auth/cani.go +++ b/pkg/kubectl/cmd/auth/cani.go @@ -105,12 +105,16 @@ func NewCmdCanI(f cmdutil.Factory, out, err io.Writer) *cobra.Command { } func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error { + if o.Quiet { + o.Out = ioutil.Discard + } + switch len(args) { case 2: resourceTokens := strings.SplitN(args[1], "/", 2) restMapper, _ := f.Object() o.Verb = args[0] - o.Resource = resourceFor(restMapper, resourceTokens[0]) + o.Resource = o.resourceFor(restMapper, resourceTokens[0]) if len(resourceTokens) > 1 { o.ResourceName = resourceTokens[1] } @@ -133,10 +137,6 @@ func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error { } } - if o.Quiet { - o.Out = ioutil.Discard - } - return nil } @@ -179,7 +179,7 @@ func (o *CanIOptions) RunAccessCheck() (bool, error) { return response.Status.Allowed, nil } -func resourceFor(mapper meta.RESTMapper, resourceArg string) schema.GroupVersionResource { +func (o *CanIOptions) resourceFor(mapper meta.RESTMapper, resourceArg string) schema.GroupVersionResource { fullySpecifiedGVR, groupResource := schema.ParseResourceArg(strings.ToLower(resourceArg)) gvr := schema.GroupVersionResource{} if fullySpecifiedGVR != nil { @@ -189,6 +189,11 @@ func resourceFor(mapper meta.RESTMapper, resourceArg string) schema.GroupVersion var err error gvr, err = mapper.ResourceFor(groupResource.WithVersion("")) if err != nil { + if len(groupResource.Group) == 0 { + fmt.Fprintf(o.Err, "Warning: the server doesn't have a resource type '%s'\n", groupResource.Resource) + } else { + fmt.Fprintf(o.Err, "Warning: the server doesn't have a resource type '%s' in group '%s'\n", groupResource.Resource, groupResource.Group) + } return schema.GroupVersionResource{Resource: resourceArg} } }