public inbox for kdevops@lists.linux.dev
 help / color / mirror / Atom feed
From: Luis Chamberlain <mcgrof@kernel.org>
To: Chuck Lever <cel@kernel.org>, Daniel Gomez <da.gomez@kruces.com>,
	kdevops@lists.linux.dev
Cc: Luis Chamberlain <mcgrof@kernel.org>
Subject: [PATCH 29/40] bootlinux: fix kernel_release_file.stat undefined error in update-grub
Date: Sun, 27 Jul 2025 17:17:48 -0700	[thread overview]
Message-ID: <20250728001800.3188617-30-mcgrof@kernel.org> (raw)
In-Reply-To: <20250728001800.3188617-1-mcgrof@kernel.org>

The update-grub/install.yml playbook was failing with:
  "The conditional check 'kernel_release_file.stat.exists' failed.
   The error was: 'dict object' has no attribute 'stat'"

This regression was introduced when the update-grub tasks were hardened.
The hardening added multiple instances of checking kernel_release_file.stat.exists
throughout the playbook, but these checks assumed that the stat task would
always run and populate the kernel_release_file variable with a stat attribute.

However, when certain conditions aren't met (e.g., when using pre-built
packages or when the kernel hasn't been built yet), the stat task itself
might be skipped or fail, leaving kernel_release_file without the expected
stat attribute. The hardening didn't account for this possibility, causing
the playbook to fail when trying to access .stat on an incomplete variable
structure.

This commit adds:
1. Defensive checks for kernel_release_file and its stat attribute
   before accessing .exists
2. A default kernelrelease value of "unknown" when it can't be determined
3. Additional checks to ensure kernelrelease is defined and not "unknown"
   before using it in grep commands

These changes prevent the playbook from failing when the kernel
release file doesn't exist or can't be read, allowing it to
gracefully skip the grub default kernel setting steps.

Fixes: fa805e807fad ("bootlinux: Harden update-grub/install.yml")
Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 .../bootlinux/tasks/update-grub/install.yml      | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index 38ec8c76..a10064ee 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -117,6 +117,12 @@
   when:
     - kernel_release_file.stat.exists
 
+- name: Set default kernelrelease if not determined
+  ansible.builtin.set_fact:
+    kernelrelease: "unknown"
+  when:
+    - kernelrelease is not defined
+
 - name: Get the kernel release of the kernel to be installed
   tags:
     - vars
@@ -134,7 +140,11 @@
       /boot/grub/grub.cfg | awk '{print NR-1" ... "$0}' |
       grep {{ kernelrelease }} | head -1 | awk '{print $1}'
   when:
+    - kernel_release_file is defined
+    - kernel_release_file.stat is defined
     - kernel_release_file.stat.exists
+    - kernelrelease is defined
+    - kernelrelease != "unknown"
     - ansible_os_family != "RedHat" or ansible_distribution_major_version | int < 8
 
 - name: Construct the command line to determine default boot entry for RHEL >= 8
@@ -146,7 +156,11 @@
       cat $f;
       done | grep title | awk '{ gsub("title ", "", $0); print }' | grep '{{ kernelrelease }}';
   when:
+    - kernel_release_file is defined
+    - kernel_release_file.stat is defined
     - kernel_release_file.stat.exists
+    - kernelrelease is defined
+    - kernelrelease != "unknown"
     - ansible_os_family == "RedHat"
     - ansible_distribution_major_version | int >= 8
 
@@ -166,6 +180,8 @@
   register: grub_boot_number_cmd
   changed_when: false
   when:
+    - kernel_release_file is defined
+    - kernel_release_file.stat is defined
     - kernel_release_file.stat.exists
 
 - name: Obtain command to set default kernel to boot
