mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
fix(oci): keep installing when an image mountpoint is not a plain directory
- Log and continue when the helper refuses a mountpoint, as the seed capture does - Nothing is moved in that case, so the image installs as before
This commit is contained in:
@@ -407,7 +407,11 @@ def attach_mounts(service, temporary):
|
|||||||
owner = (100000,100000,0o755)
|
owner = (100000,100000,0o755)
|
||||||
if mount['type'] == 'managed-volume':
|
if mount['type'] == 'managed-volume':
|
||||||
from oci_image_mountpoints import normalize
|
from oci_image_mountpoints import normalize
|
||||||
normalize(root, [mount['container_path']])
|
try:
|
||||||
|
normalize(root, [mount['container_path']])
|
||||||
|
except (OSError, ValueError) as error:
|
||||||
|
# Nothing was moved; the image keeps its files as before.
|
||||||
|
print(f'Image defaults left in place for {mount["container_path"]}: {error}', file=sys.stderr)
|
||||||
finally:
|
finally:
|
||||||
run('pct','unmount',vmid)
|
run('pct','unmount',vmid)
|
||||||
if mount['type']=='managed-volume':
|
if mount['type']=='managed-volume':
|
||||||
|
|||||||
@@ -524,7 +524,10 @@ capture_volume_seeds() {
|
|||||||
if (( failed == 0 )); then
|
if (( failed == 0 )); then
|
||||||
# Data seeds were captured first; prepare the raw image even when the
|
# Data seeds were captured first; prepare the raw image even when the
|
||||||
# transaction will reuse a persistent disk and therefore skipped seeding.
|
# transaction will reuse a persistent disk and therefore skipped seeding.
|
||||||
oci_quiet python3 "$SCRIPT_DIR/oci_image_mountpoints.py" "$rootfs" "$DEPLOYMENT_FILE" || failed=1
|
# The helper changes nothing when it refuses a path (a link, another
|
||||||
|
# filesystem); the image then installs as it did before.
|
||||||
|
oci_quiet python3 "$SCRIPT_DIR/oci_image_mountpoints.py" "$rootfs" "$DEPLOYMENT_FILE" \
|
||||||
|
|| oci_log "Image defaults left in place: a volume mountpoint of the image is not a plain directory"
|
||||||
fi
|
fi
|
||||||
if (( mounted == 1 )); then
|
if (( mounted == 1 )); then
|
||||||
oci_quiet pct unmount "$VMID" || failed=1
|
oci_quiet pct unmount "$VMID" || failed=1
|
||||||
|
|||||||
@@ -119,5 +119,15 @@ class ImageMountpointTests(unittest.TestCase):
|
|||||||
self.assertEqual(self.normalize(), [])
|
self.assertEqual(self.normalize(), [])
|
||||||
|
|
||||||
|
|
||||||
|
def test_installers_keep_installing_when_a_mountpoint_is_refused(self):
|
||||||
|
# A refused path changes nothing, so the image installs as it did before.
|
||||||
|
remote = MODULE.parent
|
||||||
|
script = (remote / 'install_oci.sh').read_text()
|
||||||
|
call = script[script.index('oci_image_mountpoints.py'):]
|
||||||
|
self.assertTrue(call.split('\n', 2)[1].strip().startswith('|| oci_log'))
|
||||||
|
stack = (remote / 'install_generic_stack.py').read_text()
|
||||||
|
block = stack[stack.index('normalize(root, [mount'):][:400]
|
||||||
|
self.assertIn('except (OSError, ValueError)', block)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user