[PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans

Jeff Layton <[email protected]> Thu, 18 Jun 2026 08:17:15 -0400
Newsgroups dev.linux.lists.kdevops
Message-ID <[email protected]>
Starting with ansible-core 2.20, when: conditionals that evaluate to
a string instead of a boolean cause a fatal error rather than a
deprecation warning. This affected two categories of variables across
16 role files.

Kconfig boolean variables exported through extra_vars.yaml arrive as
strings like "True" rather than native booleans and need the |bool
filter appended. This covers variables such as kdevops_workflows_dedicated_workflow,
kdevops_baseline_and_dev, kdevops_workflow_enable_*, kdevops_enable_terraform,
kdevops_enable_guestfs, bootlinux_builder, workflows_reboot_limit, and several
others in the gen_nodes, gen_hosts, gen_tfvars, devconfig, build_linux,
codereadyrepo, gen_pci_kconfig, reboot-limit, update_etc_hosts, and
kdevops_archive roles.

String variables like target_linux_install_b4, fstests_nfs_auth_flavor,
and devconfig_custom_yum_repofile hold package names, paths, or
configuration values that may be empty or None and need the
"| default('', true) | length > 0" pattern to produce a proper boolean.

One registered variable was also fixed where devconfig checked
"not grub_timeout_grep" (a result dict) instead of the correct
"not grub_timeout_grep.changed" form.

Generated-by: Claude AI
Signed-off-by: Jeff Layton <[email protected]>
---
 playbooks/roles/bootlinux/tasks/build/9p.yml       |   3 +-
 playbooks/roles/bootlinux/tasks/build/builder.yml  |   3 +-
 playbooks/roles/bootlinux/tasks/build/targets.yml  |   3 +-
 playbooks/roles/bootlinux/tasks/main.yml           |   3 +-
 playbooks/roles/build_linux/tasks/main.yml         |   8 +-
 playbooks/roles/codereadyrepo/tasks/main.yml       |  10 +-
 .../devconfig/tasks/install-deps/redhat/main.yml   |   8 +-
 .../devconfig/tasks/install-deps/suse/main.yml     |   2 +-
 playbooks/roles/devconfig/tasks/main.yml           |  18 +-
 playbooks/roles/fstests/tasks/main.yml             |   9 +-
 playbooks/roles/gen_hosts/tasks/main.yml           |  81 ++++---
 playbooks/roles/gen_nodes/tasks/main.yml           | 256 +++++++++++----------
 playbooks/roles/gen_pci_kconfig/tasks/main.yml     |   4 +-
 playbooks/roles/gen_tfvars/tasks/main.yml          |   6 +-
 playbooks/roles/kdevops_archive/tasks/main.yml     |   2 +-
 .../roles/nfsd/tasks/install-deps/redhat/main.yml  |   2 +-
 .../roles/nfsd/tasks/install-deps/suse/main.yml    |   2 +-
 playbooks/roles/reboot-limit/tasks/do-reboot.yml   |   4 +-
 playbooks/roles/update_etc_hosts/tasks/main.yml    |   6 +-
 playbooks/roles/volume_group/tasks/guestfs.yml     |   4 -
 20 files changed, 219 insertions(+), 215 deletions(-)

diff --git a/playbooks/roles/bootlinux/tasks/build/9p.yml b/playbooks/roles/bootlinux/tasks/build/9p.yml
index 26f027bfac28..7e45fba17d67 100644
--- a/playbooks/roles/bootlinux/tasks/build/9p.yml
+++ b/playbooks/roles/bootlinux/tasks/build/9p.yml
@@ -38,8 +38,7 @@
     name:
       - b4
   when:
-    - target_linux_install_b4 is defined
-    - target_linux_install_b4
+    - target_linux_install_b4 | default('', true) | length > 0
     - hostvars['localhost']['ansible_os_family'] != "Debian"
   run_once: true
   delegate_to: localhost
diff --git a/playbooks/roles/bootlinux/tasks/build/builder.yml b/playbooks/roles/bootlinux/tasks/build/builder.yml
index 2e0ed3d9e4b3..3b056f9fe697 100644
--- a/playbooks/roles/bootlinux/tasks/build/builder.yml
+++ b/playbooks/roles/bootlinux/tasks/build/builder.yml
@@ -7,8 +7,7 @@
     name:
       - b4
   when:
-    - target_linux_install_b4 is defined
-    - target_linux_install_b4
+    - target_linux_install_b4 | default('', true) | length > 0
     - ansible_os_family == "Debian"
 
 - name: Clone {{ target_linux_tree }}
diff --git a/playbooks/roles/bootlinux/tasks/build/targets.yml b/playbooks/roles/bootlinux/tasks/build/targets.yml
index 8b7c94b3c81e..2eab4ec9c744 100644
--- a/playbooks/roles/bootlinux/tasks/build/targets.yml
+++ b/playbooks/roles/bootlinux/tasks/build/targets.yml
@@ -7,8 +7,7 @@
     name:
       - b4
   when:
-    - target_linux_install_b4 is defined
-    - target_linux_install_b4
+    - target_linux_install_b4 | default('', true) | length > 0
     - ansible_facts['os_family']|lower != 'debian'
 
 - name: Git clone {{ target_linux_tree }} on the target nodes
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 7098cda7421d..74533b5152c7 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -57,8 +57,7 @@
     name:
       - b4
   when:
-    - target_linux_install_b4 is defined
-    - target_linux_install_b4
+    - target_linux_install_b4 | default('', true) | length > 0
     - ansible_facts['os_family']|lower != 'debian'
     - not workflow_linux_packaged|bool
 
diff --git a/playbooks/roles/build_linux/tasks/main.yml b/playbooks/roles/build_linux/tasks/main.yml
index 74d5efff0330..9f8bdf0db381 100644
--- a/playbooks/roles/build_linux/tasks/main.yml
+++ b/playbooks/roles/build_linux/tasks/main.yml
@@ -38,7 +38,7 @@
 
 - name: Setup dedicated build filesystem
   when:
-    - build_linux_storage_enable
+    - build_linux_storage_enable|bool
   block:
     - name: Check if device is already mounted
       become: yes
@@ -150,7 +150,7 @@
     single_branch: yes
   when:
     - not linux_git_exists.stat.exists or git_repo_check.rc != 0
-    - shallow_clone
+    - shallow_clone|bool
 
 - name: Clone Linux kernel source (full)
   ansible.builtin.git:
@@ -158,7 +158,7 @@
     dest: "{{ linux_source_dir }}"
   when:
     - not linux_git_exists.stat.exists or git_repo_check.rc != 0
-    - not shallow_clone
+    - not shallow_clone|bool
   retries: 3
   delay: 10
   register: git_result
@@ -174,7 +174,7 @@
   args:
     chdir: "{{ linux_source_dir }}"
   when:
-    - build_linux_use_latest_tag
+    - build_linux_use_latest_tag|bool
     - linux_source_stat.stat.writeable
 
 - name: Ensure /data directory is writable
diff --git a/playbooks/roles/codereadyrepo/tasks/main.yml b/playbooks/roles/codereadyrepo/tasks/main.yml
index c6f223b97a2f..f670adaaa9cc 100644
--- a/playbooks/roles/codereadyrepo/tasks/main.yml
+++ b/playbooks/roles/codereadyrepo/tasks/main.yml
@@ -3,14 +3,14 @@
 - name: Enable a CodeReady Builder repo for this distribution
   when:
     - ansible_distribution != "Fedora"
-    - not devconfig_custom_yum_repofile
+    - devconfig_custom_yum_repofile | default('', true) | length == 0
   block:
     - name: Select the RHEL CodeReady Builder repo
       ansible.builtin.set_fact:
         codeready_repo: "codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}-rpms"
       when:
         - ansible_distribution == 'RedHat'
-        - kdevops_enable_guestfs
+        - kdevops_enable_guestfs|bool
 
     - name: Select the Oracle Linux CodeReady Builder repo
       ansible.builtin.set_fact:
@@ -29,7 +29,7 @@
         codeready_repo: "codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-rhui-rpms"
       when:
         - ansible_distribution == 'RedHat'
-        - kdevops_enable_terraform
+        - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "aws"
 
     - name: Select the Azure RHEL CodeReady Builder repo
@@ -37,7 +37,7 @@
         codeready_repo: "codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}-rhui-rpms"
       when:
         - ansible_distribution == 'RedHat'
-        - kdevops_enable_terraform
+        - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "azure"
 
     - name: Select the Google Cloud RHEL CodeReady Builder repo
@@ -45,7 +45,7 @@
         codeready_repo: "rhui-codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}-rhui-rpms"
       when:
         - ansible_distribution == 'RedHat'
-        - kdevops_enable_terraform
+        - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "gce"
 
     - name: The distribution/provisioner combo isn't recognized
diff --git a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
index 95741de8d1fa..f851da05ab4a 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
@@ -10,15 +10,15 @@
     activationkey: "{{ rhel_activation_key }}"
     force_register: true
   when:
-    - rhel_org_id
-    - rhel_activation_key
+    - rhel_org_id | default('', true) | length > 0
+    - rhel_activation_key | default('', true) | length > 0
 
 - name: Check whether custom repofile exists
   ansible.builtin.stat:
     path: "{{ devconfig_custom_yum_repofile }}"
   register: custom_repofile
   delegate_to: localhost
-  when: devconfig_custom_yum_repofile
+  when: devconfig_custom_yum_repofile | default('', true) | length > 0
 
 - name: Add custom yum repo
   become: true
@@ -30,7 +30,7 @@
     group: root
     mode: "0644"
   when:
-    - devconfig_custom_yum_repofile
+    - devconfig_custom_yum_repofile | default('', true) | length > 0
     - custom_repofile.stat.exists
 
 - name: Discover the fastest package update mirrors
diff --git a/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml b/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
index 6f0607e6a9ff..04ec3f70beee 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
@@ -378,7 +378,7 @@
     install_snmp: true
     install_kdump: true
   when:
-    - is_sle15|bool or is_tumbleweed
+    - is_sle15|bool or is_tumbleweed|bool
   tags: ["vars"]
 
 - name: Install snmp
diff --git a/playbooks/roles/devconfig/tasks/main.yml b/playbooks/roles/devconfig/tasks/main.yml
index 416ba2fb0576..6df6ea7ec5f8 100644
--- a/playbooks/roles/devconfig/tasks/main.yml
+++ b/playbooks/roles/devconfig/tasks/main.yml
@@ -23,16 +23,16 @@
   ansible.builtin.command: "whoami"
   register: declared_host_user
   when:
-    - kdevops_use_declared_hosts
-    - workflow_infer_user_and_group
+    - kdevops_use_declared_hosts|bool
+    - workflow_infer_user_and_group|bool
   changed_when: false
 
 - name: Infer group on declared hosts
   ansible.builtin.command: "id -g -n"
   register: declared_host_group
   when:
-    - kdevops_use_declared_hosts
-    - workflow_infer_user_and_group
+    - kdevops_use_declared_hosts|bool
+    - workflow_infer_user_and_group|bool
   changed_when: false
 
 - name: Set inferred user and group for declared hosts
@@ -40,8 +40,8 @@
     data_user: "{{ declared_host_user.stdout | default(data_user) }}"
     data_group: "{{ declared_host_group.stdout | default(data_group) }}"
   when:
-    - kdevops_use_declared_hosts
-    - workflow_infer_user_and_group
+    - kdevops_use_declared_hosts|bool
+    - workflow_infer_user_and_group|bool
 
 # Update /etc/hostname first so the change gets picked up by the reboot
 # that occurs during the distro-specific tasks
@@ -437,7 +437,7 @@
   when:
     - grub2_config_file.stat.exists
     - devconfig_enable_console|bool
-    - not grub_timeout_grep
+    - not grub_timeout_grep.changed
   tags: ["console"]
 
 - name: Check to see if the GRUB serial command is defined
@@ -721,8 +721,8 @@
     sysctl_set: true
     reload: true
   when:
-    - devconfig_enable_sysctl_tuning
-    - devconfig_enable_sysctl_mm_overcommit_memory
+    - devconfig_enable_sysctl_tuning|bool
+    - devconfig_enable_sysctl_mm_overcommit_memory|bool
   tags: ["sysctl"]
 
 - name: Rev the kernel to the latest distribution kotd
diff --git a/playbooks/roles/fstests/tasks/main.yml b/playbooks/roles/fstests/tasks/main.yml
index 3dcd2f9fa6d6..8fb454420936 100644
--- a/playbooks/roles/fstests/tasks/main.yml
+++ b/playbooks/roles/fstests/tasks/main.yml
@@ -802,8 +802,7 @@
   register: nfsmount_conf
   when:
     - fstests_fstyp == "nfs"
-    - fstests_nfs_auth_flavor is defined
-    - fstests_nfs_auth_flavor
+    - fstests_nfs_auth_flavor | default('', true) | length > 0
 
 - name: Create /etc/nfsmount.conf
   become: true
@@ -817,8 +816,7 @@
     mode: "0644"
   when:
     - fstests_fstyp == "nfs"
-    - fstests_nfs_auth_flavor is defined
-    - fstests_nfs_auth_flavor
+    - fstests_nfs_auth_flavor | default('', true) | length > 0
     - not nfsmount_conf.stat.exists
 
 - name: Set auth flavor for NFS
@@ -831,8 +829,7 @@
     line: "Sec={{ fstests_nfs_auth_flavor }}"
   when:
     - fstests_fstyp == "nfs"
-    - fstests_nfs_auth_flavor is defined
-    - fstests_nfs_auth_flavor
+    - fstests_nfs_auth_flavor | default('', true) | length > 0
 
 - name: Create SMB share for test vol
   ansible.builtin.include_role:
diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml
index f21b7cc0bfad..f2a047b53b92 100644
--- a/playbooks/roles/gen_hosts/tasks/main.yml
+++ b/playbooks/roles/gen_hosts/tasks/main.yml
@@ -20,8 +20,7 @@
         {{ kdevops_declared_hosts }}
       {%- endif -%}
   when:
-    - kdevops_use_declared_hosts
-    - kdevops_declared_hosts is defined
+    - kdevops_use_declared_hosts|bool
   tags: vars
 
 - name: Get our user
@@ -58,8 +57,8 @@
     is_fstests: true
     fs_config_path: "{{ kdevops_playbooks_dir_full_path }}/{{ fs_config_role_path }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fstests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fstests|bool
     - ansible_hosts_template.stat.exists
   tags: vars
 
@@ -87,9 +86,9 @@
         | list
       }}
   when:
-    - is_fstests
+    - is_fstests|bool
     - ansible_hosts_template.stat.exists
-    - not kdevops_use_declared_hosts
+    - not kdevops_use_declared_hosts|bool
 
 - name: Infer enabled blktests test section types
   ansible.builtin.set_fact:
@@ -101,18 +100,18 @@
         | list
       }}
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
     - ansible_hosts_template.stat.exists
-    - not kdevops_use_declared_hosts
+    - not kdevops_use_declared_hosts|bool
 
 - name: Debug inferring block test types
   ansible.builtin.debug:
     var: blktests_enabled_test_types
   when:
     - false
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
     - ansible_hosts_template.stat.exists
 
 - name: Infer enabled selftests test section types
@@ -125,10 +124,10 @@
         | list
       }}
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_selftests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_selftests|bool
     - ansible_hosts_template.stat.exists
-    - not kdevops_use_declared_hosts
+    - not kdevops_use_declared_hosts|bool
 
 - name: Collect dynamically supported filesystems
   vars:
@@ -139,8 +138,8 @@
     sysbench_enabled_filesystems: "{{ local_supported_filesystems }}"
     enabled_sysbench_tests: "{{ [] }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
 
 - name: Collect enabled sysbench target sections for dynamically supported filesystems
   loop: "{{ sysbench_enabled_filesystems }}"
