Skip to content

Commit 7761682

Browse files
utils_test: add support for updating kernel args for image mode
Extend 'update_boot_option' to handle updating kernel args in image mode Signed-off-by: Liang Cong <lcong@redhat.com>
1 parent a3cfa5a commit 7761682

1 file changed

Lines changed: 39 additions & 10 deletions

File tree

virttest/utils_test/__init__.py

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
utils_misc,
5454
utils_net,
5555
utils_package,
56+
utils_sys,
5657
virt_vm,
5758
)
5859

@@ -214,16 +215,44 @@ def update_boot_option(
214215
req_remove_args, session=session, remove_args=True
215216
)
216217
else:
217-
if not utils_package.package_install("grubby", session=session):
218-
raise exceptions.TestError("Failed to install grubby package")
219-
msg = "Update guest kernel option. "
220-
cmd = "grubby --update-kernel=`grubby --default-kernel` "
221-
if req_remove_args:
222-
msg += " remove args: %s" % req_remove_args
223-
cmd += '--remove-args="%s" ' % req_remove_args
224-
if req_args:
225-
msg += " add args: %s" % req_args
226-
cmd += '--args="%s"' % req_args
218+
image_mode = utils_sys.is_image_mode(session=session)
219+
if image_mode:
220+
get_ostree_cmd = "cat /proc/cmdline | grep -o 'ostree=[^ ]*'"
221+
current_ostree = session.cmd_output(get_ostree_cmd).strip()
222+
if not current_ostree:
223+
raise exceptions.TestError("System not booted via ostree/bootc.")
224+
225+
get_entry_cmd = "grep -l '%s' /boot/loader/entries/*.conf | grep -v rescue | head -n 1" % current_ostree
226+
target_entry = session.cmd_output(get_entry_cmd).strip()
227+
if not target_entry:
228+
raise exceptions.TestError("Fail to find active entry for %s" % current_ostree)
229+
LOG.info("Active boot entry identified: %s", target_entry)
230+
231+
sed_cmds = []
232+
if req_remove_args:
233+
for arg in req_remove_args.split():
234+
sed_cmds.append("sed -i -E 's/\\b %s(=[^ ]*)?\\b//g' %s" % (arg, target_entry))
235+
236+
if req_args:
237+
sed_cmds.append("sed -i '/^options/ s/$/ %s/' %s" % (req_args, target_entry))
238+
239+
full_sed_script = " && ".join(sed_cmds)
240+
cmd = 'unshare -m /bin/bash -c "mount -o remount,rw /boot && %s"' % full_sed_script
241+
msg = "Modifying Bootc kernel args in %s by cmd '%s'" % (target_entry, cmd)
242+
else:
243+
if not utils_package.package_install("grubby", session=session):
244+
raise exceptions.TestError("Failed to install grubby package")
245+
cmd = "grubby --update-kernel=`grubby --default-kernel` "
246+
remove_opt = "--remove-args="
247+
add_opt = "--args="
248+
249+
msg = "Update guest kernel option. "
250+
if req_remove_args:
251+
msg += " remove args: %s" % req_remove_args
252+
cmd += '%s"%s" ' % (remove_opt, req_remove_args)
253+
if req_args:
254+
msg += " add args: %s" % req_args
255+
cmd += '%s"%s"' % (add_opt, req_args)
227256
if req_remove_args or req_args:
228257
__run_cmd_and_handle_error(
229258
msg, cmd, session, "Failed to modify guest kernel option"

0 commit comments

Comments
 (0)