From a576fa3f14ca86ed5992575c606e2f0b66a8b1c2 Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Wed, 17 May 2023 14:50:23 +0200 Subject: [PATCH] generate systemd: error on init containers Init containers are currently not properly supported in generate-systemd and there are no plans to do so since all focus lies on Quadlet going forward. Hence, generate systemd should through an error. Closes: #18585 Signed-off-by: Valentin Rothberg --- pkg/systemd/generate/containers.go | 4 ++++ pkg/systemd/generate/pods.go | 1 + test/e2e/generate_systemd_test.go | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/pkg/systemd/generate/containers.go b/pkg/systemd/generate/containers.go index 7b1e221c8c..db641c70de 100644 --- a/pkg/systemd/generate/containers.go +++ b/pkg/systemd/generate/containers.go @@ -144,6 +144,10 @@ func generateContainerInfo(ctr *libpod.Container, options entities.GenerateSyste } config := ctr.Config() + if len(config.InitContainerType) > 0 { + return nil, fmt.Errorf("unsupported container %s: cannot generate systemd units for init containers", ctr.ID()) + } + conmonPidFile := config.ConmonPidFile if conmonPidFile == "" { return nil, errors.New("conmon PID file path is empty, try to recreate the container with --conmon-pidfile flag") diff --git a/pkg/systemd/generate/pods.go b/pkg/systemd/generate/pods.go index bdc7c34d8f..94cebccbbf 100644 --- a/pkg/systemd/generate/pods.go +++ b/pkg/systemd/generate/pods.go @@ -170,6 +170,7 @@ func PodUnits(pod *libpod.Pod, options entities.GenerateSystemdOptions) (map[str if ctr.ID() == infraID { continue } + ctrInfo, err := generateContainerInfo(ctr, options) if err != nil { return nil, err diff --git a/test/e2e/generate_systemd_test.go b/test/e2e/generate_systemd_test.go index b3cc35d1cb..b984a6ed5b 100644 --- a/test/e2e/generate_systemd_test.go +++ b/test/e2e/generate_systemd_test.go @@ -215,6 +215,22 @@ var _ = Describe("Podman generate systemd", func() { Expect(strings.Count(output, "RequiresMountsFor="+podmanTest.RunRoot)).To(Equal(3)) // The podman commands in the unit should not contain the root flags Expect(output).ToNot(ContainSubstring(" --runroot")) + + // Generating pod/container units for an init container is not + // supported (see #18585). + n = podmanTest.Podman([]string{"create", "--pod", "foo", "--init-ctr", "always", "--name", "foo-init", "alpine", "top"}) + n.WaitWithDefaultTimeout() + Expect(n).Should(Exit(0)) + // Fail for the pod + session = podmanTest.Podman([]string{"generate", "systemd", "foo"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(125)) + Expect(session.ErrorToString()).To(ContainSubstring("cannot generate systemd units for init containers")) + // Fail for the init container + session = podmanTest.Podman([]string{"generate", "systemd", "foo-init"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(125)) + Expect(session.ErrorToString()).To(ContainSubstring("cannot generate systemd units for init containers")) }) It("podman generate systemd pod --name --files", func() {