@@ -156,8 +155,8 @@
   ansible.builtin.set_fact:
     enabled_sysbench_tests: "{{ enabled_sysbench_tests + enabled_fs_node }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
 
 - name: Infer enabled mmtests test types
   ansible.builtin.set_fact:
@@ -169,18 +168,18 @@
         | list
       }}
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_mmtests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_mmtests|bool
     - ansible_hosts_template.stat.exists
-    - not kdevops_use_declared_hosts
+    - not kdevops_use_declared_hosts|bool
 
 - name: Load AI nodes configuration for multi-filesystem setup
   include_vars:
     file: "{{ topdir_path }}/{{ kdevops_nodes }}"
     name: guestfs_nodes
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - ansible_hosts_template.stat.exists
 
@@ -188,8 +187,8 @@
   set_fact:
     all_generic_nodes: "{{ guestfs_nodes.guestfs_nodes | map(attribute='name') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - guestfs_nodes is defined
 
@@ -198,7 +197,7 @@
     file: "{{ topdir_path }}/{{ kdevops_nodes }}"
     name: build_linux_nodes
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - ansible_hosts_template.stat.exists
@@ -207,7 +206,7 @@
   set_fact:
     build_linux_enabled_section_types: "{{ build_linux_nodes.guestfs_nodes | map(attribute='name') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - build_linux_nodes is defined
