Skip to content

Commit 3d043f8

Browse files
authored
Fix volume removing for reused names (#53)
1 parent 67e5181 commit 3d043f8

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

sipssert/scenario.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from sipssert import tracer
3030
from sipssert import tasks_list
3131
from sipssert import junit_reporter
32+
from docker.errors import NotFound, APIError
3233

3334
LOGS_DIR = "logs"
3435
NETWORK_CAP = "net_capture"
@@ -91,13 +92,20 @@ def create_scen_logs_dir(self):
9192
def create_volumes(self):
9293
if isinstance(self.volumes, list):
9394
self.volumes = {volume: {} for volume in self.volumes}
95+
96+
self.created_volumes = set()
97+
9498
for volume_name in self.volumes:
9599
try:
100+
self.controller.docker.volumes.get(volume_name)
101+
logger.slog.info(f"volume {volume_name} already exists")
102+
except NotFound:
96103
self.controller.docker.volumes.create(name=volume_name,
97-
driver='local',
98-
labels={'scenario': self.name})
104+
driver='local',
105+
labels={'scenario': self.name})
106+
self.created_volumes.add(volume_name)
99107
logger.slog.info(f"volume {volume_name} created in scenario {self.name}")
100-
except Exception as exc:
108+
except APIError as exc:
101109
logger.slog.error(f"could not create volume {volume_name} in scenario {self.name}")
102110
logger.slog.exception(exc)
103111
self.volumes.pop(volume_name)
@@ -130,14 +138,14 @@ def run(self):
130138
self.cleanup_tasks.run(force_all=True)
131139
except Exception:
132140
logger.slog.exception("Error occured during cleanup task")
133-
for volume_name in self.volumes:
141+
for volume_name in self.created_volumes:
134142
try:
135143
volume = self.controller.docker.volumes.get(volume_name)
136-
volume_labels = volume.attrs.get('Labels', {})
137-
if volume_labels.get('scenario') == self.name:
138-
self.controller.docker.volumes.get(volume.name).remove()
139-
logger.slog.info(f"volume {volume} removed")
140-
except Exception as exc:
144+
volume.remove()
145+
logger.slog.info(f"volume {volume_name} removed")
146+
except NotFound:
147+
logger.slog.warning(f"volume {volume_name} not found during cleanup")
148+
except APIError as exc:
141149
logger.slog.error(f"could not remove volume {volume}")
142150
logger.slog.exception(exc)
143151
if not self.no_trace:

0 commit comments

Comments
 (0)