Implement a stack-based signal class to push and pop menu levels
Switch navigation signals to use 'menu:' for filtering
Ensure all view classes subclass from ViewPolicy for common keypress
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
When we create virtual deviecs (raid, lvm and bcache)
we store constructed info dictionaries; these must be
removed when we reset the model state.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
When fixing show-disk-info on virtio devices, a thinko when
indexing the info structure caused issues when looking at
a secondary clause in a compound statement. Fix this by
extracting the value via a .get and checking.
- Also include a probert dump of a virtio-based cloud image
for testing with virtio devices.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Move mountpoint validation into the model for re-use now that
we have two users of it (AddFormat, AddPartition).
- Use Exceptions to pass back the error message to be updated on
the widget.
- Fix issue with repeated checking of the mountpoint which would
grow the error message continually.
- Fix issue with selected device indexing. This was missed due to
a misspelling of the signal it emitted and accidently behaved as
we expected.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
RAID devices require special handling since they cannot be partitioned.
Adjust the blockdev model to accomodate this.
Fix sorting of our actions to handle proper ordering when using RAID devices
Implement whole-disk formatting view and controller
Update cloud-init configuration to ensure repeated runs of installer work
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
When we encounter an error before we invoke curtin, emit
a new signal, filesystem:error and present an error
UI for the user and return them to main, from there they
can quit.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
The spec calls for invoking hdparm -i on the device, but not all of our
devices will display hdparm data (virtual, ceph, or other such devices).
Additionally the bulk if the data in hdparm itself is not really useful
in helping users identify a specific device. Instead, display a short
set of helpful info about the device:
- /dev/XXXX
- Vendor
- Model
- Serial
- Size (in human-readable and bytes)
- devpath (/devices/XXXX)
- rotational (true or false)
The current UX requires us to select another disk after returning to
the list, with this patch though we enable switching between the
available disks via 'n' and 'p', or 'j' and 'k', which will be switched
to 'tab' and 'shift tab'.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- add blockdev tests on available_partitions
- fix type issue in Disk.partition OrderedDict keys, always use integers
- Add __repr__ for Disk related Actions
- Fix issue with available partition logic, ensure we and them together
- Filter out 'leave unformatted' fstype, set to None as needed.
- Whitespace cleanup in unittests
- add fsm test on get_partitions
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Forgot to add __init__.py in tests subdir to make module.
Add a few blockdev partition tests and fixes for their issues.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
mdadm supports using whole disks and empty partitions.
Update model to define empty disks and empty partitions.
This allows one to construct a raid, and then use that raid
to construct further raid (raid0 multiple raid1s).
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Update filesystem model to check if we have an existing device
that's marked bootable.
- Update look at all disk mount points, not just the current one
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Introduce a new Raiddev class to hold raid virtual device.
Add RaidAction to emit correct storage config
Tested with raid level 0 only.
Not sure if we can allow partitioning of raid devices. Documentation
says it can be done but curtin will need to 'make it correctly'.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Enhance our mounted disk detection. Don't display these
devices unless we're in dry-run mode. Add support for
the case where we don't have any disks and prevent
the installer from progressing.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Adds ability to view disk information via hdparm
if run as root, otherwise, will print error to
the ui (ie. permission denied.)
As a result updated the run_command routine
to be a little more robust.
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
- Fix max size partition edge case
- Ensure if nothing is entered we select the max size
- Adjust offset and size calculations for actions
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
There was a mismatch between what human size units we accepted
and what we matched for in the view validator. Fix that by
ensuring all places use the HUMAN_BYTES variable, including building
the multiplier from the listed HUMAN_BYTES.
Also drop the use of mixed case for the units, now all size units
must be capital (B, K, M, G, T, P) etc.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Allow user to specify a probert machine configuration file to be
used during the installer. If presented with the config file
no probing of the host will occur.
In the case that disks don't have a size in the data collected then
they'll be marked as USED.
Add a few example machines and update the README on how to specify.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Using parted required root privileges since it opened the underlying device.
Instead create our own Disk model and use sysfs interface for extracting
size information.
This also clears the way for providing device data via probert input. This
means we can feed subiquity a probert dump and have it present that to
the installer UI even if we're running on a different system.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Ensure we don't explode on input for partition size
- Don't append error messages to input fields as it
can DOS the input boxes.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Remove the error when converting sizes between input and initial value
there is a rounding error in the floating point convertion when
passing values between humanize() and dehumanize().
- Fix the error when using the full size of the disk as the first
partition and not accounting for the GPT bios size
- Implement percentage used in Filesystem Views
- Consolidate on unit keywords (single char only)
- use humanize() to append the correct unit size, remove all
hard-coded sizes when fetching size
- fix bug in calculating total disk size by only asking for the
largest available partition from parted.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
The previous organization was in place to reduce the number of open
files when working on getting the demo into shape. Since we've completed
the demo revert back to our MVC model incorporating the latest changes
that were made during that time leading up to the demo.
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
Partial implementation using parted to model new partitions.
Add a method to track sequential actions taken against block
device and can write out a storage config file for curtin.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
The logging data generated during storage probing is
hard to read, so instead, dump the data out via json.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Use updated probert *Info class for accessing object data
- Add --dry-run parameter to prevent invoking curtin when testing
- Add new make target to run ui-view by default with --dry-run
- Use a template to write out curtin config file for installation
- Use virtio disks and multiple nics to test probing.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Update subiquity welcome controller to call probert to extract
host information and present it to the user briefly before
invokin the curtin installer.
Add the install_src to git clone probert. Pack this as a tarball
in the user-data like subiquity.
Update user-data package installs for new probert deps.
Modify boot parameters to handle systemd persistent nic naming;
we may not always have eth0 as a nic. Subsequently update
user-data to use bootcmd to automatically attempt to bring up
nics during the boot before the installer.
Finally fix commandline parsing/output in geninstaller.
Implement version parameter and better caching of previous
maas ephemeral images.
Fix issue with removing cache after unpacking rootfs which is
now owned by root (add sudo to rm of cache).
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>