mirror of
https://github.com/containers/podman.git
synced 2025-09-27 08:43:52 +08:00
Merge pull request #3293 from mheon/add_test_for_play_kube
Add a test for 'podman play kube' to prevent regression
This commit is contained in:
@ -145,7 +145,8 @@ type ExportValues struct {
|
|||||||
}
|
}
|
||||||
type GenerateKubeValues struct {
|
type GenerateKubeValues struct {
|
||||||
PodmanCommand
|
PodmanCommand
|
||||||
Service bool
|
Service bool
|
||||||
|
Filename string
|
||||||
}
|
}
|
||||||
|
|
||||||
type GenerateSystemdValues struct {
|
type GenerateSystemdValues struct {
|
||||||
|
@ -2,6 +2,9 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||||
"github.com/containers/libpod/pkg/adapter"
|
"github.com/containers/libpod/pkg/adapter"
|
||||||
podmanVersion "github.com/containers/libpod/version"
|
podmanVersion "github.com/containers/libpod/version"
|
||||||
@ -37,6 +40,7 @@ func init() {
|
|||||||
containerKubeCommand.SetUsageTemplate(UsageTemplate())
|
containerKubeCommand.SetUsageTemplate(UsageTemplate())
|
||||||
flags := containerKubeCommand.Flags()
|
flags := containerKubeCommand.Flags()
|
||||||
flags.BoolVarP(&containerKubeCommand.Service, "service", "s", false, "Generate YAML for kubernetes service object")
|
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 {
|
func generateKubeYAMLCmd(c *cliconfig.GenerateKubeValues) error {
|
||||||
@ -88,8 +92,19 @@ func generateKubeYAMLCmd(c *cliconfig.GenerateKubeValues) error {
|
|||||||
output = append(output, []byte("---\n")...)
|
output = append(output, []byte("---\n")...)
|
||||||
output = append(output, marshalledService...)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -2467,7 +2467,9 @@ _podman_healthcheck_run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_podman_generate_kube() {
|
_podman_generate_kube() {
|
||||||
local options_with_args=""
|
local options_with_args="
|
||||||
|
--filename -f
|
||||||
|
"
|
||||||
|
|
||||||
local boolean_options="
|
local boolean_options="
|
||||||
-h
|
-h
|
||||||
|
@ -14,6 +14,10 @@ Note that the generated Kubernetes YAML file can be used to re-run the deploymen
|
|||||||
|
|
||||||
## OPTIONS:
|
## 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**
|
**--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
|
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
|
||||||
|
@ -4,6 +4,7 @@ package integration
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
. "github.com/containers/libpod/test/utils"
|
. "github.com/containers/libpod/test/utils"
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
@ -104,4 +105,43 @@ var _ = Describe("Podman generate kube", func() {
|
|||||||
_, err := yaml.Marshal(kube.OutputToString())
|
_, err := yaml.Marshal(kube.OutputToString())
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman generate and reimport kube on pod", func() {
|
||||||
|
podName := "toppod"
|
||||||
|
_, rc, _ := podmanTest.CreatePod(podName)
|
||||||
|
Expect(rc).To(Equal(0))
|
||||||
|
|
||||||
|
session := podmanTest.Podman([]string{"create", "--pod", podName, "--name", "test1", ALPINE, "top"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
session2 := podmanTest.Podman([]string{"create", "--pod", podName, "--name", "test2", ALPINE, "top"})
|
||||||
|
session2.WaitWithDefaultTimeout()
|
||||||
|
Expect(session2.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
outputFile := filepath.Join(podmanTest.RunRoot, "pod.yaml")
|
||||||
|
kube := podmanTest.Podman([]string{"generate", "kube", "-f", outputFile, podName})
|
||||||
|
kube.WaitWithDefaultTimeout()
|
||||||
|
Expect(kube.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
session3 := podmanTest.Podman([]string{"pod", "rm", "-af"})
|
||||||
|
session3.WaitWithDefaultTimeout()
|
||||||
|
Expect(session3.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
session4 := podmanTest.Podman([]string{"play", "kube", outputFile})
|
||||||
|
session4.WaitWithDefaultTimeout()
|
||||||
|
Expect(session4.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
session5 := podmanTest.Podman([]string{"pod", "ps"})
|
||||||
|
session5.WaitWithDefaultTimeout()
|
||||||
|
Expect(session5.ExitCode()).To(Equal(0))
|
||||||
|
Expect(session5.OutputToString()).To(ContainSubstring(podName))
|
||||||
|
|
||||||
|
session6 := podmanTest.Podman([]string{"ps", "-a"})
|
||||||
|
session6.WaitWithDefaultTimeout()
|
||||||
|
Expect(session6.ExitCode()).To(Equal(0))
|
||||||
|
psOut := session6.OutputToString()
|
||||||
|
Expect(psOut).To(ContainSubstring("test1"))
|
||||||
|
Expect(psOut).To(ContainSubstring("test2"))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user