When trying to run a simple job with the new boottool, I get:
Traceback (most recent call last):
File "/usr/local/autotest/job.py", line 1082, in _run_step_fn
exec('__ret = %s(*__args, **__dargs)' % fn, local_vars, local_vars)
File "<string>", line 1, in <module>
File "/usr/local/autotest/control.autoserv", line 16, in boot_kernel
host.cleanup_kernels()
File "/usr/local/autotest/shared/hosts/base_classes.py", line 656, in
cleanup_kernels
boot_info = self.bootloader.get_entries()
File "/usr/local/autotest/tools/boottool", line 998, in get_entries
entries[entry["index"]] = entry
KeyError: 'index'
This is because boottool::get_entries() does:
raw = self.get_info()
...
for entry_str in raw.split("\nindex"):
Which doesn't split off the first entry if the raw string starts off with
"index". This then results in "indexindex 0" being the first string, causing
the parse error above.
If I change that split to be regex based off starting with index, I get
further, but then still error out:
Traceback (most recent call last):
File "/usr/local/autotest/job.py", line 1082, in _run_step_fn
exec('__ret = %s(*__args, **__dargs)' % fn, local_vars, local_vars)
File "<string>", line 1, in <module>
File "/usr/local/autotest/control.autoserv", line 16, in boot_kernel
host.cleanup_kernels()
File "/usr/local/autotest/shared/hosts/base_classes.py", line 658, in
cleanup_kernels
for boot in boot_info.itervalues()]
KeyError: 'kernel'
This is because my grubby --info outputs:
index=1
non linux entry
...
index=4
non linux entry
index=5
non linux entry
And boottool seems to assume that all entries are valid.
I think it is appropriate to skip these entries explicitly.
Signed-off-by: Nishanth Aravamudan <[email protected]>
diff --git a/client/tools/boottool b/client/tools/boottool
index 7cfc935..78e71b4 100755
--- a/client/tools/boottool
+++ b/client/tools/boottool
@@ -986,11 +986,13 @@ class Grubby(object):
raw = self.get_info()
entries = {}
- for entry_str in raw.split("\nindex"):
+ for entry_str in re.split("^index", raw):
if len(entry_str.strip()) == 0:
continue
if entry_str.startswith('boot='):
continue
+ if 'non linux entry' in entry_str:
+ continue
entry = parse_entry("index" + entry_str)
entries[entry["index"]] = entry
--
Nishanth Aravamudan <[email protected]>
IBM Linux Technology Center
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest