All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes
@ 2026-06-18 12:17 Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans Jeff Layton
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

I originally sent these around a month ago. Daniel made some comments
and then I dropped the ball on addressing and merging them. This is v2.
It's basically the same as v1, but with some merge conflict fixups and
Daniel's comments addressed (at least on the target_linux_install_b4
parts). Original cover letter is below:

----------------------------8<------------------------------

ansible-2.20 contains a backward-incompatible change. Strings can no
longer be evaluated as booleans. It throws an exception instead. The
first patch fixes this up in all of the places the tree I could find.

The last patches are more optional, but I've been carrying them for a
while, and it would be nice to get them in. I think they make for
reasonable changes to the existing workflows.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
Changes in v2:
- Remove redundant "is defined" checks for several variables
- Add patch to replace deprecated top-level ansible_* facts with ansible_facts[]
- Rebase onto main and fix up merge conflicts
- Link to v1: https://lore.kernel.org/r/20260519-fixes-v1-0-54edd2ba92b0@kernel.org

---
Jeff Layton (5):
      ansible: fix bare conditionals for ansible-core 2.20+ strict booleans
      ansible: replace deprecated top-level ansible_* facts with ansible_facts[]
      gitr: enable verbose logging in the test harness
      nfsd: use more reasonable defaults for local VM testing
      devconfig: add some extra packages to the kdev tools

 kconfigs/Kconfig.nfsd                              |   4 +-
 playbooks/build_linux_results.yml                  |   2 +-
 playbooks/fio-tests-multi-fs-compare.yml           |   2 +-
 .../ai_multifs_run/tasks/run_single_filesystem.yml |   2 +-
 playbooks/roles/ai_multifs_setup/tasks/main.yml    |   2 +-
 playbooks/roles/ai_run_benchmarks/tasks/main.yml   |   6 +-
 playbooks/roles/base_image/tasks/base-image.yml    |   8 +-
 .../blktests/tasks/install-deps/suse/main.yml      |  32 +--
 playbooks/roles/blktests/tasks/main.yml            |   2 +-
 playbooks/roles/bootlinux/defaults/main.yml        |   6 +-
 playbooks/roles/bootlinux/tasks/build/9p.yml       |   3 +-
 playbooks/roles/bootlinux/tasks/build/builder.yml  |  21 +-
 playbooks/roles/bootlinux/tasks/build/targets.yml  |   3 +-
 .../roles/bootlinux/tasks/install-deps/main.yml    |   6 +-
 .../bootlinux/tasks/install-deps/redhat/main.yml   |   4 +-
 .../bootlinux/tasks/install-minimal-deps/main.yml  |   6 +-
 .../roles/bootlinux/tasks/install/packages.yml     |   4 +-
 playbooks/roles/bootlinux/tasks/main.yml           |   9 +-
 .../btrfs_progs/tasks/install-deps/suse/main.yml   |   6 +-
 playbooks/roles/build_linux/tasks/main.yml         |  30 +--
 playbooks/roles/codereadyrepo/tasks/main.yml       |  32 +--
 .../roles/create_data_partition/tasks/main.yml     |   2 +-
 playbooks/roles/create_nfs_mount/tasks/main.yml    |   4 +-
 .../tasks/install-deps/redhat/main.yml             |   2 +-
 .../tasks/install-deps/suse/main.yml               |  32 +--
 .../roles/cxl/tasks/install-deps/suse/main.yml     |  32 +--
 playbooks/roles/cxl/tasks/main.yml                 |   2 +-
 playbooks/roles/devconfig/tasks/datacrunch_ml.yml  |  10 +-
 .../roles/devconfig/tasks/install-deps/main.yml    |   8 +-
 .../devconfig/tasks/install-deps/redhat/main.yml   |  18 +-
 .../devconfig/tasks/install-deps/suse/main.yml     |  36 +--
 .../devconfig/tasks/kotd-rev-kernel/suse/main.yml  |  30 +--
 playbooks/roles/devconfig/tasks/main.yml           |  20 +-
 .../roles/dhclient_cache/tasks/isc-dhclient.yml    |   2 +-
 .../roles/dhclient_cache/tasks/networkmanager.yml  |   2 +-
 playbooks/roles/dhclient_cache/tasks/wicked.yml    |   2 +-
 .../tasks/install-deps/debian/main.yml             |   4 +-
 .../docker-mirror/tasks/install-deps/main.yml      |   6 +-
 .../docker-mirror/templates/docker-manifest.txt.j2 |   2 +-
 playbooks/roles/epel-release/tasks/main.yml        |   8 +-
 .../roles/fio-tests/tasks/install-deps/main.yml    |   2 +-
 .../fstests/tasks/install-deps/redhat/main.yml     |   4 +-
 .../roles/fstests/tasks/install-deps/suse/main.yml |  32 +--
 playbooks/roles/fstests/tasks/main.yml             |  11 +-
 .../tasks/install-deps/suse/main.yml               |  28 +--
 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/gitr/tasks/install-deps/main.yml   |  10 +-
 .../roles/gitr/tasks/install-deps/redhat/main.yml  |  12 +-
 playbooks/roles/gitr/tasks/main.yml                |  24 +-
 playbooks/roles/guestfs/tasks/bringup/main.yml     |   2 +-
 .../roles/guestfs/tasks/install-deps/main.yml      |   6 +-
 .../guestfs/tasks/install-deps/redhat/main.yml     |   2 +-
 .../tasks/install-deps/suse/main.yml               |   6 +-
 .../tasks/install-deps/suse/main.yml               |   6 +-
 playbooks/roles/iscsi/tasks/add_initiator.yml      |   4 +-
 playbooks/roles/iscsi/tasks/main.yml               |   4 +-
 playbooks/roles/kdc/tasks/install-deps/main.yml    |   6 +-
 playbooks/roles/kdc/tasks/main.yml                 |  14 +-
 playbooks/roles/kdc/templates/krb5.conf.j2         |   4 +-
 playbooks/roles/kdevops_archive/tasks/main.yml     |   2 +-
 playbooks/roles/krb5/tasks/install-deps/main.yml   |   6 +-
 playbooks/roles/krb5/tasks/main.yml                |  10 +-
 .../roles/ktls/tasks/install-deps/redhat/main.yml  |   2 +-
 playbooks/roles/ktls/tasks/main.yml                |   2 +-
 .../roles/libvirt_user/tasks/enable-user/main.yml  |   7 +-
 .../libvirt_user/tasks/enable-user/redhat/main.yml |   2 +-
 .../libvirt_user/tasks/enable-user/suse/main.yml   |   2 +-
 .../linux-mirror/tasks/install-deps/nfs/main.yml   |   6 +-
 playbooks/roles/linux-mirror/tasks/main.yml        |   8 +-
 playbooks/roles/ltp/tasks/main.yml                 |  10 +-
 playbooks/roles/milvus/tasks/benchmark.yml         |   2 +-
 playbooks/roles/milvus/tasks/install_docker.yml    |   8 +-
 playbooks/roles/minio_install/tasks/main.yml       |   6 +-
 playbooks/roles/minio_warp_run/tasks/main.yml      |  18 +-
 playbooks/roles/mmtests_compare/tasks/main.yml     |   4 +-
 .../roles/monitoring/tasks/install-deps/main.yml   |   4 +-
 .../roles/monitoring/tasks/monitor_collect.yml     |   4 +-
 .../monitoring/tasks/monitor_collect_only.yml      |   6 +-
 .../tasks/monitors/folio_migration/collect.yml     |  14 +-
 .../monitors/folio_migration/collect_only.yml      |   4 +-
 .../roles/nfsd/tasks/install-deps/debian/main.yml  |   4 +-
 .../roles/nfsd/tasks/install-deps/redhat/main.yml  |   6 +-
 .../roles/nfsd/tasks/install-deps/suse/main.yml    |   6 +-
 playbooks/roles/nfsd/tasks/main.yml                |   6 +-
 playbooks/roles/nfsd/templates/nfs.conf.j2         |   5 +
 playbooks/roles/nfstest/tasks/main.yml             |   4 +-
 playbooks/roles/pkg/tasks/debian.yml               |   8 +-
 .../roles/pynfs/tasks/install-deps/debian/main.yml |   2 +-
 .../roles/pynfs/tasks/install-deps/redhat/main.yml |   2 +-
 .../roles/qemu/tasks/install-deps/suse/main.yml    |   3 +-
 .../roles/reboot-limit/tasks/do-reboot-compare.yml |   2 +-
 playbooks/roles/reboot-limit/tasks/do-reboot.yml   |   6 +-
 playbooks/roles/rxe/templates/udev-rule.j2         |   4 +-
 .../selftests/tasks/install-deps/suse/main.yml     |  32 +--
 playbooks/roles/selftests/tasks/main.yml           |   2 +-
 playbooks/roles/siw/templates/udev-rule.j2         |   4 +-
 .../roles/smbd/tasks/install-deps/debian/main.yml  |   4 +-
 playbooks/roles/smbd/tasks/install-deps/main.yml   |   6 +-
 .../roles/smbd/tasks/install-deps/redhat/main.yml  |   4 +-
 .../roles/smbd/tasks/install-deps/suse/main.yml    |   4 +-
 playbooks/roles/smbd/tasks/main.yml                |   6 +-
 playbooks/roles/steady_state/tasks/main.yaml       |   2 +-
 .../sysbench/tasks/install-deps/redhat/main.yml    |   2 +-
 .../sysbench/tasks/install-deps/suse/main.yml      |  32 +--
 .../roles/sysbench/tasks/mysql-docker/main.yaml    |   4 +-
 .../roles/terraform/tasks/bringup/datacrunch.yml   |   6 +-
 playbooks/roles/update_etc_hosts/tasks/main.yml    |  14 +-
 .../roles/vllm/tasks/configure-docker-data.yml     |  10 +-
 playbooks/roles/vllm/tasks/deploy-bare-metal.yml   |   2 +-
 .../roles/vllm/tasks/install-deps/redhat/main.yml  |  16 +-
 playbooks/roles/vllm/tasks/main.yml                |  18 +-
 playbooks/roles/vllm/tasks/setup-kubernetes.yml    |   6 +-
 .../roles/vllm/templates/vllm-visualize.py.j2      |   2 +-
 playbooks/roles/volume_group/tasks/guestfs.yml     |   4 -
 .../roles/volume_group/tasks/terraform/oci.yml     |   2 +-
 118 files changed, 659 insertions(+), 644 deletions(-)
---
base-commit: 0b5567e15c3bceee0b79359e3d524ad08d06beb7
change-id: 20260515-fixes-4e708e81ced8

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans
  2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
@ 2026-06-18 12:17 ` Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 2/5] ansible: replace deprecated top-level ansible_* facts with ansible_facts[] Jeff Layton
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

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 <jlayton@kernel.org>
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/5] ansible: replace deprecated top-level ansible_* facts with ansible_facts[]
  2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans Jeff Layton
@ 2026-06-18 12:17 ` Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 3/5] gitr: enable verbose logging in the test harness Jeff Layton
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

Ansible-core 2.24 will remove the INJECT_FACTS_AS_VARS feature that
auto-injects gathered facts as top-level variables like ansible_os_family
and ansible_hostname. The new form uses the ansible_facts dictionary
with the ansible_ prefix stripped, for example ansible_facts["os_family"]
and ansible_facts["hostname"].

Some files in the tree already used the new form, making the codebase
inconsistent. Convert all remaining top-level fact variable references
across 109 playbook and template files to the ansible_facts[] form.
Connection variables (ansible_host, ansible_ssh_host), magic variables
(ansible_limit, ansible_play_hosts), and callback variables are not
gathered facts and are left unchanged.

Generated-by: Claude AI
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 playbooks/build_linux_results.yml                  |  2 +-
 playbooks/fio-tests-multi-fs-compare.yml           |  2 +-
 .../ai_multifs_run/tasks/run_single_filesystem.yml |  2 +-
 playbooks/roles/ai_multifs_setup/tasks/main.yml    |  2 +-
 playbooks/roles/ai_run_benchmarks/tasks/main.yml   |  6 ++--
 playbooks/roles/base_image/tasks/base-image.yml    |  8 ++---
 .../blktests/tasks/install-deps/suse/main.yml      | 32 ++++++++++----------
 playbooks/roles/blktests/tasks/main.yml            |  2 +-
 playbooks/roles/bootlinux/defaults/main.yml        |  6 ++--
 playbooks/roles/bootlinux/tasks/build/builder.yml  | 18 ++++++------
 .../roles/bootlinux/tasks/install-deps/main.yml    |  6 ++--
 .../bootlinux/tasks/install-deps/redhat/main.yml   |  4 +--
 .../bootlinux/tasks/install-minimal-deps/main.yml  |  6 ++--
 .../roles/bootlinux/tasks/install/packages.yml     |  4 +--
 playbooks/roles/bootlinux/tasks/main.yml           |  6 ++--
 .../btrfs_progs/tasks/install-deps/suse/main.yml   |  6 ++--
 playbooks/roles/build_linux/tasks/main.yml         | 22 +++++++-------
 playbooks/roles/codereadyrepo/tasks/main.yml       | 22 +++++++-------
 .../roles/create_data_partition/tasks/main.yml     |  2 +-
 playbooks/roles/create_nfs_mount/tasks/main.yml    |  4 +--
 .../tasks/install-deps/redhat/main.yml             |  2 +-
 .../tasks/install-deps/suse/main.yml               | 32 ++++++++++----------
 .../roles/cxl/tasks/install-deps/suse/main.yml     | 32 ++++++++++----------
 playbooks/roles/cxl/tasks/main.yml                 |  2 +-
 playbooks/roles/devconfig/tasks/datacrunch_ml.yml  | 10 +++----
 .../roles/devconfig/tasks/install-deps/main.yml    |  8 ++---
 .../devconfig/tasks/install-deps/redhat/main.yml   |  4 +--
 .../devconfig/tasks/install-deps/suse/main.yml     | 34 +++++++++++-----------
 .../devconfig/tasks/kotd-rev-kernel/suse/main.yml  | 30 +++++++++----------
 playbooks/roles/devconfig/tasks/main.yml           |  2 +-
 .../roles/dhclient_cache/tasks/isc-dhclient.yml    |  2 +-
 .../roles/dhclient_cache/tasks/networkmanager.yml  |  2 +-
 playbooks/roles/dhclient_cache/tasks/wicked.yml    |  2 +-
 .../tasks/install-deps/debian/main.yml             |  4 +--
 .../docker-mirror/tasks/install-deps/main.yml      |  6 ++--
 .../docker-mirror/templates/docker-manifest.txt.j2 |  2 +-
 playbooks/roles/epel-release/tasks/main.yml        |  8 ++---
 .../roles/fio-tests/tasks/install-deps/main.yml    |  2 +-
 .../fstests/tasks/install-deps/redhat/main.yml     |  4 +--
 .../roles/fstests/tasks/install-deps/suse/main.yml | 32 ++++++++++----------
 playbooks/roles/fstests/tasks/main.yml             |  2 +-
 .../tasks/install-deps/suse/main.yml               | 28 +++++++++---------
 playbooks/roles/gitr/tasks/install-deps/main.yml   | 10 +++----
 .../roles/gitr/tasks/install-deps/redhat/main.yml  | 12 ++++----
 playbooks/roles/gitr/tasks/main.yml                | 20 ++++++-------
 playbooks/roles/guestfs/tasks/bringup/main.yml     |  2 +-
 .../roles/guestfs/tasks/install-deps/main.yml      |  6 ++--
 .../guestfs/tasks/install-deps/redhat/main.yml     |  2 +-
 .../tasks/install-deps/suse/main.yml               |  6 ++--
 .../tasks/install-deps/suse/main.yml               |  6 ++--
 playbooks/roles/iscsi/tasks/add_initiator.yml      |  4 +--
 playbooks/roles/iscsi/tasks/main.yml               |  4 +--
 playbooks/roles/kdc/tasks/install-deps/main.yml    |  6 ++--
 playbooks/roles/kdc/tasks/main.yml                 | 14 ++++-----
 playbooks/roles/kdc/templates/krb5.conf.j2         |  4 +--
 playbooks/roles/krb5/tasks/install-deps/main.yml   |  6 ++--
 playbooks/roles/krb5/tasks/main.yml                | 10 +++----
 .../roles/ktls/tasks/install-deps/redhat/main.yml  |  2 +-
 playbooks/roles/ktls/tasks/main.yml                |  2 +-
 .../roles/libvirt_user/tasks/enable-user/main.yml  |  7 +++--
 .../libvirt_user/tasks/enable-user/redhat/main.yml |  2 +-
 .../libvirt_user/tasks/enable-user/suse/main.yml   |  2 +-
 .../linux-mirror/tasks/install-deps/nfs/main.yml   |  6 ++--
 playbooks/roles/linux-mirror/tasks/main.yml        |  8 ++---
 playbooks/roles/ltp/tasks/main.yml                 | 10 +++----
 playbooks/roles/milvus/tasks/benchmark.yml         |  2 +-
 playbooks/roles/milvus/tasks/install_docker.yml    |  8 ++---
 playbooks/roles/minio_install/tasks/main.yml       |  6 ++--
 playbooks/roles/minio_warp_run/tasks/main.yml      | 18 ++++++------
 playbooks/roles/mmtests_compare/tasks/main.yml     |  4 +--
 .../roles/monitoring/tasks/install-deps/main.yml   |  4 +--
 .../roles/monitoring/tasks/monitor_collect.yml     |  4 +--
 .../monitoring/tasks/monitor_collect_only.yml      |  6 ++--
 .../tasks/monitors/folio_migration/collect.yml     | 14 ++++-----
 .../monitors/folio_migration/collect_only.yml      |  4 +--
 .../roles/nfsd/tasks/install-deps/debian/main.yml  |  4 +--
 .../roles/nfsd/tasks/install-deps/redhat/main.yml  |  4 +--
 .../roles/nfsd/tasks/install-deps/suse/main.yml    |  4 +--
 playbooks/roles/nfsd/tasks/main.yml                |  6 ++--
 playbooks/roles/nfstest/tasks/main.yml             |  4 +--
 playbooks/roles/pkg/tasks/debian.yml               |  8 ++---
 .../roles/pynfs/tasks/install-deps/debian/main.yml |  2 +-
 .../roles/pynfs/tasks/install-deps/redhat/main.yml |  2 +-
 .../roles/qemu/tasks/install-deps/suse/main.yml    |  3 +-
 .../roles/reboot-limit/tasks/do-reboot-compare.yml |  2 +-
 playbooks/roles/reboot-limit/tasks/do-reboot.yml   |  2 +-
 playbooks/roles/rxe/templates/udev-rule.j2         |  4 +--
 .../selftests/tasks/install-deps/suse/main.yml     | 32 ++++++++++----------
 playbooks/roles/selftests/tasks/main.yml           |  2 +-
 playbooks/roles/siw/templates/udev-rule.j2         |  4 +--
 .../roles/smbd/tasks/install-deps/debian/main.yml  |  4 +--
 playbooks/roles/smbd/tasks/install-deps/main.yml   |  6 ++--
 .../roles/smbd/tasks/install-deps/redhat/main.yml  |  4 +--
 .../roles/smbd/tasks/install-deps/suse/main.yml    |  4 +--
 playbooks/roles/smbd/tasks/main.yml                |  6 ++--
 playbooks/roles/steady_state/tasks/main.yaml       |  2 +-
 .../sysbench/tasks/install-deps/redhat/main.yml    |  2 +-
 .../sysbench/tasks/install-deps/suse/main.yml      | 32 ++++++++++----------
 .../roles/sysbench/tasks/mysql-docker/main.yaml    |  4 +--
 .../roles/terraform/tasks/bringup/datacrunch.yml   |  6 ++--
 playbooks/roles/update_etc_hosts/tasks/main.yml    |  8 ++---
 .../roles/vllm/tasks/configure-docker-data.yml     | 10 +++----
 playbooks/roles/vllm/tasks/deploy-bare-metal.yml   |  2 +-
 .../roles/vllm/tasks/install-deps/redhat/main.yml  | 16 +++++-----
 playbooks/roles/vllm/tasks/main.yml                | 18 ++++++------
 playbooks/roles/vllm/tasks/setup-kubernetes.yml    |  6 ++--
 .../roles/vllm/templates/vllm-visualize.py.j2      |  2 +-
 .../roles/volume_group/tasks/terraform/oci.yml     |  2 +-
 108 files changed, 425 insertions(+), 425 deletions(-)

