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`))
)
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 == "-" {
return defaultWriter
}
fullFile := path.Join(dir, filename)
fullFile := path.Join(dir, filename) + fileExtension
parent := path.Dir(fullFile)
cmdutil.CheckErr(os.MkdirAll(parent, 0755))
file, err := os.Create(path.Join(dir, filename))
file, err := os.Create(fullFile)
cmdutil.CheckErr(err)
return file
}
@ -171,7 +171,17 @@ func (o *ClusterInfoDumpOptions) Run() error {
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
}
@ -199,7 +209,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -207,7 +217,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -215,7 +225,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -223,7 +233,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -231,7 +241,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -239,7 +249,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
if err != nil {
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
}
@ -248,7 +258,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
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
}
@ -277,7 +287,7 @@ func (o *ClusterInfoDumpOptions) Run() error {
for ix := range pods.Items {
pod := &pods.Items[ix]
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 {
printContainer(writer, containers[i], pod)

View File

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