resize: check supported fs types
This commit is contained in:
parent
ce3126efb6
commit
85d3a49221
|
@ -15,6 +15,8 @@
|
|||
|
||||
import logging
|
||||
|
||||
from curtin.block import get_resize_fstypes
|
||||
|
||||
from subiquity.common.filesystem import boot, gaps
|
||||
from subiquity.common.types import Bootloader
|
||||
from subiquity.models.filesystem import (
|
||||
|
@ -165,6 +167,13 @@ class FilesystemManipulator:
|
|||
self.delete_partition(p, True)
|
||||
self.clear(disk)
|
||||
|
||||
def can_resize_partition(self, partition):
|
||||
if not partition.preserve:
|
||||
return True
|
||||
if partition.format not in get_resize_fstypes():
|
||||
return False
|
||||
return True
|
||||
|
||||
def partition_disk_handler(self, disk, spec, *, partition=None, gap=None):
|
||||
log.debug('partition_disk_handler: %s %s %s %s',
|
||||
disk, spec, partition, gap)
|
||||
|
@ -177,6 +186,8 @@ class FilesystemManipulator:
|
|||
size_change = new_size - partition.size
|
||||
if size_change > gap_size:
|
||||
raise Exception("partition size too large")
|
||||
if not self.can_resize_partition(partition):
|
||||
raise Exception("partition cannot support resize")
|
||||
partition.size = new_size
|
||||
partition.resize = True
|
||||
for part in trailing:
|
||||
|
|
|
@ -29,6 +29,7 @@ from subiquity.models.tests.test_filesystem import (
|
|||
make_disk,
|
||||
make_model,
|
||||
make_partition,
|
||||
make_filesystem,
|
||||
)
|
||||
from subiquity.models.filesystem import (
|
||||
Bootloader,
|
||||
|
@ -663,3 +664,26 @@ class TestReformat(unittest.TestCase):
|
|||
disk = make_disk(self.manipulator.model, ptable=None)
|
||||
self.manipulator.reformat(disk, 'msdos')
|
||||
self.assertEqual('msdos', disk.ptable)
|
||||
|
||||
|
||||
class TestCanResize(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.manipulator = make_manipulator()
|
||||
self.manipulator.model._probe_data = {}
|
||||
|
||||
def test_resize_unpreserved(self):
|
||||
disk = make_disk(self.manipulator.model, ptable=None)
|
||||
part = make_partition(self.manipulator.model, disk, preserve=False)
|
||||
self.assertTrue(self.manipulator.can_resize_partition(part))
|
||||
|
||||
def test_resize_ext4(self):
|
||||
disk = make_disk(self.manipulator.model, ptable=None)
|
||||
part = make_partition(self.manipulator.model, disk, preserve=True)
|
||||
make_filesystem(self.manipulator.model, partition=part, fstype='ext4')
|
||||
self.assertTrue(self.manipulator.can_resize_partition(part))
|
||||
|
||||
def test_resize_invalid(self):
|
||||
disk = make_disk(self.manipulator.model, ptable=None)
|
||||
part = make_partition(self.manipulator.model, disk, preserve=True)
|
||||
make_filesystem(self.manipulator.model, partition=part, fstype='asdf')
|
||||
self.assertFalse(self.manipulator.can_resize_partition(part))
|
||||
|
|
|
@ -21,6 +21,7 @@ from subiquity.models.filesystem import (
|
|||
Bootloader,
|
||||
dehumanize_size,
|
||||
Disk,
|
||||
Filesystem,
|
||||
FilesystemModel,
|
||||
get_raid_size,
|
||||
humanize_size,
|
||||
|
@ -179,6 +180,10 @@ def make_partition(model, device=None, *, preserve=False, size=None,
|
|||
return partition
|
||||
|
||||
|
||||
def make_filesystem(model, *, partition, **kw):
|
||||
return Filesystem(m=model, volume=partition, **kw)
|
||||
|
||||
|
||||
def make_model_and_partition(bootloader=None):
|
||||
model, disk = make_model_and_disk(bootloader)
|
||||
return model, make_partition(model, disk)
|
||||
|
|
Loading…
Reference in New Issue