diff --git a/playbooks/build_linux_results.yml b/playbooks/build_linux_results.yml
index 22866b387e36..b02b4dc4b508 100644
--- a/playbooks/build_linux_results.yml
+++ b/playbooks/build_linux_results.yml
@@ -30,7 +30,7 @@
     - name: Fetch build results
       ansible.builtin.fetch:
         src: "{{ item.path }}"
-        dest: "{{ topdir_path }}/{{ build_linux_results_dir }}/{{ ansible_hostname }}_{{ item.path | basename }}"
+        dest: "{{ topdir_path }}/{{ build_linux_results_dir }}/{{ ansible_facts['hostname'] }}_{{ item.path | basename }}"
         flat: true
       loop: "{{ result_files.files }}"
       when:
diff --git a/playbooks/fio-tests-multi-fs-compare.yml b/playbooks/fio-tests-multi-fs-compare.yml
index 9ab51dc302a4..bac3ffc412db 100644
--- a/playbooks/fio-tests-multi-fs-compare.yml
+++ b/playbooks/fio-tests-multi-fs-compare.yml
@@ -123,7 +123,7 @@
         dest: "{{ output_dir }}/multi-filesystem-comparison-summary.html"
         mode: '0644'
       vars:
-        timestamp: "{{ ansible_date_time.iso8601 }}"
+        timestamp: "{{ ansible_facts['date_time'].iso8601 }}"
         total_configs: "{{ filesystem_configs | length }}"
         total_files: "{{ json_files.files | length }}"
       when: generated_files.files | length > 0
diff --git a/playbooks/roles/ai_multifs_run/tasks/run_single_filesystem.yml b/playbooks/roles/ai_multifs_run/tasks/run_single_filesystem.yml
index 4a7840cdf496..c0f56cc0db84 100644
--- a/playbooks/roles/ai_multifs_run/tasks/run_single_filesystem.yml
+++ b/playbooks/roles/ai_multifs_run/tasks/run_single_filesystem.yml
@@ -75,7 +75,7 @@
       Mount Point: {{ ai_multifs_mount_point }}
       Data Directory: {{ current_fs_benchmark_dir }}
       Results Directory: {{ current_fs_results_dir }}
-      Test Start Time: {{ ansible_date_time.iso8601 }}
+      Test Start Time: {{ ansible_facts['date_time'].iso8601 }}
 
       mkfs Output:
       {{ mkfs_result.stdout }}
diff --git a/playbooks/roles/ai_multifs_setup/tasks/main.yml b/playbooks/roles/ai_multifs_setup/tasks/main.yml
index c8af11c6103d..1fabc3c660c1 100644
--- a/playbooks/roles/ai_multifs_setup/tasks/main.yml
+++ b/playbooks/roles/ai_multifs_setup/tasks/main.yml
@@ -55,7 +55,7 @@
   copy:
     content: |
       # AI Multi-Filesystem Testing Configuration
-      Generated: {{ ansible_date_time.iso8601 }}
+      Generated: {{ ansible_facts['date_time'].iso8601 }}
       Device: {{ ai_multifs_device }}
       Mount Point: {{ ai_multifs_mount_point }}
       Results Directory: {{ ai_multifs_results_dir }}
diff --git a/playbooks/roles/ai_run_benchmarks/tasks/main.yml b/playbooks/roles/ai_run_benchmarks/tasks/main.yml
index 996bb41c45c5..1fc47df178b6 100644
--- a/playbooks/roles/ai_run_benchmarks/tasks/main.yml
+++ b/playbooks/roles/ai_run_benchmarks/tasks/main.yml
@@ -44,7 +44,7 @@
 
 - name: Check if lock file is stale (older than 5 minutes)
   ansible.builtin.set_fact:
-    lock_is_stale: "{{ (ansible_date_time.epoch | int - lock_file.stat.mtime | default(0) | int) > 300 }}"
+    lock_is_stale: "{{ (ansible_facts['date_time'].epoch | int - lock_file.stat.mtime | default(0) | int) > 300 }}"
   when: lock_file.stat.exists
 
 - name: Remove stale lock file
@@ -60,7 +60,7 @@
     msg: |
       ERROR: Benchmark lock file exists at {{ ai_benchmark_results_dir }}/.benchmark.lock
       This indicates a benchmark may be in progress or was terminated abnormally.
-      Lock file age: {{ (ansible_date_time.epoch | int - lock_file.stat.mtime | default(0) | int) }} seconds
+      Lock file age: {{ (ansible_facts['date_time'].epoch | int - lock_file.stat.mtime | default(0) | int) }} seconds
       If you're sure no benchmark is running, remove the lock file manually.
   when:
     - lock_file.stat.exists
@@ -158,7 +158,7 @@
         {{ ai_benchmark_results_dir }}/venv/bin/python
         {{ ai_benchmark_results_dir }}/workdir/milvus_benchmark.py
         --config {{ ai_benchmark_results_dir }}/workdir/benchmark_config.json
-        --output {{ ai_benchmark_results_dir }}/results_{{ ansible_hostname }}_{{ item }}.json
+        --output {{ ai_benchmark_results_dir }}/results_{{ ansible_facts['hostname'] }}_{{ item }}.json
       register: benchmark_result
       with_sequence: start=1 end={{ ai_benchmark_iterations }}
       tags: run_benchmark
diff --git a/playbooks/roles/base_image/tasks/base-image.yml b/playbooks/roles/base_image/tasks/base-image.yml
index 4a51648afc04..341f64429ce1 100644
--- a/playbooks/roles/base_image/tasks/base-image.yml
+++ b/playbooks/roles/base_image/tasks/base-image.yml
@@ -41,7 +41,7 @@
       - "virt-builder"
       - "{{ base_image_os_version }}"
       - "--arch"
-      - "{{ ansible_machine }}"
+      - "{{ ansible_facts['machine'] }}"
       - "-o"
       - "{{ base_image_pathname }}"
       - "--size"
@@ -61,7 +61,7 @@
       - "virt-builder"
       - "{{ base_image_os_version }}"
       - "--arch"
-      - "{{ ansible_machine }}"
+      - "{{ ansible_facts['machine'] }}"
       - "-o"
       - "{{ base_image_pathname }}"
       - "--size"
@@ -89,7 +89,7 @@
     - libvirt_uri_system|bool
     - guestfs_fedora is defined
     - guestfs_fedora|bool
-    - ansible_distribution|lower in ['debian', 'ubuntu']
+    - ansible_facts['distribution']|lower in ['debian', 'ubuntu']
     - virt_builder_result_system is changed
 
 - name: Set SELinux to permissive mode for Fedora images on non-SELinux hosts (user libvirt)
@@ -104,7 +104,7 @@
     - not libvirt_uri_system|bool
     - guestfs_fedora is defined
     - guestfs_fedora|bool
-    - ansible_distribution|lower in ['debian', 'ubuntu']
+    - ansible_facts['distribution']|lower in ['debian', 'ubuntu']
     - virt_builder_result_user is changed
 
 - name: Set proper ownership on base image for rcloud access (system libvirt)
