diff --git a/src/aleph/vm/controllers/firecracker/executable.py b/src/aleph/vm/controllers/firecracker/executable.py index c6d6721fa..7249be9c7 100644 --- a/src/aleph/vm/controllers/firecracker/executable.py +++ b/src/aleph/vm/controllers/firecracker/executable.py @@ -114,7 +114,7 @@ async def download_kernel(self): async def download_volumes(self): volumes = [] - # TODO: Download in parallel + # TODO: Download in parallel and prevent duplicated volume names for i, volume in enumerate(self.message_content.volumes): # only persistant volume has name and mount if isinstance(volume, PersistentVolume): diff --git a/src/aleph/vm/storage.py b/src/aleph/vm/storage.py index 15d3b9384..58d6f78c2 100644 --- a/src/aleph/vm/storage.py +++ b/src/aleph/vm/storage.py @@ -376,12 +376,14 @@ async def get_volume_path(volume: MachineVolume, namespace: str) -> Path: return await get_existing_file(ref) elif isinstance(volume, PersistentVolume | RootfsVolume): volume_name = volume.name if isinstance(volume, PersistentVolume) else "rootfs" + if volume.persistence != VolumePersistence.host: msg = "Only 'host' persistence is supported" raise NotImplementedError(msg) if not re.match(r"^[\w\-_/]+$", volume_name): - msg = f"Invalid value for volume name: {repr(volume_name)}" - raise ValueError(msg) + # Sanitize volume names + logger.debug(f"Invalid values for volume name: {repr(volume_name)} detected, sanitizing") + volume_name = re.sub(r"[^\w\-_]", "_", volume_name) (Path(settings.PERSISTENT_VOLUMES_DIR) / namespace).mkdir(exist_ok=True) if volume.parent: return await create_devmapper(volume, namespace)