mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
fix(oci): reject missing managed mount roots
This commit is contained in:
@@ -84,10 +84,7 @@ def remove_empty_format_directories(rootfs, deployment, backed_only=True, target
|
|||||||
if not paths:
|
if not paths:
|
||||||
return 0
|
return 0
|
||||||
flags = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW
|
flags = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW
|
||||||
try:
|
|
||||||
root = os.open(rootfs, flags)
|
root = os.open(rootfs, flags)
|
||||||
except FileNotFoundError:
|
|
||||||
return 0
|
|
||||||
removed = 0
|
removed = 0
|
||||||
try:
|
try:
|
||||||
for path in paths:
|
for path in paths:
|
||||||
@@ -98,8 +95,6 @@ def remove_empty_format_directories(rootfs, deployment, backed_only=True, target
|
|||||||
os.close(current)
|
os.close(current)
|
||||||
current = following
|
current = following
|
||||||
removed += int(remove_empty_at(current))
|
removed += int(remove_empty_at(current))
|
||||||
except FileNotFoundError:
|
|
||||||
continue
|
|
||||||
except OSError as error:
|
except OSError as error:
|
||||||
if error.errno in (errno.ELOOP, errno.ENOTDIR):
|
if error.errno in (errno.ELOOP, errno.ENOTDIR):
|
||||||
raise ValueError('Symbolic link or invalid managed volume path') from error
|
raise ValueError('Symbolic link or invalid managed volume path') from error
|
||||||
|
|||||||
@@ -174,6 +174,21 @@ class FormatDirectoryTests(unittest.TestCase):
|
|||||||
opened.assert_not_called()
|
opened.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_missing_rootfs_is_an_error_without_remove(self):
|
||||||
|
with tempfile.TemporaryDirectory() as tmp, patch.object(volumes.os, 'rmdir') as remove:
|
||||||
|
with self.assertRaises(FileNotFoundError):
|
||||||
|
volumes.remove_empty_format_directories(Path(tmp) / 'missing', {'mounts': [
|
||||||
|
{'container_path': '/config', 'type': 'managed-volume', 'backup': True}]})
|
||||||
|
remove.assert_not_called()
|
||||||
|
|
||||||
|
def test_missing_managed_mount_is_an_error_without_remove(self):
|
||||||
|
with tempfile.TemporaryDirectory() as tmp, patch.object(volumes.os, 'rmdir') as remove:
|
||||||
|
with self.assertRaises(FileNotFoundError):
|
||||||
|
volumes.remove_empty_format_directories(Path(tmp), {'mounts': [
|
||||||
|
{'container_path': '/missing', 'type': 'managed-volume', 'backup': True}]})
|
||||||
|
remove.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
class StartupContractTests(unittest.TestCase):
|
class StartupContractTests(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
directory = tempfile.TemporaryDirectory(); self.addCleanup(directory.cleanup)
|
directory = tempfile.TemporaryDirectory(); self.addCleanup(directory.cleanup)
|
||||||
|
|||||||
Reference in New Issue
Block a user