Skip to content

Commit 86f7b99

Browse files
Merge pull request #16273 from vrothberg/cidfile
container/pod id file: truncate instead of throwing an error
2 parents 9a44cfc + 221cfc6 commit 86f7b99

File tree

11 files changed

+20
-99
lines changed

11 files changed

+20
-99
lines changed

cmd/podman/containers/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func create(cmd *cobra.Command, args []string) error {
169169
}
170170

171171
if cliVals.CIDFile != "" {
172-
if err := util.CreateCidFile(cliVals.CIDFile, report.Id); err != nil {
172+
if err := util.CreateIDFile(cliVals.CIDFile, report.Id); err != nil {
173173
return err
174174
}
175175
}

cmd/podman/pods/create.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"github.com/containers/podman/v4/cmd/podman/utils"
2020
"github.com/containers/podman/v4/libpod/define"
2121
"github.com/containers/podman/v4/pkg/domain/entities"
22-
"github.com/containers/podman/v4/pkg/errorhandling"
2322
"github.com/containers/podman/v4/pkg/specgen"
2423
"github.com/containers/podman/v4/pkg/specgenutil"
2524
"github.com/containers/podman/v4/pkg/util"
@@ -104,7 +103,6 @@ func init() {
104103
func create(cmd *cobra.Command, args []string) error {
105104
var (
106105
err error
107-
podIDFD *os.File
108106
imageName string
109107
rawImageName string
110108
podName string
@@ -188,18 +186,6 @@ func create(cmd *cobra.Command, args []string) error {
188186
createOptions.Name = podName
189187
}
190188

191-
if cmd.Flag("pod-id-file").Changed {
192-
podIDFD, err = util.OpenExclusiveFile(podIDFile)
193-
if err != nil && os.IsExist(err) {
194-
return fmt.Errorf("pod id file exists. Ensure another pod is not using it or delete %s", podIDFile)
195-
}
196-
if err != nil {
197-
return fmt.Errorf("opening pod-id-file %s", podIDFile)
198-
}
199-
defer errorhandling.CloseQuiet(podIDFD)
200-
defer errorhandling.SyncQuiet(podIDFD)
201-
}
202-
203189
if len(createOptions.Net.PublishPorts) > 0 {
204190
if !createOptions.Infra {
205191
return fmt.Errorf("you must have an infra container to publish port bindings to the host")
@@ -299,7 +285,7 @@ func create(cmd *cobra.Command, args []string) error {
299285
}
300286

301287
if len(podIDFile) > 0 {
302-
if err = os.WriteFile(podIDFile, []byte(response.Id), 0644); err != nil {
288+
if err := util.CreateIDFile(podIDFile, response.Id); err != nil {
303289
return fmt.Errorf("failed to write pod ID to file: %w", err)
304290
}
305291
}

pkg/domain/infra/abi/containers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
11201120
}
11211121

11221122
if opts.CIDFile != "" {
1123-
if err := util.CreateCidFile(opts.CIDFile, ctr.ID()); err != nil {
1123+
if err := util.CreateIDFile(opts.CIDFile, ctr.ID()); err != nil {
11241124
// If you fail to create CIDFile then remove the container
11251125
_ = removeContainer(ctr, true)
11261126
return nil, err

pkg/domain/infra/tunnel/containers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
804804
}
805805

806806
if opts.CIDFile != "" {
807-
if err := util.CreateCidFile(opts.CIDFile, con.ID); err != nil {
807+
if err := util.CreateIDFile(opts.CIDFile, con.ID); err != nil {
808808
// If you fail to create CIDFile then remove the container
809809
_ = removeContainer(con.ID, true)
810810
return nil, err

pkg/systemd/generate/containers.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ type containerInfo struct {
4242
ExtraEnvs []string
4343
EnvVariable string
4444
AdditionalEnvVariables []string
45-
ExecStartPre string
4645
ExecStart string
4746
TimeoutStartSec uint
4847
TimeoutStopSec uint
48+
ExecStartPre string
4949
ExecStop string
5050
ExecStopPost string
5151
GenerateNoHeader bool
@@ -94,9 +94,6 @@ StartLimitBurst={{{{.StartLimitBurst}}}}
9494
TimeoutStartSec={{{{.TimeoutStartSec}}}}
9595
{{{{- end}}}}
9696
TimeoutStopSec={{{{.TimeoutStopSec}}}}
97-
{{{{- if .ExecStartPre}}}}
98-
ExecStartPre={{{{.ExecStartPre}}}}
99-
{{{{- end}}}}
10097
ExecStart={{{{.ExecStart}}}}
10198
{{{{- if .ExecStop}}}}
10299
ExecStop={{{{.ExecStop}}}}
@@ -316,7 +313,6 @@ func executeContainerTemplate(info *containerInfo, options entities.GenerateSyst
316313
info.NotifyAccess = "all"
317314
info.PIDFile = ""
318315
info.ContainerIDFile = "%t/%n.ctr-id"
319-
info.ExecStartPre = formatOptionsString("/bin/rm -f {{{{.ContainerIDFile}}}}")
320316
info.ExecStop = formatOptionsString("{{{{.Executable}}}} stop --ignore {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} --cidfile={{{{.ContainerIDFile}}}}")
321317
info.ExecStopPost = formatOptionsString("{{{{.Executable}}}} rm -f --ignore {{{{if (ge .StopTimeout 0)}}}}-t {{{{.StopTimeout}}}}{{{{end}}}} --cidfile={{{{.ContainerIDFile}}}}")
322318
// The create command must at least have three arguments:

pkg/systemd/generate/containers_test.go

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,6 @@ RequiresMountsFor=/var/run/containers/storage
282282
Environment=PODMAN_SYSTEMD_UNIT=%n
283283
Restart=on-failure
284284
TimeoutStopSec=70
285-
ExecStartPre=/bin/rm \
286-
-f %t/%n.ctr-id
287285
ExecStart=/usr/bin/podman container run \
288286
--cidfile=%t/%n.ctr-id \
289287
--cgroups=no-conmon \
@@ -321,8 +319,6 @@ RequiresMountsFor=/var/run/containers/storage
321319
Environment=PODMAN_SYSTEMD_UNIT=%n
322320
Restart=on-failure
323321
TimeoutStopSec=70
324-
ExecStartPre=/bin/rm \
325-
-f %t/%n.ctr-id
326322
ExecStart=/usr/bin/podman container run \
327323
--cidfile=%t/%n.ctr-id \
328324
--cgroups=no-conmon \
@@ -360,8 +356,6 @@ RequiresMountsFor=/var/run/containers/storage
360356
Environment=PODMAN_SYSTEMD_UNIT=%n
361357
Restart=on-failure
362358
TimeoutStopSec=70
363-
ExecStartPre=/bin/rm \
364-
-f %t/%n.ctr-id
365359
ExecStart=/usr/bin/podman container run \
366360
--cidfile=%t/%n.ctr-id \
367361
--cgroups=no-conmon \
@@ -399,8 +393,6 @@ RequiresMountsFor=/var/run/containers/storage
399393
Environment=PODMAN_SYSTEMD_UNIT=%n
400394
Restart=on-failure
401395
TimeoutStopSec=70
402-
ExecStartPre=/bin/rm \
403-
-f %t/%n.ctr-id
404396
ExecStart=/usr/bin/podman run \
405397
--cidfile=%t/%n.ctr-id \
406398
--cgroups=no-conmon \
@@ -438,8 +430,6 @@ RequiresMountsFor=/var/run/containers/storage
438430
Environment=PODMAN_SYSTEMD_UNIT=%n
439431
Restart=on-failure
440432
TimeoutStopSec=70
441-
ExecStartPre=/bin/rm \
442-
-f %t/%n.ctr-id
443433
ExecStart=/usr/bin/podman run \
444434
--cidfile=%t/%n.ctr-id \
445435
--cgroups=no-conmon \
@@ -478,8 +468,6 @@ RequiresMountsFor=/var/run/containers/storage
478468
Environment=PODMAN_SYSTEMD_UNIT=%n
479469
Restart=on-failure
480470
TimeoutStopSec=70
481-
ExecStartPre=/bin/rm \
482-
-f %t/%n.ctr-id
483471
ExecStart=/usr/bin/podman run \
484472
--cidfile=%t/%n.ctr-id \
485473
--cgroups=no-conmon \
@@ -517,8 +505,6 @@ RequiresMountsFor=/var/run/containers/storage
517505
Environment=PODMAN_SYSTEMD_UNIT=%n
518506
Restart=on-failure
519507
TimeoutStopSec=70
520-
ExecStartPre=/bin/rm \
521-
-f %t/%n.ctr-id
522508
ExecStart=/usr/bin/podman run \
523509
--cidfile=%t/%n.ctr-id \
524510
--cgroups=no-conmon \
@@ -554,8 +540,6 @@ RequiresMountsFor=/var/run/containers/storage
554540
Environment=PODMAN_SYSTEMD_UNIT=%n
555541
Restart=on-failure
556542
TimeoutStopSec=102
557-
ExecStartPre=/bin/rm \
558-
-f %t/%n.ctr-id
559543
ExecStart=/usr/bin/podman run \
560544
--cidfile=%t/%n.ctr-id \
561545
--cgroups=no-conmon \
@@ -594,8 +578,6 @@ RequiresMountsFor=/var/run/containers/storage
594578
Environment=PODMAN_SYSTEMD_UNIT=%n
595579
Restart=on-failure
596580
TimeoutStopSec=102
597-
ExecStartPre=/bin/rm \
598-
-f %t/%n.ctr-id
599581
ExecStart=/usr/bin/podman run \
600582
--cidfile=%t/%n.ctr-id \
601583
--cgroups=no-conmon \
@@ -634,8 +616,6 @@ RequiresMountsFor=/var/run/containers/storage
634616
Environment=PODMAN_SYSTEMD_UNIT=%n
635617
Restart=on-failure
636618
TimeoutStopSec=102
637-
ExecStartPre=/bin/rm \
638-
-f %t/%n.ctr-id
639619
ExecStart=/usr/bin/podman \
640620
--events-backend none \
641621
--runroot /root run \
@@ -672,8 +652,6 @@ RequiresMountsFor=/var/run/containers/storage
672652
Environment=PODMAN_SYSTEMD_UNIT=%n
673653
Restart=on-failure
674654
TimeoutStopSec=70
675-
ExecStartPre=/bin/rm \
676-
-f %t/%n.ctr-id
677655
ExecStart=/usr/bin/podman container run \
678656
--cidfile=%t/%n.ctr-id \
679657
--cgroups=no-conmon \
@@ -708,8 +686,6 @@ RequiresMountsFor=/var/run/containers/storage
708686
Environment=PODMAN_SYSTEMD_UNIT=%n
709687
Restart=on-failure
710688
TimeoutStopSec=70
711-
ExecStartPre=/bin/rm \
712-
-f %t/%n.ctr-id
713689
ExecStart=/usr/bin/podman run \
714690
--cidfile=%t/%n.ctr-id \
715691
--cgroups=no-conmon \
@@ -748,8 +724,6 @@ RequiresMountsFor=/var/run/containers/storage
748724
Environment=PODMAN_SYSTEMD_UNIT=%n
749725
Restart=on-failure
750726
TimeoutStopSec=70
751-
ExecStartPre=/bin/rm \
752-
-f %t/%n.ctr-id
753727
ExecStart=/usr/bin/podman run \
754728
--cidfile=%t/%n.ctr-id \
755729
--cgroups=no-conmon \
@@ -787,8 +761,6 @@ RequiresMountsFor=/var/run/containers/storage
787761
Environment=PODMAN_SYSTEMD_UNIT=%n
788762
Restart=on-failure
789763
TimeoutStopSec=70
790-
ExecStartPre=/bin/rm \
791-
-f %t/%n.ctr-id
792764
ExecStart=/usr/bin/podman run \
793765
--cidfile=%t/%n.ctr-id \
794766
--cgroups=no-conmon \
@@ -827,8 +799,6 @@ RequiresMountsFor=/var/run/containers/storage
827799
Environment=PODMAN_SYSTEMD_UNIT=%n
828800
Restart=on-failure
829801
TimeoutStopSec=70
830-
ExecStartPre=/bin/rm \
831-
-f %t/%n.ctr-id
832802
ExecStart=/usr/bin/podman run \
833803
--cidfile=%t/%n.ctr-id \
834804
--cgroups=no-conmon \
@@ -870,8 +840,6 @@ Environment=PODMAN_SYSTEMD_UNIT=%n
870840
Environment=FOO=abc "BAR=my test" USER=%%a
871841
Restart=on-failure
872842
TimeoutStopSec=70
873-
ExecStartPre=/bin/rm \
874-
-f %t/%n.ctr-id
875843
ExecStart=/usr/bin/podman run \
876844
--cidfile=%t/%n.ctr-id \
877845
--cgroups=no-conmon \
@@ -940,8 +908,6 @@ Environment=PODMAN_SYSTEMD_UNIT=%n
940908
Restart=on-failure
941909
StartLimitBurst=42
942910
TimeoutStopSec=70
943-
ExecStartPre=/bin/rm \
944-
-f %t/%n.ctr-id
945911
ExecStart=/usr/bin/podman run \
946912
--cidfile=%t/%n.ctr-id \
947913
--cgroups=no-conmon \
@@ -976,8 +942,6 @@ RequiresMountsFor=/var/run/containers/storage
976942
Environment=PODMAN_SYSTEMD_UNIT=%n
977943
Restart=on-failure
978944
TimeoutStopSec=70
979-
ExecStartPre=/bin/rm \
980-
-f %t/%n.ctr-id
981945
ExecStart=/usr/bin/podman run \
982946
--cidfile=%t/%n.ctr-id \
983947
--cgroups=no-conmon \
@@ -1014,8 +978,6 @@ Environment=PODMAN_SYSTEMD_UNIT=%n-%i
1014978
Restart=on-failure
1015979
StartLimitBurst=42
1016980
TimeoutStopSec=70
1017-
ExecStartPre=/bin/rm \
1018-
-f %t/%n.ctr-id
1019981
ExecStart=/usr/bin/podman run \
1020982
--name=container-foo-%i \
1021983
--cidfile=%t/%n.ctr-id \

pkg/systemd/generate/pods.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,8 @@ type podInfo struct {
6161
PodCreateCommand string
6262
// EnvVariable is generate.EnvVariable and must not be set.
6363
EnvVariable string
64-
// ExecStartPre1 of the unit.
65-
ExecStartPre1 string
66-
// ExecStartPre2 of the unit.
67-
ExecStartPre2 string
64+
// ExecStartPre of the unit.
65+
ExecStartPre string
6866
// ExecStart of the unit.
6967
ExecStart string
7068
// TimeoutStopSec of the unit.
@@ -115,11 +113,8 @@ Restart={{{{.RestartPolicy}}}}
115113
RestartSec={{{{.RestartSec}}}}
116114
{{{{- end}}}}
117115
TimeoutStopSec={{{{.TimeoutStopSec}}}}
118-
{{{{- if .ExecStartPre1}}}}
119-
ExecStartPre={{{{.ExecStartPre1}}}}
120-
{{{{- end}}}}
121-
{{{{- if .ExecStartPre2}}}}
122-
ExecStartPre={{{{.ExecStartPre2}}}}
116+
{{{{- if .ExecStartPre}}}}
117+
ExecStartPre={{{{.ExecStartPre}}}}
123118
{{{{- end}}}}
124119
ExecStart={{{{.ExecStart}}}}
125120
ExecStop={{{{.ExecStop}}}}
@@ -371,8 +366,7 @@ func executePodTemplate(info *podInfo, options entities.GenerateSystemdOptions)
371366
startCommand = append(startCommand, podCreateArgs...)
372367
startCommand = escapeSystemdArguments(startCommand)
373368

374-
info.ExecStartPre1 = formatOptionsString("/bin/rm -f {{{{.PIDFile}}}} {{{{.PodIDFile}}}}")
375-
info.ExecStartPre2 = formatOptions(startCommand)
369+
info.ExecStartPre = formatOptions(startCommand)
376370
info.ExecStart = formatOptionsString("{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod start --pod-id-file {{{{.PodIDFile}}}}")
377371
info.ExecStop = formatOptionsString("{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod stop --ignore --pod-id-file {{{{.PodIDFile}}}} {{{{if (ge .StopTimeout 0)}}}} -t {{{{.StopTimeout}}}}{{{{end}}}}")
378372
info.ExecStopPost = formatOptionsString("{{{{.Executable}}}} {{{{if .RootFlags}}}}{{{{ .RootFlags}}}} {{{{end}}}}pod rm --ignore -f --pod-id-file {{{{.PodIDFile}}}}")

pkg/systemd/generate/pods_test.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,6 @@ Before=
258258
Environment=PODMAN_SYSTEMD_UNIT=%n
259259
Restart=on-failure
260260
TimeoutStopSec=70
261-
ExecStartPre=/bin/rm \
262-
-f %t/pod-123abc.pid %t/pod-123abc.pod-id
263261
ExecStartPre=/usr/bin/podman pod create \
264262
--infra-conmon-pidfile %t/pod-123abc.pid \
265263
--pod-id-file %t/pod-123abc.pod-id \
@@ -326,8 +324,6 @@ Before=container-1.service container-2.service
326324
Environment=PODMAN_SYSTEMD_UNIT=%n
327325
Restart=on-failure
328326
TimeoutStopSec=70
329-
ExecStartPre=/bin/rm \
330-
-f %t/pod-123abc.pid %t/pod-123abc.pod-id
331327
ExecStartPre=/usr/bin/podman pod create \
332328
--infra-conmon-pidfile %t/pod-123abc.pid \
333329
--pod-id-file %t/pod-123abc.pod-id \
@@ -367,8 +363,6 @@ Before=container-1.service container-2.service
367363
Environment=PODMAN_SYSTEMD_UNIT=%n
368364
Restart=on-failure
369365
TimeoutStopSec=70
370-
ExecStartPre=/bin/rm \
371-
-f %t/pod-123abc.pid %t/pod-123abc.pod-id
372366
ExecStartPre=/usr/bin/podman \
373367
--events-backend none \
374368
--runroot /root pod create \
@@ -410,8 +404,6 @@ Before=container-1.service container-2.service
410404
Environment=PODMAN_SYSTEMD_UNIT=%n
411405
Restart=on-failure
412406
TimeoutStopSec=70
413-
ExecStartPre=/bin/rm \
414-
-f %t/pod-123abc.pid %t/pod-123abc.pod-id
415407
ExecStartPre=/usr/bin/podman pod create \
416408
--infra-conmon-pidfile %t/pod-123abc.pid \
417409
--pod-id-file %t/pod-123abc.pod-id \
@@ -451,8 +443,6 @@ Before=container-1.service container-2.service
451443
Environment=PODMAN_SYSTEMD_UNIT=%n
452444
Restart=on-failure
453445
TimeoutStopSec=70
454-
ExecStartPre=/bin/rm \
455-
-f %t/pod-123abc.pid %t/pod-123abc.pod-id
456446
ExecStartPre=/usr/bin/podman pod create \
457447
--infra-conmon-pidfile %t/pod-123abc.pid \
458448
--pod-id-file %t/pod-123abc.pod-id \

pkg/util/utils.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -682,18 +682,15 @@ func DefaultContainerConfig() *config.Config {
682682
return containerConfig
683683
}
684684

685-
func CreateCidFile(cidfile string, id string) error {
686-
cidFile, err := OpenExclusiveFile(cidfile)
685+
func CreateIDFile(path string, id string) error {
686+
idFile, err := os.Create(path)
687687
if err != nil {
688-
if os.IsExist(err) {
689-
return fmt.Errorf("container id file exists. Ensure another container is not using it or delete %s", cidfile)
690-
}
691-
return fmt.Errorf("opening cidfile %s", cidfile)
688+
return fmt.Errorf("creating idfile: %w", err)
692689
}
693-
if _, err = cidFile.WriteString(id); err != nil {
694-
logrus.Error(err)
690+
defer idFile.Close()
691+
if _, err = idFile.WriteString(id); err != nil {
692+
return fmt.Errorf("writing idfile: %w", err)
695693
}
696-
cidFile.Close()
697694
return nil
698695
}
699696

test/e2e/generate_systemd_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,6 @@ var _ = Describe("Podman generate systemd", func() {
570570
Expect(session.OutputToString()).To(ContainSubstring("--pod-id-file %t/pod-foo.pod-id"))
571571
Expect(session.OutputToString()).To(ContainSubstring("--exit-policy=stop"))
572572
Expect(session.OutputToString()).To(ContainSubstring("--name foo"))
573-
Expect(session.OutputToString()).To(ContainSubstring("ExecStartPre=/bin/rm"))
574-
Expect(session.OutputToString()).To(ContainSubstring("-f %t/pod-foo.pid %t/pod-foo.pod-id"))
575573
Expect(session.OutputToString()).To(ContainSubstring("pod stop"))
576574
Expect(session.OutputToString()).To(ContainSubstring("--ignore"))
577575
Expect(session.OutputToString()).To(ContainSubstring("--pod-id-file %t/pod-foo.pod-id"))

0 commit comments

Comments
 (0)