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>
Include the ui path in the view logging to help indicate which parts of the MVC
are logging debug data.
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>
When instantiating the filesystem views we operate on the
input (converting disk string to disk object) but then in
the error paths, submitted the disk-object as the reference
which blew up the device dictionary. Now we explicitly keep
both the input and the object and use accordingly.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
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>
Attempt to shrink the partition size for the rootfs via mkfs options
Ensure we use the same mkfs and rsync options everywhere.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Make sure we continue to use 1M alignment, this helps
parted shift things around properly. Don't reserve
space for root in installer image since it's read-only.
Add some fudge factor to the root image to allow for
sparse expansion.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Wily images and newer now contain a lxcbr0 by default.
Ignore this interface and don't attempt to dhcp autostart it.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
The size of the rootfs fluxuates and sometimes does not fit in the
pre-allocated sizes. Instead, calculate the size needed for the
rootfs read-only partition (+ 100M padding) and use the remaining
space for the overlay partition as it's needed when the install
image updates it's apt repository.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
validate the empty disks/partitions. Note that blockdev
class makes use of poking host's mounts which triggers some
transient failures.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Ensure that the / mount point is always first
but returning an explict value (0) for / mount action.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Speed up install time by pre-installing required curtin packages
in the installer image. Do this by optionally exploiting a
curtin feature which handles preparing the target for installation
of services that we don't want running during the image build.
Fallback on simple apt-get install but filter out daemon services
as this will break the image build.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Instead of packing up curtin via source, build a
deb from the source and inject that into the installer.
This also means we always are consuming an 'installed'
curtin (aka /usr/bin/curtin).
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>
man 8 useradd says:
It is usually recommended to only use usernames that begin with a
lower case letter or an underscore, followed by lower case
letters, digits, underscores, or dashes. They can end with a
dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?
On Debian, the only constraints are that usernames must neither
start with a dash ('-') nor plus ('+') nor tilde ('~') nor
contain a colon (':'), a comma (','), or a whitespace (space: ' ',
end of line: '\n', tabulation: '\t', etc.). Note that using a
slash ('/') may break the default algorithm for the definition
of the user's home directory.
Usernames may only be up to 32 characters long.
In this patch we implement most of this. Subset of the regular
expression suggested above is used to limit input into the username
field. We've not yet determined how to provide a fixed width widget
so at this time, user can input more than 32 characters, but upon
selectin done, we raise and error and reset the state.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Switch to yaml.safe_load() which throws errors when fed /dev/zero.
- Add a new ProberExecption and bubble that up to the main program
- Update unit tests to mock out repeated calls to safe_load which slowed
down the unittest run.
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>
The single key 'Q' or 'q' was a bridge too far since we take
input at anytime and can surprise users. Instead use a key
combination, control-x. Clean up keypress handlers to match
urwid requirements (return None when handled, otherwise False,
or pass to super.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Some disk devices (virtio) don't have serial numbers by default.
This breaks curtin which requires a serial or a path to uniquely
find the target disks. Add a fallback to device path if the
current device includes the eye catcher 'Unknown Serial' which
is set by probert for devices that do not have a serial number.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>