urwid doesn't know about the _select_first/last_selectable methods our
containers use to make tab-cycling work so its WidgetWrap doesn't
forward them along. So add a WidgetWrap that does, and use it in the one
place that it matters so far (more coming soon!).
This very simply adds a mirror panel to subiquity.
Nothing intelligent at all. Just defaults to filling with
http://archive.ubuntu.com/ubuntu/ and lets user fill it in.
As implemented here, the mirror only replaces primary mirror,
security will still use http://security.ubuntu.com/ubuntu/
I fixed the 'c u r t i n b l o c k'... report event in the code a few
commits back, but when using dry-run it was still present because
dry run uses the events json rather than real curtin output.
This just updates the events json to be in line with reality as
it was confusing to see it in the dry run path.
This provides the ability to install from a different source
by providing it on the command line. So we can boot into a system,
and then run:
subiquity --source=/tmp/xenial-server-cloudimg-amd64.squashfs
or
subiquity --source=http://cloud-images.ubuntu.com/.../some.squashfs
And install that image rather than the hard coded paths.
Subiquity was specifying the partitioning command to curtin like this:
'partitioning_commands': {
'builtin': 'curtin block-meta custom',
},
That is not necessary, because the built-in config from curtin
is to do ['curtin', 'block-meta', 'simple'] which does the right thing
if storage config is provided.
In addition to that, because we specified a string, but curtin
was expecting an array, the log/status message that curtin would report
would show:
running 'c u r t i n b l o c k' ....
rather than:
running 'curtin block-meta simple'
When user configures network with subiquity, it's rendered
netplan should be wholly definitive. So, we remove the other files
that may have config. This fixes a bug where running in an instance
when running on a system where cloud-init had rendered a 'match' with
'macaddress'.
When writing netplan we keep 'macaddress' match in place but drop
others. The others may just wildcard from the installer environment,
but macaddress are likely by cloud-init or otherwise intentionally
written.
Also add an atomic write in subiquitycore/file_util and move the
netplan code into subiquitycore/netplan.py, and add some unit test
helpers from cloud-init.