Skip to content

Commit

Permalink
Merge pull request #82070 from olivierlemasle/fix82011
Browse files Browse the repository at this point in the history
kubectl cluster-info dump: use file extension according to output format
  • Loading branch information
k8s-ci-robot committed Feb 13, 2020
2 parents d883045 + d6fcc22 commit a70e574
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 16 deletions.
34 changes: 22 additions & 12 deletions staging/src/k8s.io/kubectl/pkg/cmd/clusterinfo/clusterinfo_dump.go
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -199,47 +209,47 @@ 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
}

rcs, err := o.CoreClient.ReplicationControllers(namespace).List(context.TODO(), metav1.ListOptions{})
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
}

svcs, err := o.CoreClient.Services(namespace).List(context.TODO(), metav1.ListOptions{})
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
}

sets, err := o.AppsClient.DaemonSets(namespace).List(context.TODO(), metav1.ListOptions{})
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
}

deps, err := o.AppsClient.Deployments(namespace).List(context.TODO(), metav1.ListOptions{})
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
}

rps, err := o.AppsClient.ReplicaSets(namespace).List(context.TODO(), metav1.ListOptions{})
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
}

Expand All @@ -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
}

Expand Down Expand Up @@ -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)
Expand Down
Expand Up @@ -33,27 +33,28 @@ 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)
}
}
}

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)
}
Expand Down

0 comments on commit a70e574

Please sign in to comment.