|
29 | 29 | from sipssert import tracer |
30 | 30 | from sipssert import tasks_list |
31 | 31 | from sipssert import junit_reporter |
| 32 | +from docker.errors import NotFound, APIError |
32 | 33 |
|
33 | 34 | LOGS_DIR = "logs" |
34 | 35 | NETWORK_CAP = "net_capture" |
@@ -91,13 +92,20 @@ def create_scen_logs_dir(self): |
91 | 92 | def create_volumes(self): |
92 | 93 | if isinstance(self.volumes, list): |
93 | 94 | self.volumes = {volume: {} for volume in self.volumes} |
| 95 | + |
| 96 | + self.created_volumes = set() |
| 97 | + |
94 | 98 | for volume_name in self.volumes: |
95 | 99 | try: |
| 100 | + self.controller.docker.volumes.get(volume_name) |
| 101 | + logger.slog.info(f"volume {volume_name} already exists") |
| 102 | + except NotFound: |
96 | 103 | 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) |
99 | 107 | logger.slog.info(f"volume {volume_name} created in scenario {self.name}") |
100 | | - except Exception as exc: |
| 108 | + except APIError as exc: |
101 | 109 | logger.slog.error(f"could not create volume {volume_name} in scenario {self.name}") |
102 | 110 | logger.slog.exception(exc) |
103 | 111 | self.volumes.pop(volume_name) |
@@ -130,14 +138,14 @@ def run(self): |
130 | 138 | self.cleanup_tasks.run(force_all=True) |
131 | 139 | except Exception: |
132 | 140 | logger.slog.exception("Error occured during cleanup task") |
133 | | - for volume_name in self.volumes: |
| 141 | + for volume_name in self.created_volumes: |
134 | 142 | try: |
135 | 143 | 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: |
141 | 149 | logger.slog.error(f"could not remove volume {volume}") |
142 | 150 | logger.slog.exception(exc) |
143 | 151 | if not self.no_trace: |
|
0 commit comments