[Kimchi-devel] [PATCH V3] Fix host debug report for Fedora 20
Aline Manera
alinefm at linux.vnet.ibm.com
Thu Feb 13 13:47:42 UTC 2014
I don't have any comments about the patch.
But you need to rebase it because there are new patches merged
Specially those regarding to refactor exception
All messages errors shown to the user must be translatable.
You need to add the message to i18n.py and use the code to raise the
exception.
On 02/12/2014 05:24 PM, Rodrigo Trujillo wrote:
> The tool sosreport does not save the report file in /tmp in F20, this
> causes a error in Kimchi, which has /tmp hardcoded. This fixes this
> problem searching report files in /var/tmp too.
> Notice that is possible to pass --tmp-dir as the directory to save the
> report file, but this option is crashing in Fedora 20, so the code is
> not using it.
> This patch also improves the logging.
>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
> ---
> src/kimchi/model/debugreports.py | 57 ++++++++++++++++++++++++----------------
> 1 file changed, 35 insertions(+), 22 deletions(-)
>
> diff --git a/src/kimchi/model/debugreports.py b/src/kimchi/model/debugreports.py
> index a1cb19c..e48fe1a 100644
> --- a/src/kimchi/model/debugreports.py
> +++ b/src/kimchi/model/debugreports.py
> @@ -32,6 +32,7 @@ from kimchi import config
> from kimchi.exception import NotFoundError, OperationFailed
> from kimchi.model.tasks import TaskModel
> from kimchi.utils import add_task, kimchi_log
> +from kimchi.utils import run_command
>
>
> class DebugReportsModel(object):
> @@ -63,36 +64,48 @@ class DebugReportsModel(object):
>
> @staticmethod
> def sosreport_generate(cb, name):
> - command = 'sosreport --batch --name "%s"' % name
> try:
> - retcode = subprocess.call(command, shell=True,
> - stdout=subprocess.PIPE)
> + command = ['sosreport', '--batch', '--name=%s' % name]
> + output, error, retcode = run_command(command)
> +
> if retcode < 0:
> raise OperationFailed('Command terminated with signal')
> elif retcode > 0:
> raise OperationFailed('Command failed: rc = %i' % retcode)
> - pattern = '/tmp/sosreport-%s-*' % name
> - for reportFile in glob.glob(pattern):
> - if not fnmatch.fnmatch(reportFile, '*.md5'):
> - output = reportFile
> +
> + # SOSREPORT might create file in /tmp or /var/tmp
> + # FIXME: The right way should be passing the tar.xz file directory
> + # though the parameter '--tmp-dir', but it is failing in Fedora 20
> + patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
> + reports = []
> + reportFile = None
> + for p in patterns:
> + reports = reports + [f for f in glob.glob(p % name)]
> + for f in reports:
> + if not fnmatch.fnmatch(f, '*.md5'):
> + reportFile = f
> break
> - else:
> - # sosreport tends to change the name mangling rule and
> - # compression file format between different releases.
> - # It's possible to fail to match a report file even sosreport
> - # runs successfully. In future we might have a general name
> - # mangling function in kimchi to format the name before passing
> - # it to sosreport. Then we can delete this exception.
> - raise OperationFailed('Can not find generated debug report '
> - 'named by %s' % pattern)
> - ext = output.split('.', 1)[1]
> + # Some error in sosreport happened
> + if reportFile is None:
> + kimchi_log.error('Debug report file not found. See sosreport '
> + 'output for detail:\n%s', output)
> + raise OperationFailed('Debug report file not found.')
> +
> + md5_report_file = reportFile + '.md5'
> + report_file_extension = '.' + reportFile.split('.', 1)[1]
> path = config.get_debugreports_path()
> - target = os.path.join(path, name)
> - target_file = '%s.%s' % (target, ext)
> - shutil.move(output, target_file)
> - os.remove('%s.md5' % output)
> + target = os.path.join(path, name + report_file_extension)
> + # Moving report
> + msg = 'Moving debug report file "%s" to "%s"' % (reportFile, target)
> + kimchi_log.info(msg)
> + shutil.move(reportFile, target)
> + # Deleting md5
> + msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
> + kimchi_log.info(msg)
> + md5 = open(md5_report_file).read().strip()
> + kimchi_log.info('Md5 file content: "%s"', md5)
> + os.remove(md5_report_file)
> cb('OK', True)
> -
> return
>
> except OSError:
More information about the Kimchi-devel
mailing list