diff --git a/docs/man/man1/kubectl-cluster-info-dump.1 b/docs/man/man1/kubectl-cluster-info-dump.1 new file mode 100644 index 0000000000..208b672aa8 --- /dev/null +++ b/docs/man/man1/kubectl-cluster-info-dump.1 @@ -0,0 +1,141 @@ +.TH "KUBERNETES" "1" " kubernetes User Manuals" "Eric Paris" "Jan 2015" "" + + +.SH NAME +.PP +kubectl cluster\-info dump \- Dump lots of relevant info for debugging and diagnosis. + + +.SH SYNOPSIS +.PP +\fBkubectl cluster\-info dump\fP [OPTIONS] + + +.SH DESCRIPTION +.PP +Dumps cluster info out suitable for debugging and diagnosing cluster problems. By default, dumps everything to +stdout. You can optionally specify a directory with \-\-output\-directory. If you specify a directory, kubernetes will +build a set of files in that directory. By default only dumps things in the 'kube\-system' namespace, but you can +switch to a different namespace with the \-\-namespaces flag, or specify \-\-all\-namespaces to dump all namespaces. + + +.SH OPTIONS +.PP +\fB\-\-all\-namespaces\fP=false + If true, dump all namespaces. If true, \-\-namespaces is ignored. + +.PP +\fB\-\-namespaces\fP=[] + A comma separated list of namespaces to dump. + +.PP +\fB\-\-output\-directory\fP="" + Where to output the files. If empty or '\-' uses stdout, otherwise creates a directory hierarchy in that directory + + +.SH OPTIONS INHERITED FROM PARENT COMMANDS +.PP +\fB\-\-alsologtostderr\fP=false + log to standard error as well as files + +.PP +\fB\-\-api\-version\fP="" + DEPRECATED: The API version to use when talking to the server + +.PP +\fB\-\-as\fP="" + Username to impersonate for the operation. + +.PP +\fB\-\-certificate\-authority\fP="" + Path to a cert. file for the certificate authority. + +.PP +\fB\-\-client\-certificate\fP="" + Path to a client certificate file for TLS. + +.PP +\fB\-\-client\-key\fP="" + Path to a client key file for TLS. + +.PP +\fB\-\-cluster\fP="" + The name of the kubeconfig cluster to use + +.PP +\fB\-\-context\fP="" + The name of the kubeconfig context to use + +.PP +\fB\-\-insecure\-skip\-tls\-verify\fP=false + If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure. + +.PP +\fB\-\-kubeconfig\fP="" + Path to the kubeconfig file to use for CLI requests. + +.PP +\fB\-\-log\-backtrace\-at\fP=:0 + when logging hits line file:N, emit a stack trace + +.PP +\fB\-\-log\-dir\fP="" + If non\-empty, write log files in this directory + +.PP +\fB\-\-log\-flush\-frequency\fP=5s + Maximum number of seconds between log flushes + +.PP +\fB\-\-logtostderr\fP=true + log to standard error instead of files + +.PP +\fB\-\-match\-server\-version\fP=false + Require server version to match client version + +.PP +\fB\-\-namespace\fP="" + If present, the namespace scope for this CLI request. + +.PP +\fB\-\-password\fP="" + Password for basic authentication to the API server. + +.PP +\fB\-s\fP, \fB\-\-server\fP="" + The address and port of the Kubernetes API server + +.PP +\fB\-\-stderrthreshold\fP=2 + logs at or above this threshold go to stderr + +.PP +\fB\-\-token\fP="" + Bearer token for authentication to the API server. + +.PP +\fB\-\-user\fP="" + The name of the kubeconfig user to use + +.PP +\fB\-\-username\fP="" + Username for basic authentication to the API server. + +.PP +\fB\-\-v\fP=0 + log level for V logs + +.PP +\fB\-\-vmodule\fP= + comma\-separated list of pattern=N settings for file\-filtered logging + + +.SH SEE ALSO +.PP +\fBkubectl\-cluster\-info(1)\fP, + + +.SH HISTORY +.PP +January 2015, Originally compiled by Eric Paris (eparis at redhat dot com) based on the kubernetes source material, but hopefully they have been automatically generated since! diff --git a/docs/user-guide/kubectl/kubectl_cluster-info_dump.md b/docs/user-guide/kubectl/kubectl_cluster-info_dump.md new file mode 100644 index 0000000000..1fa6fbb550 --- /dev/null +++ b/docs/user-guide/kubectl/kubectl_cluster-info_dump.md @@ -0,0 +1,92 @@ + + + + +WARNING +WARNING +WARNING +WARNING +WARNING + +

PLEASE NOTE: This document applies to the HEAD of the source tree

