Change message in certain cases
In some cases Puppet error messages are useless. This patch implements algorithm which makes certain error messages more userfriendly. Change-Id: Iac6f1c5382b3c3d605df3477477558858eca69ef Fixes: rhbz#989334, rhbz#1006476, rhbz#1003959
This commit is contained in:
@@ -90,73 +90,3 @@ def gethostlist(CONF):
|
||||
if host and host not in hosts:
|
||||
hosts.append(host)
|
||||
return hosts
|
||||
|
||||
|
||||
_error_exceptions = [
|
||||
# puppet preloads a provider using the mysql command before it is installed
|
||||
re.compile('Command mysql is missing'),
|
||||
# puppet preloads a database_grant provider which fails if /root/.my.cnf
|
||||
# this is ok because it will be retried later if needed
|
||||
re.compile('Could not prefetch database_grant provider.*?\\.my\\.cnf'),
|
||||
# swift puppet module tries to install swift-plugin-s3, there is no such
|
||||
# pakage on RHEL, fixed in the upstream puppet module
|
||||
re.compile('yum.*?install swift-plugin-s3'),
|
||||
]
|
||||
|
||||
|
||||
def isErrorException(line):
|
||||
for ee in _error_exceptions:
|
||||
if ee.search(line):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
_re_color = re.compile('\x1b.*?\d\dm')
|
||||
_re_errorline = re.compile('err: | Syntax error at|^Duplicate definition:|'
|
||||
'^No matching value for selector param|'
|
||||
'^Parameter name failed:|Error: |^Invalid tag |'
|
||||
'^Invalid parameter |^Duplicate declaration: '
|
||||
'^Could not find resource |^Could not parse for ')
|
||||
|
||||
|
||||
def validate_puppet_logfile(logfile):
|
||||
"""
|
||||
Check a puppet log file for errors and raise an error if we find any
|
||||
"""
|
||||
fp = open(logfile)
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
manifestfile = os.path.splitext(logfile)[0]
|
||||
for line in data.split('\n'):
|
||||
line = line.strip()
|
||||
|
||||
if _re_errorline.search(line) is None:
|
||||
continue
|
||||
|
||||
message = _re_color.sub('', line) # remove colors
|
||||
if isErrorException(line):
|
||||
logging.info("Ignoring expected error during puppet run %s : %s" %
|
||||
(manifestfile, message))
|
||||
continue
|
||||
|
||||
message = "Error during puppet run : " + message
|
||||
logging.error("Error during remote puppet apply of " + manifestfile)
|
||||
logging.error(data)
|
||||
raise PackStackError(message)
|
||||
|
||||
|
||||
def scan_puppet_logfile(logfile):
|
||||
"""
|
||||
Returns list of packstack_info/packstack_warn notices parsed from
|
||||
given puppet log file.
|
||||
"""
|
||||
output = []
|
||||
notice = re.compile(r"notice: .*Notify\[packstack_info\]"
|
||||
"\/message: defined \'message\' as "
|
||||
"\'(?P<message>.*)\'")
|
||||
with open(logfile) as content:
|
||||
for line in content:
|
||||
match = notice.search(line)
|
||||
if match:
|
||||
output.append(match.group('message'))
|
||||
return output
|
||||
|
||||
Reference in New Issue
Block a user