@@ -245,8 +244,8 @@
   include_vars:
     file: "{{ topdir_path }}/{{ kdevops_nodes }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - ansible_hosts_template.stat.exists
 
@@ -254,8 +253,8 @@
   set_fact:
     fio_tests_node_names: "{{ guestfs_nodes | map(attribute='name') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - guestfs_nodes is defined
     - ansible_hosts_template.stat.exists
@@ -264,8 +263,8 @@
   debug:
     var: fio_tests_node_names
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - ansible_hosts_template.stat.exists
 
 - name: Generate the Ansible hosts file for a dedicated fio-tests setup (single filesystem)
@@ -279,8 +278,8 @@
     trim_blocks: True
     lstrip_blocks: True
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - ansible_hosts_template.stat.exists
     - not fio_tests_multi_filesystem|default(false)|bool
 
@@ -295,8 +294,8 @@
     trim_blocks: True
     lstrip_blocks: True
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - ansible_hosts_template.stat.exists
     - fio_tests_multi_filesystem|default(false)|bool
     - fio_tests_node_names is defined
@@ -311,7 +310,7 @@
     lstrip_blocks: True
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - ansible_hosts_template.stat.exists
     - not kdevops_use_declared_hosts|default(false)|bool
@@ -326,7 +325,7 @@
     lstrip_blocks: True
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - ansible_hosts_template.stat.exists
     - not kdevops_use_declared_hosts|default(false)|bool
@@ -341,7 +340,7 @@
     lstrip_blocks: True
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_vllm|default(false)|bool
     - ansible_hosts_template.stat.exists
     - not kdevops_use_declared_hosts|default(false)|bool
@@ -356,6 +355,6 @@
   ansible.builtin.fail:
     msg: "Your dedicated workflow lacks rules for what nodes to use, go work on allowed topologies to parallelize testing one per node"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - ansible_hosts_template.stat.exists
     - not final_hosts_file.stat.exists
diff --git a/playbooks/roles/gen_nodes/tasks/main.yml b/playbooks/roles/gen_nodes/tasks/main.yml
index b16333629209..2d3792725e89 100644
--- a/playbooks/roles/gen_nodes/tasks/main.yml
+++ b/playbooks/roles/gen_nodes/tasks/main.yml
@@ -37,14 +37,14 @@
   ansible.builtin.set_fact:
     generic_nodes: "{{ [kdevops_host_prefix] }}"
   when:
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Set generic nodes array on dual baseline and dev systems
   tags: vars
   ansible.builtin.set_fact:
     generic_nodes: "{{ [kdevops_host_prefix] + [kdevops_host_prefix + '-dev'] }}"
   when:
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Set builder nodes array
   tags: vars
@@ -52,7 +52,7 @@
     builder_nodes:
       - "{{ kdevops_host_prefix + '-builder' }}"
   when:
-    - bootlinux_builder
+    - bootlinux_builder|bool
 
 - name: Set iscsi_nodes list
   ansible.builtin.set_fact:
@@ -107,8 +107,8 @@
     is_fstests: true
     fs_config_path: "{{ kdevops_playbooks_dir_full_path }}/{{ fs_config_role_path }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fstests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fstests|bool
     - ansible_nodes_template.stat.exists
   tags: vars
 
@@ -147,8 +147,24 @@
     force: true
     mode: "0644"
   when:
-    - not kdevops_workflows_dedicated_workflow
+    - not kdevops_workflows_dedicated_workflow|bool
     - ansible_nodes_template.stat.exists
+    - not kdevops_enable_nixos|default(false)|bool
+
+- name: Generate the NixOS kdevops nodes file using {{ kdevops_nodes_template }} as jinja2 source template
+  tags: ['nodes']
+  vars:
+    node_template: "{{ kdevops_nodes_template | basename }}"
+    all_generic_nodes: "{{ generic_nodes }}"
+    nodes: "{{ all_generic_nodes }}"
+  ansible.builtin.template:
+    src: "{{ node_template }}"
+    dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
+    force: true
+  when:
+    - not kdevops_workflows_dedicated_workflow|bool
+    - ansible_nodes_template.stat.exists
+    - kdevops_enable_nixos|default(false)|bool
 
 - name: Generate the builder kdevops nodes file using nodes file using template as jinja2 source template
   tags: ["nodes"]
@@ -161,7 +177,7 @@
     dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
     force: true
   when:
-    - bootlinux_builder
+    - bootlinux_builder|bool
     - ansible_nodes_template.stat.exists
 
 
@@ -177,8 +193,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_pynfs
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_pynfs|bool
 
 
 - name: Generate the cxl kdevops nodes file using nodes file using template as jinja2 source template
@@ -193,8 +209,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_cxl
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_cxl|bool
 
 
 - name: Generate a kdevops nodes file for the gitr workflow
@@ -203,8 +219,8 @@
     name: gen_nodes
     tasks_from: gitr
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_gitr
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_gitr|bool
     - ansible_nodes_template.stat.exists
 
 - name: Generate a kdevops nodes file for the ltp workflow
@@ -213,8 +229,8 @@
     name: gen_nodes
     tasks_from: ltp
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ltp
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ltp|bool
     - ansible_nodes_template.stat.exists
 
 - name: Generate a kdevops nodes file for the nfstest workflow
@@ -223,8 +239,8 @@
     name: gen_nodes
     tasks_from: nfstest
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_nfstest
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_nfstest|bool
     - ansible_nodes_template.stat.exists
 
 - name: Set empty enabled test types list for fstests
@@ -273,7 +289,7 @@
     - is_fstests|bool
     - ansible_nodes_template.stat.exists
     - item.changed
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Now expand the list of enabled fstests for valid configuration sections with dev hosts
   tags: ["nodes"]
@@ -289,7 +305,7 @@
     - is_fstests|bool
     - ansible_nodes_template.stat.exists
     - item.changed
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Add the nfs server if one was selected
   ansible.builtin.set_fact:
@@ -350,10 +366,10 @@
       }}
 
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Infer enabled blktests test section types with dev hosts
   vars:
@@ -365,18 +381,18 @@
   ansible.builtin.set_fact:
     blktests_enabled_test_types: "{{ all_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Debug inferring block test types
   ansible.builtin.debug:
     var: blktests_enabled_test_types
   when:
     - false
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
     - ansible_nodes_template.stat.exists
 
 - name: Generate the blktests kdevops nodes file using nodes file using template as jinja2 source template
@@ -391,8 +407,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_blktests|bool
 
 
 - name: Infer enabled selftests test section types
@@ -410,10 +426,10 @@
         | list
       }}
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_selftests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_selftests|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Infer enabled selftests test section types with dev hosts
   vars:
@@ -425,10 +441,10 @@
   ansible.builtin.set_fact:
     selftests_enabled_test_types: "{{ all_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_selftests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_selftests|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Generate the selftests kdevops nodes file using nodes file using template as jinja2 source template
   tags: ["hosts"]
@@ -442,8 +458,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_selftests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_selftests|bool
 
 
 - name: Collect dynamically supported filesystems
@@ -459,8 +475,8 @@
     sysbench_enabled_filesystems: "{{ local_supported_filesystems }}"
     enabled_sysbench_tests: "{{ [] }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
 
 - name: Collect enabled sysbench target sections for dynamically supported filesystems
   loop: "{{ sysbench_enabled_filesystems }}"
@@ -477,8 +493,8 @@
   ansible.builtin.set_fact:
     enabled_sysbench_tests: "{{ enabled_sysbench_tests + enabled_fs_node }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
 
 - name: Augment sysbench targets with dev nodes
   loop: "{{ sysbench_enabled_filesystems }}"
@@ -495,16 +511,16 @@
   ansible.builtin.set_fact:
     enabled_sysbench_tests: "{{ enabled_sysbench_tests + enabled_fs_node }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
-    - kdevops_baseline_and_dev
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
+    - kdevops_baseline_and_dev|bool
 
 - name: Fail if no sysbench tests are enabled
   ansible.builtin.fail:
     msg: "No sysbench tests are enabled. You should enable at least one."
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
     - ansible_nodes_template.stat.exists
     - enabled_sysbench_tests | length == 0
 
