subp: update return value of subp with combine_capture=True.
combine_capture previously would return None in the stderr response.
This was inconsistent with capture=True, combine_capture=False.
It seems more consistent to always return the bytes or string as
documented. Test case and docstring are updated accordingly.
tox: add a xenial environments, default envlist changes.
A previous commit used mock.assert_called, which is not
present in xenial versions of mock so build would fail on xenial.
Due to bugs that are present in the trusty versions of mock it would
pass there.
So we add a tox environment 'xenial-py3' and add that to the
default set of environments that are run with a 'tox' invocation.
Other changes to the envlist here:
a.) make it multiple lines for easier future diffing.
b.) run py3-flake8 first, it runs quickly and gives good feedback.
c.) drop trusty-check which was running trusty pyflakes. We do not
run pyflakes in package build any more.
d.) replace trusty-py3 with xenial-py3. Just to save time in default 'tox'
run we only run one "old" python3 unit tests.
After adding 'CURTIN_EXE_VERSION' and 'CURTIN_VERSION' in output
we now see nice output for runs from trunk. But when running from
a package via curtainer, we see:
CURTIN_VMTEST_CURTIN_EXE=.. curtin-vmtest-proposed-a-29 curtin
CURTIN_VMTEST_CURTIN_EXE_VERSION=18.1-17-gae48e86f-0ubuntu1~17.10.1
CURTIN_VMTEST_CURTIN_VERSION=18.1
That is confusing as it appears our vmtest version is different
from our exe version.
That is because the patching of the version that we do in debian/rules
only applies to the built binaries, the source still has the un-modified
@@PACKAGED_VERSION@@ in tact.
The change here is patch the source code output by --source
by default, so that running 'curtin version' from that source will
provide the correct output. Jenkins is the only known consumer of this
ouput so it was easier to change the default behavior than have the caller
become aware. To disable this behavior pass '--no-patch-version'
Note that curtin has verified that it downloaded the
version of the source that it is patching in, so this is
known-to-be-correct.
pyflakes: fix unused variable references identified by pyflakes 2.0.0.
A newer version of pyflakes (2.0.0) was released over the last weekend.
It identifed some unused variables that version 1.6.0 did not identify.
The change here merely fixes those unused variables.
The fact that c-i hit this is not intended. A future fix is needed to
properly pin the version of pyflakes so that it does not happen again.
tools: jenkins-runner show curtin version in output.
I was looking at output of a jenkins run, and it was very non-clear
what actual version of curtin was running. The change here will
get 'curtin version' output into the CURTIN_VMTEST_VERSION variable
which then gets printed out with all the other CURTIN_VMTEST_* variables.
So, we see something like:
CURTIN_VMTEST_CURTIN_EXE=./tools/curtin-from-container xc1 curtin
CURTIN_VMTEST_CURTIN_EXE_VERSION=18.1-619-g4bf7750-0ubuntu1
CURTIN_VMTEST_CURTIN_VERSION=18.1-17-g0fc297bd
The zfs kernel module is not available for i386 so curtin cannot
expect that missing that module is fatal. Concentrate the various
checks for when we load the zfs kernel module into the zfs python
module. Add vmtest to exercise the i386 path.
Support mount entries not tied to a device, including bind and tmpfs.
Previously an entry in the storage configuration of type 'mount'
was required to have a 'device' entry that was a reference to
an id of type 'format'. That meant that there was no way to add
a mount for anything that wasn't a traditional filesystem.
The change here allows a type 'mount' entry to not have a 'device'
as long as it has a 'spec' and a 'fstype' entry. The word 'spec'
comes from fstab(5).
It also adds support for the mount type to have a 'passno' and 'freq'
which are entries in a fstab file.