summaryrefslogtreecommitdiff
path: root/morphlib/util.py
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-12-09 13:04:26 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-12-09 13:58:53 +0000
commit7e67d265288dee88018475fb72e63dcca14e494c (patch)
tree6bdc9d5e52fbcffbb387bb14a4da55b869ac4189 /morphlib/util.py
parentcb880f3554d9cf8daa3839dcd7a7ed2c336df85b (diff)
downloadmorph-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.py16
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)