From f0bae1e2d99f4cb5b18a9949c3f4ab498fb72f8e Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Mon, 25 Mar 2024 08:18:52 +0200 Subject: [PATCH] Don't resolve links to compose file docker-compose uses the path to the compose file even if it's symlink to get the context directory. Signed-off-by: Povilas Kanapickas --- .../dont-resolve-links-to-compose-file.bugfix | 1 + podman_compose.py | 1 - .../compose_symlink/docker-compose.yml | 1 + .../filesystem/compose_symlink/file | 1 + .../compose_symlink_dest/docker-compose.yml | 7 +++ .../filesystem/compose_symlink_dest/file | 1 + .../integration/filesystem/test_filesystem.py | 47 +++++++++++++++++++ 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 newsfragments/dont-resolve-links-to-compose-file.bugfix create mode 120000 tests/integration/filesystem/compose_symlink/docker-compose.yml create mode 100644 tests/integration/filesystem/compose_symlink/file create mode 100644 tests/integration/filesystem/compose_symlink_dest/docker-compose.yml create mode 100644 tests/integration/filesystem/compose_symlink_dest/file create mode 100644 tests/integration/filesystem/test_filesystem.py diff --git a/newsfragments/dont-resolve-links-to-compose-file.bugfix b/newsfragments/dont-resolve-links-to-compose-file.bugfix new file mode 100644 index 0000000..6f36b83 --- /dev/null +++ b/newsfragments/dont-resolve-links-to-compose-file.bugfix @@ -0,0 +1 @@ +Fix compatibility with docker-compose in how symlinks to docker-compose.yml are handled. diff --git a/podman_compose.py b/podman_compose.py index 4be0a54..ec6471c 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -1785,7 +1785,6 @@ def _parse_compose_file(self): sys.exit(1) # make absolute relative_files = files - files = list(map(os.path.realpath, files)) filename = files[0] project_name = args.project_name # no_ansi = args.no_ansi diff --git a/tests/integration/filesystem/compose_symlink/docker-compose.yml b/tests/integration/filesystem/compose_symlink/docker-compose.yml new file mode 120000 index 0000000..bf4e5d6 --- /dev/null +++ b/tests/integration/filesystem/compose_symlink/docker-compose.yml @@ -0,0 +1 @@ +../compose_symlink_dest/docker-compose.yml \ No newline at end of file diff --git a/tests/integration/filesystem/compose_symlink/file b/tests/integration/filesystem/compose_symlink/file new file mode 100644 index 0000000..33431d3 --- /dev/null +++ b/tests/integration/filesystem/compose_symlink/file @@ -0,0 +1 @@ +data_compose_symlink diff --git a/tests/integration/filesystem/compose_symlink_dest/docker-compose.yml b/tests/integration/filesystem/compose_symlink_dest/docker-compose.yml new file mode 100644 index 0000000..3b1e99c --- /dev/null +++ b/tests/integration/filesystem/compose_symlink_dest/docker-compose.yml @@ -0,0 +1,7 @@ +version: "3" +services: + container1: + image: nopush/podman-compose-test + command: ["/bin/busybox", "cat", "/file"] + volumes: + - "./file:/file" diff --git a/tests/integration/filesystem/compose_symlink_dest/file b/tests/integration/filesystem/compose_symlink_dest/file new file mode 100644 index 0000000..0dd80f8 --- /dev/null +++ b/tests/integration/filesystem/compose_symlink_dest/file @@ -0,0 +1 @@ +data_compose_symlink_dest diff --git a/tests/integration/filesystem/test_filesystem.py b/tests/integration/filesystem/test_filesystem.py new file mode 100644 index 0000000..afd806c --- /dev/null +++ b/tests/integration/filesystem/test_filesystem.py @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: GPL-2.0 + + +import os +import unittest + +from tests.integration.test_podman_compose import podman_compose_path +from tests.integration.test_podman_compose import test_path +from tests.integration.test_utils import RunSubprocessMixin + + +class TestFilesystem(unittest.TestCase, RunSubprocessMixin): + def test_compose_symlink(self): + """The context of podman-compose.yml should come from the same directory as the file even + if it is a symlink + """ + + compose_path = os.path.join(test_path(), "filesystem/compose_symlink/docker-compose.yml") + + try: + self.run_subprocess_assert_returncode([ + podman_compose_path(), + "-f", + compose_path, + "up", + "-d", + "container1", + ]) + + out, _ = self.run_subprocess_assert_returncode([ + podman_compose_path(), + "-f", + compose_path, + "logs", + "container1", + ]) + + # BUG: figure out why cat is called twice + self.assertEqual(out, b'data_compose_symlink\ndata_compose_symlink\n') + + finally: + out, _ = self.run_subprocess_assert_returncode([ + podman_compose_path(), + "-f", + compose_path, + "down", + ])