diff --git a/playbooks/roles/blktests/tasks/install-deps/suse/main.yml b/playbooks/roles/blktests/tasks/install-deps/suse/main.yml
index 578778ee9687..992a4a433642 100644
--- a/playbooks/roles/blktests/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/blktests/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/blktests/tasks/main.yml b/playbooks/roles/blktests/tasks/main.yml
index f7253d8a4ec8..9bc67c22bdbc 100644
--- a/playbooks/roles/blktests/tasks/main.yml
+++ b/playbooks/roles/blktests/tasks/main.yml
@@ -172,7 +172,7 @@
 - name: Print uname for each host
   tags: ["blktests", "run_tests"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Get used target kernel version
   tags: ["blktests", "copy_results", "augment_expunge_list"]
   ansible.builtin.command: "uname -r"
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index e694b5da9716..ea50c9b05eff 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -26,12 +26,12 @@ target_linux_delta_file:
 target_linux_config: "config-{{ target_linux_ref }}"
 make: "make"
 # Once ansible v2.10 becomes available we can move on to using
-# ansible_processor_nproc but that was merged in 2020:
+# ansible_facts['processor_nproc'] but that was merged in 2020:
 # The commit is 34db57a47f875d11c4068567b9ec7ace174ec4cf
-# introduce fact "ansible_processor_nproc": number of usable vcpus #66569
+# introduce fact "ansible_facts['processor_nproc']": number of usable vcpus #66569
 # https://github.com/ansible/ansible/pull/66569
 # Build command without environment variables (added via environment dict)
-target_linux_make_cmd: "{{ make }} -j{{ ansible_processor_vcpus }}"
+target_linux_make_cmd: "{{ make }} -j{{ ansible_facts['processor_vcpus'] }}"
 
 # Make parameters dictionary for community.general.make module
 bootlinux_make_params: >-
diff --git a/playbooks/roles/bootlinux/tasks/build/builder.yml b/playbooks/roles/bootlinux/tasks/build/builder.yml
index 3b056f9fe697..5138b69ed72d 100644
--- a/playbooks/roles/bootlinux/tasks/build/builder.yml
+++ b/playbooks/roles/bootlinux/tasks/build/builder.yml
@@ -8,7 +8,7 @@
       - b4
   when:
     - target_linux_install_b4 | default('', true) | length > 0
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
 
 - name: Clone {{ target_linux_tree }}
   ansible.builtin.git:
@@ -125,7 +125,7 @@
 - name: Build {{ target_linux_tree }}
   community.general.make:
     chdir: "{{ target_linux_dir_path }}"
-    jobs: "{{ ansible_processor_nproc }}"
+    jobs: "{{ ansible_facts['processor_nproc'] }}"
     target: "all"
   when:
     - bootlinux_compiler_gcc|bool
@@ -151,7 +151,7 @@
 - name: Build {{ target_linux_tree }}
   community.general.make:
     chdir: "{{ target_linux_dir_path }}"
-    jobs: "{{ ansible_processor_nproc }}"
+    jobs: "{{ ansible_facts['processor_nproc'] }}"
     params:
       LLVM: 1
     target: "all"
@@ -174,7 +174,7 @@
 
 - name: Build kernel .deb packages
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
   block:
     - name: Build the list of artifacts directories on the builder
       ansible.builtin.set_fact:
@@ -184,7 +184,7 @@
     - name: Make the bindeb-pkg target
       community.general.make:
         chdir: "{{ target_linux_dir_path }}"
-        jobs: "{{ ansible_processor_nproc }}"
+        jobs: "{{ ansible_facts['processor_nproc'] }}"
         target: "bindeb-pkg"
 
     - name: Find the build artifacts
@@ -206,13 +206,13 @@
 
 - name: Build kernel .rpm packages
   when:
-    - ansible_os_family != "Debian"
+    - ansible_facts['os_family'] != "Debian"
   block:
     - name: Build the list of artifacts directories on the builder
       ansible.builtin.set_fact:
         artifact_paths:
           - "{{ target_linux_dir_path }}/rpmbuild/RPMS"
-          - "{{ ansible_env.HOME }}/rpmbuild/RPMS"
+          - "{{ ansible_facts['env'].HOME }}/rpmbuild/RPMS"
 
     - name: Wipe the artifact directories on the builder
       ansible.builtin.file:
@@ -234,7 +234,7 @@
     - name: Make the binrpm-pkg target
       community.general.make:
         chdir: "{{ target_linux_dir_path }}"
-        jobs: "{{ ansible_processor_nproc }}"
+        jobs: "{{ ansible_facts['processor_nproc'] }}"
         target: "binrpm-pkg"
         params:
           RPMOPTS: "--without devel"
@@ -244,7 +244,7 @@
     - name: Make the binrpm-pkg target
       community.general.make:
         chdir: "{{ target_linux_dir_path }}"
-        jobs: "{{ ansible_processor_nproc }}"
+        jobs: "{{ ansible_facts['processor_nproc'] }}"
         target: "binrpm-pkg"
         params:
           RPMOPTS: "--without devel"
diff --git a/playbooks/roles/bootlinux/tasks/install-deps/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/main.yml
index 0ce469b6ed8f..963ad5a53ba4 100644
--- a/playbooks/roles/bootlinux/tasks/install-deps/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-deps/main.yml
@@ -3,14 +3,14 @@
 - name: Debian-specific setup
   ansible.builtin.import_tasks: debian/main.yml
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
 
 - name: SuSE-specific setup
   ansible.builtin.import_tasks: suse/main.yml
   when:
-    - ansible_os_family == "Suse"
+    - ansible_facts['os_family'] == "Suse"
 
 - name: Red Hat-specific setup
   ansible.builtin.import_tasks: redhat/main.yml
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
diff --git a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
index 4cc052f68702..64029322befc 100644
--- a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
@@ -4,7 +4,7 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Install packages we care about
   become: true
@@ -68,7 +68,7 @@
   vars:
     packages:
       - btrfs-progs
-  when: ansible_distribution == 'Fedora'
+  when: ansible_facts['distribution'] == 'Fedora'
 
 - name: Install clang
   become: true
diff --git a/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml b/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
index daa4321f20f7..35ad15f9318c 100644
--- a/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
@@ -3,14 +3,14 @@
 - name: Debian-specific minimal setup
   ansible.builtin.import_tasks: debian/main.yml
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
 
 - name: SuSE-specific minimal setup
   ansible.builtin.import_tasks: suse/main.yml
   when:
-    - ansible_os_family == "Suse"
+    - ansible_facts['os_family'] == "Suse"
 
 - name: Red Hat-specific minimal setup
   ansible.builtin.import_tasks: redhat/main.yml
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
diff --git a/playbooks/roles/bootlinux/tasks/install/packages.yml b/playbooks/roles/bootlinux/tasks/install/packages.yml
index 3a1bd2b1eb78..5784f5e20a94 100644
--- a/playbooks/roles/bootlinux/tasks/install/packages.yml
+++ b/playbooks/roles/bootlinux/tasks/install/packages.yml
@@ -2,7 +2,7 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Install the built kernel RPMs on the target nodes
   when:
-    - ansible_os_family != "Debian"
+    - ansible_facts['os_family'] != "Debian"
   block:
     - name: Find the kernel build artifacts on the control host
       delegate_to: localhost
@@ -44,7 +44,7 @@
 
 - name: Install the built kernel debs on the target nodes
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
   block:
     - name: Find the kernel build artifacts on the control host
       delegate_to: localhost
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 74533b5152c7..1a3644817384 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -63,7 +63,7 @@
 
 - name: Set bootlinux_b4_am_this_host as a fact for dev hosts only
   ansible.builtin.set_fact:
-    bootlinux_b4_am_this_host: "{{ ansible_hostname | regex_search('^.*-dev$') is not none }}"
+    bootlinux_b4_am_this_host: "{{ ansible_facts['hostname'] | regex_search('^.*-dev$') is not none }}"
   when:
     - kdevops_baseline_and_dev|bool
     - not workflow_linux_packaged|bool
@@ -77,7 +77,7 @@
 
 - name: Determine if this is a dev node for A/B testing
   ansible.builtin.set_fact:
-    bootlinux_is_dev_node: "{{ ansible_hostname | regex_search('^.*-dev$') is not none }}"
+    bootlinux_is_dev_node: "{{ ansible_facts['hostname'] | regex_search('^.*-dev$') is not none }}"
   when:
     - kdevops_baseline_and_dev|bool
     - bootlinux_ab_different_ref|bool
@@ -213,7 +213,7 @@
   ansible.builtin.debug:
     msg: |
       === KERNEL BUILD COMMAND DEBUG ===
-      build_jobs: {{ ansible_processor_vcpus }}
+      build_jobs: {{ ansible_facts['processor_vcpus'] }}
       bootlinux_make_params: {{ bootlinux_make_params }}
       bootlinux_build_environment: {{ bootlinux_build_environment }}
       bootlinux_compiler_clang: {{ bootlinux_compiler_clang|default(false) }}
diff --git a/playbooks/roles/btrfs_progs/tasks/install-deps/suse/main.yml b/playbooks/roles/btrfs_progs/tasks/install-deps/suse/main.yml
index 83d9dd934ff8..7e654dfb6f9e 100644
--- a/playbooks/roles/btrfs_progs/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/btrfs_progs/tasks/install-deps/suse/main.yml
@@ -2,9 +2,9 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Install btrfs-progs build dependencies
   become: true
diff --git a/playbooks/roles/build_linux/tasks/main.yml b/playbooks/roles/build_linux/tasks/main.yml
index 9f8bdf0db381..74e39775c04a 100644
--- a/playbooks/roles/build_linux/tasks/main.yml
+++ b/playbooks/roles/build_linux/tasks/main.yml
@@ -18,21 +18,21 @@
     - name: Set filesystem type based on node name
       set_fact:
         node_fstype: >-
-          {%- if 'xfs' in ansible_hostname -%}xfs
-          {%- elif 'ext4' in ansible_hostname -%}ext4
-          {%- elif 'btrfs' in ansible_hostname -%}btrfs
-          {%- elif 'tmpfs' in ansible_hostname -%}tmpfs
+          {%- if 'xfs' in ansible_facts['hostname'] -%}xfs
+          {%- elif 'ext4' in ansible_facts['hostname'] -%}ext4
+          {%- elif 'btrfs' in ansible_facts['hostname'] -%}btrfs
+          {%- elif 'tmpfs' in ansible_facts['hostname'] -%}tmpfs
           {%- else -%}{{ build_linux_fstype|default('xfs') }}{%- endif -%}
 
     - name: Set XFS block and sector sizes from node name
       when: node_fstype == 'xfs'
       set_fact:
         node_xfs_blocksize: >-
-          {%- if 'xfs-4k' in ansible_hostname -%}4096
-          {%- elif 'xfs-8k' in ansible_hostname -%}8192
-          {%- elif 'xfs-16k' in ansible_hostname -%}16384
-          {%- elif 'xfs-32k' in ansible_hostname -%}32768
-          {%- elif 'xfs-64k' in ansible_hostname -%}65536
+          {%- if 'xfs-4k' in ansible_facts['hostname'] -%}4096
+          {%- elif 'xfs-8k' in ansible_facts['hostname'] -%}8192
+          {%- elif 'xfs-16k' in ansible_facts['hostname'] -%}16384
+          {%- elif 'xfs-32k' in ansible_facts['hostname'] -%}32768
+          {%- elif 'xfs-64k' in ansible_facts['hostname'] -%}65536
           {%- else -%}4096{%- endif -%}
         node_xfs_sectorsize: "4096"
 
@@ -216,7 +216,7 @@
 
 - name: Check for build results
   ansible.builtin.stat:
-    path: "{{ data_path }}/build-results/summary_{{ ansible_hostname }}.json"
+    path: "{{ data_path }}/build-results/summary_{{ ansible_facts['hostname'] }}.json"
   register: summary_file
 
 - name: Read and display summary
@@ -224,7 +224,7 @@
   block:
     - name: Read summary file
       ansible.builtin.slurp:
-        src: "{{ data_path }}/build-results/summary_{{ ansible_hostname }}.json"
+        src: "{{ data_path }}/build-results/summary_{{ ansible_facts['hostname'] }}.json"
       register: summary_content
 
     - name: Parse summary
diff --git a/playbooks/roles/codereadyrepo/tasks/main.yml b/playbooks/roles/codereadyrepo/tasks/main.yml
index f670adaaa9cc..d6a20af7d55a 100644
--- a/playbooks/roles/codereadyrepo/tasks/main.yml
+++ b/playbooks/roles/codereadyrepo/tasks/main.yml
@@ -2,49 +2,49 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Enable a CodeReady Builder repo for this distribution
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
     - 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"
+        codeready_repo: "codeready-builder-for-rhel-{{ ansible_facts['distribution_major_version'] }}-{{ ansible_facts['architecture'] }}-rpms"
       when:
-        - ansible_distribution == 'RedHat'
+        - ansible_facts['distribution'] == 'RedHat'
         - kdevops_enable_guestfs|bool
 
     - name: Select the Oracle Linux CodeReady Builder repo
       ansible.builtin.set_fact:
         codeready_repo: "ol9_codeready_builder"
       when:
-        - ansible_distribution == 'OracleLinux'
+        - ansible_facts['distribution'] == 'OracleLinux'
 
     - name: Select the CentOS CodeReady Builder repo
       ansible.builtin.set_fact:
         codeready_repo: "crb"
       when:
-        - ansible_distribution == 'CentOS'
+        - ansible_facts['distribution'] == 'CentOS'
 
     - name: Select the AWS RHEL CodeReady Builder repo
       ansible.builtin.set_fact:
-        codeready_repo: "codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-rhui-rpms"
+        codeready_repo: "codeready-builder-for-rhel-{{ ansible_facts['distribution_major_version'] }}-rhui-rpms"
       when:
-        - ansible_distribution == 'RedHat'
+        - ansible_facts['distribution'] == 'RedHat'
         - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "aws"
 
     - name: Select the Azure RHEL CodeReady Builder repo
       ansible.builtin.set_fact:
-        codeready_repo: "codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}-rhui-rpms"
+        codeready_repo: "codeready-builder-for-rhel-{{ ansible_facts['distribution_major_version'] }}-{{ ansible_facts['architecture'] }}-rhui-rpms"
       when:
-        - ansible_distribution == 'RedHat'
+        - ansible_facts['distribution'] == 'RedHat'
         - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "azure"
 
     - name: Select the Google Cloud RHEL CodeReady Builder repo
       ansible.builtin.set_fact:
-        codeready_repo: "rhui-codeready-builder-for-rhel-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}-rhui-rpms"
+        codeready_repo: "rhui-codeready-builder-for-rhel-{{ ansible_facts['distribution_major_version'] }}-{{ ansible_facts['architecture'] }}-rhui-rpms"
       when:
-        - ansible_distribution == 'RedHat'
+        - ansible_facts['distribution'] == 'RedHat'
         - kdevops_enable_terraform|bool
         - kdevops_terraform_provider == "gce"
 
diff --git a/playbooks/roles/create_data_partition/tasks/main.yml b/playbooks/roles/create_data_partition/tasks/main.yml
index 04c2ae92b474..1004f5574650 100644
--- a/playbooks/roles/create_data_partition/tasks/main.yml
+++ b/playbooks/roles/create_data_partition/tasks/main.yml
@@ -39,7 +39,7 @@
         - data_volume_id in item.value.links.ids
       loop_control:
         label: "Adding block device: /dev/{{ item.key }}"
-      with_dict: "{{ ansible_devices }}"
+      with_dict: "{{ ansible_facts['devices'] }}"
 
 - name: Create data partition if not created yet
   ansible.builtin.include_role:
diff --git a/playbooks/roles/create_nfs_mount/tasks/main.yml b/playbooks/roles/create_nfs_mount/tasks/main.yml
index d94c21f478e7..6efae5848da8 100644
--- a/playbooks/roles/create_nfs_mount/tasks/main.yml
+++ b/playbooks/roles/create_nfs_mount/tasks/main.yml
@@ -12,7 +12,7 @@
   failed_when: false
   tags: vars
 
-- name: Install NFS client administrative tools for {{ ansible_os_family }}
+- name: Install NFS client administrative tools for {{ ansible_facts['os_family'] }}
   tags: deps
   vars:
     packages:
@@ -26,7 +26,7 @@
   become_flags: "su - -c"
   become_method: ansible.builtin.sudo
   ansible.builtin.package:
-    name: "{{ packages[ansible_os_family] }}"
+    name: "{{ packages[ansible_facts['os_family']] }}"
     state: present
 
 - name: Inspect {{ nfs_mounted_on }}
diff --git a/playbooks/roles/create_partition/tasks/install-deps/redhat/main.yml b/playbooks/roles/create_partition/tasks/install-deps/redhat/main.yml
index 89ed1d59ff31..6b95079a19f2 100644
--- a/playbooks/roles/create_partition/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/create_partition/tasks/install-deps/redhat/main.yml
@@ -24,4 +24,4 @@
   vars:
     packages:
       - btrfs-progs
-  when: ansible_distribution == 'Fedora'
+  when: ansible_facts['distribution'] == 'Fedora'
diff --git a/playbooks/roles/create_partition/tasks/install-deps/suse/main.yml b/playbooks/roles/create_partition/tasks/install-deps/suse/main.yml
index d5cb5b199af6..07cd1c6431af 100644
--- a/playbooks/roles/create_partition/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/create_partition/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/cxl/tasks/install-deps/suse/main.yml b/playbooks/roles/cxl/tasks/install-deps/suse/main.yml
index e25eec43cb40..11da9971dd91 100644
--- a/playbooks/roles/cxl/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/cxl/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/cxl/tasks/main.yml b/playbooks/roles/cxl/tasks/main.yml
index 225368062c04..c3a224a4223c 100644
--- a/playbooks/roles/cxl/tasks/main.yml
+++ b/playbooks/roles/cxl/tasks/main.yml
@@ -99,7 +99,7 @@
 - name: Print uname for each host
   tags: ["ndctl", "cxl-test-prep", "copy_results"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Clear out old meson results directory on target hosts
   become: true
   become_flags: "su - -c"
diff --git a/playbooks/roles/devconfig/tasks/datacrunch_ml.yml b/playbooks/roles/devconfig/tasks/datacrunch_ml.yml
index d4a9cbc73fbf..7efc5e3bdbc6 100644
--- a/playbooks/roles/devconfig/tasks/datacrunch_ml.yml
+++ b/playbooks/roles/devconfig/tasks/datacrunch_ml.yml
@@ -45,7 +45,7 @@
     - name: Execute uv installer
       ansible.builtin.command:
         cmd: sh /tmp/uv-installer.sh
-        creates: "{{ ansible_env.HOME }}/.local/bin/uv"
+        creates: "{{ ansible_facts['env'].HOME }}/.local/bin/uv"
     - name: Remove uv installer script
       ansible.builtin.file:
         path: /tmp/uv-installer.sh
@@ -53,13 +53,13 @@
 
 - name: Create Python virtual environment
   ansible.builtin.command:
-    cmd: python3 -m venv {{ ansible_env.HOME }}/.venv
-    creates: "{{ ansible_env.HOME }}/.venv/bin/activate"
+    cmd: python3 -m venv {{ ansible_facts['env'].HOME }}/.venv
+    creates: "{{ ansible_facts['env'].HOME }}/.venv/bin/activate"
 
 - name: Install PyTorch in virtual environment
   ansible.builtin.pip:
     name: torch
-    virtualenv: "{{ ansible_env.HOME }}/.venv"
+    virtualenv: "{{ ansible_facts['env'].HOME }}/.venv"
 
 - name: Unload NVIDIA kernel modules to avoid PyTorch/driver mismatch
   become: true
@@ -105,7 +105,7 @@
 
 - name: Auto-activate Python virtualenv on login
   ansible.builtin.lineinfile:
-    path: "{{ ansible_env.HOME }}/.bashrc"
+    path: "{{ ansible_facts['env'].HOME }}/.bashrc"
     line: "test -s ~/.venv/bin/activate && source ~/.venv/bin/activate"
     create: yes
     mode: '0644'
diff --git a/playbooks/roles/devconfig/tasks/install-deps/main.yml b/playbooks/roles/devconfig/tasks/install-deps/main.yml
index f3170bac6998..018dcfad12a3 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/main.yml
@@ -4,7 +4,7 @@
   ansible.builtin.setup:
     gather_subset:
       - "os_family"
-  when: ansible_os_family is not defined
+  when: ansible_facts['os_family'] is not defined
   tags: vars_simple
 
 - name: Import optional user secret specific variables
@@ -29,20 +29,20 @@
 - name: Debian-specific setup
   ansible.builtin.include_tasks: debian/main.yml
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
     - devconfig_try_refresh_repos|bool or devconfig_try_install_kdevtools|bool or kdevops_cli_install|bool
   tags: vars_simple
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: suse/main.yml
   when:
-    - ansible_os_family == "Suse"
+    - ansible_facts['os_family'] == "Suse"
     - devconfig_try_refresh_repos|bool or devconfig_try_install_kdevtools|bool or kdevops_cli_install|bool
   tags: vars_simple
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: redhat/main.yml
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
     - devconfig_try_refresh_repos|bool or devconfig_try_install_kdevtools|bool or kdevops_cli_install|bool
   tags: vars_simple
diff --git a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
index f851da05ab4a..df4dbc834329 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
@@ -80,7 +80,7 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Build install package list
   ansible.builtin.set_fact:
@@ -117,7 +117,7 @@
     packages: "{{ packages + ['btrfs-progs'] }}"
   when:
     - devconfig_try_install_kdevtools|bool
-    - ansible_distribution == 'Fedora'
+    - ansible_facts['distribution'] == 'Fedora'
 
 - name: Add GNU screen to install package list
   ansible.builtin.set_fact:
diff --git a/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml b/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
index 04ec3f70beee..dbf7757db7f9 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/suse/main.yml
@@ -2,26 +2,26 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
   tags: ["vars"]
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
   tags: ["vars"]
@@ -187,7 +187,7 @@
 - name: Register for python2 module product when needed
   become: true
   become_method: sudo
-  ansible.builtin.command: "SUSEConnect -p sle-module-python2/{{ ansible_distribution_version }}/{{ ansible_architecture }}"
+  ansible.builtin.command: "SUSEConnect -p sle-module-python2/{{ ansible_facts['distribution_version'] }}/{{ ansible_facts['architecture'] }}"
   when:
     - suse_register_system|bool
     - repos_will_be_added|bool
diff --git a/playbooks/roles/devconfig/tasks/kotd-rev-kernel/suse/main.yml b/playbooks/roles/devconfig/tasks/kotd-rev-kernel/suse/main.yml
index 372a93326528..07bc4da8cf33 100644
--- a/playbooks/roles/devconfig/tasks/kotd-rev-kernel/suse/main.yml
+++ b/playbooks/roles/devconfig/tasks/kotd-rev-kernel/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
   tags: ["vars"]
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
   when:
     - is_sle|bool
   tags: ["vars"]
diff --git a/playbooks/roles/devconfig/tasks/main.yml b/playbooks/roles/devconfig/tasks/main.yml
index 6df6ea7ec5f8..f7a53b1111e5 100644
--- a/playbooks/roles/devconfig/tasks/main.yml
+++ b/playbooks/roles/devconfig/tasks/main.yml
@@ -648,7 +648,7 @@
 - name: "Group up facts we'll give to the host"
   tags: ["journal_ln"]
   ansible.builtin.set_fact:
-    node_host_ip: "{{ ansible_ssh_host }} {{ ansible_default_ipv4.address }}"
+    node_host_ip: "{{ ansible_ssh_host }} {{ ansible_facts['default_ipv4'].address }}"
   delegate_facts: true
   when: devconfig_enable_systemd_journal_remote|bool
 
diff --git a/playbooks/roles/dhclient_cache/tasks/isc-dhclient.yml b/playbooks/roles/dhclient_cache/tasks/isc-dhclient.yml
index c7bd176a6af4..ec7eaa27b671 100644
--- a/playbooks/roles/dhclient_cache/tasks/isc-dhclient.yml
+++ b/playbooks/roles/dhclient_cache/tasks/isc-dhclient.yml
@@ -5,7 +5,7 @@
 
 - name: Detect primary network interface
   ansible.builtin.set_fact:
-    primary_interface: "{{ ansible_default_ipv4.interface | default('eth0') }}"
+    primary_interface: "{{ ansible_facts['default_ipv4'].interface | default('eth0') }}"
 
 - name: Create dhclient enter hook for persistent lease caching
   become: true
diff --git a/playbooks/roles/dhclient_cache/tasks/networkmanager.yml b/playbooks/roles/dhclient_cache/tasks/networkmanager.yml
index bd5c799e20ed..6ef169d80a71 100644
--- a/playbooks/roles/dhclient_cache/tasks/networkmanager.yml
+++ b/playbooks/roles/dhclient_cache/tasks/networkmanager.yml
@@ -5,7 +5,7 @@
 
 - name: Detect primary network interface
   ansible.builtin.set_fact:
-    primary_interface: "{{ ansible_default_ipv4.interface | default('eth0') }}"
+    primary_interface: "{{ ansible_facts['default_ipv4'].interface | default('eth0') }}"
 
 - name: Create NetworkManager dispatcher script for DHCP cache save
   become: true
diff --git a/playbooks/roles/dhclient_cache/tasks/wicked.yml b/playbooks/roles/dhclient_cache/tasks/wicked.yml
index 36683fbe80ee..ab8758209008 100644
--- a/playbooks/roles/dhclient_cache/tasks/wicked.yml
+++ b/playbooks/roles/dhclient_cache/tasks/wicked.yml
@@ -5,7 +5,7 @@
 
 - name: Detect primary network interface
   ansible.builtin.set_fact:
-    primary_interface: "{{ ansible_default_ipv4.interface | default('eth0') }}"
+    primary_interface: "{{ ansible_facts['default_ipv4'].interface | default('eth0') }}"
 
 - name: Create wicked extension for DHCP cache save
   become: true
diff --git a/playbooks/roles/docker-mirror/tasks/install-deps/debian/main.yml b/playbooks/roles/docker-mirror/tasks/install-deps/debian/main.yml
index 1bb810d10631..fcee17d3bf62 100644
--- a/playbooks/roles/docker-mirror/tasks/install-deps/debian/main.yml
+++ b/playbooks/roles/docker-mirror/tasks/install-deps/debian/main.yml
@@ -17,13 +17,13 @@
 - name: Add Docker GPG key
   become: true
   ansible.builtin.apt_key:
-    url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg
+    url: https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }}/gpg
     state: present
 
 - name: Add Docker repository
   become: true
   ansible.builtin.apt_repository:
