From 0b853f29f44b846bee749e7ae9a5b42679f2649f Mon Sep 17 00:00:00 2001 From: Bhavin Gandhi Date: Sun, 5 Jun 2022 23:14:50 +0530 Subject: [PATCH] Ignore access mode when merging volumes short syntax The target path inside the container is treated as a key. Ref: https://github.com/compose-spec/compose-spec/blob/master/spec.md#merging-service-definitions Signed-off-by: Bhavin Gandhi --- podman_compose.py | 4 ++-- tests/volumes_merge/docker-compose.override.yaml | 7 +++++++ tests/volumes_merge/docker-compose.yaml | 11 +++++++++++ tests/volumes_merge/index.txt | 1 + tests/volumes_merge/override.txt | 1 + 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 tests/volumes_merge/docker-compose.override.yaml create mode 100644 tests/volumes_merge/docker-compose.yaml create mode 100644 tests/volumes_merge/index.txt create mode 100644 tests/volumes_merge/override.txt diff --git a/podman_compose.py b/podman_compose.py index 7ddfcbc..e23fff6 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -1315,11 +1315,11 @@ def rec_merge_one(target, source): if is_list(value2): if key == "volumes": # clean duplicate mount targets - pts = {v.split(":", 1)[1] for v in value2 if ":" in v} + pts = {v.split(":", 2)[1] for v in value2 if ":" in v} del_ls = [ ix for (ix, v) in enumerate(value) - if ":" in v and v.split(":", 1)[1] in pts + if ":" in v and v.split(":", 2)[1] in pts ] for ix in reversed(del_ls): del value[ix] diff --git a/tests/volumes_merge/docker-compose.override.yaml b/tests/volumes_merge/docker-compose.override.yaml new file mode 100644 index 0000000..66b892a --- /dev/null +++ b/tests/volumes_merge/docker-compose.override.yaml @@ -0,0 +1,7 @@ +version: "3" +services: + web: + volumes: + - ./override.txt:/var/www/html/index.html:ro,z + - ./override.txt:/var/www/html/index2.html:z + - ./override.txt:/var/www/html/index3.html diff --git a/tests/volumes_merge/docker-compose.yaml b/tests/volumes_merge/docker-compose.yaml new file mode 100644 index 0000000..adebc54 --- /dev/null +++ b/tests/volumes_merge/docker-compose.yaml @@ -0,0 +1,11 @@ +version: "3" +services: + web: + image: busybox + command: ["/bin/busybox", "httpd", "-f", "-h", "/var/www/html", "-p", "8080"] + ports: + - 8080:8080 + volumes: + - ./index.txt:/var/www/html/index.html:ro,z + - ./index.txt:/var/www/html/index2.html + - ./index.txt:/var/www/html/index3.html:ro diff --git a/tests/volumes_merge/index.txt b/tests/volumes_merge/index.txt new file mode 100644 index 0000000..09691c1 --- /dev/null +++ b/tests/volumes_merge/index.txt @@ -0,0 +1 @@ +The file from docker-compose.yaml diff --git a/tests/volumes_merge/override.txt b/tests/volumes_merge/override.txt new file mode 100644 index 0000000..5735f89 --- /dev/null +++ b/tests/volumes_merge/override.txt @@ -0,0 +1 @@ +The file from docker-compose.override.yaml