fix '-runcmd' and improve logging

The '-cmd' functionality depends on the individual lorax template
commands raising errors, so they shouldn't do sys.exit().

Also, capture stderr along with stdout, and put both in the log.
This commit is contained in:
Will Woods 2012-06-18 18:18:37 -04:00
parent 6080ff3b2a
commit daacb4465d
1 changed files with 11 additions and 7 deletions

View File

@ -25,7 +25,7 @@ logger = logging.getLogger("pylorax.ltmpl")
import os, re, glob, shlex, fnmatch
from os.path import basename, isdir
from subprocess import check_call, check_output, CalledProcessError
from subprocess import check_call, check_output, CalledProcessError, STDOUT
from sysutils import joinpaths, cpfile, mvfile, replace, remove
from yumhelper import * # Lorax*Callback classes
@ -155,8 +155,7 @@ class LoraxTemplateRunner(object):
f(*args)
except Exception:
if skiperror:
logger.error("template command error in %s (ignored):", self.templatefile)
logger.error(" %s", " ".join(line))
logger.debug("ignoring error")
continue
logger.error("template command error in %s:", self.templatefile)
logger.error(" %s", " ".join(line))
@ -375,10 +374,15 @@ class LoraxTemplateRunner(object):
cmd = cmd[1:]
try:
check_output(cmd, preexec_fn=chdir)
output = check_output(cmd, preexec_fn=chdir, stderr=STDOUT)
if output:
logger.debug('command output:\n%s', output)
logger.debug("command finished successfully")
except CalledProcessError as e:
logger.debug('command exited with %d: %s', e.returncode, e.output)
sys.exit(e.returncode)
if e.output:
logger.debug('command output:\n%s', e.output)
logger.debug('command returned failure (%d)', e.returncode)
raise
def installpkg(self, *pkgs):
'''
@ -399,7 +403,7 @@ class LoraxTemplateRunner(object):
# FIXME: save exception and re-raise after the loop finishes
logger.error("installpkg %s failed: %s",p,str(e))
if required:
sys.exit(1)
raise
def removepkg(self, *pkgs):
'''