Merge pull request #82070 from olivierlemasle/fix82011

kubectl cluster-info dump: use file extension according to output format
This commit is contained in:
Kubernetes Prow Robot 2020-02-13 08:40:35 -08:00 committed by GitHub
commit a70e574955
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 16 deletions

View File

@ -113,15 +113,15 @@ var (
kubectl cluster-info dump --namespaces default,kube-system --output-directory=/path/to/cluster-state`)) kubectl cluster-info dump --namespaces default,kube-system --output-directory=/path/to/cluster-state`))
) )
func setupOutputWriter(dir string, defaultWriter io.Writer, filename string) io.Writer { func setupOutputWriter(dir string, defaultWriter io.Writer, filename string, fileExtension string) io.Writer {
if len(dir) == 0 || dir == "-" { if len(dir) == 0 || dir == "-" {
return defaultWriter return defaultWriter
} }
fullFile := path.Join(dir, filename) fullFile := path.Join(dir, filename) + fileExtension
parent := path.Dir(fullFile) parent := path.Dir(fullFile)
cmdutil.CheckErr(os.MkdirAll(parent, 0755)) cmdutil.CheckErr(os.MkdirAll(parent, 0755))
file, err := os.Create(path.Join(dir, filename)) file, err := os.Create(fullFile)
cmdutil.CheckErr(err) cmdutil.CheckErr(err)
return file return file
} }
@ -171,7 +171,17 @@ func (o *ClusterInfoDumpOptions) Run() error {
return err return err
} }
if err := o.PrintObj(nodes, setupOutputWriter(o.OutputDir, o.Out, "nodes.json")); err != nil { fileExtension := ".txt"
if o.PrintFlags.OutputFormat != nil {
switch *o.PrintFlags.OutputFormat {
case "json":
fileExtension = ".json"
case "yaml":
fileExtension = ".yaml"
}
}
if err := o.PrintObj(nodes, setupOutputWriter(o.OutputDir, o.Out, "nodes", fileExtension)); err != nil {
return err return err
} }
@ -199,7 +209,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(events, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "events.json"))); err != nil { if err := o.PrintObj(events, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "events"), fileExtension)); err != nil {
return err return err
} }
@ -207,7 +217,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(rcs, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "replication-controllers.json"))); err != nil { if err := o.PrintObj(rcs, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "replication-controllers"), fileExtension)); err != nil {
return err return err
} }
@ -215,7 +225,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(svcs, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "services.json"))); err != nil { if err := o.PrintObj(svcs, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "services"), fileExtension)); err != nil {
return err return err
} }
@ -223,7 +233,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(sets, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "daemonsets.json"))); err != nil { if err := o.PrintObj(sets, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "daemonsets"), fileExtension)); err != nil {
return err return err
} }
@ -231,7 +241,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(deps, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "deployments.json"))); err != nil { if err := o.PrintObj(deps, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "deployments"), fileExtension)); err != nil {
return err return err
} }
@ -239,7 +249,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil { if err != nil {
return err return err
} }
if err := o.PrintObj(rps, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "replicasets.json"))); err != nil { if err := o.PrintObj(rps, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "replicasets"), fileExtension)); err != nil {
return err return err
} }
@ -248,7 +258,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
return err return err
} }
if err := o.PrintObj(pods, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "pods.json"))); err != nil { if err := o.PrintObj(pods, setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, "pods"), fileExtension)); err != nil {
return err return err
} }
@ -277,7 +287,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
for ix := range pods.Items { for ix := range pods.Items {
pod := &pods.Items[ix] pod := &pods.Items[ix]
containers := pod.Spec.Containers containers := pod.Spec.Containers
writer := setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, pod.Name, "logs.txt")) writer := setupOutputWriter(o.OutputDir, o.Out, path.Join(namespace, pod.Name, "logs"), ".txt")
for i := range containers { for i := range containers {
printContainer(writer, containers[i], pod) printContainer(writer, containers[i], pod)

View File

@ -33,7 +33,7 @@ func TestSetupOutputWriterNoOp(t *testing.T) {
f := cmdtesting.NewTestFactory() f := cmdtesting.NewTestFactory()
defer f.Cleanup() defer f.Cleanup()
writer := setupOutputWriter(test, buf, "/some/file/that/should/be/ignored") writer := setupOutputWriter(test, buf, "/some/file/that/should/be/ignored", "")
if writer != buf { if writer != buf {
t.Errorf("expected: %v, saw: %v", buf, writer) t.Errorf("expected: %v, saw: %v", buf, writer)
} }
@ -41,19 +41,20 @@ func TestSetupOutputWriterNoOp(t *testing.T) {
} }
func TestSetupOutputWriterFile(t *testing.T) { func TestSetupOutputWriterFile(t *testing.T) {
file := "output.json" file := "output"
extension := ".json"
dir, err := ioutil.TempDir(os.TempDir(), "out") dir, err := ioutil.TempDir(os.TempDir(), "out")
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
} }
fullPath := path.Join(dir, file) fullPath := path.Join(dir, file) + extension
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
_, _, buf, _ := genericclioptions.NewTestIOStreams() _, _, buf, _ := genericclioptions.NewTestIOStreams()
f := cmdtesting.NewTestFactory() f := cmdtesting.NewTestFactory()
defer f.Cleanup() defer f.Cleanup()
writer := setupOutputWriter(dir, buf, file) writer := setupOutputWriter(dir, buf, file, extension)
if writer == buf { if writer == buf {
t.Errorf("expected: %v, saw: %v", buf, writer) t.Errorf("expected: %v, saw: %v", buf, writer)
} }