On 02/05/2014 03:21 PM, Rodrigo Trujillo wrote:
The tool sosreport does not save the report file in /tmp in F20,
which
causes a error in Kimchi, which has /tmp hardcoded. This patch fetches
the report file location from the output.
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.
I don't like the idea to parse the output to know where the file was saved.
Isn't there a config file or other way to get the directory used by
sosreport?
Signed-off-by: Rodrigo Trujillo
<rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/model/debugreports.py | 40 +++++++++++++++++-----------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/src/kimchi/model/debugreports.py b/src/kimchi/model/debugreports.py
index a1cb19c..0db9f85 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,29 @@ 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
- 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]
+
+ # SOSREPORT outputs the name of the file in the text block
+ # The right way should be passing the tar.xz file directory though
+ # the parameter '--tmp-dir', but this is failing in Fedora 20
+ rep_f = [line for line in output.split()
+ if line.endswith('tar.xz')][0]
+ rep_name = os.path.basename(rep_f)
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)
- cb('OK', True)
+ target = os.path.join(path, rep_name)
+ msg = 'Moving debug report file "%s" to "%s"' %
(rep_f, target)
+ kimchi_log.info(msg)
+ shutil.move(rep_f, target)
+ os.remove('%s.md5' % rep_f)
+ cb('OK', True)
return
except OSError: