From f909b745ec82d6c010e27218bda9524bb1724060 Mon Sep 17 00:00:00 2001
From: Matthew Heon <matthew.heon@pm.me>
Date: Tue, 11 Jun 2019 10:28:49 -0400
Subject: Add --filename option to generate kube

This allows writing output directly to a file, instead of STDOUT.
Makes things easier for some scripting tasks. Like the unit tests
for 'play kube'.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
---
 cmd/podman/cliconfig/config.go |  3 ++-
 cmd/podman/generate_kube.go    | 19 +++++++++++++++++--
 2 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'cmd/podman')

diff --git a/cmd/podman/cliconfig/config.go b/cmd/podman/cliconfig/config.go
index b8b1648b8..545166d05 100644
--- a/cmd/podman/cliconfig/config.go
+++ b/cmd/podman/cliconfig/config.go
@@ -145,7 +145,8 @@ type ExportValues struct {
 }
 type GenerateKubeValues struct {
 	PodmanCommand
-	Service bool
+	Service  bool
+	Filename string
 }
 
 type GenerateSystemdValues struct {
diff --git a/cmd/podman/generate_kube.go b/cmd/podman/generate_kube.go
index 318dd0771..3969e3132 100644
--- a/cmd/podman/generate_kube.go
+++ b/cmd/podman/generate_kube.go
@@ -2,6 +2,9 @@ package main
 
 import (
 	"fmt"
+	"io/ioutil"
+	"os"
+
 	"github.com/containers/libpod/cmd/podman/cliconfig"
 	"github.com/containers/libpod/pkg/adapter"
 	podmanVersion "github.com/containers/libpod/version"
@@ -37,6 +40,7 @@ func init() {
 	containerKubeCommand.SetUsageTemplate(UsageTemplate())
 	flags := containerKubeCommand.Flags()
 	flags.BoolVarP(&containerKubeCommand.Service, "service", "s", false, "Generate YAML for kubernetes service object")
+	flags.StringVarP(&containerKubeCommand.Filename, "filename", "f", "", "Filename to output to")
 }
 
 func generateKubeYAMLCmd(c *cliconfig.GenerateKubeValues) error {
@@ -88,8 +92,19 @@ func generateKubeYAMLCmd(c *cliconfig.GenerateKubeValues) error {
 		output = append(output, []byte("---\n")...)
 		output = append(output, marshalledService...)
 	}
-	// Output the v1.Pod with the v1.Container
-	fmt.Println(string(output))
+
+	if c.Filename != "" {
+		if _, err := os.Stat(c.Filename); err == nil {
+			return errors.Errorf("cannot write to %q - file exists", c.Filename)
+		}
+
+		if err := ioutil.WriteFile(c.Filename, output, 0644); err != nil {
+			return err
+		}
+	} else {
+		// Output the v1.Pod with the v1.Container
+		fmt.Println(string(output))
+	}
 
 	return nil
 }
-- 
cgit v1.2.3-54-g00ecf