automation-tests/cmd/podman/generate_systemd.go

66 lines
2.2 KiB
Go

package main
import (
"fmt"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/pkg/adapter"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
var (
containerSystemdCommand cliconfig.GenerateSystemdValues
containerSystemdDescription = `Command generates a systemd unit file for a Podman container
`
_containerSystemdCommand = &cobra.Command{
Use: "systemd [flags] CONTAINER | POD",
Short: "Generate a systemd unit file for a Podman container",
Long: containerSystemdDescription,
RunE: func(cmd *cobra.Command, args []string) error {
containerSystemdCommand.InputArgs = args
containerSystemdCommand.GlobalFlags = MainGlobalOpts
containerSystemdCommand.Remote = remoteclient
return generateSystemdCmd(&containerSystemdCommand)
},
Args: func(cmd *cobra.Command, args []string) error {
if len(args) > 1 || len(args) < 1 {
return errors.New("provide only one container name or ID")
}
return nil
},
Example: `podman generate systemd ctrID
`,
}
)
func init() {
containerSystemdCommand.Command = _containerSystemdCommand
containerSystemdCommand.SetHelpTemplate(HelpTemplate())
containerSystemdCommand.SetUsageTemplate(UsageTemplate())
flags := containerSystemdCommand.Flags()
flags.BoolVarP(&containerSystemdCommand.Name, "name", "n", false, "use the container/pod name instead of ID")
if !remoteclient {
flags.BoolVarP(&containerSystemdCommand.Files, "files", "f", false, "generate files instead of printing to stdout")
}
flags.UintVarP(&containerSystemdCommand.StopTimeout, "time", "t", defaultContainerConfig.Engine.StopTimeout, "stop timeout override")
flags.StringVar(&containerSystemdCommand.RestartPolicy, "restart-policy", "on-failure", "applicable systemd restart-policy")
flags.BoolVarP(&containerSystemdCommand.New, "new", "", false, "create a new container instead of starting an existing one")
flags.SetNormalizeFunc(aliasFlags)
}
func generateSystemdCmd(c *cliconfig.GenerateSystemdValues) error {
runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
defer runtime.DeferredShutdown(false)
unit, err := runtime.GenerateSystemd(c)
if err != nil {
return err
}
fmt.Println(unit)
return nil
}