diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-12-09 13:04:26 +0000 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-12-09 13:58:53 +0000 |
commit | 7e67d265288dee88018475fb72e63dcca14e494c (patch) | |
tree | 6bdc9d5e52fbcffbb387bb14a4da55b869ac4189 /morphlib/util.py | |
parent | cb880f3554d9cf8daa3839dcd7a7ed2c336df85b (diff) | |
download | morph-7e67d265288dee88018475fb72e63dcca14e494c.tar.gz |
Give less scary error messages when a containerised command fails
This affects errors encountered at build time and at system-integration time.
New errors look like this:
ERROR: Command failed: baserock/system-integration/02-install-gerrit-gerrit-installation-binaries-misc-0000:
Containerisation settings: {'mounts': (('dev/shm', 'tmpfs', 'none'), ('tmp', 'tmpfs', 'none')), 'mount_proc': True, 'root': '/var/tmp/staging/tmp1YQ2yN/minimal-system-x86_64-generic.inst'}
Error output:
+ install -D /usr/share/gerrit/gerrit-2.9.war /home/gerrit2/gerrit/gerrit-2.9.war -o gerrit2 -g gerrit2 -m 644
install: can't change ownership of /home/gerrit2/gerrit/gerrit-2.9.war: Operation not permitted
Previously the error message would have been this:
Command failed: unshare --mount -- sh -ec.
mount --make-rprivate /
root="$1"
shift
while true; do
case "$1" in
--)
shift
break
;;
*)
mount_point="$1"
mount_type="$2"
mount_source="$3"
shift 3
path="$root/$mount_point"
mount -t "$mount_type" "$mount_source" "$path"
;;
esac
done
exec "$@"
- /var/tmp/staging/tmppeA1Iw/gerrit-x86_64.inst/ dev/shm tmpfs none tmp tmpfs none -- linux-user-chroot --chdir . --mount-proc proc
/var/tmp/staging/tmppeA1Iw/gerrit-x86_64.inst/ baserock/system-integration/02-install-gerrit-gerrit-installation-binaries-misc-0000
+ install -D /usr/share/gerrit/gerrit-2.9.war /home/gerrit2/gerrit/gerrit-2.9.war -o gerrit2 -g gerrit2 -m 644
install: can't change ownership of /home/gerrit2/gerrit/gerrit-2.9.war: Operation not permitted
Diffstat (limited to 'morphlib/util.py')
-rw-r--r-- | morphlib/util.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/morphlib/util.py b/morphlib/util.py index 6f735387..736af92e 100644 --- a/morphlib/util.py +++ b/morphlib/util.py @@ -15,11 +15,13 @@ import contextlib import itertools +import logging import os import re import subprocess import textwrap +import cliapp import fs.osfs import morphlib @@ -626,3 +628,17 @@ def containerised_cmdline(args, cwd='.', root='/', binds=(), cmdargs.append(root) cmdargs.extend(args) return unshared_cmdline(cmdargs, root=root, **kwargs) + + +def error_message_for_containerised_commandline( + argv, err, container_kwargs): # pragma: no cover + '''Return a semi-readable error message for a containerised command.''' + + # This function should do some formatting of the container_kwargs dict, + # rather than just dumping it in the error message, but that is better than + # nothing. + + return 'Command failed: %s:\n' \ + 'Containerisation settings: %s\n' \ + 'Error output:\n%s' \ + % (' '.join(argv), container_kwargs, err) |