podman-compose down removes networks

Fixes #490

Signed-off-by: Timon de Groot <timon.degroot@hypernode.com>
This commit is contained in:
Timon de Groot 2024-10-17 16:40:18 +02:00
parent a3fb4b373a
commit db0aad97bd
6 changed files with 74 additions and 3 deletions

View File

@ -0,0 +1 @@
podman-compose down removes networks.

View File

@ -1452,6 +1452,24 @@ class Podman:
log.info("exit code: %s", exit_code) log.info("exit code: %s", exit_code)
return exit_code return exit_code
async def network_ls(self):
output = (
await self.output(
[],
"network",
[
"ls",
"--noheading",
"--filter",
f"label=io.podman.compose.project={self.compose.project_name}",
"--format",
"{{.Name}}",
],
)
).decode()
networks = output.splitlines()
return networks
async def volume_ls(self): async def volume_ls(self):
output = ( output = (
await self.output( await self.output(
@ -2612,7 +2630,7 @@ def get_volume_names(compose, cnt):
@cmd_run(podman_compose, "down", "tear down entire stack") @cmd_run(podman_compose, "down", "tear down entire stack")
async def compose_down(compose, args): async def compose_down(compose: PodmanCompose, args):
excluded = get_excluded(compose, args) excluded = get_excluded(compose, args)
podman_args = [] podman_args = []
timeout_global = getattr(args, "timeout", None) timeout_global = getattr(args, "timeout", None)
@ -2678,6 +2696,8 @@ async def compose_down(compose, args):
return return
for pod in compose.pods: for pod in compose.pods:
await compose.podman.run([], "pod", ["rm", pod["name"]]) await compose.podman.run([], "pod", ["rm", pod["name"]])
for network in await compose.podman.network_ls():
await compose.podman.run([], "network", ["rm", network])
@cmd_run(podman_compose, "ps", "show status of containers") @cmd_run(podman_compose, "ps", "show status of containers")

View File

@ -0,0 +1,23 @@
version: "3"
networks:
mystack:
services:
web1:
image: busybox
hostname: web1
command: ["/bin/busybox", "httpd", "-f", "-h", "/var/www/html", "-p", "8001"]
working_dir: /var/www/html
ports:
- 8001:8001
volumes:
- ./test1.txt:/var/www/html/index.txt:ro,z
web2:
image: busybox
hostname: web2
command: ["/bin/busybox", "httpd", "-f", "-h", "/var/www/html", "-p", "8001"]
working_dir: /var/www/html
ports:
- 8002:8001
volumes:
- ./test2.txt:/var/www/html/index.txt:ro,z

View File

@ -0,0 +1 @@
test1

View File

@ -0,0 +1 @@
test2

View File

@ -48,7 +48,7 @@ class TestPodmanCompose(unittest.TestCase, RunSubprocessMixin):
] ]
out, _ = self.run_subprocess_assert_returncode(run_cmd) out, _ = self.run_subprocess_assert_returncode(run_cmd)
self.assertIn(b'127.0.0.1\tlocalhost', out) self.assertIn(b"127.0.0.1\tlocalhost", out)
# Run it again to make sure we can run it twice. I saw an issue where a second run, with # Run it again to make sure we can run it twice. I saw an issue where a second run, with
# the container left up, would fail # the container left up, would fail
@ -67,7 +67,7 @@ class TestPodmanCompose(unittest.TestCase, RunSubprocessMixin):
] ]
out, _ = self.run_subprocess_assert_returncode(run_cmd) out, _ = self.run_subprocess_assert_returncode(run_cmd)
self.assertIn(b'127.0.0.1\tlocalhost', out) self.assertIn(b"127.0.0.1\tlocalhost", out)
# This leaves a container running. Not sure it's intended, but it matches docker-compose # This leaves a container running. Not sure it's intended, but it matches docker-compose
down_cmd = [ down_cmd = [
@ -187,3 +187,28 @@ class TestPodmanCompose(unittest.TestCase, RunSubprocessMixin):
], ],
1, 1,
) )
def test_down_with_network(self):
try:
self.run_subprocess_assert_returncode([
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "network", "docker-compose.yml"),
"up",
"-d",
])
output, _, _ = self.run_subprocess(["podman", "network", "ls"])
self.assertIn("network_mystack", output.decode())
finally:
self.run_subprocess_assert_returncode([
"coverage",
"run",
podman_compose_path(),
"-f",
os.path.join(test_path(), "network", "docker-compose.yml"),
"down",
])
output, _, _ = self.run_subprocess(["podman", "network", "ls"])
self.assertNotIn("network_mystack", output.decode())