Do not leak libpod package into the remote client

Some packages used by the remote client imported the libpod package.
This is not wanted because it adds unnecessary bloat to the client and
also causes problems with platform specific code(linux only), see #9710.

The solution is to move the used functions/variables into extra packages
which do not import libpod.

This change shrinks the remote client size more than 6MB compared to the
current master.

[NO TESTS NEEDED]
I have no idea how to test this properly but with #9710 the cross
compile should fail.

Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
Paul Holzinger
2021-03-15 12:55:06 +01:00
parent 762148deb6
commit 57e8c66322
20 changed files with 86 additions and 104 deletions

View File

@ -8,12 +8,11 @@ import (
"github.com/containers/common/pkg/config" "github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/registries" "github.com/containers/podman/v3/pkg/registries"
"github.com/containers/podman/v3/pkg/rootless" "github.com/containers/podman/v3/pkg/rootless"
systemdGen "github.com/containers/podman/v3/pkg/systemd/generate" systemdDefine "github.com/containers/podman/v3/pkg/systemd/define"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -732,8 +731,8 @@ func AutocompletePullOption(cmd *cobra.Command, args []string, toComplete string
// AutocompleteRestartOption - Autocomplete restart options for create and run command. // AutocompleteRestartOption - Autocomplete restart options for create and run command.
// -> "always", "no", "on-failure", "unless-stopped" // -> "always", "no", "on-failure", "unless-stopped"
func AutocompleteRestartOption(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { func AutocompleteRestartOption(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
restartOptions := []string{libpod.RestartPolicyAlways, libpod.RestartPolicyNo, restartOptions := []string{define.RestartPolicyAlways, define.RestartPolicyNo,
libpod.RestartPolicyOnFailure, libpod.RestartPolicyUnlessStopped} define.RestartPolicyOnFailure, define.RestartPolicyUnlessStopped}
return restartOptions, cobra.ShellCompDirectiveNoFileComp return restartOptions, cobra.ShellCompDirectiveNoFileComp
} }
@ -908,7 +907,7 @@ func AutocompleteEventFilter(cmd *cobra.Command, args []string, toComplete strin
// AutocompleteSystemdRestartOptions - Autocomplete systemd restart options. // AutocompleteSystemdRestartOptions - Autocomplete systemd restart options.
// -> "no", "on-success", "on-failure", "on-abnormal", "on-watchdog", "on-abort", "always" // -> "no", "on-success", "on-failure", "on-abnormal", "on-watchdog", "on-abort", "always"
func AutocompleteSystemdRestartOptions(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { func AutocompleteSystemdRestartOptions(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return systemdGen.RestartPolicies, cobra.ShellCompDirectiveNoFileComp return systemdDefine.RestartPolicies, cobra.ShellCompDirectiveNoFileComp
} }
// AutocompleteTrustType - Autocomplete trust type options. // AutocompleteTrustType - Autocomplete trust type options.

View File

@ -14,7 +14,7 @@ import (
envLib "github.com/containers/podman/v3/pkg/env" envLib "github.com/containers/podman/v3/pkg/env"
ns "github.com/containers/podman/v3/pkg/namespaces" ns "github.com/containers/podman/v3/pkg/namespaces"
"github.com/containers/podman/v3/pkg/specgen" "github.com/containers/podman/v3/pkg/specgen"
systemdGen "github.com/containers/podman/v3/pkg/systemd/generate" systemdDefine "github.com/containers/podman/v3/pkg/systemd/define"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/opencontainers/runtime-spec/specs-go" "github.com/opencontainers/runtime-spec/specs-go"
@ -342,8 +342,8 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string
return errors.Wrapf(err, "unable to process labels") return errors.Wrapf(err, "unable to process labels")
} }
if systemdUnit, exists := osEnv[systemdGen.EnvVariable]; exists { if systemdUnit, exists := osEnv[systemdDefine.EnvVariable]; exists {
labels[systemdGen.EnvVariable] = systemdUnit labels[systemdDefine.EnvVariable] = systemdUnit
} }
s.Labels = labels s.Labels = labels

View File

@ -1,4 +1,4 @@
package filters package parse
import ( import (
"net/url" "net/url"
@ -7,7 +7,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
func ParseFilterArgumentsIntoFilters(filters []string) (url.Values, error) { func FilterArgumentsIntoFilters(filters []string) (url.Values, error) {
parsedFilters := make(url.Values) parsedFilters := make(url.Values)
for _, f := range filters { for _, f := range filters {
t := strings.SplitN(f, "=", 2) t := strings.SplitN(f, "=", 2)

View File

@ -8,11 +8,11 @@ import (
"strings" "strings"
"github.com/containers/common/pkg/completion" "github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/parse"
"github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/cmd/podman/utils" "github.com/containers/podman/v3/cmd/podman/utils"
"github.com/containers/podman/v3/cmd/podman/validate" "github.com/containers/podman/v3/cmd/podman/validate"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
dfilters "github.com/containers/podman/v3/pkg/domain/filters"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -80,7 +80,7 @@ Are you sure you want to continue? [y/N] `, volumeString)
} }
} }
pruneOptions.Filters, err = dfilters.ParseFilterArgumentsIntoFilters(filters) pruneOptions.Filters, err = parse.FilterArgumentsIntoFilters(filters)
if err != nil { if err != nil {
return err return err
} }

View File

@ -9,11 +9,11 @@ import (
"github.com/containers/common/pkg/completion" "github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/common" "github.com/containers/podman/v3/cmd/podman/common"
"github.com/containers/podman/v3/cmd/podman/parse"
"github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/cmd/podman/utils" "github.com/containers/podman/v3/cmd/podman/utils"
"github.com/containers/podman/v3/cmd/podman/validate" "github.com/containers/podman/v3/cmd/podman/validate"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/domain/filters"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -58,14 +58,14 @@ func prune(cmd *cobra.Command, args []string) error {
if err != nil { if err != nil {
return err return err
} }
pruneOptions.Filters, err = filters.ParseFilterArgumentsIntoFilters(filter) pruneOptions.Filters, err = parse.FilterArgumentsIntoFilters(filter)
if !force { if !force {
reader := bufio.NewReader(os.Stdin) reader := bufio.NewReader(os.Stdin)
fmt.Println("WARNING! This will remove all volumes not used by at least one container. The following volumes will be removed:") fmt.Println("WARNING! This will remove all volumes not used by at least one container. The following volumes will be removed:")
if err != nil { if err != nil {
return err return err
} }
listOptions.Filter, err = filters.ParseFilterArgumentsIntoFilters(filter) listOptions.Filter, err = parse.FilterArgumentsIntoFilters(filter)
if err != nil { if err != nil {
return err return err
} }

View File

@ -84,24 +84,6 @@ func (ns LinuxNS) String() string {
} }
} }
// Valid restart policy types.
const (
// RestartPolicyNone indicates that no restart policy has been requested
// by a container.
RestartPolicyNone = ""
// RestartPolicyNo is identical in function to RestartPolicyNone.
RestartPolicyNo = "no"
// RestartPolicyAlways unconditionally restarts the container.
RestartPolicyAlways = "always"
// RestartPolicyOnFailure restarts the container on non-0 exit code,
// with an optional maximum number of retries.
RestartPolicyOnFailure = "on-failure"
// RestartPolicyUnlessStopped unconditionally restarts unless stopped
// by the user. It is identical to Always except with respect to
// handling of system restart, which Podman does not yet support.
RestartPolicyUnlessStopped = "unless-stopped"
)
// Container is a single OCI container. // Container is a single OCI container.
// All operations on a Container that access state must begin with a call to // All operations on a Container that access state must begin with a call to
// syncContainer(). // syncContainer().

View File

@ -219,14 +219,14 @@ func (c *Container) shouldRestart() bool {
// If we did not get a restart policy match, return false // If we did not get a restart policy match, return false
// Do the same if we're not a policy that restarts. // Do the same if we're not a policy that restarts.
if !c.state.RestartPolicyMatch || if !c.state.RestartPolicyMatch ||
c.config.RestartPolicy == RestartPolicyNo || c.config.RestartPolicy == define.RestartPolicyNo ||
c.config.RestartPolicy == RestartPolicyNone { c.config.RestartPolicy == define.RestartPolicyNone {
return false return false
} }
// If we're RestartPolicyOnFailure, we need to check retries and exit // If we're RestartPolicyOnFailure, we need to check retries and exit
// code. // code.
if c.config.RestartPolicy == RestartPolicyOnFailure { if c.config.RestartPolicy == define.RestartPolicyOnFailure {
if c.state.ExitCode == 0 { if c.state.ExitCode == 0 {
return false return false
} }
@ -332,7 +332,7 @@ func (c *Container) syncContainer() error {
// Only save back to DB if state changed // Only save back to DB if state changed
if c.state.State != oldState { if c.state.State != oldState {
// Check for a restart policy match // Check for a restart policy match
if c.config.RestartPolicy != RestartPolicyNone && c.config.RestartPolicy != RestartPolicyNo && if c.config.RestartPolicy != define.RestartPolicyNone && c.config.RestartPolicy != define.RestartPolicyNo &&
(oldState == define.ContainerStateRunning || oldState == define.ContainerStatePaused) && (oldState == define.ContainerStateRunning || oldState == define.ContainerStatePaused) &&
(c.state.State == define.ContainerStateStopped || c.state.State == define.ContainerStateExited) && (c.state.State == define.ContainerStateStopped || c.state.State == define.ContainerStateExited) &&
!c.state.StoppedByUser { !c.state.StoppedByUser {

View File

@ -0,0 +1,19 @@
package define
// Valid restart policy types.
const (
// RestartPolicyNone indicates that no restart policy has been requested
// by a container.
RestartPolicyNone = ""
// RestartPolicyNo is identical in function to RestartPolicyNone.
RestartPolicyNo = "no"
// RestartPolicyAlways unconditionally restarts the container.
RestartPolicyAlways = "always"
// RestartPolicyOnFailure restarts the container on non-0 exit code,
// with an optional maximum number of retries.
RestartPolicyOnFailure = "on-failure"
// RestartPolicyUnlessStopped unconditionally restarts unless stopped
// by the user. It is identical to Always except with respect to
// handling of system restart, which Podman does not yet support.
RestartPolicyUnlessStopped = "unless-stopped"
)

View File

@ -83,11 +83,11 @@ func (p *Pod) GenerateForKube() (*v1.Pod, []v1.ServicePort, error) {
for _, ctr := range allContainers { for _, ctr := range allContainers {
if !ctr.IsInfra() { if !ctr.IsInfra() {
switch ctr.Config().RestartPolicy { switch ctr.Config().RestartPolicy {
case RestartPolicyAlways: case define.RestartPolicyAlways:
pod.Spec.RestartPolicy = v1.RestartPolicyAlways pod.Spec.RestartPolicy = v1.RestartPolicyAlways
case RestartPolicyOnFailure: case define.RestartPolicyOnFailure:
pod.Spec.RestartPolicy = v1.RestartPolicyOnFailure pod.Spec.RestartPolicy = v1.RestartPolicyOnFailure
case RestartPolicyNo: case define.RestartPolicyNo:
pod.Spec.RestartPolicy = v1.RestartPolicyNever pod.Spec.RestartPolicy = v1.RestartPolicyNever
default: // some pod create from cmdline, such as "", so set it to Never default: // some pod create from cmdline, such as "", so set it to Never
pod.Spec.RestartPolicy = v1.RestartPolicyNever pod.Spec.RestartPolicy = v1.RestartPolicyNever

View File

@ -1364,7 +1364,7 @@ func WithRestartPolicy(policy string) CtrCreateOption {
} }
switch policy { switch policy {
case RestartPolicyNone, RestartPolicyNo, RestartPolicyOnFailure, RestartPolicyAlways, RestartPolicyUnlessStopped: case define.RestartPolicyNone, define.RestartPolicyNo, define.RestartPolicyOnFailure, define.RestartPolicyAlways, define.RestartPolicyUnlessStopped:
ctr.config.RestartPolicy = policy ctr.config.RestartPolicy = policy
default: default:
return errors.Wrapf(define.ErrInvalidArg, "%q is not a valid restart policy", policy) return errors.Wrapf(define.ErrInvalidArg, "%q is not a valid restart policy", policy)

View File

@ -12,6 +12,7 @@ import (
"github.com/containers/common/pkg/config" "github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/events" "github.com/containers/podman/v3/libpod/events"
"github.com/containers/podman/v3/libpod/network"
"github.com/containers/podman/v3/libpod/shutdown" "github.com/containers/podman/v3/libpod/shutdown"
"github.com/containers/podman/v3/pkg/cgroups" "github.com/containers/podman/v3/pkg/cgroups"
"github.com/containers/podman/v3/pkg/domain/entities/reports" "github.com/containers/podman/v3/pkg/domain/entities/reports"
@ -203,7 +204,7 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container) (_ *Contai
if len(ctr.config.Networks) > 0 { if len(ctr.config.Networks) > 0 {
netNames := make([]string, 0, len(ctr.config.Networks)) netNames := make([]string, 0, len(ctr.config.Networks))
for _, nameOrID := range ctr.config.Networks { for _, nameOrID := range ctr.config.Networks {
netName, err := normalizeNetworkName(r.config, nameOrID) netName, err := network.NormalizeName(r.config, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,12 +0,0 @@
// +build linux
package libpod
import (
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/network"
)
func normalizeNetworkName(config *config.Config, nameOrID string) (string, error) {
return network.NormalizeName(config, nameOrID)
}

View File

@ -1,12 +0,0 @@
// +build !linux
package libpod
import (
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define"
)
func normalizeNetworkName(config *config.Config, nameOrID string) (string, error) {
return "", define.ErrNotImplemented
}

View File

@ -13,7 +13,7 @@ import (
"github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/image" "github.com/containers/podman/v3/libpod/image"
"github.com/containers/podman/v3/pkg/systemd" "github.com/containers/podman/v3/pkg/systemd"
systemdGen "github.com/containers/podman/v3/pkg/systemd/generate" systemdDefine "github.com/containers/podman/v3/pkg/systemd/define"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -178,10 +178,10 @@ func AutoUpdate(runtime *libpod.Runtime, options Options) ([]string, []error) {
updatedUnits := []string{} updatedUnits := []string{}
for _, ctr := range containersToRestart { for _, ctr := range containersToRestart {
labels := ctr.Labels() labels := ctr.Labels()
unit, exists := labels[systemdGen.EnvVariable] unit, exists := labels[systemdDefine.EnvVariable]
if !exists { if !exists {
// Shouldn't happen but let's be sure of it. // Shouldn't happen but let's be sure of it.
errs = append(errs, errors.Errorf("error auto-updating container %q: no %s label found", ctr.ID(), systemdGen.EnvVariable)) errs = append(errs, errors.Errorf("error auto-updating container %q: no %s label found", ctr.ID(), systemdDefine.EnvVariable))
continue continue
} }
_, err := conn.RestartUnit(unit, "replace", nil) _, err := conn.RestartUnit(unit, "replace", nil)

View File

@ -173,13 +173,13 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
var ctrRestartPolicy string var ctrRestartPolicy string
switch podYAML.Spec.RestartPolicy { switch podYAML.Spec.RestartPolicy {
case v1.RestartPolicyAlways: case v1.RestartPolicyAlways:
ctrRestartPolicy = libpod.RestartPolicyAlways ctrRestartPolicy = define.RestartPolicyAlways
case v1.RestartPolicyOnFailure: case v1.RestartPolicyOnFailure:
ctrRestartPolicy = libpod.RestartPolicyOnFailure ctrRestartPolicy = define.RestartPolicyOnFailure
case v1.RestartPolicyNever: case v1.RestartPolicyNever:
ctrRestartPolicy = libpod.RestartPolicyNo ctrRestartPolicy = define.RestartPolicyNo
default: // Default to Always default: // Default to Always
ctrRestartPolicy = libpod.RestartPolicyAlways ctrRestartPolicy = define.RestartPolicyAlways
} }
configMaps := []v1.ConfigMap{} configMaps := []v1.ConfigMap{}

View File

@ -0,0 +1,9 @@
package define
// EnvVariable "PODMAN_SYSTEMD_UNIT" is set in all generated systemd units and
// is set to the unit's (unique) name.
const EnvVariable = "PODMAN_SYSTEMD_UNIT"
// RestartPolicies includes all valid restart policies to be used in a unit
// file.
var RestartPolicies = []string{"no", "on-success", "on-failure", "on-abnormal", "on-watchdog", "on-abort", "always"}

View File

@ -4,25 +4,18 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/containers/podman/v3/pkg/systemd/define"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// EnvVariable "PODMAN_SYSTEMD_UNIT" is set in all generated systemd units and
// is set to the unit's (unique) name.
const EnvVariable = "PODMAN_SYSTEMD_UNIT"
// minTimeoutStopSec is the minimal stop timeout for generated systemd units. // minTimeoutStopSec is the minimal stop timeout for generated systemd units.
// Once exceeded, processes of the services are killed and the cgroup(s) are // Once exceeded, processes of the services are killed and the cgroup(s) are
// cleaned up. // cleaned up.
const minTimeoutStopSec = 60 const minTimeoutStopSec = 60
// RestartPolicies includes all valid restart policies to be used in a unit
// file.
var RestartPolicies = []string{"no", "on-success", "on-failure", "on-abnormal", "on-watchdog", "on-abort", "always"}
// validateRestartPolicy checks that the user-provided policy is valid. // validateRestartPolicy checks that the user-provided policy is valid.
func validateRestartPolicy(restart string) error { func validateRestartPolicy(restart string) error {
for _, i := range RestartPolicies { for _, i := range define.RestartPolicies {
if i == restart { if i == restart {
return nil return nil
} }

View File

@ -11,6 +11,7 @@ import (
"github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/systemd/define"
"github.com/containers/podman/v3/version" "github.com/containers/podman/v3/version"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -173,7 +174,7 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst
info.Executable = executable info.Executable = executable
} }
info.EnvVariable = EnvVariable info.EnvVariable = define.EnvVariable
info.ExecStart = "{{{{.Executable}}}} start {{{{.ContainerNameOrID}}}}" info.ExecStart = "{{{{.Executable}}}} start {{{{.ContainerNameOrID}}}}"
info.ExecStop = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.ContainerNameOrID}}}}" info.ExecStop = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.ContainerNameOrID}}}}"
info.ExecStopPost = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.ContainerNameOrID}}}}" info.ExecStopPost = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.ContainerNameOrID}}}}"

View File

@ -4,6 +4,7 @@ import (
"testing" "testing"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/systemd/define"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -398,7 +399,7 @@ WantedBy=multi-user.target default.target
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
StopTimeout: 22, StopTimeout: 22,
PodmanVersion: "CI", PodmanVersion: "CI",
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodID, goodID,
false, false,
@ -414,7 +415,7 @@ WantedBy=multi-user.target default.target
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
StopTimeout: 22, StopTimeout: 22,
PodmanVersion: "CI", PodmanVersion: "CI",
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodIDNoHeaderInfo, goodIDNoHeaderInfo,
false, false,
@ -430,7 +431,7 @@ WantedBy=multi-user.target default.target
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodName, goodName,
false, false,
@ -447,7 +448,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
BoundToServices: []string{"pod", "a", "b", "c"}, BoundToServices: []string{"pod", "a", "b", "c"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNameBoundTo, goodNameBoundTo,
false, false,
@ -462,7 +463,7 @@ WantedBy=multi-user.target default.target
PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid", PIDFile: "/run/containers/storage/overlay-containers/639c53578af4d84b8800b4635fa4e680ee80fd67e0e6a2d4eea48d1e3230f401/userdata/conmon.pid",
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
"", "",
false, false,
@ -479,7 +480,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"}, CreateCommand: []string{"I'll get stripped", "container", "run", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN", "foo=arg \"with \" space"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodWithNameAndGeneric, goodWithNameAndGeneric,
true, true,
@ -496,7 +497,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodWithExplicitShortDetachParam, goodWithExplicitShortDetachParam,
true, true,
@ -513,7 +514,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, CreateCommand: []string{"I'll get stripped", "run", "-d", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
Pod: &podInfo{ Pod: &podInfo{
PodIDFile: "%t/pod-foobar.pod-id-file", PodIDFile: "%t/pod-foobar.pod-id-file",
}, },
@ -533,7 +534,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"}, CreateCommand: []string{"I'll get stripped", "run", "--detach", "--name", "jadda-jadda", "--hostname", "hello-world", "awesome-image:latest", "command", "arg1", "...", "argN"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNameNewDetach, goodNameNewDetach,
true, true,
@ -550,7 +551,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "run", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodIDNew, goodIDNew,
true, true,
@ -567,7 +568,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "run", "--detach=true", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
genGoodNewDetach("--detach=true"), genGoodNewDetach("--detach=true"),
true, true,
@ -584,7 +585,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "run", "--detach=false", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
genGoodNewDetach("-d"), genGoodNewDetach("-d"),
true, true,
@ -601,7 +602,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNameNewDetachFalseWithCmd, goodNameNewDetachFalseWithCmd,
true, true,
@ -618,7 +619,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"}, CreateCommand: []string{"I'll get stripped", "run", "--name", "test", "-p", "80:80", "--detach=false", "--detach=false", "awesome-image:latest", "somecmd", "--detach=false"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNameNewDetachFalseWithCmd, goodNameNewDetachFalseWithCmd,
true, true,
@ -635,7 +636,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "run", "-dti", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
genGoodNewDetach("-dti"), genGoodNewDetach("-dti"),
true, true,
@ -652,7 +653,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "run", "-tid", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "run", "-tid", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
genGoodNewDetach("-tid"), genGoodNewDetach("-tid"),
true, true,
@ -669,7 +670,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 42, StopTimeout: 42,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "--events-backend", "none", "--runroot", "/root", "run", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNewRootFlags, goodNewRootFlags,
true, true,
@ -686,7 +687,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "container", "create", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodContainerCreate, goodContainerCreate,
true, true,
@ -703,7 +704,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"}, CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "--log-driver=journald", "--log-opt=tag={{.Name}}", "awesome-image:latest"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNewWithJournaldTag, goodNewWithJournaldTag,
true, true,
@ -720,7 +721,7 @@ WantedBy=multi-user.target default.target
StopTimeout: 10, StopTimeout: 10,
PodmanVersion: "CI", PodmanVersion: "CI",
CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"}, CreateCommand: []string{"I'll get stripped", "create", "--name", "test", "awesome-image:latest", "sh", "-c", "kill $$ && echo %\\"},
EnvVariable: EnvVariable, EnvVariable: define.EnvVariable,
}, },
goodNewWithSpecialChars, goodNewWithSpecialChars,
true, true,

View File

@ -11,6 +11,7 @@ import (
"github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/systemd/define"
"github.com/containers/podman/v3/version" "github.com/containers/podman/v3/version"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -237,7 +238,7 @@ func executePodTemplate(info *podInfo, options entities.GenerateSystemdOptions)
info.Executable = executable info.Executable = executable
} }
info.EnvVariable = EnvVariable info.EnvVariable = define.EnvVariable
info.ExecStart = "{{{{.Executable}}}} start {{{{.InfraNameOrID}}}}" info.ExecStart = "{{{{.Executable}}}} start {{{{.InfraNameOrID}}}}"
info.ExecStop = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.InfraNameOrID}}}}" info.ExecStop = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.InfraNameOrID}}}}"
info.ExecStopPost = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.InfraNameOrID}}}}" info.ExecStopPost = "{{{{.Executable}}}} stop {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} {{{{.InfraNameOrID}}}}"