Merge pull request #52 from CanonicalLtd/fix-avail-disk-view
Don't display mounted disks except during dry-run
This commit is contained in:
commit
80ca9c1cae
|
@ -37,7 +37,7 @@ UEFI_GRUB_SIZE_BYTES = 512 * 1024 * 1024 # 512MiB EFI partition
|
|||
class FilesystemController(ControllerPolicy):
|
||||
def __init__(self, common):
|
||||
super().__init__(common)
|
||||
self.model = FilesystemModel(self.prober)
|
||||
self.model = FilesystemModel(self.prober, self.opts)
|
||||
self.iscsi_model = IscsiDiskModel()
|
||||
self.ceph_model = CephDiskModel()
|
||||
self.raid_model = RaidModel()
|
||||
|
|
|
@ -169,10 +169,14 @@ class Blockdev():
|
|||
def available(self):
|
||||
''' return True if has free space or partitions not
|
||||
assigned '''
|
||||
if self.freespace > 0.0:
|
||||
if not self.is_mounted() and self.freespace > 0.0:
|
||||
return True
|
||||
return False
|
||||
|
||||
@property
|
||||
def mounted(self):
|
||||
return self.is_mounted()
|
||||
|
||||
@property
|
||||
def usedspace(self, unit='b'):
|
||||
''' return amount of used space'''
|
||||
|
@ -269,8 +273,21 @@ class Blockdev():
|
|||
with open('/proc/mounts') as pm:
|
||||
mounts = pm.read()
|
||||
|
||||
regexp = '{}.*'.format(self.disk.devpath)
|
||||
matches = re.findall(regexp, mounts)
|
||||
# collect any /dev/* device and use
|
||||
# dict to uniq the list of devices mounted
|
||||
mounted_devs = {}
|
||||
for mnt in re.findall('/dev/.*', mounts):
|
||||
log.debug('mnt={}'.format(mnt))
|
||||
(devpath, mount, *_) = mnt.split()
|
||||
# resolve any symlinks
|
||||
mounted_devs.update(
|
||||
{os.path.realpath(devpath): mount})
|
||||
|
||||
log.debug('mounted_devs: {}'.format(mounted_devs))
|
||||
matches = [dev for dev in mounted_devs.keys()
|
||||
if dev.startswith(self.disk.devpath)]
|
||||
log.debug('Checking if {} is in {}'.format(
|
||||
self.disk.devpath, matches))
|
||||
if len(matches) > 0:
|
||||
log.debug('Device is mounted: {}'.format(matches))
|
||||
return True
|
||||
|
|
|
@ -90,7 +90,8 @@ class FilesystemModel(ModelPolicy):
|
|||
'leave unformatted'
|
||||
]
|
||||
|
||||
def __init__(self, prober):
|
||||
def __init__(self, prober, opts):
|
||||
self.opts = opts
|
||||
self.prober = prober
|
||||
self.info = {}
|
||||
self.devices = {}
|
||||
|
@ -140,6 +141,10 @@ class FilesystemModel(ModelPolicy):
|
|||
size=self.info[disk].size)
|
||||
return self.devices[disk]
|
||||
|
||||
def get_disks(self):
|
||||
return [self.get_disk(d) for d in sorted(self.info.keys())
|
||||
if len(d) > 0]
|
||||
|
||||
def get_partitions(self):
|
||||
log.debug('probe_storage: get_partitions()')
|
||||
partitions = []
|
||||
|
@ -154,7 +159,8 @@ class FilesystemModel(ModelPolicy):
|
|||
return partitions
|
||||
|
||||
def get_available_disks(self):
|
||||
return sorted(self.info.keys())
|
||||
return [dev.disk.devpath for dev in self.get_disks()
|
||||
if self.opts.dry_run is True or dev.mounted is False]
|
||||
|
||||
def get_used_disks(self):
|
||||
return [dev.disk.devpath for dev in self.devices.values()
|
||||
|
|
|
@ -380,6 +380,7 @@ class FilesystemView(ViewPolicy):
|
|||
self.signal = signal
|
||||
self.items = []
|
||||
self.model.probe_storage() # probe before we complete
|
||||
self.installable = True
|
||||
self.body = [
|
||||
Padding.center_79(Text("FILE SYSTEM")),
|
||||
Padding.center_79(self._build_partition_list()),
|
||||
|
@ -437,12 +438,17 @@ class FilesystemView(ViewPolicy):
|
|||
|
||||
def _build_buttons(self):
|
||||
log.debug('FileSystemView: building buttons')
|
||||
buttons = [
|
||||
buttons = []
|
||||
|
||||
# don't enable done botton if we can't install
|
||||
if self.installable:
|
||||
buttons.append(
|
||||
Color.button(done_btn(on_press=self.done),
|
||||
focus_map='button focus'),
|
||||
Color.button(reset_btn(on_press=self.reset),
|
||||
focus_map='button focus')
|
||||
]
|
||||
focus_map='button focus'))
|
||||
|
||||
buttons.append(Color.button(reset_btn(on_press=self.reset),
|
||||
focus_map='button focus'))
|
||||
|
||||
return Pile(buttons)
|
||||
|
||||
def _get_percent_free(self, device):
|
||||
|
@ -459,7 +465,12 @@ class FilesystemView(ViewPolicy):
|
|||
col_1 = []
|
||||
col_2 = []
|
||||
|
||||
for dname in self.model.get_available_disks():
|
||||
avail_disks = self.model.get_available_disks()
|
||||
if len(avail_disks) == 0:
|
||||
self.installable = False
|
||||
return Pile([Color.info_minor(Text("No available disks."))])
|
||||
|
||||
for dname in avail_disks:
|
||||
disk = self.model.get_disk_info(dname)
|
||||
device = self.model.get_disk(dname)
|
||||
btn = menu_btn(label=disk.name,
|
||||
|
|
Loading…
Reference in New Issue