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):
|
class FilesystemController(ControllerPolicy):
|
||||||
def __init__(self, common):
|
def __init__(self, common):
|
||||||
super().__init__(common)
|
super().__init__(common)
|
||||||
self.model = FilesystemModel(self.prober)
|
self.model = FilesystemModel(self.prober, self.opts)
|
||||||
self.iscsi_model = IscsiDiskModel()
|
self.iscsi_model = IscsiDiskModel()
|
||||||
self.ceph_model = CephDiskModel()
|
self.ceph_model = CephDiskModel()
|
||||||
self.raid_model = RaidModel()
|
self.raid_model = RaidModel()
|
||||||
|
|
|
@ -169,10 +169,14 @@ class Blockdev():
|
||||||
def available(self):
|
def available(self):
|
||||||
''' return True if has free space or partitions not
|
''' return True if has free space or partitions not
|
||||||
assigned '''
|
assigned '''
|
||||||
if self.freespace > 0.0:
|
if not self.is_mounted() and self.freespace > 0.0:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mounted(self):
|
||||||
|
return self.is_mounted()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def usedspace(self, unit='b'):
|
def usedspace(self, unit='b'):
|
||||||
''' return amount of used space'''
|
''' return amount of used space'''
|
||||||
|
@ -269,8 +273,21 @@ class Blockdev():
|
||||||
with open('/proc/mounts') as pm:
|
with open('/proc/mounts') as pm:
|
||||||
mounts = pm.read()
|
mounts = pm.read()
|
||||||
|
|
||||||
regexp = '{}.*'.format(self.disk.devpath)
|
# collect any /dev/* device and use
|
||||||
matches = re.findall(regexp, mounts)
|
# 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:
|
if len(matches) > 0:
|
||||||
log.debug('Device is mounted: {}'.format(matches))
|
log.debug('Device is mounted: {}'.format(matches))
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -90,7 +90,8 @@ class FilesystemModel(ModelPolicy):
|
||||||
'leave unformatted'
|
'leave unformatted'
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, prober):
|
def __init__(self, prober, opts):
|
||||||
|
self.opts = opts
|
||||||
self.prober = prober
|
self.prober = prober
|
||||||
self.info = {}
|
self.info = {}
|
||||||
self.devices = {}
|
self.devices = {}
|
||||||
|
@ -140,6 +141,10 @@ class FilesystemModel(ModelPolicy):
|
||||||
size=self.info[disk].size)
|
size=self.info[disk].size)
|
||||||
return self.devices[disk]
|
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):
|
def get_partitions(self):
|
||||||
log.debug('probe_storage: get_partitions()')
|
log.debug('probe_storage: get_partitions()')
|
||||||
partitions = []
|
partitions = []
|
||||||
|
@ -154,7 +159,8 @@ class FilesystemModel(ModelPolicy):
|
||||||
return partitions
|
return partitions
|
||||||
|
|
||||||
def get_available_disks(self):
|
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):
|
def get_used_disks(self):
|
||||||
return [dev.disk.devpath for dev in self.devices.values()
|
return [dev.disk.devpath for dev in self.devices.values()
|
||||||
|
|
|
@ -380,6 +380,7 @@ class FilesystemView(ViewPolicy):
|
||||||
self.signal = signal
|
self.signal = signal
|
||||||
self.items = []
|
self.items = []
|
||||||
self.model.probe_storage() # probe before we complete
|
self.model.probe_storage() # probe before we complete
|
||||||
|
self.installable = True
|
||||||
self.body = [
|
self.body = [
|
||||||
Padding.center_79(Text("FILE SYSTEM")),
|
Padding.center_79(Text("FILE SYSTEM")),
|
||||||
Padding.center_79(self._build_partition_list()),
|
Padding.center_79(self._build_partition_list()),
|
||||||
|
@ -437,12 +438,17 @@ class FilesystemView(ViewPolicy):
|
||||||
|
|
||||||
def _build_buttons(self):
|
def _build_buttons(self):
|
||||||
log.debug('FileSystemView: building buttons')
|
log.debug('FileSystemView: building buttons')
|
||||||
buttons = [
|
buttons = []
|
||||||
Color.button(done_btn(on_press=self.done),
|
|
||||||
focus_map='button focus'),
|
# don't enable done botton if we can't install
|
||||||
Color.button(reset_btn(on_press=self.reset),
|
if self.installable:
|
||||||
focus_map='button focus')
|
buttons.append(
|
||||||
]
|
Color.button(done_btn(on_press=self.done),
|
||||||
|
focus_map='button focus'))
|
||||||
|
|
||||||
|
buttons.append(Color.button(reset_btn(on_press=self.reset),
|
||||||
|
focus_map='button focus'))
|
||||||
|
|
||||||
return Pile(buttons)
|
return Pile(buttons)
|
||||||
|
|
||||||
def _get_percent_free(self, device):
|
def _get_percent_free(self, device):
|
||||||
|
@ -459,7 +465,12 @@ class FilesystemView(ViewPolicy):
|
||||||
col_1 = []
|
col_1 = []
|
||||||
col_2 = []
|
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)
|
disk = self.model.get_disk_info(dname)
|
||||||
device = self.model.get_disk(dname)
|
device = self.model.get_disk(dname)
|
||||||
btn = menu_btn(label=disk.name,
|
btn = menu_btn(label=disk.name,
|
||||||
|
|
Loading…
Reference in New Issue