-    repo: "deb [arch={{ ansible_architecture }}] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable"
+    repo: "deb [arch={{ ansible_facts['architecture'] }}] https://download.docker.com/linux/{{ ansible_facts['distribution'] | lower }} {{ ansible_facts['distribution_release'] }} stable"
     state: present
 
 - name: Install Docker
diff --git a/playbooks/roles/docker-mirror/tasks/install-deps/main.yml b/playbooks/roles/docker-mirror/tasks/install-deps/main.yml
index 41d9f2c17721..df69ee913720 100644
--- a/playbooks/roles/docker-mirror/tasks/install-deps/main.yml
+++ b/playbooks/roles/docker-mirror/tasks/install-deps/main.yml
@@ -4,12 +4,12 @@
 
 - name: Install Docker dependencies on Debian
   ansible.builtin.include_tasks: debian/main.yml
-  when: ansible_os_family == "Debian"
+  when: ansible_facts['os_family'] == "Debian"
 
 - name: Install Docker dependencies on RedHat
   ansible.builtin.include_tasks: redhat/main.yml
-  when: ansible_os_family == "RedHat"
+  when: ansible_facts['os_family'] == "RedHat"
 
 - name: Install Docker dependencies on SUSE
   ansible.builtin.include_tasks: suse/main.yml
-  when: ansible_os_family == "Suse"
+  when: ansible_facts['os_family'] == "Suse"
diff --git a/playbooks/roles/docker-mirror/templates/docker-manifest.txt.j2 b/playbooks/roles/docker-mirror/templates/docker-manifest.txt.j2
index 67619e667b65..46d03fbae432 100644
--- a/playbooks/roles/docker-mirror/templates/docker-manifest.txt.j2
+++ b/playbooks/roles/docker-mirror/templates/docker-manifest.txt.j2
@@ -1,5 +1,5 @@
 # Docker Images Mirror Manifest
-# Generated: {{ ansible_date_time.iso8601 }}
+# Generated: {{ ansible_facts['date_time'].iso8601 }}
 # Registry: localhost:{{ docker_mirror_port | default(5000) }}
 #
 # Cached Images:
diff --git a/playbooks/roles/epel-release/tasks/main.yml b/playbooks/roles/epel-release/tasks/main.yml
index a0403b9f1353..213fc2f54a47 100644
--- a/playbooks/roles/epel-release/tasks/main.yml
+++ b/playbooks/roles/epel-release/tasks/main.yml
@@ -3,8 +3,8 @@
 - name: Set epel-release package name for RHEL
   ansible.builtin.set_fact:
     epel_package:
-      - "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm"
-  when: ansible_distribution == "RedHat"
+      - "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_facts['distribution_major_version'] }}.noarch.rpm"
+  when: ansible_facts['distribution'] == "RedHat"
 
 - name: Install the distribution's epel-release package
   become: true
@@ -25,8 +25,8 @@
       - "/usr/bin/dnf"
       - "config-manager"
       - "--enable"
-      - "{{ 'ol' + ansible_distribution_major_version + '_developer_EPEL' }}"
+      - "{{ 'ol' + ansible_facts['distribution_major_version'] + '_developer_EPEL' }}"
   register: enable
   changed_when: enable is succeeded
   when:
-    - ansible_distribution == "OracleLinux"
+    - ansible_facts['distribution'] == "OracleLinux"
diff --git a/playbooks/roles/fio-tests/tasks/install-deps/main.yml b/playbooks/roles/fio-tests/tasks/install-deps/main.yml
index 65f35b93d9b7..74d494e914e3 100644
--- a/playbooks/roles/fio-tests/tasks/install-deps/main.yml
+++ b/playbooks/roles/fio-tests/tasks/install-deps/main.yml
@@ -1,4 +1,4 @@
 ---
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Include distribution-specific installation tasks
-  ansible.builtin.include_tasks: "{{ ansible_os_family | lower }}/main.yml"
+  ansible.builtin.include_tasks: "{{ ansible_facts['os_family'] | lower }}/main.yml"
diff --git a/playbooks/roles/fstests/tasks/install-deps/redhat/main.yml b/playbooks/roles/fstests/tasks/install-deps/redhat/main.yml
index 5d4a1034f0b4..0163e2822945 100644
--- a/playbooks/roles/fstests/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/fstests/tasks/install-deps/redhat/main.yml
@@ -8,7 +8,7 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Install build dependencies for fstests
   become: true
@@ -104,7 +104,7 @@
   vars:
     packages:
       - btrfs-progs
-  when: ansible_distribution == 'Fedora'
+  when: ansible_facts['distribution'] == 'Fedora'
 
 - name: Install dependencies for building xfsprogs
   become: true
diff --git a/playbooks/roles/fstests/tasks/install-deps/suse/main.yml b/playbooks/roles/fstests/tasks/install-deps/suse/main.yml
index 077ec31b98b7..aa734345a7e3 100644
--- a/playbooks/roles/fstests/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/fstests/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/fstests/tasks/main.yml b/playbooks/roles/fstests/tasks/main.yml
index 8fb454420936..c0f0fffba8a8 100644
--- a/playbooks/roles/fstests/tasks/main.yml
+++ b/playbooks/roles/fstests/tasks/main.yml
@@ -1079,7 +1079,7 @@
 - name: Print uname for each host
   tags: ["oscheck", "fstests", "run_tests"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Clean up our localhost results/last-run directory
   ansible.builtin.file:
     path: "{{ fstests_results_target }}/"
diff --git a/playbooks/roles/fstests_prep_localhost/tasks/install-deps/suse/main.yml b/playbooks/roles/fstests_prep_localhost/tasks/install-deps/suse/main.yml
index 3ed23972f46e..a0d373b96676 100644
--- a/playbooks/roles/fstests_prep_localhost/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/fstests_prep_localhost/tasks/install-deps/suse/main.yml
@@ -2,23 +2,23 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/gitr/tasks/install-deps/main.yml b/playbooks/roles/gitr/tasks/install-deps/main.yml
index d4e7870e24a3..8dd7b1be14c5 100644
--- a/playbooks/roles/gitr/tasks/install-deps/main.yml
+++ b/playbooks/roles/gitr/tasks/install-deps/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
@@ -14,14 +14,14 @@
 - name: Debian-specific setup
   ansible.builtin.include_tasks: debian/main.yml
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: suse/main.yml
   when:
-    - ansible_os_family == "Suse"
+    - ansible_facts['os_family'] == "Suse"
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: redhat/main.yml
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
diff --git a/playbooks/roles/gitr/tasks/install-deps/redhat/main.yml b/playbooks/roles/gitr/tasks/install-deps/redhat/main.yml
index b25c6454f1ea..6258fa5604f5 100644
--- a/playbooks/roles/gitr/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/gitr/tasks/install-deps/redhat/main.yml
@@ -4,19 +4,19 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Update gitr dependencies for RHEL/Centos
   ansible.builtin.set_fact:
     gitr_packages: "{{ gitr_packages + ['perl-App-cpanminus'] }}"
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Update gitr dependencies for Fedora
   ansible.builtin.set_fact:
     gitr_packages: "{{ gitr_packages + ['cvsps', 'perl-TAP-Harness-Archive'] }}"
   when:
-    - ansible_distribution == "Fedora"
+    - ansible_facts['distribution'] == "Fedora"
 
 - name: Install dependencies for gitr
   become: true
@@ -35,10 +35,10 @@
     mode: new
   with_items: "{{ gitr_cpan_modules }}"
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Download and install cvsps
-  when: ansible_distribution != "Fedora"
+  when: ansible_facts['distribution'] != "Fedora"
   block:
     - name: Clone the cvsps source code
       ansible.builtin.git:
@@ -53,7 +53,7 @@
     - name: Build cvsps
       community.general.make:
         chdir: "{{ cvsps_data }}"
-        jobs: "{{ ansible_processor_nproc }}"
+        jobs: "{{ ansible_facts['processor_nproc'] }}"
 
     - name: Install cvsps
       become: true
diff --git a/playbooks/roles/gitr/tasks/main.yml b/playbooks/roles/gitr/tasks/main.yml
index f55840215882..cd4402deec90 100644
--- a/playbooks/roles/gitr/tasks/main.yml
+++ b/playbooks/roles/gitr/tasks/main.yml
@@ -27,7 +27,7 @@
   ansible.builtin.set_fact:
     gitr_results_full_path: "{{ topdir_path }}/workflows/gitr/results"
     gitr_results_target: "../workflows/gitr/results/last-run"
-    gitr_run_uniqifier: "{{ ansible_date_time.iso8601_basic_short }}"
+    gitr_run_uniqifier: "{{ ansible_facts['date_time'].iso8601_basic_short }}"
 
 - name: Clean up our localhost results/last-run directory
   ansible.builtin.file:
@@ -230,7 +230,7 @@
   tags: ["gitr", "build"]
   community.general.make:
     chdir: "{{ gitr_mnt }}/git"
-    jobs: "{{ ansible_processor_nproc }}"
+    jobs: "{{ ansible_facts['processor_nproc'] }}"
 
 - name: Set the test thread count (single)
   tags: run_tests
@@ -242,14 +242,14 @@
 - name: Set the test thread count (fast)
   tags: run_tests
   ansible.builtin.set_fact:
-    gitr_test_thread_count: "{{ ansible_processor_nproc }}"
+    gitr_test_thread_count: "{{ ansible_facts['processor_nproc'] }}"
   when:
     - gitr_thread_fast|bool
 
 - name: Set the test thread count (stress)
   tags: run_tests
   ansible.builtin.set_fact:
-    gitr_test_thread_count: "{{ ansible_processor_nproc * 2 }}"
+    gitr_test_thread_count: "{{ ansible_facts['processor_nproc'] * 2 }}"
   when:
     - gitr_thread_stress|bool
 
@@ -286,7 +286,7 @@
   register: rpc_results
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
   changed_when: false
 
 - name: Capture RPC transport statistics
@@ -295,7 +295,7 @@
   register: xprt_results
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
   changed_when: false
 
 - name: Save test summary output to a file
@@ -321,7 +321,7 @@
     mode: "u=rw,g=r,o=r"
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
 
 - name: Save RPC transport statistics to a file
   tags: copy_results
@@ -331,7 +331,7 @@
     mode: "u=rw,g=r,o=r"
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
 
 - name: Copy the TAP archive to the control node
   tags: copy_results
@@ -367,7 +367,7 @@
     validate_checksum: false
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
 
 - name: Copy RPC transport statistics to the control node
   tags: copy_results
@@ -378,7 +378,7 @@
     validate_checksum: false
   when:
     - gitr_fstype == "nfs"
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
 
 - name: Verify last-run kernel directory exists
   tags: ["copy_results"]
diff --git a/playbooks/roles/guestfs/tasks/bringup/main.yml b/playbooks/roles/guestfs/tasks/bringup/main.yml
index 06a0e60dfcee..16f7470bde6f 100644
--- a/playbooks/roles/guestfs/tasks/bringup/main.yml
+++ b/playbooks/roles/guestfs/tasks/bringup/main.yml
@@ -94,7 +94,7 @@
               if ansible_cfg_ssh_port | int != 22 else []
             ) + (
               ["--no-selinux-relabel"]
-              if (guestfs_fedora is defined and guestfs_fedora|bool and ansible_distribution|lower in ['debian', 'ubuntu'])
+              if (guestfs_fedora is defined and guestfs_fedora|bool and ansible_facts['distribution']|lower in ['debian', 'ubuntu'])
               else []
             )
           }}