@@ -520,8 +536,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_sysbench|bool
 
 
 - name: Generate the fio-tests kdevops nodes file using {{ kdevops_nodes_template }} as jinja2 source template
@@ -535,10 +551,10 @@
     dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
     force: yes
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - not fio_tests_multi_filesystem|default(false)|bool
 
 - name: Generate the fio-tests kdevops nodes file with dev hosts using {{ kdevops_nodes_template }} as jinja2 source template
@@ -552,10 +568,10 @@
     dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
     force: yes
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - not fio_tests_multi_filesystem|default(false)|bool
 
 - name: Infer enabled fio-tests multi-filesystem configurations (no dev)
@@ -575,11 +591,11 @@
   set_fact:
     fio_tests_enabled_section_types: "{{ [kdevops_host_prefix + '-fio-tests-'] | product(all_fs_configs) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Infer enabled fio-tests multi-filesystem configurations with dev
   vars:
@@ -598,11 +614,11 @@
   set_fact:
     fio_tests_expanded_configs: "{{ all_fs_configs }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Create fio-tests nodes for each filesystem configuration with dev hosts
   vars:
@@ -610,11 +626,11 @@
   set_fact:
     fio_tests_enabled_section_types: "{{ filesystem_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - fio_tests_expanded_configs is defined
     - fio_tests_expanded_configs | length > 0
 
@@ -629,8 +645,8 @@
     dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
     force: yes
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_fio_tests|bool
     - fio_tests_multi_filesystem|default(false)|bool
     - ansible_nodes_template.stat.exists
     - fio_tests_enabled_section_types is defined
@@ -651,10 +667,10 @@
         | list
       }}
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_mmtests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_mmtests|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Infer enabled mmtests test section types with dev hosts
   vars:
@@ -666,10 +682,10 @@
   ansible.builtin.set_fact:
     mmtests_enabled_test_types: "{{ all_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_mmtests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_mmtests|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 - name: Generate the mmtests kdevops nodes file using nodes file using template as jinja2 source template
   tags: ["hosts"]
@@ -683,8 +699,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_mmtests
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_mmtests|bool
 
 
 - name: Generate the reboot-limit kdevops nodes file using nodes file using template as jinja2 source template
@@ -699,8 +715,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - workflows_reboot_limit
+    - kdevops_workflows_dedicated_workflow|bool
+    - workflows_reboot_limit|bool
     - ansible_nodes_template.stat.exists
 
 
@@ -716,8 +732,8 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - workflows_reboot_limit
+    - kdevops_workflows_dedicated_workflow|bool
+    - workflows_reboot_limit|bool
     - ansible_nodes_template.stat.exists
 
 
@@ -733,10 +749,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - not ai_enable_multifs_testing|default(false)|bool
 
 - name: Generate the AI kdevops nodes file with dev hosts using {{ kdevops_nodes_template }} as jinja2 source template
@@ -751,10 +767,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - not ai_enable_multifs_testing|default(false)|bool
 
 - name: Infer enabled AI multi-filesystem configurations
@@ -794,8 +810,8 @@
   set_fact:
     ai_multifs_enabled_configs: "{{ (xfs_configs + ext4_configs + btrfs_configs) | unique }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
 
@@ -805,11 +821,11 @@
   set_fact:
     ai_enabled_section_types: "{{ filesystem_nodes }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - ai_multifs_enabled_configs is defined
     - ai_multifs_enabled_configs | length > 0
 
@@ -819,11 +835,11 @@
   set_fact:
     ai_enabled_section_types: "{{ filesystem_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - ai_multifs_enabled_configs is defined
     - ai_multifs_enabled_configs | length > 0
 
@@ -838,8 +854,8 @@
     dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
     force: yes
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_ai|bool
     - ai_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
     - ai_enabled_section_types is defined
@@ -859,10 +875,10 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_vllm
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_vllm|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
 
 - name: Generate the vLLM kdevops nodes file with dev hosts using {{ kdevops_nodes_template }} as jinja2 source template
   tags: ['hosts']
@@ -876,10 +892,10 @@
     force: true
     mode: "0644"
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_vllm
+    - kdevops_workflows_dedicated_workflow|bool
+    - kdevops_workflow_enable_vllm|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
 
 # MinIO S3 Storage Testing workflow nodes
 
@@ -908,7 +924,7 @@
   set_fact:
     minio_multifs_enabled_configs: "{{ (xfs_configs + ext4_configs + btrfs_configs) | unique }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - minio_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
@@ -919,11 +935,11 @@
   set_fact:
     minio_enabled_section_types: "{{ filesystem_nodes }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - minio_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - minio_multifs_enabled_configs is defined
     - minio_multifs_enabled_configs | length > 0
 
@@ -933,11 +949,11 @@
   set_fact:
     minio_enabled_section_types: "{{ filesystem_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - minio_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - minio_multifs_enabled_configs is defined
     - minio_multifs_enabled_configs | length > 0
 
@@ -953,7 +969,7 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - minio_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
@@ -973,10 +989,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - not minio_enable_multifs_testing|default(false)|bool
 
 - name: Generate the MinIO kdevops nodes file with dev hosts using {{ kdevops_nodes_template }} as jinja2 source template
