Skip to content

Commit

Permalink
Add a better help message for kubectl describe
Browse files Browse the repository at this point in the history
When resource type isn't given in the command, print the possible
resource types. Also added the resource type description in help
strings.
  • Loading branch information
hurf committed Jul 14, 2015
1 parent c616182 commit 6dd8a1d
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 24 deletions.
6 changes: 6 additions & 0 deletions docs/man/man1/kubectl-describe.1
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ $ kubectl describe RESOURCE NAME\_PREFIX
will first check for an exact match on RESOURCE and NAME\_PREFIX. If no such resource
exists, it will output details for every resource that has a name prefixed with NAME\_PREFIX

.PP
Possible resources include pods (po), replicationcontrollers (rc), services
(svc), nodes (no), events (ev), componentstatuses (cs), limitRanges (limits),
persistentVolumes (pv), persistentVolumeClaims (pvc), resourceQuotas (quota)
or secrets.


.SH OPTIONS
.PP
Expand Down
7 changes: 6 additions & 1 deletion docs/user-guide/kubectl/kubectl_describe.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ $ kubectl describe RESOURCE NAME_PREFIX
will first check for an exact match on RESOURCE and NAME_PREFIX. If no such resource
exists, it will output details for every resource that has a name prefixed with NAME_PREFIX

Possible resources include pods (po), replicationcontrollers (rc), services
(svc), nodes (no), events (ev), componentstatuses (cs), limitRanges (limits),
persistentVolumes (pv), persistentVolumeClaims (pvc), resourceQuotas (quota)
or secrets.

```
kubectl describe (RESOURCE NAME_PREFIX | RESOURCE/NAME)
```
Expand Down Expand Up @@ -89,7 +94,7 @@ $ kubectl describe pods frontend
### SEE ALSO
* [kubectl](kubectl.md) - kubectl controls the Kubernetes cluster manager

###### Auto generated by spf13/cobra at 2015-07-14 00:11:42.955631296 +0000 UTC
###### Auto generated by spf13/cobra at 2015-07-14 08:21:33.374469932 +0000 UTC


<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
Expand Down
12 changes: 12 additions & 0 deletions pkg/kubectl/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,18 @@ __custom_func() {
;;
esac
}
`
valid_resources = `Valid resource types include:
* pods (aka 'po')
* replicationcontrollers (aka 'rc')
* services (aka 'svc')
* nodes (aka 'no')
* events (aka 'ev')
* secrets
* limits
* persistentVolumes (aka 'pv')
* persistentVolumeClaims (aka 'pvc')
* quota
`
)

Expand Down
16 changes: 13 additions & 3 deletions pkg/kubectl/cmd/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (

"github.com/spf13/cobra"

"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
apierrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
Expand All @@ -40,7 +40,12 @@ given resource or group of resources.
$ kubectl describe RESOURCE NAME_PREFIX
will first check for an exact match on RESOURCE and NAME_PREFIX. If no such resource
exists, it will output details for every resource that has a name prefixed with NAME_PREFIX`
exists, it will output details for every resource that has a name prefixed with NAME_PREFIX
Possible resources include pods (po), replicationcontrollers (rc), services
(svc), nodes (no), events (ev), componentstatuses (cs), limitRanges (limits),
persistentVolumes (pv), persistentVolumeClaims (pvc), resourceQuotas (quota)
or secrets.`
describe_example = `// Describe a node
$ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal
Expand Down Expand Up @@ -78,6 +83,11 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
return err
}

if len(args) == 0 {
fmt.Fprint(out, "You must specify the type of resource to describe. ", valid_resources)
return cmdutil.UsageError(cmd, "Required resource not specified.")
}

mapper, typer := f.Object()
r := resource.NewBuilder(mapper, typer, f.ClientMapperForCommand()).
ContinueOnError().
Expand All @@ -101,7 +111,7 @@ func RunDescribe(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
}
infos, err := r.Infos()
if err != nil {
if errors.IsNotFound(err) && len(args) == 2 {
if apierrors.IsNotFound(err) && len(args) == 2 {
return DescribeMatchingResources(mapper, typer, describer, f, cmdNamespace, args[0], args[1], out)
}
return err
Expand Down
22 changes: 2 additions & 20 deletions pkg/kubectl/cmd/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package cmd

import (
"errors"
"fmt"
"io"

Expand Down Expand Up @@ -101,25 +100,8 @@ func RunGet(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string
}

if len(args) == 0 {
fmt.Fprint(out, `
You must specify the type of resource to get. Valid resource types include:
* componentStatuses (aka 'cs')
* endpoints (aka 'ep')
* events (aka 'ev')
* limits
* namespaces
* nodes (aka 'no')
* persistentVolumeClaims (aka 'pvc')
* persistentVolumes (aka 'pv')
* pods (aka 'po')
* podTemplates
* quota
* replicationcontrollers (aka 'rc')
* secrets
* serviceAccounts
* services
`)
return errors.New("Required resource not specified.")
fmt.Fprint(out, "You must specify the type of resource to get. ", valid_resources)
return cmdutil.UsageError(cmd, "Required resource not specified.")
}

// handle watch separately since we cannot watch multiple resource types
Expand Down

0 comments on commit 6dd8a1d

Please sign in to comment.