diff --git a/playbooks/roles/guestfs/tasks/install-deps/main.yml b/playbooks/roles/guestfs/tasks/install-deps/main.yml
index 11b0320754f6..7d44d98875e8 100644
--- a/playbooks/roles/guestfs/tasks/install-deps/main.yml
+++ b/playbooks/roles/guestfs/tasks/install-deps/main.yml
@@ -4,16 +4,16 @@
   ansible.builtin.import_tasks:
     file: "{{ role_path }}/tasks/install-deps/debian/main.yml"
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
 
 - name: SuSE-specific setup
   ansible.builtin.import_tasks:
     file: "{{ role_path }}/tasks/install-deps/suse/main.yml"
   when:
-    - ansible_os_family == "Suse"
+    - ansible_facts['os_family'] == "Suse"
 
 - name: Red Hat-specific setup
   ansible.builtin.import_tasks:
     file: "{{ role_path }}/tasks/install-deps/redhat/main.yml"
   when:
-    - ansible_os_family == "Redhat"
+    - ansible_facts['os_family'] == "Redhat"
diff --git a/playbooks/roles/guestfs/tasks/install-deps/redhat/main.yml b/playbooks/roles/guestfs/tasks/install-deps/redhat/main.yml
index a6acf543923c..4eaaa0e3d0d7 100644
--- a/playbooks/roles/guestfs/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/guestfs/tasks/install-deps/redhat/main.yml
@@ -10,4 +10,4 @@
       - dhcpcd
     state: present
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
diff --git a/playbooks/roles/install-menuconfig-deps/tasks/install-deps/suse/main.yml b/playbooks/roles/install-menuconfig-deps/tasks/install-deps/suse/main.yml
index f1501896c822..dadd51142ca2 100644
--- a/playbooks/roles/install-menuconfig-deps/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/install-menuconfig-deps/tasks/install-deps/suse/main.yml
@@ -2,9 +2,9 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
   tags: ["vars"]
 
 - name: Install kdevops generic dependencies
diff --git a/playbooks/roles/install_terraform/tasks/install-deps/suse/main.yml b/playbooks/roles/install_terraform/tasks/install-deps/suse/main.yml
index fb3aab145fee..05d352eb8078 100644
--- a/playbooks/roles/install_terraform/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/install_terraform/tasks/install-deps/suse/main.yml
@@ -2,9 +2,9 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 # SLE has no good package for terraform, and the one from package hub tends to be old
 - name: Override default setting for force_install_zip for SLE
diff --git a/playbooks/roles/iscsi/tasks/add_initiator.yml b/playbooks/roles/iscsi/tasks/add_initiator.yml
index 1af4931f8873..096b2e97e5f7 100644
--- a/playbooks/roles/iscsi/tasks/add_initiator.yml
+++ b/playbooks/roles/iscsi/tasks/add_initiator.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/iscsi/tasks/main.yml b/playbooks/roles/iscsi/tasks/main.yml
index 803bcb3cc51b..a41f70d70753 100644
--- a/playbooks/roles/iscsi/tasks/main.yml
+++ b/playbooks/roles/iscsi/tasks/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/kdc/tasks/install-deps/main.yml b/playbooks/roles/kdc/tasks/install-deps/main.yml
index 59336c35da5a..2a2392fe0e66 100644
--- a/playbooks/roles/kdc/tasks/install-deps/main.yml
+++ b/playbooks/roles/kdc/tasks/install-deps/main.yml
@@ -2,12 +2,12 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific set up
   ansible.builtin.include_tasks: debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific set up
   ansible.builtin.include_tasks: suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific set up
   ansible.builtin.include_tasks: redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
diff --git a/playbooks/roles/kdc/tasks/main.yml b/playbooks/roles/kdc/tasks/main.yml
index b6f5dc91c34b..b5c9c7826d87 100644
--- a/playbooks/roles/kdc/tasks/main.yml
+++ b/playbooks/roles/kdc/tasks/main.yml
@@ -5,23 +5,23 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
 
 - name: Debian-specific setup
   ansible.builtin.include_tasks: install-deps/debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: install-deps/suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: install-deps/redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Configure /etc/krb5.conf
   become: true
@@ -91,7 +91,7 @@
     permanent: true
     immediate: true
     state: enabled
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Allow access to kadmin service in firewalld
   become: true
@@ -101,7 +101,7 @@
     permanent: true
     immediate: true
     state: enabled
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Start and enable {{ krb5kdc_service_name }} systemd service
   become: true