+ +If you are using a released version of Kubernetes, you should +refer to the docs that go with that version. + +Documentation for other releases can be found at +[releases.k8s.io](http://releases.k8s.io). + +-- + + + + + +## kubectl cluster-info dump + +Dump lots of relevant info for debugging and diagnosis. + +### Synopsis + + + +Dumps cluster info out suitable for debugging and diagnosing cluster problems. By default, dumps everything to +stdout. You can optionally specify a directory with --output-directory. If you specify a directory, kubernetes will +build a set of files in that directory. By default only dumps things in the 'kube-system' namespace, but you can +switch to a different namespace with the --namespaces flag, or specify --all-namespaces to dump all namespaces. + + +``` +kubectl cluster-info dump +``` + +### Options + +``` + --all-namespaces[=false]: If true, dump all namespaces. If true, --namespaces is ignored. + --namespaces=[]: A comma separated list of namespaces to dump. + --output-directory="": Where to output the files. If empty or '-' uses stdout, otherwise creates a directory hierarchy in that directory +``` + +### Options inherited from parent commands + +``` + --alsologtostderr[=false]: log to standard error as well as files + --as="": Username to impersonate for the operation. + --certificate-authority="": Path to a cert. file for the certificate authority. + --client-certificate="": Path to a client certificate file for TLS. + --client-key="": Path to a client key file for TLS. + --cluster="": The name of the kubeconfig cluster to use + --context="": The name of the kubeconfig context to use + --insecure-skip-tls-verify[=false]: If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure. + --kubeconfig="": Path to the kubeconfig file to use for CLI requests. + --log-backtrace-at=:0: when logging hits line file:N, emit a stack trace + --log-dir="": If non-empty, write log files in this directory + --log-flush-frequency=5s: Maximum number of seconds between log flushes + --logtostderr[=true]: log to standard error instead of files + --match-server-version[=false]: Require server version to match client version + --namespace="": If present, the namespace scope for this CLI request. + --password="": Password for basic authentication to the API server. + -s, --server="": The address and port of the Kubernetes API server + --stderrthreshold=2: logs at or above this threshold go to stderr + --token="": Bearer token for authentication to the API server. + --user="": The name of the kubeconfig user to use + --username="": Username for basic authentication to the API server. + --v=0: log level for V logs + --vmodule=: comma-separated list of pattern=N settings for file-filtered logging +``` + +### SEE ALSO + +* [kubectl cluster-info](kubectl_cluster-info.md) - Display cluster info + +###### Auto generated by spf13/cobra on 27-Apr-2016 + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/user-guide/kubectl/kubectl_cluster-info_dump.md?pixel)]() + diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index 6befaeb17d..231dc0c01d 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -306,6 +306,7 @@ os-distro out-version outofdisk-transition-frequency output-base +output-directory output-package output-print-type output-version diff --git a/pkg/kubectl/cmd/clusterinfo_dump.go b/pkg/kubectl/cmd/clusterinfo_dump.go index 36e543a61c..abc6411a63 100644 --- a/pkg/kubectl/cmd/clusterinfo_dump.go +++ b/pkg/kubectl/cmd/clusterinfo_dump.go @@ -67,10 +67,10 @@ switch to a different namespace with the --namespaces flag, or specify --all-nam kubectl cluster-info dump --namespaces default,kube-system --output-directory=/tmp` ) -func getWriter(cmd *cobra.Command, out io.Writer, filename string) io.Writer { +func getWriter(cmd *cobra.Command, defaultWriter io.Writer, filename string) io.Writer { dir := cmdutil.GetFlagString(cmd, "output-directory") if len(dir) == 0 || dir == "-" { - return out + return defaultWriter } fullFile := path.Join(dir, filename) parent := path.Dir(fullFile) diff --git a/pkg/kubectl/cmd/clusterinfo_dump_test.go b/pkg/kubectl/cmd/clusterinfo_dump_test.go new file mode 100644 index 0000000000..9467e5f96e --- /dev/null +++ b/pkg/kubectl/cmd/clusterinfo_dump_test.go @@ -0,0 +1,68 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +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 cmd + +import ( + "bytes" + "io/ioutil" + "os" + "path" + "testing" +) + +func TestGetWriterNoOp(t *testing.T) { + tests := []string{"", "-"} + for _, test := range tests { + out := &bytes.Buffer{} + f, _, _ := NewAPIFactory() + cmd := NewCmdClusterInfoDump(f, os.Stdout) + cmd.Flag("output-directory").Value.Set(test) + writer := getWriter(cmd, out, "/some/file/that/should/be/ignored") + if writer != out { + t.Errorf("expected: %v, saw: %v", out, writer) + } + } +} + +func TestGetWriterFile(t *testing.T) { + file := "output.json" + dir, err := ioutil.TempDir(os.TempDir(), "out") + if err != nil { + t.Errorf("unexpected error: %v", err) + } + fullPath := path.Join(dir, file) + defer os.RemoveAll(dir) + + out := &bytes.Buffer{} + f, _, _ := NewAPIFactory() + cmd := NewCmdClusterInfoDump(f, os.Stdout) + cmd.Flag("output-directory").Value.Set(dir) + writer := getWriter(cmd, out, file) + if writer == out { + t.Errorf("expected: %v, saw: %v", out, writer) + } + output := "some data here" + writer.Write([]byte(output)) + + data, err := ioutil.ReadFile(fullPath) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if string(data) != output { + t.Errorf("expected: %v, saw: %v", output, data) + } +}