@@ -991,10 +1007,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_minio|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - not minio_enable_multifs_testing|default(false)|bool
 
 # Build-linux workflow nodes
@@ -1030,7 +1046,7 @@
   set_fact:
     build_linux_multifs_enabled_configs: "{{ (xfs_configs + ext4_configs + btrfs_configs + tmpfs_configs) | unique }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
@@ -1041,11 +1057,11 @@
   set_fact:
     build_linux_enabled_section_types: "{{ filesystem_nodes }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - build_linux_multifs_enabled_configs is defined
     - build_linux_multifs_enabled_configs | length > 0
 
@@ -1055,11 +1071,11 @@
   set_fact:
     build_linux_enabled_section_types: "{{ filesystem_nodes | product(['', '-dev']) | map('join') | list }}"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - build_linux_multifs_enabled_configs is defined
     - build_linux_multifs_enabled_configs | length > 0
 
@@ -1075,7 +1091,7 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - build_linux_enable_multifs_testing|default(false)|bool
     - ansible_nodes_template.stat.exists
@@ -1095,10 +1111,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - not kdevops_baseline_and_dev
+    - not kdevops_baseline_and_dev|bool
     - not build_linux_enable_multifs_testing|default(false)|bool
 
 - name: Generate the Build-linux kdevops nodes file with dev hosts using {{ kdevops_nodes_template }} as jinja2 source template
@@ -1113,10 +1129,10 @@
     force: true
     mode: '0644'
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - kdevops_workflow_enable_build_linux|default(false)|bool
     - ansible_nodes_template.stat.exists
-    - kdevops_baseline_and_dev
+    - kdevops_baseline_and_dev|bool
     - not build_linux_enable_multifs_testing|default(false)|bool
 
 - name: Get the control host's timezone
@@ -1134,7 +1150,7 @@
   ansible.builtin.fail:
     msg: "Your dedicated workflow lacks rules for what nodes to use, go work on allowed topologies to parallelize testing one per node"
   when:
-    - kdevops_workflows_dedicated_workflow
+    - kdevops_workflows_dedicated_workflow|bool
     - ansible_nodes_template.stat.exists
     - not dedicated_nodes_template.stat.exists
 
diff --git a/playbooks/roles/gen_pci_kconfig/tasks/main.yml b/playbooks/roles/gen_pci_kconfig/tasks/main.yml
index 9424a2a7c0b5..cd062957a68b 100644
--- a/playbooks/roles/gen_pci_kconfig/tasks/main.yml
+++ b/playbooks/roles/gen_pci_kconfig/tasks/main.yml
@@ -3,9 +3,9 @@
 - name: Dump pci output in machine-readible form
   ansible.builtin.shell: "lspci -Dvmmm > {{ topdir_path }}/.dynamic-kconfig.pci.txt"
   when:
-    - kdevops_pcie_dynamic_kconfig
+    - kdevops_pcie_dynamic_kconfig|bool
 
 - name: Generate libvirt PCI-E kcofig files
   ansible.builtin.shell: "./python/workflows/dynamic-kconfig/gen-dynamic-pci.py {{ topdir_path }}/.dynamic-kconfig.pci.txt > {{ topdir_path }}/Kconfig.passthrough_libvirt.generated"
   when:
-    - kdevops_pcie_dynamic_kconfig
+    - kdevops_pcie_dynamic_kconfig|bool
diff --git a/playbooks/roles/gen_tfvars/tasks/main.yml b/playbooks/roles/gen_tfvars/tasks/main.yml
index e0d72082f145..b0c500359179 100644
--- a/playbooks/roles/gen_tfvars/tasks/main.yml
+++ b/playbooks/roles/gen_tfvars/tasks/main.yml
@@ -35,7 +35,7 @@
     patterns: "Kconfig*.generated"
   register: provider_kconfig_files
   when:
-    - kdevops_enable_terraform
+    - kdevops_enable_terraform|bool
 
 - name: Check if any dynamic Kconfig files are empty
   ansible.builtin.fail:
@@ -53,7 +53,7 @@
       For more information, run 'make help' and see the cloud-config
       targets section.
   when:
-    - kdevops_enable_terraform
+    - kdevops_enable_terraform|bool
     - provider_kconfig_files.matched > 0
     - item.size == 0
   loop: "{{ provider_kconfig_files.files }}"
@@ -80,5 +80,5 @@
     dest: "{{ topdir_path }}/{{ kdevops_terraform_tfvars }}"
     force: true
   when:
-    - kdevops_enable_terraform
+    - kdevops_enable_terraform|bool
     - terraform_tfvars_template.stat.exists
diff --git a/playbooks/roles/kdevops_archive/tasks/main.yml b/playbooks/roles/kdevops_archive/tasks/main.yml
index 0e41db9d2488..f7079dfa13af 100644
--- a/playbooks/roles/kdevops_archive/tasks/main.yml
+++ b/playbooks/roles/kdevops_archive/tasks/main.yml
@@ -229,7 +229,7 @@
   environment:
     GIT_LFS_SKIP_SMUDGE: "1"
   when:
