summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-06-11 10:28:49 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-06-11 11:26:46 -0400
commitf909b745ec82d6c010e27218bda9524bb1724060 (patch)
tree9095186eb1b8c790a953dfffea9ee6de27185ecd
parent53435d4d4726250f38054b934246ec4d8b1f7581 (diff)
downloadpodman-f909b745ec82d6c010e27218bda9524bb1724060.tar.gz
podman-f909b745ec82d6c010e27218bda9524bb1724060.tar.bz2
podman-f909b745ec82d6c010e27218bda9524bb1724060.zip
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>
-rw-r--r--cmd/podman/cliconfig/config.go3
-rw-r--r--cmd/podman/generate_kube.go19
-rw-r--r--completions/bash/podman4
-rw-r--r--docs/podman-generate-kube.1.md4
-rw-r--r--test/e2e/generate_kube_test.go8
5 files changed, 28 insertions, 10 deletions
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
}
diff --git a/completions/bash/podman b/completions/bash/podman
index efb8a6a9b..b049f309a 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -2467,7 +2467,9 @@ _podman_healthcheck_run() {
}
_podman_generate_kube() {
- local options_with_args=""
+ local options_with_args="
+ --filename -f
+ "
local boolean_options="
-h
diff --git a/docs/podman-generate-kube.1.md b/docs/podman-generate-kube.1.md
index dd9068ef1..88d8e9627 100644
--- a/docs/podman-generate-kube.1.md
+++ b/docs/podman-generate-kube.1.md
@@ -14,6 +14,10 @@ Note that the generated Kubernetes YAML file can be used to re-run the deploymen
## OPTIONS:
+**--filename**, **-f**=**filename**
+
+Output to the given file, instead of STDOUT. If the file already exists, `generate kube` will refuse to replace it and return an error.
+
**--service**, **-s**
Generate a Kubernetes service object in addition to the Pods. Used to generate a Service specification for the corresponding Pod ouput. In particular, if the object has portmap bindings, the service specification will include a NodePort declaration to expose the service. A
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index d4eba31e8..40cc534c2 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -3,7 +3,6 @@
package integration
import (
- "io/ioutil"
"os"
"path/filepath"
@@ -120,14 +119,11 @@ var _ = Describe("Podman generate kube", func() {
session2.WaitWithDefaultTimeout()
Expect(session2.ExitCode()).To(Equal(0))
- kube := podmanTest.Podman([]string{"generate", "kube", podName})
+ outputFile := filepath.Join(podmanTest.RunRoot, "pod.yaml")
+ kube := podmanTest.Podman([]string{"generate", "kube", "-f", outputFile, podName})
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))
- outputFile := filepath.Join(podmanTest.RunRoot, "pod.yaml")
- err := ioutil.WriteFile(outputFile, []byte(kube.OutputToString()), 0644)
- Expect(err).To(BeNil())
-
session3 := podmanTest.Podman([]string{"pod", "rm", "-af"})
session3.WaitWithDefaultTimeout()
Expect(session3.ExitCode()).To(Equal(0))