-- 
2.47.2


  parent reply	other threads:[~2025-07-28  0:18 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-28  0:17 [PATCH 00/40] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28  0:17 ` [PATCH 01/40] vagrant: remove entire vagrant configuration directory Luis Chamberlain
2025-07-28  0:17 ` [PATCH 02/40] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
2025-07-28  0:17 ` [PATCH 03/40] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
2025-07-28  0:17 ` [PATCH 04/40] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
2025-07-28  0:17 ` [PATCH 05/40] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
2025-07-28  0:17 ` [PATCH 06/40] docs: remove Vagrant-specific documentation files Luis Chamberlain
2025-07-28  0:17 ` [PATCH 07/40] Remove all remaining Vagrant references from codebase Luis Chamberlain
2025-07-28  0:17 ` [PATCH 08/40] AuthorDate: Fri Jul 25 14:23:00 2025 -0400 Luis Chamberlain
2025-07-28  0:17 ` [PATCH 09/40] ansible.cfg: Explicitly set the ssh user Luis Chamberlain
2025-07-28  0:24   ` Chuck Lever
2025-07-28  0:27     ` Luis Chamberlain
2025-07-28  0:36       ` Chuck Lever
2025-07-28  0:17 ` [PATCH 10/40] fstests: local NFS list Luis Chamberlain
2025-07-28  0:17 ` [PATCH 11/40] terraform: Clean up the destroy tasks Luis Chamberlain
2025-07-28  0:17 ` [PATCH 12/40] Switch to the cloud.terraform.terraform module Luis Chamberlain
2025-07-28  0:17 ` [PATCH 13/40] terraform: Make use of the new "terraform_output" module Luis Chamberlain
2025-07-28  0:17 ` [PATCH 14/40] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
2025-07-28  0:17 ` [PATCH 15/40] terraform: Remove "delegate_to: localhost" Luis Chamberlain
2025-07-28  0:17 ` [PATCH 16/40] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
2025-07-28  0:17 ` [PATCH 17/40] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
2025-07-28  0:17 ` [PATCH 18/40] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
2025-07-28  0:17 ` [PATCH 19/40] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
2025-07-28  0:17 ` [PATCH 20/40] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
2025-07-28  0:17 ` [PATCH 21/40] bootlinux: Select the kernel .config earlier Luis Chamberlain
2025-07-28  0:17 ` [PATCH 22/40] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
2025-07-28  0:17 ` [PATCH 23/40] bootlinux: fix missing make command when using 9P builds Luis Chamberlain
2025-07-28  0:17 ` [PATCH 24/40] guestsfs: ensure linux directory exists Luis Chamberlain
2025-07-28  0:17 ` [PATCH 25/40] bootlinux: Move tasks for building on target nodes to a subrole Luis Chamberlain
2025-07-28  0:17 ` [PATCH 26/40] bootlinux: Clean up a grub set-up task Luis Chamberlain
2025-07-28  0:17 ` [PATCH 27/40] bootlinux: Harden update-grub/install.yml Luis Chamberlain
2025-07-28  0:17 ` [PATCH 28/40] bootlinux: fix grub_boot_number_cmd undefined error in update-grub Luis Chamberlain
2025-07-28  0:17 ` Luis Chamberlain [this message]
2025-07-28  0:17 ` [PATCH 30/40] Add a guest/instance for building the test kernel Luis Chamberlain
2025-07-28  0:17 ` [PATCH 31/40] bootlinux: Add a new builder choice Luis Chamberlain
2025-07-28  0:17 ` [PATCH 32/40] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
2025-07-28  0:17 ` [PATCH 33/40] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
2025-07-28  0:17 ` [PATCH 34/40] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
2025-07-28  0:17 ` [PATCH 35/40] bootlinux: Install pre-built kernels from packages Luis Chamberlain
2025-07-28  0:17 ` [PATCH 36/40] bootlinux: Add an option to build with clang instead of gcc Luis Chamberlain
2025-07-28  0:17 ` [PATCH 37/40] Makefile: add make style for style checking Luis Chamberlain
2025-07-28  0:17 ` [PATCH 38/40] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
2025-07-28  0:17 ` [PATCH 39/40] CLAUDE.md: add don't BS rules Luis Chamberlain
2025-07-28  0:17 ` [PATCH 40/40] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names Luis Chamberlain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250728001800.3188617-30-mcgrof@kernel.org \
    --to=mcgrof@kernel.org \
    --cc=cel@kernel.org \
    --cc=da.gomez@kruces.com \
    --cc=kdevops@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox