diff options
author | Boaz Shuster <boaz.shuster.github@gmail.com> | 2021-07-29 08:18:58 +0300 |
---|---|---|
committer | Boaz Shuster <boaz.shuster.github@gmail.com> | 2021-10-22 04:19:18 +0300 |
commit | ece0c7e5d31a6ae97274a7db80dbabb7564fdc72 (patch) | |
tree | d6096edfebd2733238c34f8d5946586c5d7499b6 /pkg/systemd/generate/containers.go | |
parent | c09fab59ddc6964e1c6afc31fa5f1b04c57a2b8c (diff) | |
download | podman-ece0c7e5d31a6ae97274a7db80dbabb7564fdc72.tar.gz podman-ece0c7e5d31a6ae97274a7db80dbabb7564fdc72.tar.bz2 podman-ece0c7e5d31a6ae97274a7db80dbabb7564fdc72.zip |
Support template unit files in podman generate systemd
Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
Diffstat (limited to 'pkg/systemd/generate/containers.go')
-rw-r--r-- | pkg/systemd/generate/containers.go | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/pkg/systemd/generate/containers.go b/pkg/systemd/generate/containers.go index 037652a6d..c0a49c614 100644 --- a/pkg/systemd/generate/containers.go +++ b/pkg/systemd/generate/containers.go @@ -90,6 +90,8 @@ type containerInfo struct { // Location of the RunRoot for the container. Required for ensuring the tmpfs // or volume exists and is mounted when coming online at boot. RunRoot string + // Add %i and %I to description and execute parts + IdentifySpecifier bool } const containerTemplate = headerTemplate + ` @@ -99,7 +101,7 @@ After={{{{- range $index, $value := .BoundToServices -}}}}{{{{if $index}}}} {{{{ {{{{- end}}}} [Service] -Environment={{{{.EnvVariable}}}}=%n +Environment={{{{.EnvVariable}}}}=%n{{{{- if (eq .IdentifySpecifier true) }}}}-%i{{{{- end}}}} {{{{- if .ExtraEnvs}}}} Environment={{{{- range $index, $value := .ExtraEnvs -}}}}{{{{if $index}}}} {{{{end}}}}{{{{ $value }}}}{{{{end}}}} {{{{- end}}}} @@ -273,7 +275,6 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst "--rm", ) remainingCmd := info.CreateCommand[index:] - // Presence check for certain flags/options. fs := pflag.NewFlagSet("args", pflag.ContinueOnError) fs.ParseErrorsWhitelist.UnknownFlags = true @@ -389,6 +390,32 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst startCommand = append(startCommand, remainingCmd...) startCommand = escapeSystemdArguments(startCommand) + if options.TemplateUnitFile { + info.IdentifySpecifier = true + runIx := -1 + nameIx := -1 + for argIx, arg := range startCommand { + if arg == "run" { + runIx = argIx + continue + } + if arg == "--name" { + nameIx = argIx + 1 + break + } + if strings.HasPrefix(arg, "--name=") { + nameIx = argIx + break + } + } + if nameIx == -1 { + startCommand = append(startCommand[:runIx+1], startCommand[runIx:]...) + startCommand[runIx+1] = fmt.Sprintf("--name=%s-%%i", info.ServiceName) + fmt.Println(startCommand) + } else { + startCommand[nameIx] = fmt.Sprintf("%s-%%i", startCommand[nameIx]) + } + } info.ExecStart = strings.Join(startCommand, " ") } |