diff --git a/playbooks/roles/kdc/templates/krb5.conf.j2 b/playbooks/roles/kdc/templates/krb5.conf.j2
index e42ffb9bcc8d..8c964ac73352 100644
--- a/playbooks/roles/kdc/templates/krb5.conf.j2
+++ b/playbooks/roles/kdc/templates/krb5.conf.j2
@@ -20,8 +20,8 @@ includedir /etc/krb5.conf.d/
 
 [realms]
 {{ krb5_realm }} = {
-    kdc = {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:88
-    admin_server = {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}:749
+    kdc = {{ hostvars[inventory_hostname]['ansible_facts['default_ipv4']']['address'] }}:88
+    admin_server = {{ hostvars[inventory_hostname]['ansible_facts['default_ipv4']']['address'] }}:749
 }
 
 [domain_realm]
diff --git a/playbooks/roles/krb5/tasks/install-deps/main.yml b/playbooks/roles/krb5/tasks/install-deps/main.yml
index 59336c35da5a..2a2392fe0e66 100644
--- a/playbooks/roles/krb5/tasks/install-deps/main.yml
+++ b/playbooks/roles/krb5/tasks/install-deps/main.yml
@@ -2,12 +2,12 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific set up
   ansible.builtin.include_tasks: debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific set up
   ansible.builtin.include_tasks: suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific set up
   ansible.builtin.include_tasks: redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
diff --git a/playbooks/roles/krb5/tasks/main.yml b/playbooks/roles/krb5/tasks/main.yml
index bac7477683c5..abd4da30949a 100644
--- a/playbooks/roles/krb5/tasks/main.yml
+++ b/playbooks/roles/krb5/tasks/main.yml
@@ -2,15 +2,15 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific setup
   ansible.builtin.include_tasks: install-deps/debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: install-deps/suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: install-deps/redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Configure /etc/krb5.conf
   become: true
@@ -36,13 +36,13 @@
   become: true
   become_method: sudo
   ansible.builtin.command:
-    cmd: kadmin -w {{ krb5_admin_pw }} -q "addprinc -randkey nfs/{{ hostvars[inventory_hostname].ansible_fqdn }}"
+    cmd: kadmin -w {{ krb5_admin_pw }} -q "addprinc -randkey nfs/{{ hostvars[inventory_hostname].ansible_facts['fqdn'] }}"
 
 - name: Add nfs principal to keytab
   become: true
   become_method: sudo
   ansible.builtin.command:
-    cmd: kadmin -w {{ krb5_admin_pw }} -q "ktadd -k /etc/krb5.keytab nfs/{{ hostvars[inventory_hostname].ansible_fqdn }}"
+    cmd: kadmin -w {{ krb5_admin_pw }} -q "ktadd -k /etc/krb5.keytab nfs/{{ hostvars[inventory_hostname].ansible_facts['fqdn'] }}"
 
 - name: Restart rpc.gssd on the NFS server
   become: true
diff --git a/playbooks/roles/ktls/tasks/install-deps/redhat/main.yml b/playbooks/roles/ktls/tasks/install-deps/redhat/main.yml
index ef5ce809b501..75a372c67f15 100644
--- a/playbooks/roles/ktls/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/ktls/tasks/install-deps/redhat/main.yml
@@ -4,7 +4,7 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Install ktls dependencies
   become: true
diff --git a/playbooks/roles/ktls/tasks/main.yml b/playbooks/roles/ktls/tasks/main.yml
index e734d16b450b..678cd4b2fe65 100644
--- a/playbooks/roles/ktls/tasks/main.yml
+++ b/playbooks/roles/ktls/tasks/main.yml
@@ -73,7 +73,7 @@
     privatekey_path: "/etc/pki/tls/private/ktls.key"
     subject_alt_name:
       - "DNS:{{ ansible_host }}"
-      - "IP:{{ ansible_default_ipv4.address }}"
+      - "IP:{{ ansible_facts['default_ipv4'].address }}"
   register: csr
   become: true
 
diff --git a/playbooks/roles/libvirt_user/tasks/enable-user/main.yml b/playbooks/roles/libvirt_user/tasks/enable-user/main.yml
index 7eb558810038..868534d39114 100644
--- a/playbooks/roles/libvirt_user/tasks/enable-user/main.yml
+++ b/playbooks/roles/libvirt_user/tasks/enable-user/main.yml
@@ -2,12 +2,13 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian user enablement
   ansible.builtin.include_tasks: enable-user/debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE user enablement
   ansible.builtin.include_tasks: enable-user/suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat family user enablement
   ansible.builtin.include_tasks: enable-user/redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when:
+    - ansible_facts['os_family'] == 'RedHat'
diff --git a/playbooks/roles/libvirt_user/tasks/enable-user/redhat/main.yml b/playbooks/roles/libvirt_user/tasks/enable-user/redhat/main.yml
index feb2e7f44eed..c9a815c2f976 100644
--- a/playbooks/roles/libvirt_user/tasks/enable-user/redhat/main.yml
+++ b/playbooks/roles/libvirt_user/tasks/enable-user/redhat/main.yml
@@ -4,7 +4,7 @@
   become: true
   become_method: sudo
   ansible.builtin.user:
-    name: "{{ ansible_env.USER }}"
+    name: "{{ ansible_facts['env'].USER }}"
     groups: libvirt,kvm,qemu
     append: true
   when:
diff --git a/playbooks/roles/libvirt_user/tasks/enable-user/suse/main.yml b/playbooks/roles/libvirt_user/tasks/enable-user/suse/main.yml
index 6db38ff82d34..f1a6ebc3aa0e 100644
--- a/playbooks/roles/libvirt_user/tasks/enable-user/suse/main.yml
+++ b/playbooks/roles/libvirt_user/tasks/enable-user/suse/main.yml
@@ -4,7 +4,7 @@
   become: true
   become_method: sudo
   ansible.builtin.user:
-    name: "{{ ansible_env.USER }}"
+    name: "{{ ansible_facts['env'].USER }}"
     groups: libvirt,kvm,qemu
     append: true
   when:
diff --git a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml
index 80b2ac2ffa0f..9d3a989aebd4 100644
--- a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml
+++ b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml
@@ -3,14 +3,14 @@
 - name: Import Debian NFS dependencies
   ansible.builtin.import_tasks: debian/main.yml
   when:
-    - ansible_os_family == 'Debian'
+    - ansible_facts['os_family'] == 'Debian'
 
 - name: Import RedHat NFS dependencies
   ansible.builtin.import_tasks: redhat/main.yml
   when:
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
 
 - name: Import SUSE NFS dependencies
   ansible.builtin.import_tasks: suse/main.yml
   when:
-    - ansible_os_family == 'Suse'
+    - ansible_facts['os_family'] == 'Suse'
diff --git a/playbooks/roles/linux-mirror/tasks/main.yml b/playbooks/roles/linux-mirror/tasks/main.yml
index 990779abb7cb..3bed3c30bf82 100644
--- a/playbooks/roles/linux-mirror/tasks/main.yml
+++ b/playbooks/roles/linux-mirror/tasks/main.yml
@@ -14,7 +14,7 @@
 - name: Install dependencies for the linux-mirror role
   ansible.builtin.include_tasks: install-deps/fedora/main.yml
   when:
-    - ansible_distribution == 'Fedora'
+    - ansible_facts['distribution'] == 'Fedora'
   tags: ["mirror"]
 
 - name: Fail if linux_mirror_nfs is enabled but user is not root
@@ -283,7 +283,7 @@
   ansible.builtin.set_fact:
     nfs_server_service: nfs-kernel-server
   when:
-    - ansible_os_family == 'Debian'
+    - ansible_facts['os_family'] == 'Debian'
     - linux_mirror_nfs | bool
   tags: ["mirror"]
 
@@ -291,7 +291,7 @@
   ansible.builtin.set_fact:
     nfs_server_service: nfs-server
   when:
-    - ansible_os_family == 'RedHat'
+    - ansible_facts['os_family'] == 'RedHat'
     - linux_mirror_nfs | bool
   tags: ["mirror"]
 
@@ -299,7 +299,7 @@
   ansible.builtin.set_fact:
     nfs_server_service: nfsserver
   when:
-    - ansible_os_family == 'Suse'
+    - ansible_facts['os_family'] == 'Suse'
     - linux_mirror_nfs | bool
   tags: ["mirror"]
 
diff --git a/playbooks/roles/ltp/tasks/main.yml b/playbooks/roles/ltp/tasks/main.yml
index f46c436696da..c680f4bfeec1 100644
--- a/playbooks/roles/ltp/tasks/main.yml
+++ b/playbooks/roles/ltp/tasks/main.yml
@@ -79,8 +79,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
@@ -89,7 +89,7 @@
   ansible.builtin.include_role:
     name: codereadyrepo
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
 
 - name: Install dependencies for ltp
   tags: ["build", "ltp"]
@@ -161,7 +161,7 @@
   community.general.make:
     chdir: "{{ ltp_build_dir }}"
     target: all
-    jobs: "{{ ansible_processor_nproc }}"
+    jobs: "{{ ansible_facts['processor_nproc'] }}"
 
 - name: Set the pathname of the install directory
   tags: ["build", "ltp"]
@@ -215,7 +215,7 @@
   community.general.make:
     chdir: "{{ ltp_build_dir }}"
     target: install
-    jobs: "{{ ansible_processor_nproc }}"
+    jobs: "{{ ansible_facts['processor_nproc'] }}"
 
 - name: Start the rpcbind service
   tags: ["ltp"]
diff --git a/playbooks/roles/milvus/tasks/benchmark.yml b/playbooks/roles/milvus/tasks/benchmark.yml
index d65d417e1607..8542ad100f9d 100644
--- a/playbooks/roles/milvus/tasks/benchmark.yml
+++ b/playbooks/roles/milvus/tasks/benchmark.yml
@@ -49,7 +49,7 @@
       ansible.builtin.command: >
         python3 {{ ai_vector_db_milvus_data_dir }}/scripts/milvus_benchmark.py
         --config {{ ai_vector_db_milvus_data_dir }}/scripts/benchmark_config.json
-        --output {{ ai_benchmark_results_dir }}/milvus/results_{{ ansible_date_time.epoch }}.json
+        --output {{ ai_benchmark_results_dir }}/milvus/results_{{ ansible_facts['date_time'].epoch }}.json
       register: benchmark_result
       when: ai_vector_db_milvus_benchmark_enable | bool
 
diff --git a/playbooks/roles/milvus/tasks/install_docker.yml b/playbooks/roles/milvus/tasks/install_docker.yml
index 322c27335f3b..afdad188a7e2 100644
--- a/playbooks/roles/milvus/tasks/install_docker.yml
+++ b/playbooks/roles/milvus/tasks/install_docker.yml
@@ -5,7 +5,7 @@
   register: docker_packages_check
   changed_when: false
   failed_when: false
-  when: ansible_os_family == "Debian"
+  when: ansible_facts['os_family'] == "Debian"
 
 - name: Install Docker and Python dependencies
   ansible.builtin.package:
@@ -19,7 +19,7 @@
     state: present
   become: true
   when:
-    - ansible_os_family == "Debian"
+    - ansible_facts['os_family'] == "Debian"
     - docker_packages_check.rc != 0
 
 - name: Check if Docker packages are installed (RedHat)
@@ -28,7 +28,7 @@
   register: docker_packages_check_rh
   changed_when: false
   failed_when: false
-  when: ansible_os_family == "RedHat"
+  when: ansible_facts['os_family'] == "RedHat"
 
 - name: Install Docker and Python dependencies (RedHat)
   ansible.builtin.package:
@@ -41,7 +41,7 @@
     state: present
   become: true
   when:
-    - ansible_os_family == "RedHat"
+    - ansible_facts['os_family'] == "RedHat"
     - docker_packages_check_rh.rc != 0
 
 - name: Check if user is in docker group
diff --git a/playbooks/roles/minio_install/tasks/main.yml b/playbooks/roles/minio_install/tasks/main.yml
index 683f05ea5a9f..58c0141969f4 100644
--- a/playbooks/roles/minio_install/tasks/main.yml
+++ b/playbooks/roles/minio_install/tasks/main.yml
@@ -15,7 +15,7 @@
       - python3-bpfcc
     state: present
   become: yes
-  when: ansible_os_family == "Debian"
+  when: ansible_facts['os_family'] == "Debian"
 
 - name: Install Docker and monitoring dependencies (RedHat)
   package:
@@ -25,7 +25,7 @@
       - python3-bcc
     state: present
   become: yes
-  when: ansible_os_family == "RedHat"
+  when: ansible_facts['os_family'] == "RedHat"
 
 - name: Install Docker and monitoring dependencies (SUSE)
   package:
@@ -35,7 +35,7 @@
       - python3-bcc
     state: present
   become: yes
-  when: ansible_os_family == "SUSE"
+  when: ansible_facts['os_family'] == "SUSE"
 
 - name: Ensure Docker service is running
   systemd:
diff --git a/playbooks/roles/minio_warp_run/tasks/main.yml b/playbooks/roles/minio_warp_run/tasks/main.yml
index 4abe58dac5f9..2052c761eaef 100644
--- a/playbooks/roles/minio_warp_run/tasks/main.yml
+++ b/playbooks/roles/minio_warp_run/tasks/main.yml
@@ -141,7 +141,7 @@
 
 - name: Set timestamp for consistent filename
   set_fact:
-    warp_timestamp: "{{ ansible_date_time.epoch }}"
+    warp_timestamp: "{{ ansible_facts['date_time'].epoch }}"
   when: not (minio_warp_run_comprehensive_suite | default(false))
 
 - name: Run MinIO Warp single benchmark with JSON output
@@ -149,7 +149,7 @@
     echo "=== Starting single benchmark ==="
     echo "Duration: {{ minio_warp_duration }}"
     echo "Full command:"
-    OUTPUT_FILE="/tmp/warp-results/warp_benchmark_{{ ansible_hostname }}_{{ warp_timestamp }}.json"
+    OUTPUT_FILE="/tmp/warp-results/warp_benchmark_{{ ansible_facts['hostname'] }}_{{ warp_timestamp }}.json"
 
     # Show the actual command being run
     set -x
@@ -163,7 +163,7 @@
       --duration="{{ minio_warp_duration }}" \
       --concurrent="{{ minio_warp_concurrent_requests }}" \
       --obj.size="{{ minio_warp_object_size }}" \
-      {% if minio_warp_enable_web_ui|default(false) %}--warp-client="{{ ansible_default_ipv4.address }}:{{ minio_warp_web_ui_port|default(7762) }}"{% endif %} \
+      {% if minio_warp_enable_web_ui|default(false) %}--warp-client="{{ ansible_facts['default_ipv4'].address }}:{{ minio_warp_web_ui_port|default(7762) }}"{% endif %} \
       --noclear \
       --json > "$OUTPUT_FILE" 2>&1
     RESULT=$?
@@ -192,12 +192,12 @@
 
 - name: Display benchmark completion
   debug:
-    msg: "MinIO Warp benchmark completed on {{ ansible_hostname }}"
+    msg: "MinIO Warp benchmark completed on {{ ansible_facts['hostname'] }}"
   when: (warp_output is defined and warp_output.rc | default(1) == 0) or (suite_output is defined and suite_output.rc | default(1) == 0)
 
 - name: Check if results file exists
   stat:
-    path: "/tmp/warp-results/warp_benchmark_{{ ansible_hostname }}_{{ warp_timestamp }}.json"
+    path: "/tmp/warp-results/warp_benchmark_{{ ansible_facts['hostname'] }}_{{ warp_timestamp }}.json"
   register: results_file
   when: warp_timestamp is defined
 
@@ -208,7 +208,7 @@
 
 - name: Copy results to local system
   fetch:
-    src: "/tmp/warp-results/warp_benchmark_{{ ansible_hostname }}_{{ warp_timestamp }}.json"
+    src: "/tmp/warp-results/warp_benchmark_{{ ansible_facts['hostname'] }}_{{ warp_timestamp }}.json"
     dest: "{{ playbook_dir }}/../workflows/minio/results/"
     flat: yes
   become: no
@@ -227,7 +227,7 @@
     content: |
       MinIO Warp Benchmark Results
       ============================
-      Host: {{ ansible_hostname }}
+      Host: {{ ansible_facts['hostname'] }}
       Timestamp: {{ warp_timestamp | default('unknown') }}
 
       Debug Output:
@@ -239,12 +239,12 @@
 
       Error Output (if any):
       {{ warp_output.stderr | default('No errors') }}
-    dest: "/tmp/warp-results/warp_fallback_{{ ansible_hostname }}_{{ warp_timestamp | default(ansible_date_time.epoch) }}.txt"
+    dest: "/tmp/warp-results/warp_fallback_{{ ansible_facts['hostname'] }}_{{ warp_timestamp | default(ansible_facts['date_time'].epoch) }}.txt"
   when: warp_debug is defined
 
 - name: Copy fallback results
   fetch:
-    src: "/tmp/warp-results/warp_fallback_{{ ansible_hostname }}_{{ warp_timestamp | default(ansible_date_time.epoch) }}.txt"
+    src: "/tmp/warp-results/warp_fallback_{{ ansible_facts['hostname'] }}_{{ warp_timestamp | default(ansible_facts['date_time'].epoch) }}.txt"
     dest: "{{ playbook_dir }}/../workflows/minio/results/"
     flat: yes
   when: warp_debug is defined and not (results_file is defined and not results_file.skipped | default(false) and results_file.stat.exists | default(false))
diff --git a/playbooks/roles/mmtests_compare/tasks/main.yml b/playbooks/roles/mmtests_compare/tasks/main.yml
index 134b42e1567f..91f7703f7eb5 100644
--- a/playbooks/roles/mmtests_compare/tasks/main.yml
+++ b/playbooks/roles/mmtests_compare/tasks/main.yml
@@ -394,8 +394,8 @@
   vars:
     benchmark_name: "{{ mmtests_test_type }}"
     test_description: "Performance Benchmark"
-    analysis_date: "{{ ansible_date_time.date }}"
-    analysis_time: "{{ ansible_date_time.time }}"
+    analysis_date: "{{ ansible_facts['date_time'].date }}"
+    analysis_time: "{{ ansible_facts['date_time'].time }}"
     baseline_hostname: "{{ baseline_hostname }}"
     baseline_kernel: "{{ baseline_kernel }}"
     dev_hostname: "{{ dev_hostname }}"
diff --git a/playbooks/roles/monitoring/tasks/install-deps/main.yml b/playbooks/roles/monitoring/tasks/install-deps/main.yml
index 4aec23ba6bdb..9153b7654aad 100644
--- a/playbooks/roles/monitoring/tasks/install-deps/main.yml
+++ b/playbooks/roles/monitoring/tasks/install-deps/main.yml
@@ -3,7 +3,7 @@
 # Install monitoring dependencies based on distro
 - name: Set the distro group
   ansible.builtin.set_fact:
-    kdevops_target_distro_group: '{{ ansible_distribution | lower }}'
+    kdevops_target_distro_group: '{{ ansible_facts["distribution"] | lower }}'
 
-- name: Import install-deps task for {{ ansible_distribution | lower }}
+- name: Import install-deps task for {{ ansible_facts['distribution'] | lower }}
   ansible.builtin.include_tasks: "{{ kdevops_target_distro_group }}/main.yml"
diff --git a/playbooks/roles/monitoring/tasks/monitor_collect.yml b/playbooks/roles/monitoring/tasks/monitor_collect.yml
index 982767d9da78..c4afa34cb045 100644
--- a/playbooks/roles/monitoring/tasks/monitor_collect.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_collect.yml
@@ -145,7 +145,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: "{{ item.path }}"
-    dest: "{{ monitoring_results_path }}/fragmentation/{{ ansible_hostname }}_{{ item.path | basename }}"
+    dest: "{{ monitoring_results_path }}/fragmentation/{{ ansible_facts['hostname'] }}_{{ item.path | basename }}"
     flat: true
     validate_checksum: false
   loop: "{{ fragmentation_output_files.files | default([]) }}"
@@ -163,7 +163,7 @@
       Data saved to: {{ monitoring_results_path }}/fragmentation/
       Files collected:
       {% for file in fragmentation_output_files.files %}
-        - {{ ansible_hostname }}_{{ file.path | basename }}
+        - {{ ansible_facts['hostname'] }}_{{ file.path | basename }}
       {% endfor %}
       {% else %}
       No fragmentation data was collected.
diff --git a/playbooks/roles/monitoring/tasks/monitor_collect_only.yml b/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
index ab96ef6c8a46..c699155bf13f 100644
--- a/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
+++ b/playbooks/roles/monitoring/tasks/monitor_collect_only.yml
@@ -124,7 +124,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: /root/monitoring/folio_migration_stats_snapshot.txt
-    dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt"
+    dest: "{{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats_interim.txt"
     flat: true
     validate_checksum: false
   when:
@@ -147,7 +147,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: "{{ monitor_fragmentation_output_dir|default('/root/monitoring/fragmentation') }}/fragmentation_snapshot.json"
-    dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_fragmentation_data_interim.json"
+    dest: "{{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_fragmentation_data_interim.json"
     flat: true
     validate_checksum: false
   when:
@@ -161,7 +161,7 @@
   ansible.builtin.debug:
     msg: |
       Interim folio migration monitoring data collected (monitoring still running).
-      Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt
+      Data saved to: {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats_interim.txt
   when:
     - monitor_developmental_stats|default(false)|bool
     - monitor_folio_migration|default(false)|bool
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
index 6db92371e329..970a09fd32eb 100644
--- a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect.yml
@@ -85,7 +85,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: /root/monitoring/folio_migration_stats.txt
-    dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt"
+    dest: "{{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats.txt"
     flat: true
     validate_checksum: false
   when: folio_migration_data_file.stat.exists|default(false)
@@ -102,7 +102,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: /root/monitoring/folio_migration_plot.png
-    dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png"
+    dest: "{{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_plot.png"
     flat: true
     validate_checksum: false
   when: folio_migration_plot_file.stat.exists|default(false)
@@ -111,9 +111,9 @@
   ansible.builtin.debug:
     msg: |
       Folio migration monitoring collection complete.
-      Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt
+      Data saved to: {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats.txt
       {% if folio_migration_plot_file.stat.exists | default(false) %}
-      Plot saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
+      Plot saved to: {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_plot.png
       {% endif %}
   when: folio_migration_data_file.stat.exists|default(false)
 
@@ -128,8 +128,8 @@
 - name: Generate folio migration plots on localhost
   ansible.builtin.command: |
     python3 {{ playbook_dir }}/roles/monitoring/files/plot_migration_stats.py
-      -o {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
-      {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats.txt
+      -o {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_plot.png
+      {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats.txt
   delegate_to: localhost
   register: localhost_plot_generation
   ignore_errors: true
@@ -143,6 +143,6 @@
       {% if folio_localhost_matplotlib_check.rc != 0 %}
       Skipping plot generation - matplotlib not available on localhost
       {% else %}
-      Plot generated: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_plot.png
+      Plot generated: {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_plot.png
       {% endif %}
   when: folio_migration_data_file.stat.exists|default(false)
diff --git a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml
index 2682339af9aa..482ada823064 100644
--- a/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml
+++ b/playbooks/roles/monitoring/tasks/monitors/folio_migration/collect_only.yml
@@ -26,7 +26,7 @@
   become_method: sudo
   ansible.builtin.fetch:
     src: /root/monitoring/folio_migration_stats_snapshot.txt
-    dest: "{{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt"
+    dest: "{{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats_interim.txt"
     flat: true
     validate_checksum: false
   when:
@@ -50,7 +50,7 @@
     msg: |
       Folio migration interim data {% if folio_migration_data_file.stat.exists|default(false) %}collected{% else %}not available{% endif %}.
       {% if folio_migration_data_file.stat.exists|default(false) %}
-      Data saved to: {{ monitoring_results_path }}/{{ ansible_hostname }}_folio_migration_stats_interim.txt
+      Data saved to: {{ monitoring_results_path }}/{{ ansible_facts['hostname'] }}_folio_migration_stats_interim.txt
       {% endif %}
   when:
     - monitor_developmental_stats|default(false)|bool
diff --git a/playbooks/roles/nfsd/tasks/install-deps/debian/main.yml b/playbooks/roles/nfsd/tasks/install-deps/debian/main.yml
index 79a93f8a2f43..6d663ff931b3 100644
--- a/playbooks/roles/nfsd/tasks/install-deps/debian/main.yml
+++ b/playbooks/roles/nfsd/tasks/install-deps/debian/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml b/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
index d8aa20877392..06bad7da9478 100644
--- a/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/nfsd/tasks/install-deps/redhat/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml b/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
index 5d5716fd888c..e5d249942b00 100644
--- a/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/nfsd/tasks/install-deps/suse/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/nfsd/tasks/main.yml b/playbooks/roles/nfsd/tasks/main.yml
index 2175af150e7b..2658ea4befde 100644
--- a/playbooks/roles/nfsd/tasks/main.yml
+++ b/playbooks/roles/nfsd/tasks/main.yml
@@ -2,15 +2,15 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific setup
   ansible.builtin.include_tasks: install-deps/debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: install-deps/suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: install-deps/redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Generate /etc/nfs.conf
   become: true
diff --git a/playbooks/roles/nfstest/tasks/main.yml b/playbooks/roles/nfstest/tasks/main.yml
index 1c1e3593701b..2fe7debc6827 100644
--- a/playbooks/roles/nfstest/tasks/main.yml
+++ b/playbooks/roles/nfstest/tasks/main.yml
@@ -17,8 +17,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/pkg/tasks/debian.yml b/playbooks/roles/pkg/tasks/debian.yml
index a33aa3f43a94..7ae480d4d255 100644
--- a/playbooks/roles/pkg/tasks/debian.yml
+++ b/playbooks/roles/pkg/tasks/debian.yml
@@ -2,10 +2,10 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian_libaio rename for buster
   ansible.builtin.set_fact:
-    is_bookworm: '{{ ansible_distribution_release == "bookworm" }}'
-    is_bullseye: '{{ ansible_distribution_release == "bullseye" }}'
-    is_buster: '{{ ansible_distribution_release == "buster" }}'
-    is_trixie: '{{ ansible_distribution_release == "trixie" }}'
+    is_bookworm: '{{ ansible_facts["distribution_release"] == "bookworm" }}'
+    is_bullseye: '{{ ansible_facts["distribution_release"] == "bullseye" }}'
+    is_buster: '{{ ansible_facts["distribution_release"] == "buster" }}'
+    is_trixie: '{{ ansible_facts["distribution_release"] == "trixie" }}'
 
 - name: Debian_libaio rename for debian releases older than trixie
   ansible.builtin.set_fact:
diff --git a/playbooks/roles/pynfs/tasks/install-deps/debian/main.yml b/playbooks/roles/pynfs/tasks/install-deps/debian/main.yml
index 7bd0c68dad0f..6dfe92198a83 100644
--- a/playbooks/roles/pynfs/tasks/install-deps/debian/main.yml
+++ b/playbooks/roles/pynfs/tasks/install-deps/debian/main.yml
@@ -28,4 +28,4 @@
     state: present
   tags: ["pynfs", "deps"]
   when:
-    - ansible_distribution_major_version | int >= 13
+    - ansible_facts['distribution_major_version'] | int >= 13
diff --git a/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml b/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml
index f8858c543488..18fda5ac4c08 100644
--- a/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml
@@ -31,4 +31,4 @@
   ansible.builtin.pip:
     name: xdrlib3
   when:
-    - ansible_distribution == "Fedora" or ansible_distribution_major_version | int > 8
+    - ansible_facts['distribution'] == "Fedora" or ansible_facts['distribution_major_version'] | int > 8
diff --git a/playbooks/roles/qemu/tasks/install-deps/suse/main.yml b/playbooks/roles/qemu/tasks/install-deps/suse/main.yml
index caaa81213a0b..f4e3880754be 100644
--- a/playbooks/roles/qemu/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/qemu/tasks/install-deps/suse/main.yml
@@ -2,8 +2,7 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set SUSE distribution facts
   ansible.builtin.set_fact:
-    qemu_is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
-
+    qemu_is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 - name: Install QEMU build dependencies
   become: true
   become_method: ansible.builtin.sudo
diff --git a/playbooks/roles/reboot-limit/tasks/do-reboot-compare.yml b/playbooks/roles/reboot-limit/tasks/do-reboot-compare.yml
index 34c8f8e5b405..7418bcad203b 100644
--- a/playbooks/roles/reboot-limit/tasks/do-reboot-compare.yml
+++ b/playbooks/roles/reboot-limit/tasks/do-reboot-compare.yml
@@ -4,7 +4,7 @@
 - name: Print uname for each host
   tags: ["run_tests"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Hint to our watchdog our reboot-limit comparison tests are about to kick off
   ansible.builtin.file:
     path: "{{ reboot_limit_local_results_dir }}/.begin"
diff --git a/playbooks/roles/reboot-limit/tasks/do-reboot.yml b/playbooks/roles/reboot-limit/tasks/do-reboot.yml
index 7f0e398797ea..de360643c51f 100644
--- a/playbooks/roles/reboot-limit/tasks/do-reboot.yml
+++ b/playbooks/roles/reboot-limit/tasks/do-reboot.yml
@@ -3,7 +3,7 @@
 - name: Print uname for each host
   tags: ["run_tests"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Hint to our watchdog our reboot-limit tests are about to kick off
   ansible.builtin.file:
     path: "{{ reboot_limit_local_results_dir }}/.begin"
diff --git a/playbooks/roles/rxe/templates/udev-rule.j2 b/playbooks/roles/rxe/templates/udev-rule.j2
index 9f5b5e4a68f3..385a2851ff42 100644
--- a/playbooks/roles/rxe/templates/udev-rule.j2
+++ b/playbooks/roles/rxe/templates/udev-rule.j2
@@ -1,2 +1,2 @@
-SUBSYSTEM=="net", KERNEL=="{{ ansible_default_ipv4.interface }}", \
-   PROGRAM="/usr/sbin/rdma link add rxe0 type rxe netdev {{ ansible_default_ipv4.interface }}"
+SUBSYSTEM=="net", KERNEL=="{{ ansible_facts['default_ipv4'].interface }}", \
+   PROGRAM="/usr/sbin/rdma link add rxe0 type rxe netdev {{ ansible_facts['default_ipv4'].interface }}"
diff --git a/playbooks/roles/selftests/tasks/install-deps/suse/main.yml b/playbooks/roles/selftests/tasks/install-deps/suse/main.yml
index f3c76620398d..a40b067cfc97 100644
--- a/playbooks/roles/selftests/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/selftests/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/selftests/tasks/main.yml b/playbooks/roles/selftests/tasks/main.yml
index d99e056888e6..ea41ea80c179 100644
--- a/playbooks/roles/selftests/tasks/main.yml
+++ b/playbooks/roles/selftests/tasks/main.yml
@@ -267,7 +267,7 @@
 - name: Print uname for each host
   tags: ["selftests", "run_tests"]
   ansible.builtin.debug:
-    var: ansible_kernel
+    var: ansible_facts['kernel']
 - name: Load configfs module
   tags: ["selftests", "run_tests", "configfs"]
   become: true
diff --git a/playbooks/roles/siw/templates/udev-rule.j2 b/playbooks/roles/siw/templates/udev-rule.j2
index 54f7beb6a764..aad1fc204056 100644
--- a/playbooks/roles/siw/templates/udev-rule.j2
+++ b/playbooks/roles/siw/templates/udev-rule.j2
@@ -1,2 +1,2 @@
-SUBSYSTEM=="net", KERNEL=="{{ ansible_default_ipv4.interface }}", \
-   PROGRAM="/usr/sbin/rdma link add siw0 type siw netdev {{ ansible_default_ipv4.interface }}"
+SUBSYSTEM=="net", KERNEL=="{{ ansible_facts['default_ipv4'].interface }}", \
+   PROGRAM="/usr/sbin/rdma link add siw0 type siw netdev {{ ansible_facts['default_ipv4'].interface }}"
diff --git a/playbooks/roles/smbd/tasks/install-deps/debian/main.yml b/playbooks/roles/smbd/tasks/install-deps/debian/main.yml
index abbffad4099f..893361f2f3dc 100644
--- a/playbooks/roles/smbd/tasks/install-deps/debian/main.yml
+++ b/playbooks/roles/smbd/tasks/install-deps/debian/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/smbd/tasks/install-deps/main.yml b/playbooks/roles/smbd/tasks/install-deps/main.yml
index 59336c35da5a..2a2392fe0e66 100644
--- a/playbooks/roles/smbd/tasks/install-deps/main.yml
+++ b/playbooks/roles/smbd/tasks/install-deps/main.yml
@@ -2,12 +2,12 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific set up
   ansible.builtin.include_tasks: debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific set up
   ansible.builtin.include_tasks: suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific set up
   ansible.builtin.include_tasks: redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
diff --git a/playbooks/roles/smbd/tasks/install-deps/redhat/main.yml b/playbooks/roles/smbd/tasks/install-deps/redhat/main.yml
index 72fbb03f676e..f1f7bcc708bd 100644
--- a/playbooks/roles/smbd/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/smbd/tasks/install-deps/redhat/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/smbd/tasks/install-deps/suse/main.yml b/playbooks/roles/smbd/tasks/install-deps/suse/main.yml
index edb2c9fb4890..9a2fc3cb7ced 100644
--- a/playbooks/roles/smbd/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/smbd/tasks/install-deps/suse/main.yml
@@ -5,8 +5,8 @@
   vars:
     params:
       files:
-        - "{{ ansible_distribution }}.yml"
-        - "{{ ansible_os_family }}.yml"
+        - "{{ ansible_facts['distribution'] }}.yml"
+        - "{{ ansible_facts['os_family'] }}.yml"
         - default.yml
       paths:
         - "vars"
diff --git a/playbooks/roles/smbd/tasks/main.yml b/playbooks/roles/smbd/tasks/main.yml
index ff17a2e08106..4df0617127f4 100644
--- a/playbooks/roles/smbd/tasks/main.yml
+++ b/playbooks/roles/smbd/tasks/main.yml
@@ -2,15 +2,15 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Debian-specific setup
   ansible.builtin.include_tasks: install-deps/debian/main.yml
-  when: ansible_os_family == 'Debian'
+  when: ansible_facts['os_family'] == 'Debian'
 
 - name: SuSE-specific setup
   ansible.builtin.include_tasks: install-deps/suse/main.yml
-  when: ansible_os_family == 'Suse'
+  when: ansible_facts['os_family'] == 'Suse'
 
 - name: Red Hat-specific setup
   ansible.builtin.include_tasks: install-deps/redhat/main.yml
-  when: ansible_os_family == 'RedHat'
+  when: ansible_facts['os_family'] == 'RedHat'
 
 - name: Create smb.conf
   become: true
diff --git a/playbooks/roles/steady_state/tasks/main.yaml b/playbooks/roles/steady_state/tasks/main.yaml
index 0cc08bd69935..0dba64555280 100644
--- a/playbooks/roles/steady_state/tasks/main.yaml
+++ b/playbooks/roles/steady_state/tasks/main.yaml
@@ -151,7 +151,7 @@
       {% else %}
         {{ device_physical_block_size | trim | int }}
       {% endif %}
-    effective_jobs: "{{ ssd_steady_state_numjobs | default(ansible_processor_vcpus, true) | int }}"
+    effective_jobs: "{{ ssd_steady_state_numjobs | default(ansible_facts['processor_vcpus'], true) | int }}"
   when: kdevops_run_ssd_steady_state|bool
   tags: ["prefill"]
 
diff --git a/playbooks/roles/sysbench/tasks/install-deps/redhat/main.yml b/playbooks/roles/sysbench/tasks/install-deps/redhat/main.yml
index 5f8f44a5976e..f964cf8c5255 100644
--- a/playbooks/roles/sysbench/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/sysbench/tasks/install-deps/redhat/main.yml
@@ -8,7 +8,7 @@
   ansible.builtin.include_role:
     name: epel-release
   when:
-    - ansible_distribution != "Fedora"
+    - ansible_facts['distribution'] != "Fedora"
 
 - name: Install docker
   become: true
diff --git a/playbooks/roles/sysbench/tasks/install-deps/suse/main.yml b/playbooks/roles/sysbench/tasks/install-deps/suse/main.yml
index 786464f9a4b0..2be469cf1022 100644
--- a/playbooks/roles/sysbench/tasks/install-deps/suse/main.yml
+++ b/playbooks/roles/sysbench/tasks/install-deps/suse/main.yml
@@ -2,25 +2,25 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 - name: Set generic SUSE specific distro facts
   ansible.builtin.set_fact:
-    is_sle: '{{ (ansible_distribution == "SLES") or (ansible_distribution == "SLED") }}'
-    is_leap: '{{ "Leap" in ansible_distribution }}'
-    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_distribution }}'
+    is_sle: '{{ (ansible_facts["distribution"] == "SLES") or (ansible_facts["distribution"] == "SLED") }}'
+    is_leap: '{{ "Leap" in ansible_facts["distribution"] }}'
+    is_tumbleweed: '{{ "openSUSE Tumbleweed" == ansible_facts["distribution"] }}'
 
 - name: Set SLE specific version labels to make checks easier
   ansible.builtin.set_fact:
-    is_sle10: '{{ ansible_distribution_major_version == "10" }}'
-    is_sle11: '{{ ansible_distribution_major_version == "11" }}'
-    is_sle12: '{{ ansible_distribution_major_version == "12" }}'
-    is_sle15: '{{ ansible_distribution_major_version == "15" }}'
-    is_sle10sp3: '{{ ansible_distribution_version == "10.3" }}'
-    is_sle11sp1: '{{ ansible_distribution_version == "11.1" }}'
-    is_sle11sp4: '{{ ansible_distribution_version == "11.4" }}'
-    is_sle12sp1: '{{ ansible_distribution_version == "12.1" }}'
-    is_sle12sp3: '{{ ansible_distribution_version == "12.3" }}'
-    is_sle12sp5: '{{ ansible_distribution_version == "12.5" }}'
-    is_sle15sp2: '{{ ansible_distribution_version == "15.2" }}'
-    is_sle15sp3: '{{ ansible_distribution_version == "15.3" }}'
-    is_sle15sp4: '{{ ansible_distribution_version == "15.4" }}'
+    is_sle10: '{{ ansible_facts["distribution_major_version"] == "10" }}'
+    is_sle11: '{{ ansible_facts["distribution_major_version"] == "11" }}'
+    is_sle12: '{{ ansible_facts["distribution_major_version"] == "12" }}'
+    is_sle15: '{{ ansible_facts["distribution_major_version"] == "15" }}'
+    is_sle10sp3: '{{ ansible_facts["distribution_version"] == "10.3" }}'
+    is_sle11sp1: '{{ ansible_facts["distribution_version"] == "11.1" }}'
+    is_sle11sp4: '{{ ansible_facts["distribution_version"] == "11.4" }}'
+    is_sle12sp1: '{{ ansible_facts["distribution_version"] == "12.1" }}'
+    is_sle12sp3: '{{ ansible_facts["distribution_version"] == "12.3" }}'
+    is_sle12sp5: '{{ ansible_facts["distribution_version"] == "12.5" }}'
+    is_sle15sp2: '{{ ansible_facts["distribution_version"] == "15.2" }}'
+    is_sle15sp3: '{{ ansible_facts["distribution_version"] == "15.3" }}'
+    is_sle15sp4: '{{ ansible_facts["distribution_version"] == "15.4" }}'
   when:
     - is_sle|bool
 
diff --git a/playbooks/roles/sysbench/tasks/mysql-docker/main.yaml b/playbooks/roles/sysbench/tasks/mysql-docker/main.yaml
index ff9ef3a6777e..d9e35c63b4ed 100644
--- a/playbooks/roles/sysbench/tasks/mysql-docker/main.yaml
+++ b/playbooks/roles/sysbench/tasks/mysql-docker/main.yaml
@@ -591,7 +591,7 @@
   tags: ["run_sysbench"]
   ansible.builtin.copy:
     content: "{{ sysbench_logs.stdout }}"
-    dest: "{{ sysbench_telemetry_path }}/docker-sysbench-results-{{ ansible_date_time.iso8601 }}.log"
+    dest: "{{ sysbench_telemetry_path }}/docker-sysbench-results-{{ ansible_facts['date_time'].iso8601 }}.log"
   when: "sysbench_type_mysql_docker|bool"
 
 - name: Collect sysbench docker logs for MySQL container
@@ -612,7 +612,7 @@
   become_method: sudo
   ansible.builtin.copy:
     content: "{{ sysbench_mysql_container_logs.stdout }}"
-    dest: "{{ sysbench_telemetry_path }}/docker-mysql-results-{{ ansible_date_time.iso8601 }}.log"
+    dest: "{{ sysbench_telemetry_path }}/docker-mysql-results-{{ ansible_facts['date_time'].iso8601 }}.log"
     mode: "u=rw,g=r,o=r"
   when: "sysbench_type_mysql_docker|bool"
 
diff --git a/playbooks/roles/terraform/tasks/bringup/datacrunch.yml b/playbooks/roles/terraform/tasks/bringup/datacrunch.yml
index 7439027ce934..bfdbeacedaa7 100644
--- a/playbooks/roles/terraform/tasks/bringup/datacrunch.yml
+++ b/playbooks/roles/terraform/tasks/bringup/datacrunch.yml
@@ -5,7 +5,7 @@
 
 - name: Set DataCrunch provider architecture
   ansible.builtin.set_fact:
-    datacrunch_provider_arch: "{{ 'amd64' if ansible_architecture == 'x86_64' else ansible_architecture }}"
+    datacrunch_provider_arch: "{{ 'amd64' if ansible_facts['architecture'] == 'x86_64' else ansible_facts['architecture'] }}"
   tags:
     - bringup
     - destroy
@@ -15,7 +15,7 @@
   ansible.builtin.stat:
     path: >-
       ~/.terraform.d/plugins/registry.terraform.io/linux-kdevops/datacrunch/0.0.3/{{
-      ansible_system | lower }}_{{ datacrunch_provider_arch }}/terraform-provider-datacrunch_v0.0.3
+      ansible_facts['system'] | lower }}_{{ datacrunch_provider_arch }}/terraform-provider-datacrunch_v0.0.3
   register: datacrunch_provider_installed
   tags:
     - bringup
@@ -26,7 +26,7 @@
   ansible.builtin.shell:
     cmd: |
       PROVIDER_VERSION="0.0.3"
-      PROVIDER_OS="{{ ansible_system | lower }}"
+      PROVIDER_OS="{{ ansible_facts['system'] | lower }}"
       PROVIDER_ARCH="{{ datacrunch_provider_arch }}"
       PROVIDER_DIR="$HOME/.terraform.d/plugins/registry.terraform.io/linux-kdevops/datacrunch"
       PROVIDER_DIR="${PROVIDER_DIR}/${PROVIDER_VERSION}/${PROVIDER_OS}_${PROVIDER_ARCH}"
diff --git a/playbooks/roles/update_etc_hosts/tasks/main.yml b/playbooks/roles/update_etc_hosts/tasks/main.yml
index e3b6c92a38c2..1ae9f84f36fa 100644
--- a/playbooks/roles/update_etc_hosts/tasks/main.yml
+++ b/playbooks/roles/update_etc_hosts/tasks/main.yml
@@ -53,7 +53,7 @@
   ansible.builtin.lineinfile:
     dest: /etc/hosts
     regexp: '.*{{ item }}$'
-    line: "{{ hostvars[item].ansible_all_ipv4_addresses | ansible.utils.ipaddr(private_network) | first }} {{ item }}"
+    line: "{{ hostvars[item].ansible_facts['all_ipv4_addresses'] | ansible.utils.ipaddr(private_network) | first }} {{ item }}"
     state: present
   with_items: "{{ ueh_hosts }}"
   when:
@@ -66,7 +66,7 @@
   ansible.builtin.lineinfile:
     dest: /etc/hosts
     regexp: ".*{{ item }}$"
-    line: "{{ hostvars[item].ansible_all_ipv4_addresses | first }} {{ item }}"
+    line: "{{ hostvars[item].ansible_facts['all_ipv4_addresses'] | first }} {{ item }}"
     state: present
   with_items: "{{ ueh_hosts }}"
   when:
@@ -78,9 +78,9 @@
   become_method: sudo
   ansible.builtin.lineinfile:
     path: /etc/hosts
-    regexp: "^(127\\.0\\.1\\.1)(\\s+)unassigned-hostname\\.unassigned-domain\\s+({{ ansible_hostname }})$"
+    regexp: "^(127\\.0\\.1\\.1)(\\s+)unassigned-hostname\\.unassigned-domain\\s+({{ ansible_facts['hostname'] }})$"
     backrefs: true
     line: "\\1\\2\\3"
   when:
-    - ansible_os_family == 'Debian'
+    - ansible_facts['os_family'] == 'Debian'
     - kdevops_enable_guestfs|bool
diff --git a/playbooks/roles/vllm/tasks/configure-docker-data.yml b/playbooks/roles/vllm/tasks/configure-docker-data.yml
index ff8ea71301ba..726e304fd1b7 100644
--- a/playbooks/roles/vllm/tasks/configure-docker-data.yml
+++ b/playbooks/roles/vllm/tasks/configure-docker-data.yml
@@ -40,9 +40,9 @@
 - name: Auto-detect Docker mirror registry endpoint via 9P mount
   set_fact:
     docker_registry_mirrors:
-      - "http://{{ ansible_default_ipv4.gateway }}:5000"
+      - "http://{{ ansible_facts['default_ipv4'].gateway }}:5000"
     docker_insecure_registries:
-      - "{{ ansible_default_ipv4.gateway }}:5000"
+      - "{{ ansible_facts['default_ipv4'].gateway }}:5000"
     docker_mirror_type: "9p_mount"
   when:
     - docker_mirror_check.stat.exists
@@ -50,7 +50,7 @@
 
 - name: Auto-detect Docker mirror registry endpoint via IP
   ansible.builtin.uri:
-    url: "http://{{ ansible_default_ipv4.gateway }}:5000/v2/_catalog"
+    url: "http://{{ ansible_facts['default_ipv4'].gateway }}:5000/v2/_catalog"
     method: GET
     timeout: 5
   register: mirror_registry_check
@@ -62,9 +62,9 @@
 - name: Set Docker registry mirror configuration via IP
   set_fact:
     docker_registry_mirrors:
-      - "http://{{ ansible_default_ipv4.gateway }}:5000"
+      - "http://{{ ansible_facts['default_ipv4'].gateway }}:5000"
     docker_insecure_registries:
-      - "{{ ansible_default_ipv4.gateway }}:5000"
+      - "{{ ansible_facts['default_ipv4'].gateway }}:5000"
     docker_mirror_type: "ip_gateway"
   when:
     - not docker_mirror_check.stat.exists
diff --git a/playbooks/roles/vllm/tasks/deploy-bare-metal.yml b/playbooks/roles/vllm/tasks/deploy-bare-metal.yml
index 392788f3dabc..2d9876d6544e 100644
--- a/playbooks/roles/vllm/tasks/deploy-bare-metal.yml
+++ b/playbooks/roles/vllm/tasks/deploy-bare-metal.yml
@@ -261,7 +261,7 @@
 
           Service: {{ vllm_bare_metal_service_name | default('vllm') }}
           Status: Active
-          API Endpoint: http://{{ ansible_default_ipv4.address }}:{{ vllm_api_port | default(8000) }}
+          API Endpoint: http://{{ ansible_facts['default_ipv4'].address }}:{{ vllm_api_port | default(8000) }}
 
           Available Models:
           {% for model in models_response.json.data %}
diff --git a/playbooks/roles/vllm/tasks/install-deps/redhat/main.yml b/playbooks/roles/vllm/tasks/install-deps/redhat/main.yml
index fd2f4d535a09..9d62bb9d7917 100644
--- a/playbooks/roles/vllm/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/vllm/tasks/install-deps/redhat/main.yml
@@ -13,7 +13,7 @@
       - ca-certificates
       - gnupg
     state: present
-  when: ansible_distribution_major_version|int <= 7
+  when: ansible_facts['distribution_major_version']|int <= 7
   tags: ["vllm", "deps"]
 
 - name: Install vLLM system dependencies (dnf)
@@ -29,7 +29,7 @@
       - ca-certificates
       - gnupg
     state: present
-  when: ansible_distribution_major_version|int >= 8
+  when: ansible_facts['distribution_major_version']|int >= 8
   tags: ["vllm", "deps"]
 
 - name: Install Python development dependencies
@@ -44,7 +44,7 @@
       - gcc-c++
       - make
     state: present
-  when: ansible_distribution_major_version|int <= 7
+  when: ansible_facts['distribution_major_version']|int <= 7
   tags: ["vllm", "deps"]
 
 - name: Install Python development dependencies (dnf)
@@ -59,7 +59,7 @@
       - gcc-c++
       - make
     state: present
-  when: ansible_distribution_major_version|int >= 8
+  when: ansible_facts['distribution_major_version']|int >= 8
   tags: ["vllm", "deps"]
 
 - name: Install Python benchmarking dependencies (yum)
@@ -72,7 +72,7 @@
       - python3-pandas
       - python3-matplotlib
     state: present
-  when: ansible_distribution_major_version|int <= 7
+  when: ansible_facts['distribution_major_version']|int <= 7
   tags: ["vllm", "deps", "benchmark"]
 
 - name: Install Python benchmarking dependencies (dnf)
@@ -85,7 +85,7 @@
       - python3-pandas
       - python3-matplotlib
     state: present
-  when: ansible_distribution_major_version|int >= 8
+  when: ansible_facts['distribution_major_version']|int >= 8
   tags: ["vllm", "deps", "benchmark"]
 
 - name: Install Python Kubernetes client library (yum)
@@ -95,7 +95,7 @@
     name:
       - python3-kubernetes
     state: present
-  when: ansible_distribution_major_version|int <= 7
+  when: ansible_facts['distribution_major_version']|int <= 7
   tags: ["vllm", "deps"]
 
 - name: Install Python Kubernetes client library (dnf)
@@ -105,5 +105,5 @@
     name:
       - python3-kubernetes
     state: present
-  when: ansible_distribution_major_version|int >= 8
+  when: ansible_facts['distribution_major_version']|int >= 8
   tags: ["vllm", "deps"]
diff --git a/playbooks/roles/vllm/tasks/main.yml b/playbooks/roles/vllm/tasks/main.yml
index ca92d676645f..36dbffeaf6d9 100644
--- a/playbooks/roles/vllm/tasks/main.yml
+++ b/playbooks/roles/vllm/tasks/main.yml
@@ -147,15 +147,15 @@
         content: |
           {
             "hostname": "{{ inventory_hostname }}",
-            "distribution": "{{ ansible_distribution }}",
-            "distribution_version": "{{ ansible_distribution_version }}",
-            "kernel": "{{ ansible_kernel }}",
-            "processor_count": {{ ansible_processor_count }},
-            "processor_cores": {{ ansible_processor_cores }},
-            "memtotal_mb": {{ ansible_memtotal_mb }},
-            "virtualization_type": "{{ ansible_virtualization_type | default('bare-metal') }}",
-            "virtualization_role": "{{ ansible_virtualization_role | default('host') }}",
-            "date": "{{ ansible_date_time.iso8601 }}"
+            "distribution": "{{ ansible_facts['distribution'] }}",
+            "distribution_version": "{{ ansible_facts['distribution_version'] }}",
+            "kernel": "{{ ansible_facts['kernel'] }}",
+            "processor_count": {{ ansible_facts['processor_count'] }},
+            "processor_cores": {{ ansible_facts['processor_cores'] }},
+            "memtotal_mb": {{ ansible_facts['memtotal_mb'] }},
+            "virtualization_type": "{{ ansible_facts['virtualization_type'] | default('bare-metal') }}",
+            "virtualization_role": "{{ ansible_facts['virtualization_role'] | default('host') }}",
+            "date": "{{ ansible_facts['date_time'].iso8601 }}"
           }
         dest: "{{ vllm_results_dir }}/system_info.json"
         mode: '0644'
diff --git a/playbooks/roles/vllm/tasks/setup-kubernetes.yml b/playbooks/roles/vllm/tasks/setup-kubernetes.yml
index 8ee729da4b6e..ccaac44ca9fa 100644
--- a/playbooks/roles/vllm/tasks/setup-kubernetes.yml
+++ b/playbooks/roles/vllm/tasks/setup-kubernetes.yml
@@ -132,7 +132,7 @@
               Current status:
                 Kernel configuration: {{ veth_check.stdout }}
                 veth module status: {{ veth_loaded.stdout }}
-                Kernel version: {{ ansible_kernel }}
+                Kernel version: {{ ansible_facts['kernel'] }}
 
               REQUIRED: Rebuild your kernel with CONFIG_VETH enabled:
                 CONFIG_VETH=y  (built-in, recommended)
@@ -239,8 +239,8 @@
               minikube start
               --driver=docker
               --force
-              --cpus={{ [ansible_processor_vcpus | default(4), 32] | min }}
-              --memory={{ [(ansible_memtotal_mb * 0.75) | int, 49152] | min }}
+              --cpus={{ [ansible_facts['processor_vcpus'] | default(4), 32] | min }}
+              --memory={{ [(ansible_facts['memtotal_mb'] * 0.75) | int, 49152] | min }}
               --disk-size=50g
               --delete-on-failure=true
               {{ '--gpus all' if not vllm_use_cpu_inference|default(false) else '' }}
diff --git a/playbooks/roles/vllm/templates/vllm-visualize.py.j2 b/playbooks/roles/vllm/templates/vllm-visualize.py.j2
index b5c02e6080f7..1567aa1b09be 100644
--- a/playbooks/roles/vllm/templates/vllm-visualize.py.j2
+++ b/playbooks/roles/vllm/templates/vllm-visualize.py.j2
@@ -175,7 +175,7 @@ def generate_html_report(results):
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>vLLM Benchmark Results - {{ ansible_date_time.date }}</title>
+    <title>vLLM Benchmark Results - {{ ansible_facts['date_time'].date }}</title>
     <style>
         body {{
             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
diff --git a/playbooks/roles/volume_group/tasks/terraform/oci.yml b/playbooks/roles/volume_group/tasks/terraform/oci.yml
index 600afebd64ec..69961044f0df 100644
--- a/playbooks/roles/volume_group/tasks/terraform/oci.yml
+++ b/playbooks/roles/volume_group/tasks/terraform/oci.yml
@@ -36,4 +36,4 @@
     - item.key != instance_data_device
   loop_control:
     label: "Adding block device: /dev/{{ item.key }}"
-  with_dict: "{{ ansible_devices }}"
+  with_dict: "{{ ansible_facts['devices'] }}"

-- 
2.54.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 3/5] gitr: enable verbose logging in the test harness
  2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 2/5] ansible: replace deprecated top-level ansible_* facts with ansible_facts[] Jeff Layton
@ 2026-06-18 12:17 ` Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 4/5] nfsd: use more reasonable defaults for local VM testing Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 5/5] devconfig: add some extra packages to the kdev tools Jeff Layton
  4 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

It's pretty difficult to suss out what failed when the gitr suite fails.
Make it do verbose logging so that there is some indication of what
failed when it does occur.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 playbooks/roles/gitr/tasks/main.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/playbooks/roles/gitr/tasks/main.yml b/playbooks/roles/gitr/tasks/main.yml
index cd4402deec90..c9c1d5b4e82c 100644
--- a/playbooks/roles/gitr/tasks/main.yml
+++ b/playbooks/roles/gitr/tasks/main.yml
@@ -265,7 +265,7 @@
   environment:
     GIT_TEST_CLONE_2GB: "true"
   ansible.builtin.shell:
-    cmd: "prove -Q -a /tmp/{{ gitr_run_uniqifier }}.tgz --jobs {{ gitr_test_thread_count }} ./t[0-9]*.sh"
+    cmd: "prove -Q -a /tmp/{{ gitr_run_uniqifier }}.tgz --jobs {{ gitr_test_thread_count }} ./t[0-9]*.sh :: --verbose-log"
     chdir: "{{ gitr_mnt }}/git/t"
   register: gitr_results
   failed_when: false
@@ -274,7 +274,7 @@
 - name: Run specific git regression tests
   tags: run_specific_tests
   ansible.builtin.command:
-    cmd: "prove -Q -a /tmp/{{ gitr_run_uniqifier }}.tgz {{ gitr_test_list }}"
+    cmd: "prove -Q -a /tmp/{{ gitr_run_uniqifier }}.tgz {{ gitr_test_list }} :: --verbose-log"
     chdir: "{{ gitr_mnt }}/git/t"
   register: gitr_results
   failed_when: false

-- 
2.54.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 4/5] nfsd: use more reasonable defaults for local VM testing
  2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
                   ` (2 preceding siblings ...)
  2026-06-18 12:17 ` [PATCH v2 3/5] gitr: enable verbose logging in the test harness Jeff Layton
@ 2026-06-18 12:17 ` Jeff Layton
  2026-06-18 12:17 ` [PATCH v2 5/5] devconfig: add some extra packages to the kdev tools Jeff Layton
  4 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

128 threads is a more reasonable default with modern machine sizes, and
30s is a more reasonable default grace period for localized testing with
knfsd. Also, some other default config changes:

- enable v4.0 since we still need to test it

- min-threads setting to use dynamic threading by default on newer kernels.

- have mountd do manage_gids to exercise those codepaths

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 kconfigs/Kconfig.nfsd                      | 4 ++--
 playbooks/roles/nfsd/templates/nfs.conf.j2 | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/kconfigs/Kconfig.nfsd b/kconfigs/Kconfig.nfsd
index dbc02115d785..586333803671 100644
--- a/kconfigs/Kconfig.nfsd
+++ b/kconfigs/Kconfig.nfsd
@@ -57,13 +57,13 @@ config NFSD_EXPORT_OPTIONS
 
 config NFSD_THREADS
 	int "Number of nfsd threads to spawn"
-	default 8
+	default 128
 	help
 	  Number of nfsd threads to start up for testing.
 
 config NFSD_LEASE_TIME
 	int "NFSv4 lease time and grace period, in seconds"
-	default 90
+	default 30
 	help
 	  Time, in seconds, that the NFS server will wait before expiring
 	  a client lease. Production servers typically use 90 seconds to
diff --git a/playbooks/roles/nfsd/templates/nfs.conf.j2 b/playbooks/roles/nfsd/templates/nfs.conf.j2
index a5f4a714ec34..45aba163b016 100644
--- a/playbooks/roles/nfsd/templates/nfs.conf.j2
+++ b/playbooks/roles/nfsd/templates/nfs.conf.j2
@@ -1,9 +1,14 @@
 [general]
 pipefs-directory={{ pipefs_directory }}
 
+[mountd]
+manage-gids=y
+
 [nfsd]
 udp=y
 rdma=y
+vers4.0=y
+min-threads=1
 threads={{ nfsd_threads }}
 grace-time={{ nfsd_lease_time }}
 lease-time={{ nfsd_lease_time }}

-- 
2.54.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 5/5] devconfig: add some extra packages to the kdev tools
  2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
                   ` (3 preceding siblings ...)
  2026-06-18 12:17 ` [PATCH v2 4/5] nfsd: use more reasonable defaults for local VM testing Jeff Layton
@ 2026-06-18 12:17 ` Jeff Layton
  4 siblings, 0 replies; 6+ messages in thread
From: Jeff Layton @ 2026-06-18 12:17 UTC (permalink / raw)
  To: Luis Chamberlain, Daniel Gomez, Chuck Lever; +Cc: kdevops, Jeff Layton

Install some more useful tools as part of devconfig. This only adds them
to the redhat configs, as I wasn't sure of package names for the other
distros.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
index df4dbc834329..58656eec2e15 100644
--- a/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/devconfig/tasks/install-deps/redhat/main.yml
@@ -109,6 +109,12 @@
       - net-snmp
       - trace-cmd
       - perf
+      - strace
+      - lsof
+      - git
+      - wireshark-cli
+      - rsync
+      - time
   when:
     - devconfig_try_install_kdevtools|bool
 

-- 
2.54.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-06-18 12:17 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 12:17 [PATCH v2 0/5] kdevops: fixes for new ansible and some nfsd default config changes Jeff Layton
2026-06-18 12:17 ` [PATCH v2 1/5] ansible: fix bare conditionals for ansible-core 2.20+ strict booleans Jeff Layton
2026-06-18 12:17 ` [PATCH v2 2/5] ansible: replace deprecated top-level ansible_* facts with ansible_facts[] Jeff Layton
2026-06-18 12:17 ` [PATCH v2 3/5] gitr: enable verbose logging in the test harness Jeff Layton
2026-06-18 12:17 ` [PATCH v2 4/5] nfsd: use more reasonable defaults for local VM testing Jeff Layton
2026-06-18 12:17 ` [PATCH v2 5/5] devconfig: add some extra packages to the kdev tools Jeff Layton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.