-    - kdevops_archive_mirror_present
+    - kdevops_archive_mirror_present|bool
   register: git_clone_result
 
 - name: Remind user this is a demo
diff --git a/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml b/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
index a3fab512d7e3..d8aa20877392 100644
--- a/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
@@ -20,7 +20,7 @@
     nfsd_packages: "{{ nfsd_packages + [fsprogs] }}"
   when:
     - fsprogs is defined
-    - fsprogs
+    - fsprogs | default('', true) | length > 0
 
 - name: Install nfsd dependencies
   become: true
diff --git a/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml b/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
index 3b6aafd887ae..5d5716fd888c 100644
--- a/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
@@ -20,7 +20,7 @@
     nfsd_packages: "{{ nfsd_packages + [fsprogs] }}"
   when:
     - fsprogs is defined
-    - fsprogs
+    - fsprogs | default('', true) | length > 0
 
 - name: Add additional packages needed for krb5 to the nfsd packages list
   ansible.builtin.set_fact:
diff --git a/playbooks/roles/reboot-limit/tasks/do-reboot.yml b/playbooks/roles/reboot-limit/tasks/do-reboot.yml
index 8966d83d0b31..7f0e398797ea 100644
--- a/playbooks/roles/reboot-limit/tasks/do-reboot.yml
+++ b/playbooks/roles/reboot-limit/tasks/do-reboot.yml
@@ -172,7 +172,7 @@
   ansible.builtin.shell: echo 1 > /proc/sys/kernel/sysrq
   tags: ["run_tests", "read_count", "vars", "crash-check"]
   when:
-    - reboot_limit_boot_count_crash_enable
+    - reboot_limit_boot_count_crash_enable|bool
     - ((reboot_limit_count | int % reboot_limit_boot_crash_count | int) == 0)
 
 - name: Force a crash if we were asked to
@@ -182,7 +182,7 @@
   ignore_errors: true
   tags: ["run_tests", "read_count", "vars", "crash-check"]
   when:
-    - reboot_limit_boot_count_crash_enable
+    - reboot_limit_boot_count_crash_enable|bool
     - ((reboot_limit_count | int % reboot_limit_boot_crash_count | int) == 0)
 
 - name: Write current updated boot count variable file to be {{ reboot_limit_count }}
diff --git a/playbooks/roles/update_etc_hosts/tasks/main.yml b/playbooks/roles/update_etc_hosts/tasks/main.yml
index 4b5f7c44319f..e3b6c92a38c2 100644
--- a/playbooks/roles/update_etc_hosts/tasks/main.yml
+++ b/playbooks/roles/update_etc_hosts/tasks/main.yml
@@ -23,7 +23,7 @@
   ansible.builtin.set_fact:
     private_network: "{{ terraform_private_net_prefix }}/{{ terraform_private_net_mask }}"
   when:
-    - terraform_private_net_enabled
+    - terraform_private_net_enabled|bool
 
 - name: Build list of hosts
   ansible.builtin.set_fact:
@@ -57,7 +57,7 @@
     state: present
   with_items: "{{ ueh_hosts }}"
   when:
-    - terraform_private_net_enabled
+    - terraform_private_net_enabled|bool
     - not (kdevops_enable_nixos_flake | default(false))
 
 - name: Add IP address of all hosts to all hosts
@@ -70,7 +70,7 @@
     state: present
   with_items: "{{ ueh_hosts }}"
   when:
-    - not terraform_private_net_enabled
+    - not terraform_private_net_enabled|bool
     - not (kdevops_enable_nixos_flake | default(false))
 
 - name: Fix up hostname on Debian guestfs hosts
diff --git a/playbooks/roles/volume_group/tasks/guestfs.yml b/playbooks/roles/volume_group/tasks/guestfs.yml
index f5b1601ad11c..2775d3196234 100644
--- a/playbooks/roles/volume_group/tasks/guestfs.yml
+++ b/playbooks/roles/volume_group/tasks/guestfs.yml
@@ -15,28 +15,24 @@
   ansible.builtin.set_fact:
     by_id_pattern: "nvme-QEMU_NVMe_Ctrl_kdevops*"
   when:
-    - libvirt_extra_storage_drive_nvme is defined
     - libvirt_extra_storage_drive_nvme|bool
 
 - name: Set the virtio block device search pattern
   ansible.builtin.set_fact:
     by_id_pattern: "virtio-kdevops*"
   when:
-    - libvirt_extra_storage_drive_virtio is defined
     - libvirt_extra_storage_drive_virtio|bool
 
 - name: Set the IDE device search pattern
   ansible.builtin.set_fact:
     by_id_pattern: "ata-QEMU_HARDDISK_kdevops*"
   when:
-    - libvirt_extra_storage_drive_ide is defined
     - libvirt_extra_storage_drive_ide|bool
 
 - name: Set the SCSI device search pattern
   ansible.builtin.set_fact:
     by_id_pattern: "scsi-0QEMU_QEMU_HARDDISK_kdevops*"
   when:
-    - libvirt_extra_storage_drive_scsi is defined
     - libvirt_extra_storage_drive_scsi|bool
 
 - name: Verify there are block devices to search

-- 
2.54.0