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>
If we fail to find curtin, we don't return a valid path
and this confuses the run async, so instead return
/bin/false which will return non-zero and trip the
async failure detection.
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
Testing this out, I never saw any of the utf-8 output.
Instead use simple ascii ala kirby. Also replace the
try:except with a modulo operation to index the list.
Drop the futures import.
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>
Add some probing data to use with the FilesystemModel
Add fakes class to handle fetching mock data
Add initial unittest
Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
- Use nosetests3 to call unit tests
- Ensure all Actions use the 'type' property
- Implement remaining Blockdev unit tests
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>