diff options
-rw-r--r-- | cmd/podman/cliconfig/config.go | 3 | ||||
-rw-r--r-- | cmd/podman/generate_kube.go | 19 | ||||
-rw-r--r-- | completions/bash/podman | 4 | ||||
-rw-r--r-- | docs/podman-generate-kube.1.md | 4 | ||||
-rw-r--r-- | test/e2e/generate_kube_test.go | 8 |
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)) |