70 lines
2.6 KiB
Go
70 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
|
"github.com/containers/libpod/cmd/podman/shared"
|
|
"github.com/containers/libpod/pkg/adapter"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
playKubeCommand cliconfig.KubePlayValues
|
|
playKubeDescription = `Command reads in a structured file of Kubernetes YAML.
|
|
|
|
It creates the pod and containers described in the YAML. The containers within the pod are then started and the ID of the new Pod is output.`
|
|
_playKubeCommand = &cobra.Command{
|
|
Use: "kube [flags] KUBEFILE",
|
|
Short: "Play a pod based on Kubernetes YAML",
|
|
Long: playKubeDescription,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
playKubeCommand.InputArgs = args
|
|
playKubeCommand.GlobalFlags = MainGlobalOpts
|
|
playKubeCommand.Remote = remoteclient
|
|
return playKubeCmd(&playKubeCommand)
|
|
},
|
|
Example: `podman play kube demo.yml`,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
if !remote {
|
|
_playKubeCommand.Example = fmt.Sprintf("%s\n podman play kube --cert-dir /mycertsdir --tls-verify=true --quiet myWebPod", _playKubeCommand.Example)
|
|
}
|
|
playKubeCommand.Command = _playKubeCommand
|
|
playKubeCommand.SetHelpTemplate(HelpTemplate())
|
|
playKubeCommand.SetUsageTemplate(UsageTemplate())
|
|
flags := playKubeCommand.Flags()
|
|
flags.StringVar(&playKubeCommand.Creds, "creds", "", "`Credentials` (USERNAME:PASSWORD) to use for authenticating to a registry")
|
|
flags.BoolVarP(&playKubeCommand.Quiet, "quiet", "q", false, "Suppress output information when pulling images")
|
|
// Disabled flags for the remote client
|
|
if !remote {
|
|
flags.StringVar(&playKubeCommand.Authfile, "authfile", shared.GetAuthFile(""), "Path of the authentication file. Use REGISTRY_AUTH_FILE environment variable to override")
|
|
flags.StringVar(&playKubeCommand.CertDir, "cert-dir", "", "`Pathname` of a directory containing TLS certificates and keys")
|
|
flags.StringVar(&playKubeCommand.SignaturePolicy, "signature-policy", "", "`Pathname` of signature policy file (not usually used)")
|
|
flags.BoolVar(&playKubeCommand.TlsVerify, "tls-verify", true, "Require HTTPS and verify certificates when contacting registries")
|
|
markFlagHidden(flags, "signature-policy")
|
|
}
|
|
}
|
|
|
|
func playKubeCmd(c *cliconfig.KubePlayValues) error {
|
|
args := c.InputArgs
|
|
if len(args) > 1 {
|
|
return errors.New("you can only play one kubernetes file at a time")
|
|
}
|
|
if len(args) < 1 {
|
|
return errors.New("you must supply at least one file")
|
|
}
|
|
|
|
ctx := getContext()
|
|
runtime, err := adapter.GetRuntime(ctx, &c.PodmanCommand)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "could not get runtime")
|
|
}
|
|
defer runtime.DeferredShutdown(false)
|
|
|
|
_, err = runtime.PlayKubeYAML(ctx, c, args[0])
|
|
return err
|
|
}
|