From 18ecd2046b49b4d2ca19141ff6c99a51e1163265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hi=E1=BA=BFu=20L=C3=AA?= Date: Wed, 4 Jun 2025 18:20:55 -0500 Subject: [PATCH] quadlet: generate RequiresMountsFor for Type=bind volumes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes sure that the volume source is available before the volume is created. Fixes: https://github.com/containers/podman/issues/26125 Signed-off-by: Hiếu Lê --- pkg/systemd/quadlet/quadlet.go | 3 +++ test/e2e/quadlet/device-bind.volume | 9 +++++++++ test/e2e/quadlet_test.go | 3 +-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 test/e2e/quadlet/device-bind.volume diff --git a/pkg/systemd/quadlet/quadlet.go b/pkg/systemd/quadlet/quadlet.go index 4fd27deab9..e11a7fde44 100644 --- a/pkg/systemd/quadlet/quadlet.go +++ b/pkg/systemd/quadlet/quadlet.go @@ -1115,6 +1115,9 @@ func ConvertVolume(volume *parser.UnitFile, name string, unitsInfoMap map[string if ok && len(devType) != 0 { if devValid { podman.add("--opt", fmt.Sprintf("type=%s", devType)) + if devType == "bind" { + service.Add(UnitGroup, "RequiresMountsFor", dev) + } } else { return nil, warnings, fmt.Errorf("key Type can't be used without Device") } diff --git a/test/e2e/quadlet/device-bind.volume b/test/e2e/quadlet/device-bind.volume new file mode 100644 index 0000000000..9b68ee9cd6 --- /dev/null +++ b/test/e2e/quadlet/device-bind.volume @@ -0,0 +1,9 @@ +## assert-key-contains Service ExecStart " --opt type=bind " +## assert-key-contains Service ExecStart " --opt device=/var/lib/data " +## assert-key-contains Service ExecStart " --opt nocopy " +## assert-key-contains Unit RequiresMountsFor "/var/lib/data" + +[Volume] +Device=/var/lib/data +Type=bind +Copy=no diff --git a/test/e2e/quadlet_test.go b/test/e2e/quadlet_test.go index daf63e9d04..982c9cd3ae 100644 --- a/test/e2e/quadlet_test.go +++ b/test/e2e/quadlet_test.go @@ -803,7 +803,6 @@ BOGUS=foo dirName := "test_subdir" err = CopyDirectory(filepath.Join("quadlet", dirName), quadletDir) - if err != nil { GinkgoWriter.Println("error:", err) } @@ -975,6 +974,7 @@ BOGUS=foo Entry("image.volume", "image.volume"), Entry("Volume - global args", "globalargs.volume"), Entry("Volume - Containers Conf Modules", "containersconfmodule.volume"), + Entry("Volume - Type=bind", "device-bind.volume"), Entry("Absolute Path", "absolute.path.kube"), Entry("Basic kube", "basic.kube"), @@ -1276,5 +1276,4 @@ BOGUS=foo }, ), ) - })