public inbox for kdevops@lists.linux.dev
 help / color / mirror / Atom feed
* [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file
@ 2025-07-02 19:35 Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 01/11] playbooks: fix playbook name for all hosts plays Daniel Gomez
                   ` (12 more replies)
  0 siblings, 13 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

Following Chuck's proposed changes to make task parallelism configurable
via the Ansible configuration file [1], and the subsequent cleanup
of ansible-playbook calls [2] along with the Python interpreter
improvements [3] to better support distros like NixOS through simplified
global interpreter configuration [4], I considered applying the same
approach to the inventory file. This would further streamline our
Ansible wrapper in the kdevops Makefiles.

Why make this change? By specifying the inventory file (typically
'hosts' file in kdevops) directly in ansible.cfg, we eliminate the
need for repeated -i/--inventory arguments and gain flexibility in
where the inventory file is located. This also supports the broader
sandboxing goal discussed in [5]. Moreover, by including localhost in
the inventory, we can clean up the Makefile wrapper even further by
removing --connection=localhost and -i localhost options, while also
enabling workflows to run directly on the controller node (with some
extra more modifications).

https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/

[1]
Increase default task parallelism
https://lore.kernel.org/kdevops/20250404204827.34941-1-cel@kernel.org/
[2]
[PATCH 2/2] Makefile: Remove "-f 30" command line argument
https://lore.kernel.org/kdevops/20250417172119.3190398-2-cel@kernel.org/

[3]
https://lore.kernel.org/kdevops/20250404-python-interpreter-v1-0-04783b627ce7@samsung.com/

[4]
https://lore.kernel.org/kdevops/kwpt5iizzmryybpg6z3fgs6koak27rjggydfighd42wn7mxqja@2hwvtppppzsk/

[5]
https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/

This series promotes the Ansible inventory file (typically 'hosts'
in kdevops) to the Ansible Configuration file (ansible.cfg). By doing
this, we allow to control the hosts globally rather than in all the
ansible-playbook commands, as well as clean up the ansible-playbook
command.

So, we don't need to define anymore the inventory file in the command.
However, playbooks may still be controlled on which targets the playbook
is run. This is done through the playbook itself and/or through the
ansible-playbook argument --limit. Also notice delegate_to is needed
when the playbook runs and iterates on specific nodes such as baseline
and dev but a specific task needs to be handled back to the controller
node.

As part of the series, the term 'all' to refer to all hosts is redefined
to include the localhost. This removes the need to be explicit with
localhost playbooks runs, as it's now just another target in the
inventory file. This term redefinition requires to change playbooks that
use the term all, either through ansible-playbook command or through
the host: field in the YAML playbook file. For this reason, the term
has been replaced in most cases with 'baseline:dev', which means all
targets in the inventory file in the baseline and dev groups, matching
the 'all' concept in the former configuration 'hosts' file. Except the
bootlinux.yml and guestfs.yml playbooks, all playbooks run either on
localhost or remote targets (the previous 'all' definition). Therefore,
all playbooks have been converted to use 'hosts: baseline:dev'. For
the bootlinux.yml playbook, 'all' is kept and the control of host
execution is done via the --limit argument. It was found that only
the linux-clone-9p target runs the bootlinux playbook in the localhost
while the rest of linux-* targets run the playbook in all the remotes
(baseline:dev). For guestfs.yml, a combination of --limit + delegate_to
is needed for the reason explained above: to iterate on the targets
(baseline:dev) but delegate certain tags to the controller node with
delegate_to.

In addition, in order to help me debug this change, I found it
convenient to print the Makefile target name being run before the
command. This allows to be more explicit in verbose mode (V=1) when a
playbook is run (or any subsequent command in the target). And makes it
easier to discover which target the ansible-playbook command belongs to
when debugging playbook execution. To clarify, V=1 already prints the
command but not the Makefile target. The command output behaviour will
be a bit different as it is today as the command itself will be printed
in one line, instead of multiple.

Series has been tested here:
v1:
https://github.com/linux-kdevops/kdevops/actions/runs/14773869477
v3:
https://github.com/linux-kdevops/kdevops/actions/runs/14846101950
v4:
https://github.com/linux-kdevops/kdevops/actions/runs/16033723055

Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
Changes in v4:
- Add trailers (from Luis)
- Rebase on top of main
- Link to v3: https://lore.kernel.org/r/20250505-ansible_cfg_inventory-v3-0-a153d93c35c4@samsung.com

Changes in v3:
- Fix LIMIT_HOSTS. When HOSTS="host1" was used, the --limit replacement
did not work anymore because of the quotes where not needed when using
long form arguments
- Fix bootlinux-local limit in linux target.
- Replace all:!localhost with baseline:dev as suggested by Luis. This
allows to include localhost as part of the baseline and/or dev groups
for baremetal workflows
- Allow to configure the ansible.cfg location. This requires to export
the ANSIBLE_CONFIG. This also enables sandboxing
- Fix debug mode when ansible.cfg is created (command was not printed
because of double @)
- Add back KDEVOPS_HOSTS as cli option. KDEVOPS_HOSTS was not part of
the cli before but it was allowed to be overwritten at command line
time. This allows to be explicit and keeps backwards compatibility with
the variable
- Extend ANSIBLE_CFG_FILE help as per Chuck's suggestion
- Move ANSIBLE_CFG_FILE location in Kconfig and place it after
SET_BY_CLI options
- Remove crash_watchdog.py inventory arguments (Reported by Luis)
- Remove inventory arguments from docs, READMEs and remaining Makefiles
- Move ueh_hosts hunk to fix undefined variable in patch "gen_hosts:
templates: add localhost to all hosts"
- Rename CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE to CONFIG_ANSIBLE_CFG_INVENTORY
in scripts/lib.sh and kconfigs/Kconfig.ansible_provisioning
- Update cover letter reasoning and commit messages for better clarity
- Link to v2: https://lore.kernel.org/r/20250502-ansible_cfg_inventory-v2-0-d3c19ff4aa6e@samsung.com

Changes in v2:
- Update ANSIBLE_CFG_INVENTORY help description as per Chuck suggestion
- Add docs/kdevops-ansible-configuration.md for extensive module
documentation
- Include fix to avoid generating always the ansible.cfg and hosts
files. Reported by Chuck
The same commit change also includes support to change the ansible.cfg
path.
- Link to v1: https://lore.kernel.org/r/20250501-ansible_cfg_inventory-v1-0-c568bbaa3502@samsung.com

---
Daniel Gomez (11):
      playbooks: fix playbook name for all hosts plays
      playbooks: fix playbook name for localhost plays
      Makefile: use long form of limit argument for clarity
      Makefile: print target when debug
      .github/workflows/fstests.yml: enable make verbosity
      ansible_cfg: add inventory support
      gen_hosts: templates: include localhost in the all group
      Makefile: use inventory from ansible.cfg
      ansible_cfg: add support to change ansible.cfg file location
      docs: ansible_cfg: add documentation
      build.Makefile: fix verbosity of clean target

 .github/workflows/fstests.yml                      |  16 ++--
 MAINTAINERS                                        |   2 +-
 Makefile                                           |  42 +++++----
 Makefile.btrfs_progs                               |   4 +-
 Makefile.build_qemu                                |  12 +--
 Makefile.hypervisor-tunings                        |   3 +-
 Makefile.kdevops                                   |  19 ++--
 Makefile.linux-mirror                              |   6 +-
 Makefile.postfix                                   |   3 +-
 docs/kdevops-ansible-configuration.md              | 102 +++++++++++++++++++++
 docs/kdevops-terraform.md                          |   2 +-
 kconfigs/Kconfig.ansible_cfg                       |  46 ++++++++++
 kconfigs/Kconfig.ansible_provisioning              |   8 +-
 playbooks/blktests.yml                             |   3 +-
 playbooks/bootlinux.yml                            |   3 +-
 playbooks/build_qemu.yml                           |   3 +-
 playbooks/common.yml                               |   3 +-
 playbooks/create_data_partition.yml                |   3 +-
 playbooks/cxl.yml                                  |   3 +-
 playbooks/devconfig.yml                            |   3 +-
 playbooks/fstests.yml                              |   6 +-
 playbooks/gen-pci-kconfig.yml                      |   3 +-
 playbooks/gen_hosts.yml                            |   3 +-
 playbooks/gen_nodes.yml                            |   3 +-
 playbooks/gen_tfvars.yml                           |   3 +-
 playbooks/gitr.yml                                 |   3 +-
 playbooks/hypervisor-tuning.yml                    |   3 +-
 playbooks/install-menuconfig-deps.yml              |   3 +-
 playbooks/install_systemd_journal_remote.yml       |   3 +-
 playbooks/install_systemd_timesyncd.yml            |   3 +-
 playbooks/install_terraform.yml                    |   3 +-
 playbooks/install_vagrant_boxes.yml                |   3 +-
 playbooks/iscsi.yml                                |   3 +-
 playbooks/kdc.yml                                  |   3 +-
 playbooks/kdevops_archive.yml                      |   3 +-
 playbooks/krb5.yml                                 |   3 +-
 playbooks/ktls.yml                                 |   3 +-
 playbooks/libvirt_pcie_passthrough.yml             |   3 +-
 playbooks/libvirt_storage_pool_create.yml          |   3 +-
 playbooks/libvirt_user.yml                         |   3 +-
 playbooks/linux-mirror.yml                         |   3 +-
 playbooks/ltp.yml                                  |   3 +-
 playbooks/nfsd.yml                                 |   3 +-
 playbooks/nfstest.yml                              |   4 +-
 playbooks/pkg.yml                                  |   3 +-
 playbooks/postfix_relay_host.yml                   |   3 +-
 playbooks/pynfs.yml                                |   3 +-
 playbooks/reboot-limit.yml                         |   3 +-
 playbooks/roles/ansible_cfg/tasks/main.yml         |   3 +-
 .../roles/ansible_cfg/templates/ansible.cfg.j2     |   1 +
 playbooks/roles/bootlinux/README.md                |  12 +--
 playbooks/roles/common/README.md                   |   2 +-
 playbooks/roles/devconfig/README.md                |   2 +-
 playbooks/roles/gen_hosts/defaults/main.yml        |   1 -
 playbooks/roles/gen_hosts/tasks/main.yml           |  54 +++++------
 playbooks/roles/gen_hosts/templates/blktests.j2    |   1 +
 playbooks/roles/gen_hosts/templates/cxl.j2         |   1 +
 playbooks/roles/gen_hosts/templates/fstests.j2     |   1 +
 playbooks/roles/gen_hosts/templates/gitr.j2        |   1 +
 playbooks/roles/gen_hosts/templates/hosts.j2       |   2 +
 playbooks/roles/gen_hosts/templates/ltp.j2         |   1 +
 playbooks/roles/gen_hosts/templates/nfstest.j2     |   1 +
 playbooks/roles/gen_hosts/templates/pynfs.j2       |   1 +
 playbooks/roles/gen_hosts/templates/selftests.j2   |   1 +
 playbooks/roles/gen_hosts/templates/sysbench.j2    |   1 +
 playbooks/roles/guestfs/tasks/main.yml             |   6 ++
 playbooks/roles/libvirt_user/README.md             |   4 +-
 playbooks/roles/pkg/README.md                      |   2 +-
 playbooks/roles/update_etc_hosts/tasks/main.yml    |   2 +-
 playbooks/rxe.yml                                  |   3 +-
 playbooks/selftests.yml                            |   3 +-
 playbooks/siw.yml                                  |   3 +-
 playbooks/smbd.yml                                 |   3 +-
 playbooks/sysbench.yml                             |   3 +-
 playbooks/terraform.yml                            |   4 +-
 playbooks/update_etc_hosts.yml                     |   3 +-
 playbooks/update_ssh_config_guestfs.yml            |   3 +-
 playbooks/update_ssh_config_vagrant.yml            |   3 +-
 scripts/archive.Makefile                           |   3 +-
 scripts/build.Makefile                             |   2 +-
 scripts/devconfig.Makefile                         |   8 +-
 scripts/dynamic-pci-kconfig.Makefile               |   3 +-
 scripts/firstconfig.Makefile                       |   5 +-
 scripts/gen-hosts.Makefile                         |   1 -
 scripts/guestfs.Makefile                           |  19 ++--
 scripts/install-menuconfig-deps.Makefile           |   3 +-
 scripts/iscsi.Makefile                             |   2 +-
 scripts/journal-server.Makefile                    |  23 +++--
 scripts/kotd.Makefile                              |  16 ++--
 scripts/krb5.Makefile                              |   4 +-
 scripts/ktls.Makefile                              |   1 -
 scripts/lib.sh                                     |   2 +-
 scripts/nfsd.Makefile                              |   2 +-
 scripts/provision.Makefile                         |   5 +-
 scripts/rdma.Makefile                              |   2 -
 scripts/smbd.Makefile                              |   2 +-
 scripts/systemd-timesync.Makefile                  |   8 +-
 scripts/terraform.Makefile                         |   6 +-
 scripts/update_etc_hosts.Makefile                  |   2 +-
 scripts/vagrant.Makefile                           |  10 +-
 scripts/workflows/lib/crash.py                     |   4 +-
 workflows/blktests/Makefile                        |  20 ++--
 workflows/common/Makefile                          |   2 +-
 workflows/cxl/Makefile                             |  14 +--
 workflows/demos/reboot-limit/Makefile              |  32 ++++---
 workflows/fstests/Makefile                         |  40 +++++---
 workflows/gitr/Makefile                            |   8 +-
 workflows/linux/Makefile                           |  60 +++++++-----
 workflows/ltp/Makefile                             |   8 +-
 workflows/nfstest/Makefile                         |   8 +-
 workflows/pynfs/Makefile                           |  12 +--
 workflows/selftests/Makefile                       |  11 ++-
 workflows/sysbench/Makefile                        |  12 +--
 113 files changed, 548 insertions(+), 314 deletions(-)
---
base-commit: 4d8e5043bf64d51fe391245d1526c1c65617e437
change-id: 20250430-ansible_cfg_inventory-7955944ce8ff

Best regards,
-- 
Daniel Gomez <da.gomez@samsung.com>


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

* [PATCH v4 01/11] playbooks: fix playbook name for all hosts plays
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 02/11] playbooks: fix playbook name for localhost plays Daniel Gomez
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Fix name rule by naming all the playbooks that run in all hosts.

https://ansible.readthedocs.io/projects/lint/rules/name/

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 playbooks/blktests.yml              | 3 ++-
 playbooks/bootlinux.yml             | 3 ++-
 playbooks/common.yml                | 3 ++-
 playbooks/create_data_partition.yml | 3 ++-
 playbooks/cxl.yml                   | 3 ++-
 playbooks/devconfig.yml             | 3 ++-
 playbooks/fstests.yml               | 3 ++-
 playbooks/gitr.yml                  | 3 ++-
 playbooks/iscsi.yml                 | 3 ++-
 playbooks/kdc.yml                   | 3 ++-
 playbooks/krb5.yml                  | 3 ++-
 playbooks/ktls.yml                  | 3 ++-
 playbooks/ltp.yml                   | 3 ++-
 playbooks/nfsd.yml                  | 3 ++-
 playbooks/nfstest.yml               | 3 ++-
 playbooks/pkg.yml                   | 3 ++-
 playbooks/pynfs.yml                 | 3 ++-
 playbooks/reboot-limit.yml          | 3 ++-
 playbooks/rxe.yml                   | 3 ++-
 playbooks/selftests.yml             | 3 ++-
 playbooks/siw.yml                   | 3 ++-
 playbooks/smbd.yml                  | 3 ++-
 playbooks/sysbench.yml              | 3 ++-
 playbooks/terraform.yml             | 1 +
 playbooks/update_etc_hosts.yml      | 3 ++-
 25 files changed, 49 insertions(+), 24 deletions(-)

diff --git a/playbooks/blktests.yml b/playbooks/blktests.yml
index 99732af2b681d5a8a161514513e564495a2686c9..db58d43ac73e6b8f8a22703357db9b2ad9106097 100644
--- a/playbooks/blktests.yml
+++ b/playbooks/blktests.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run the block layer testing workflow
+  hosts: all
   roles:
     - role: blktests
diff --git a/playbooks/bootlinux.yml b/playbooks/bootlinux.yml
index 418bbed4c060ed10333f2b1c5832f4217d18f458..676469d49348ad209bb2d094b86e088a4dcf03b0 100644
--- a/playbooks/bootlinux.yml
+++ b/playbooks/bootlinux.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: bootlinux
+  hosts: all
   roles:
     - role: bootlinux
diff --git a/playbooks/common.yml b/playbooks/common.yml
index 48485e3cfad5a253bd87ef231463167a824076f8..d49e7d0ba9f703c680adc2d024901902edb0bca0 100644
--- a/playbooks/common.yml
+++ b/playbooks/common.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Common tasks
+  hosts: all
   roles:
     - role: common
diff --git a/playbooks/create_data_partition.yml b/playbooks/create_data_partition.yml
index fe7890b357c1ec0a4e42f29c24d2fbf093868fda..fa925679a3595e5fecc33a9968ab5c42b12f5446 100644
--- a/playbooks/create_data_partition.yml
+++ b/playbooks/create_data_partition.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Create Directory Data Path (e.g. /data partition)
+  hosts: all
   roles:
     - role: create_data_partition
diff --git a/playbooks/cxl.yml b/playbooks/cxl.yml
index 87638599bf4397c9508f7c746316e0f2e9312f67..65277d435a6fe13661febfea78181bf3a13e4dfc 100644
--- a/playbooks/cxl.yml
+++ b/playbooks/cxl.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: cxl
+  hosts: all
   roles:
     - role: cxl
diff --git a/playbooks/devconfig.yml b/playbooks/devconfig.yml
index 871651d740153d5ed0f75d466da5ca218362425e..b4a7393e6c57abfc243cf658b805550f824b8142 100644
--- a/playbooks/devconfig.yml
+++ b/playbooks/devconfig.yml
@@ -1,5 +1,6 @@
 ---
-- hosts: all
+- name: Configure developer environment on target systems
+  hosts: all
   gather_facts: no
   roles:
     - role: devconfig
diff --git a/playbooks/fstests.yml b/playbooks/fstests.yml
index de8cb251f29c11bd0f85a347534f7b00f2285ab7..191c807051b5c1192c7f21b7220f90762351597a 100644
--- a/playbooks/fstests.yml
+++ b/playbooks/fstests.yml
@@ -3,6 +3,7 @@
   roles:
     - role: fstests_prep_localhost
 
-- hosts: all
+- name: Configure and run the filesystem testing suite workflow
+  hosts: all
   roles:
     - role: fstests
diff --git a/playbooks/gitr.yml b/playbooks/gitr.yml
index 4c3e3ba919d767c897f79e30debd628737f89a82..c210cc32d423404146df7dd1164af2f9bedd2b8a 100644
--- a/playbooks/gitr.yml
+++ b/playbooks/gitr.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Git regresion filesystem test workflow
+  hosts: all
   roles:
     - role: gitr
diff --git a/playbooks/iscsi.yml b/playbooks/iscsi.yml
index cea400081c8dbc9558d88bebe649407f1b9b235e..fb1e7a272254771ac5a2b973783f811cb77dcae3 100644
--- a/playbooks/iscsi.yml
+++ b/playbooks/iscsi.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Provision and manage iSCSI targets and LUNs for shared block storage
+  hosts: all
   roles:
     - role: iscsi
diff --git a/playbooks/kdc.yml b/playbooks/kdc.yml
index 66709db81d531e373f2e51770f1bee70b091d6f5..cab5265e31378a540dfbfb9c7790b994548448f1 100644
--- a/playbooks/kdc.yml
+++ b/playbooks/kdc.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Setup MIT Kerberos V5 KDC with realm and admin settings
+  hosts: all
   roles:
     - role: kdc
diff --git a/playbooks/krb5.yml b/playbooks/krb5.yml
index 52ca3ef5aef4ab08bd05f1c3fc8d01c7a653af32..a79475f883371584e02c2bec7374fbe53c1f7689 100644
--- a/playbooks/krb5.yml
+++ b/playbooks/krb5.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Setup MIT Kerberos V5 KDC and configure NFS clients for Kerberos authentication
+  hosts: all
   roles:
     - role: krb5
diff --git a/playbooks/ktls.yml b/playbooks/ktls.yml
index 8b7044c7ef2d26819333de2e0bd2f4dd6b00f688..b07a1611e77f5e99a1215825fa20d347c1123b66 100644
--- a/playbooks/ktls.yml
+++ b/playbooks/ktls.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Provision self-signed TLS certs and enable tlshd for kernel TLS testing (ktls)
+  hosts: all
   roles:
     - role: ktls
diff --git a/playbooks/ltp.yml b/playbooks/ltp.yml
index 5921cefc76e4d4369e858709aeeb58878a101195..d1e8835403cc6d69c44b91b8be0e83f4e10f126f 100644
--- a/playbooks/ltp.yml
+++ b/playbooks/ltp.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run the Linux Test Project (LTP) suite workflow
+  hosts: all
   roles:
     - role: ltp
diff --git a/playbooks/nfsd.yml b/playbooks/nfsd.yml
index 6c7735867eec9c570875dc02192e9494d811d364..b129300958548debfd3431dfac3d83e9da706a43 100644
--- a/playbooks/nfsd.yml
+++ b/playbooks/nfsd.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Set up and start the NFS server with configurable exports
+  hosts: all
   roles:
     - role: nfsd
diff --git a/playbooks/nfstest.yml b/playbooks/nfstest.yml
index d414091aee7c24662a9e128d88da0b184697b9bf..5df62ff3f6e7fb0d8f14b06a7cfc5d81516f1bbb 100644
--- a/playbooks/nfstest.yml
+++ b/playbooks/nfstest.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run the nfstest workflow for NFS testing
+  hosts: all
   roles:
     - role: nfstest
diff --git a/playbooks/pkg.yml b/playbooks/pkg.yml
index f9d3e624551174e174d97e72776481b8a09d8505..d6718a15368482a374dd647d7f1b19009eaeb4e2 100644
--- a/playbooks/pkg.yml
+++ b/playbooks/pkg.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Package name wrapper
+  hosts: all
   roles:
     - role: pkg
diff --git a/playbooks/pynfs.yml b/playbooks/pynfs.yml
index ad5b3e2b07328d2a63efb8e28694d38c9570950f..1ce6cb7e7d238b435ceec3ab7e523105f76ac758 100644
--- a/playbooks/pynfs.yml
+++ b/playbooks/pynfs.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run pynfs testing workflow
+  hosts: all
   roles:
     - role: pynfs
diff --git a/playbooks/reboot-limit.yml b/playbooks/reboot-limit.yml
index 37936237b5024700bb5fdf6e48cbf86120cc9900..7cbaea065d2f6e85729c414b6d011fb4aad7f058 100644
--- a/playbooks/reboot-limit.yml
+++ b/playbooks/reboot-limit.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run the reboot-limit workflow
+  hosts: all
   roles:
     - role: reboot-limit
diff --git a/playbooks/rxe.yml b/playbooks/rxe.yml
index dc51c0347628df781e4846bc72614300894a0a95..a5d058fe2130eeb53b6e5294a201ac58aaeb6bc6 100644
--- a/playbooks/rxe.yml
+++ b/playbooks/rxe.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Set up software-emulated RoCE RDMA over Ethernet (rxe) via udev
+  hosts: all
   roles:
     - role: rxe
diff --git a/playbooks/selftests.yml b/playbooks/selftests.yml
index 6f7d7770816e2e34614fef4eee557fb615fafe14..89bc824c778fa4f78a45f207a805997d8a9326b4 100644
--- a/playbooks/selftests.yml
+++ b/playbooks/selftests.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run Linux kernel selftests (kselftests)
+  hosts: all
   roles:
     - role: selftests
diff --git a/playbooks/siw.yml b/playbooks/siw.yml
index 5258a5af9dca98873b0dbfb921169ea9de505f7c..e6b9d6167a6e178deb00b35d0b6a7c0f5b9130a5 100644
--- a/playbooks/siw.yml
+++ b/playbooks/siw.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Set up software-emulated iWARP RDMA over TCP/IP (siw) via udev
+  hosts: all
   roles:
     - role: siw
diff --git a/playbooks/smbd.yml b/playbooks/smbd.yml
index 47cd0223164aa7970d2d20e520fb0468d03bc655..ec5176a64cbfe79fcaf91d8d2924283beda3255c 100644
--- a/playbooks/smbd.yml
+++ b/playbooks/smbd.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Set up Samba server with shared volume and system integration
+  hosts: all
   roles:
     - role: smbd
diff --git a/playbooks/sysbench.yml b/playbooks/sysbench.yml
index 61026356edc78a004fd01cd2f63a546bc13bc0d3..37d782407e593d0594d2f8aabd2a7c5e0a884c15 100644
--- a/playbooks/sysbench.yml
+++ b/playbooks/sysbench.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: all
+- name: Configure and run the sysbench workflow
+  hosts: baseline:dev
   roles:
     - role: sysbench
diff --git a/playbooks/terraform.yml b/playbooks/terraform.yml
index 15872a6162a71e468a8a4f2816d933598e2fbc8a..9b5baede529876717eeda537d434c1cde8a93c02 100644
--- a/playbooks/terraform.yml
+++ b/playbooks/terraform.yml
@@ -1,5 +1,6 @@
 ---
 - name: Provision target nodes with terraform
+  hosts: all
   gather_facts: false
   hosts: all
   roles:
diff --git a/playbooks/update_etc_hosts.yml b/playbooks/update_etc_hosts.yml
index a0c217411400a00cf6fccf00bb47860081ed9256..269f23c1e041f91b643038f86d7edbbeadc93adf 100644
--- a/playbooks/update_etc_hosts.yml
+++ b/playbooks/update_etc_hosts.yml
@@ -1,5 +1,6 @@
 ---
-- hosts: all
+- name: Update target /etc/hosts with all targets and disable cloud-init
+  hosts: all
   gather_facts: no
   roles:
     - role: update_etc_hosts

-- 
2.50.0


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

* [PATCH v4 02/11] playbooks: fix playbook name for localhost plays
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 01/11] playbooks: fix playbook name for all hosts plays Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 03/11] Makefile: use long form of limit argument for clarity Daniel Gomez
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Fix name rule by naming all the playbooks that run in localhost.

https://ansible.readthedocs.io/projects/lint/rules/name/

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 playbooks/build_qemu.yml                     | 3 ++-
 playbooks/fstests.yml                        | 3 ++-
 playbooks/gen-pci-kconfig.yml                | 3 ++-
 playbooks/gen_hosts.yml                      | 3 ++-
 playbooks/gen_nodes.yml                      | 3 ++-
 playbooks/gen_tfvars.yml                     | 3 ++-
 playbooks/hypervisor-tuning.yml              | 3 ++-
 playbooks/install-menuconfig-deps.yml        | 3 ++-
 playbooks/install_systemd_journal_remote.yml | 3 ++-
 playbooks/install_systemd_timesyncd.yml      | 3 ++-
 playbooks/install_terraform.yml              | 3 ++-
 playbooks/install_vagrant_boxes.yml          | 3 ++-
 playbooks/kdevops_archive.yml                | 3 ++-
 playbooks/libvirt_pcie_passthrough.yml       | 3 ++-
 playbooks/libvirt_storage_pool_create.yml    | 3 ++-
 playbooks/libvirt_user.yml                   | 3 ++-
 playbooks/linux-mirror.yml                   | 3 ++-
 playbooks/postfix_relay_host.yml             | 3 ++-
 playbooks/update_ssh_config_guestfs.yml      | 3 ++-
 playbooks/update_ssh_config_vagrant.yml      | 3 ++-
 20 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/playbooks/build_qemu.yml b/playbooks/build_qemu.yml
index d094c258246588b88643901bf8f11e29129655e4..861647e052d153ac42ac3b9f4f174c60965f7326 100644
--- a/playbooks/build_qemu.yml
+++ b/playbooks/build_qemu.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Build and install QEMU
+  hosts: localhost
   roles:
     - role: build_qemu
diff --git a/playbooks/fstests.yml b/playbooks/fstests.yml
index 191c807051b5c1192c7f21b7220f90762351597a..35a2122eae6cbab31585160f0421b26e2bda35be 100644
--- a/playbooks/fstests.yml
+++ b/playbooks/fstests.yml
@@ -1,5 +1,6 @@
 ---
-- hosts: localhost
+- name: Enable fstests JUnit XML result processing
+  hosts: localhost
   roles:
     - role: fstests_prep_localhost
 
diff --git a/playbooks/gen-pci-kconfig.yml b/playbooks/gen-pci-kconfig.yml
index a20aba761a8c91f40e42cdf719b4d1635931ca58..7a4ce89e5f37ba961551bfe78c3a58f15c7f381c 100644
--- a/playbooks/gen-pci-kconfig.yml
+++ b/playbooks/gen-pci-kconfig.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Generate dynamic PCI-E passthrough Kconfig files for libvirt guests
+  hosts: localhost
   roles:
     - role: gen_pci_kconfig
diff --git a/playbooks/gen_hosts.yml b/playbooks/gen_hosts.yml
index 942b4f2ac52c91d4c1a0272c9bd2c29f4d65345b..02adb3ce2eb1c65bbe8259bfee61aa907a659eff 100644
--- a/playbooks/gen_hosts.yml
+++ b/playbooks/gen_hosts.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Generate Ansible inentory for guests (hosts)
+  hosts: localhost
   roles:
     - role: gen_hosts
diff --git a/playbooks/gen_nodes.yml b/playbooks/gen_nodes.yml
index c298b344647cf3d416b49957aeee75fc0c834da8..39a259f9a81525a7b8f8bb2962dd6989c5dfeb10 100644
--- a/playbooks/gen_nodes.yml
+++ b/playbooks/gen_nodes.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Generate guests node configuration (libvirt domain XML)
+  hosts: localhost
   roles:
     - role: gen_nodes
diff --git a/playbooks/gen_tfvars.yml b/playbooks/gen_tfvars.yml
index 5ff85af6ab82d260c5bacbb7d334c6838e9b5ab2..9d75c86810b04c74de9db62517f1dc0783a52d21 100644
--- a/playbooks/gen_tfvars.yml
+++ b/playbooks/gen_tfvars.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Generate Terraform variables file (terraform/terraform.tfvars)
+  hosts: localhost
   roles:
     - role: gen_tfvars
diff --git a/playbooks/hypervisor-tuning.yml b/playbooks/hypervisor-tuning.yml
index 29f735d8f8fcf21fd87aeaaaab541721d5a9f1da..c295b87ac345a40aec98e8b927e41ef261d2b7bb 100644
--- a/playbooks/hypervisor-tuning.yml
+++ b/playbooks/hypervisor-tuning.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Apply hypervisor tuning settings (KSM and Zswap)
+  hosts: localhost
   roles:
     - role: hypervisor-tuning
diff --git a/playbooks/install-menuconfig-deps.yml b/playbooks/install-menuconfig-deps.yml
index 845b287073842feed7bb051ae16a627fcc9f4fdc..be1c64330055c68ccfef302ff42f7208773ef4a0 100644
--- a/playbooks/install-menuconfig-deps.yml
+++ b/playbooks/install-menuconfig-deps.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Install dependencies for Kconfig menuconfig
+  hosts: localhost
   roles:
     - role: install-menuconfig-deps
diff --git a/playbooks/install_systemd_journal_remote.yml b/playbooks/install_systemd_journal_remote.yml
index 46014d285b0b309dc4c8eb527fede3abefd453ee..5cc087066f7b7d889d819e8eeb51e2b61f9664e6 100644
--- a/playbooks/install_systemd_journal_remote.yml
+++ b/playbooks/install_systemd_journal_remote.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Install and configure systemd-journal-remote for remote journal collection
+  hosts: localhost
   roles:
     - role: install_systemd_journal_remote
diff --git a/playbooks/install_systemd_timesyncd.yml b/playbooks/install_systemd_timesyncd.yml
index ed1a31e64790d6b9bd4d95e591e71fb0505a739f..759064517b406c381f9b2be8791374feaaa4887b 100644
--- a/playbooks/install_systemd_timesyncd.yml
+++ b/playbooks/install_systemd_timesyncd.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Install and configure systemd-timesyncd for NTP time sync
+  hosts: localhost
   roles:
     - role: install_systemd_timesyncd
diff --git a/playbooks/install_terraform.yml b/playbooks/install_terraform.yml
index 1426378eee25cc12c75f8f6faeaedbb94228ad69..5a5fa724a212293657126363f344496ecd26f246 100644
--- a/playbooks/install_terraform.yml
+++ b/playbooks/install_terraform.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Install Terraform
+  hosts: localhost
   roles:
     - role: install_terraform
diff --git a/playbooks/install_vagrant_boxes.yml b/playbooks/install_vagrant_boxes.yml
index 8cffb36a981e302b4b924e94fbd0b7a8850d4e6f..01c0728864a1dadcac35a637d5e246dd76376dde 100644
--- a/playbooks/install_vagrant_boxes.yml
+++ b/playbooks/install_vagrant_boxes.yml
@@ -1,5 +1,6 @@
 ---
-- hosts: localhost
+- name: install_vagrant_boxes
+  hosts: localhost
   tasks:
     - include_role:
         name: install_vagrant_boxes
diff --git a/playbooks/kdevops_archive.yml b/playbooks/kdevops_archive.yml
index a61f794ae12bf90e204eb7fdc2d59045d57a1d59..cbf8dea6f070a50c762926f46368a96951f57c90 100644
--- a/playbooks/kdevops_archive.yml
+++ b/playbooks/kdevops_archive.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Archive and push kdevops CI test results
+  hosts: localhost
   roles:
     - role: kdevops_archive
diff --git a/playbooks/libvirt_pcie_passthrough.yml b/playbooks/libvirt_pcie_passthrough.yml
index 39d5c8ee38fc60bdf397c0fae82ba497815e139e..f128bdd7ad8f9574fef42e6c4659cea08666924a 100644
--- a/playbooks/libvirt_pcie_passthrough.yml
+++ b/playbooks/libvirt_pcie_passthrough.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Configure PCIe passthrough for libvirt VMs
+  hosts: localhost
   roles:
     - role: libvirt_pcie_passthrough
diff --git a/playbooks/libvirt_storage_pool_create.yml b/playbooks/libvirt_storage_pool_create.yml
index f127f5e4311f499c6b80251406fcf180854e4406..8f0d7b04f563e16d0da7fe9cba4afe444cf69142 100644
--- a/playbooks/libvirt_storage_pool_create.yml
+++ b/playbooks/libvirt_storage_pool_create.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Create and configure a Libvirt storage pool
+  hosts: localhost
   roles:
     - role: libvirt_storage_pool_create
diff --git a/playbooks/libvirt_user.yml b/playbooks/libvirt_user.yml
index 6e3889ca65cfd4a50edbf2c1f8b747dd554bc1e4..7923b05ef680b5a44ee3be2426bcd61a9262107c 100644
--- a/playbooks/libvirt_user.yml
+++ b/playbooks/libvirt_user.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Allow user to run libvirt guests
+  hosts: localhost
   roles:
     - role: libvirt_user
diff --git a/playbooks/linux-mirror.yml b/playbooks/linux-mirror.yml
index 0808ebc1df80e197807703b547ae41f66192d0f1..2af0f89d62de271b94c26bd2a219776ccc24aa46 100644
--- a/playbooks/linux-mirror.yml
+++ b/playbooks/linux-mirror.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Install Git mirrors using systemd.timer
+  hosts: localhost
   roles:
     - role: linux-mirror
diff --git a/playbooks/postfix_relay_host.yml b/playbooks/postfix_relay_host.yml
index b04079bcc3190b30a79a7898b64171d25c2889c3..c7b3427712657925c8ea30ef27df347dca2e30b0 100644
--- a/playbooks/postfix_relay_host.yml
+++ b/playbooks/postfix_relay_host.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Configure and enable Postfix with a custom relay host
+  hosts: localhost
   roles:
     - role: postfix_relay_host
diff --git a/playbooks/update_ssh_config_guestfs.yml b/playbooks/update_ssh_config_guestfs.yml
index 346b90245637ee7ca1297cfd9c0838c1d9a5ef25..56faed243a7710e02c149874d227666a802c2d14 100644
--- a/playbooks/update_ssh_config_guestfs.yml
+++ b/playbooks/update_ssh_config_guestfs.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: Update OpenSSH client configuration file (libguestfs)
+  hosts: localhost
   roles:
     - role: update_ssh_config_guestfs
diff --git a/playbooks/update_ssh_config_vagrant.yml b/playbooks/update_ssh_config_vagrant.yml
index c8d0e9962d46bb504c89611c8c5c753a72a61775..7a2162e96c1d90014bb86129f27e303690ffc31f 100644
--- a/playbooks/update_ssh_config_vagrant.yml
+++ b/playbooks/update_ssh_config_vagrant.yml
@@ -1,4 +1,5 @@
 ---
-- hosts: localhost
+- name: update_ssh_config_vagrant
+  hosts: localhost
   roles:
     - role: update_ssh_config_vagrant

-- 
2.50.0


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

* [PATCH v4 03/11] Makefile: use long form of limit argument for clarity
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 01/11] playbooks: fix playbook name for all hosts plays Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 02/11] playbooks: fix playbook name for localhost plays Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 04/11] Makefile: print target when debug Daniel Gomez
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Replace the short -l argument option with the more explicit --limit in
the Makefile for ansible-playbook runs. This improves readability and
makes the purpose of the flag clearer.

Remove the quotes when using the long form to properly expand
LIMIT_HOSTS with the long form.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index c6a5c321f8df29e8741056ec591a6c4ddadef158..baa4a5c5d8ae6fb1916d11938f9897e53537d263 100644
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,7 @@ include scripts/ansible.Makefile
 
 LIMIT_HOSTS :=
 ifneq (,$(HOSTS))
-LIMIT_HOSTS := '-l $(subst ${space},$(comma),$(HOSTS))'
+LIMIT_HOSTS := --limit $(subst ${space},$(comma),$(HOSTS))
 endif
 
 export LIMIT_TESTS :=

-- 
2.50.0


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

* [PATCH v4 04/11] Makefile: print target when debug
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (2 preceding siblings ...)
  2025-07-02 19:35 ` [PATCH v4 03/11] Makefile: use long form of limit argument for clarity Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 05/11] .github/workflows/fstests.yml: enable make verbosity Daniel Gomez
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

When debugging with V=1, print also the Makefile target before the
command.

This allows to specify the target as well as keep verbosity of the
command being executed. The only limitation is that commands are printed
in one line.

Example:
make V=1
==> [ansible.cfg]
+ ansible-playbook playbooks/ansible_cfg.yml --extra-vars=@./.extra_vars_auto.yaml
[WARNING]: You are running the development version of Ansible. You
should only run Ansible from "devel" if you are modifying the Ansible
engine, or trying out features under development. This is a rapidly
changing source of code and can become unstable at any point.
PLAY 1: ANSIBLE CONFIGURATION ROLE
task 1. [started TASK: Gathering Facts on localhost]
task 2. [started TASK: ansible_cfg : Import optional extra_args file on localhost]
task 3. [started TASK: ansible_cfg : Generate kdevops ansible.cfg on localhost]

==> [inventory]
+ ansible-playbook playbooks/gen_hosts.yml --extra-vars=@./extra_vars.yaml
{...}

Before:
make V=1
[WARNING]: You are running the development version of Ansible. You
should only run Ansible from "devel" if you are modifying the Ansible
engine, or trying out features under development. This is a rapidly
changing source of code and can become unstable at any point.
PLAY 1: ANSIBLE CONFIGURATION ROLE
task 1. [started TASK: Gathering Facts on localhost]
task 2. [started TASK: ansible_cfg : Import optional extra_args file on localhost]
task 3. [started TASK: ansible_cfg : Generate kdevops ansible.cfg on localhost]

ansible-playbook  \
        playbooks/gen_hosts.yml \
        --extra-vars=@./extra_vars.yaml
[WARNING]: You are running the development version of Ansible. You
should only run Ansible from "devel" if you are modifying the Ansible
engine, or trying out features under development. This is a rapidly
changing source of code and can become unstable at any point.
PLAY 1: GEN_HOSTS
task 1. [started TASK: Gathering Facts on localhost]
{...}

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 Makefile | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index baa4a5c5d8ae6fb1916d11938f9897e53537d263..53694288ff9d6fa15946df80313dacb91fd5fba3 100644
--- a/Makefile
+++ b/Makefile
@@ -38,8 +38,12 @@ KDEVOPS_DEPCHECK = .kdevops.depcheck
 
 PHONY += kconfig-help-menu
 
+define print_target
+	echo "==> [$1]"
+endef
+
 ifeq ($(V),1)
-export Q=
+export Q=@$(call print_target,$@) && set -x &&
 export NQ=true
 else
 export Q=@

-- 
2.50.0


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

* [PATCH v4 05/11] .github/workflows/fstests.yml: enable make verbosity
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (3 preceding siblings ...)
  2025-07-02 19:35 ` [PATCH v4 04/11] Makefile: print target when debug Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 06/11] ansible_cfg: add inventory support Daniel Gomez
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

This prints the commands as well as the Makefile target being run.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 .github/workflows/fstests.yml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/fstests.yml b/.github/workflows/fstests.yml
index 5988a8693383b509097dba69f3fedd7aefcfd274..e13978c722ea1cb8fce744b832b963baf520399e 100644
--- a/.github/workflows/fstests.yml
+++ b/.github/workflows/fstests.yml
@@ -45,23 +45,23 @@ jobs:
 
       - name: Run kdevops make
         run: |
-          make -j$(nproc)
+          make V=1 -j$(nproc)
 
       - name: Run kdevops make bringup
         run: |
-          make bringup
+          make V=1 bringup
 
       - name: Build linux and boot test nodes on test kernel
         run: |
-          make linux
+          make V=1 linux
 
       - name: Build fstests
         run: |
-          make fstests
+          make V=1 fstests
 
       - name: Run just one fstest to verify we tests and test collection works
         run: |
-          make fstests-baseline TESTS=generic/003
+          make V=1 fstests-baseline TESTS=generic/003
           echo "ok" > ci.result
           find workflows/fstests/results/last-run -name xunit_results.txt -type f -exec cat {} \; > ci.commit_extra || true
           if ! grep -E "failures, [1-9]|errors, [1-9]" ci.commit_extra; then
@@ -71,7 +71,7 @@ jobs:
       - name: Get systemd journal files
         if: always() # This ensures the step runs even if previous steps failed
         run: |
-          make journal-dump
+          make V=1 journal-dump
 
       - name: Start SSH Agent
         if: always()  # Ensure this step runs even if previous steps failed
@@ -82,7 +82,7 @@ jobs:
       - name: Build our kdevops archive results
         if: always() # This ensures the step runs even if previous steps failed
         run: |
-          make ci-archive
+          make V=1 ci-archive
 
       - name: Upload our kdevops results archive
         if: always() # This ensures the step runs even if previous steps failed
@@ -95,4 +95,4 @@ jobs:
       - name: Run kdevops make destroy
         if: always()  # This ensures the step runs even if previous steps failed
         run: |
-          make destroy
+          make V=1 destroy

-- 
2.50.0


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

* [PATCH v4 06/11] ansible_cfg: add inventory support
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (4 preceding siblings ...)
  2025-07-02 19:35 ` [PATCH v4 05/11] .github/workflows/fstests.yml: enable make verbosity Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:35 ` [PATCH v4 07/11] gen_hosts: templates: include localhost in the all group Daniel Gomez
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Allow to configure the inventory file (currently via KDEVOPS_HOSTFILE
and KDEVOPS_HOSTS) via ansible.cfg.

The Ansible inventory file [1][2][3] is used in all kdevops/Makefile
ansible-playbook calls. Enable this configuration to the global Ansible
configuration file (ansible.cfg) and allow to define the inventory via
Kconfig. This will simplify the playbook invocation.

[1]
https://docs.ansible.com/ansible/latest/reference_appendices/
config.html#default-host-list

[2]
https://docs.ansible.com/ansible/latest/cli/
ansible-inventory.html#cmdoption-ansible-inventory-i

[3]
https://docs.ansible.com/ansible/latest/reference_appendices/
config.html#envvar-ANSIBLE_INVENTORY

This has no effect yet, as all ansible-playbook calls currently specify
the --inventory (-i) argument. The next commits will clean up the code
and allow the inventory defined in ansible.cfg to take effect.

Keep the ANSIBLE_CFG_ prefix to refer to the kdevops Ansible
configuration module. This isn't part of the Ansible config file, but
rather of the kdevops module that configures Ansible.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 kconfigs/Kconfig.ansible_cfg                         | 18 ++++++++++++++++++
 kconfigs/Kconfig.ansible_provisioning                |  8 +-------
 playbooks/roles/ansible_cfg/templates/ansible.cfg.j2 |  1 +
 scripts/lib.sh                                       |  2 +-
 4 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg
index b587596bc8d5f1215fa8c006f32d941bea5288cc..d78ea7507632ae86481633e83a845e81e6f7ad92 100644
--- a/kconfigs/Kconfig.ansible_cfg
+++ b/kconfigs/Kconfig.ansible_cfg
@@ -207,6 +207,24 @@ config ANSIBLE_CFG_FORKS
 
 endif # !ANSIBLE_CFG_FORKS_CUSTOM
 
+config ANSIBLE_CFG_INVENTORY
+	string "Ansible inventory sources"
+	output yaml
+	default "$(TOPDIR_PATH)/hosts"
+	help
+	  Comma-separated list of Ansible inventory source paths.
+
+	  This is mapped to the [defaults] section of the Ansible configuration
+	  file (ansible.cfg):
+	    inventory = <value>
+
+	  Each entry can be a path to an inventory file or directory,
+	  such as:
+	    /path/to/hosts,/path/to/inventory_dir
+
+	  For more details, refer to the Ansible documentation:
+	  https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list
+
 if DISTRO_OPENSUSE
 
 config ANSIBLE_CFG_RECONNECTION_RETRIES
diff --git a/kconfigs/Kconfig.ansible_provisioning b/kconfigs/Kconfig.ansible_provisioning
index 63f04306e7b26f228defa9e50630f5ed07eaac37..194b0b3c210bad1c1d6fd7c0152a2e487e928afb 100644
--- a/kconfigs/Kconfig.ansible_provisioning
+++ b/kconfigs/Kconfig.ansible_provisioning
@@ -13,7 +13,7 @@ config KDEVOPS_ANSIBLE_PROVISION_ENABLE
 	help
 	  If enabled we will provision the target hosts with ansible as a last
 	  last step after bringup. This playbook used to provision is
-	  configurable refer to CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE.
+	  configurable refer to CONFIG_ANSIBLE_CFG_INVENTORY.
 
 if KDEVOPS_ANSIBLE_PROVISION_ENABLE
 
@@ -98,12 +98,6 @@ config KDEVOPS_DEVCONFIG_SYSTEMD_WATCHDOG_TIMEOUT_KEXEC
 
 endif # KDEVOPS_DEVCONFIG_ENABLE_SYSTEMD_WATCHDOG
 
-config KDEVOPS_ANSIBLE_INVENTORY_FILE
-	string "The ansible inventory file to use"
-	default $(shell, scripts/append-makefile-vars.sh $(KDEVOPS_HOSTFILE))
-	help
-	  The file to use for the ansible inventory.
-
 config HAVE_DISTRO_PREFERS_ANSIBLE_PYTHON2
 	bool
 	default n
diff --git a/playbooks/roles/ansible_cfg/templates/ansible.cfg.j2 b/playbooks/roles/ansible_cfg/templates/ansible.cfg.j2
index 2bc916321f424ab93447af40eccef30911d27bb6..fddbab6d3a4dc03524a819b5b695336445ecb732 100644
--- a/playbooks/roles/ansible_cfg/templates/ansible.cfg.j2
+++ b/playbooks/roles/ansible_cfg/templates/ansible.cfg.j2
@@ -10,6 +10,7 @@ show_per_host_start = {{ ansible_cfg_callback_plugin_show_per_host_start }}
 show_task_path_on_failure = {{ ansible_cfg_callback_plugin_show_task_path_on_failure }}
 interpreter_python = {{ ansible_cfg_interpreter_python_string }}
 forks = {{ ansible_cfg_forks }}
+inventory = {{ ansible_cfg_inventory }}
 {% if ansible_facts['distribution'] == 'openSUSE' %}
 [connection]
 retries = {{ ansible_cfg_reconnection_retries }}
diff --git a/scripts/lib.sh b/scripts/lib.sh
index 936e3ce94d71e831eb551551f5c19fe5cffc5e11..0419fd3b38531745f27a90864cc464977a721bb3 100644
--- a/scripts/lib.sh
+++ b/scripts/lib.sh
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 
 PLAYBOOKDIR=$CONFIG_KDEVOPS_PLAYBOOK_DIR
-INVENTORY=$CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE
+INVENTORY=$CONFIG_ANSIBLE_CFG_INVENTORY
 export KDEVOPSHOSTSPREFIX=$CONFIG_KDEVOPS_HOSTS_PREFIX
 
 MANUAL_KILL_NOTICE_FILE="${TOPDIR}/.running_kill_pids.sh"

-- 
2.50.0


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

* [PATCH v4 07/11] gen_hosts: templates: include localhost in the all group
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (5 preceding siblings ...)
  2025-07-02 19:35 ` [PATCH v4 06/11] ansible_cfg: add inventory support Daniel Gomez
@ 2025-07-02 19:35 ` Daniel Gomez
  2025-07-02 19:36 ` [PATCH v4 08/11] Makefile: use inventory from ansible.cfg Daniel Gomez
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:35 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

This change redefines the Ansible inventory 'all' pattern to include the
controller host (localhost), which was previously excluded.

Until now, the generated inventory (typically at $TOPDIR_PATH/hosts)
only listed the target nodes, omitting the controller. As a result,
playbooks that needed to operate on the controller node had to
explicitly define localhost as a target with a specific connection.

By including localhost in the inventory, we simplify Ansible usage (in
the following commits) by removing the need to pass localhost-specific
overrides on the command line. Kdevops can now let Ansible consistently
operate on all relevant nodes defined in the inventory.

Playbooks are also updated to limit the hosts pattern to baseline and
dev groups instead of using all, ensuring that tasks are correctly
scoped as expected by kdevops.

Finally, update ueh_hosts in the update_etc_hosts role to include only
the hosts targeted in the current play, rather than all hosts in the
inventory. This avoids the error below when the inventory includes
localhost in the all group:

"The task includes an option with an undefined variable. The error
was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute
'ansible_all_ipv4_addresses'. 'ansible.vars.hostvars.HostVarsVars
object' has no attribute 'ansible_all_ipv4_addresses'"

[1]
https://docs.ansible.com/ansible/latest/inventory_guide/
intro_patterns.html#common-patterns

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 playbooks/blktests.yml                           | 2 +-
 playbooks/common.yml                             | 2 +-
 playbooks/create_data_partition.yml              | 2 +-
 playbooks/cxl.yml                                | 2 +-
 playbooks/devconfig.yml                          | 2 +-
 playbooks/fstests.yml                            | 2 +-
 playbooks/gitr.yml                               | 2 +-
 playbooks/iscsi.yml                              | 2 +-
 playbooks/kdc.yml                                | 2 +-
 playbooks/krb5.yml                               | 2 +-
 playbooks/ktls.yml                               | 2 +-
 playbooks/ltp.yml                                | 2 +-
 playbooks/nfsd.yml                               | 2 +-
 playbooks/nfstest.yml                            | 3 ++-
 playbooks/pkg.yml                                | 2 +-
 playbooks/pynfs.yml                              | 2 +-
 playbooks/reboot-limit.yml                       | 2 +-
 playbooks/roles/common/README.md                 | 2 +-
 playbooks/roles/devconfig/README.md              | 2 +-
 playbooks/roles/gen_hosts/templates/blktests.j2  | 1 +
 playbooks/roles/gen_hosts/templates/cxl.j2       | 1 +
 playbooks/roles/gen_hosts/templates/fstests.j2   | 1 +
 playbooks/roles/gen_hosts/templates/gitr.j2      | 1 +
 playbooks/roles/gen_hosts/templates/hosts.j2     | 2 ++
 playbooks/roles/gen_hosts/templates/ltp.j2       | 1 +
 playbooks/roles/gen_hosts/templates/nfstest.j2   | 1 +
 playbooks/roles/gen_hosts/templates/pynfs.j2     | 1 +
 playbooks/roles/gen_hosts/templates/selftests.j2 | 1 +
 playbooks/roles/gen_hosts/templates/sysbench.j2  | 1 +
 playbooks/roles/pkg/README.md                    | 2 +-
 playbooks/roles/update_etc_hosts/tasks/main.yml  | 2 +-
 playbooks/rxe.yml                                | 2 +-
 playbooks/selftests.yml                          | 2 +-
 playbooks/siw.yml                                | 2 +-
 playbooks/smbd.yml                               | 2 +-
 playbooks/terraform.yml                          | 5 ++---
 playbooks/update_etc_hosts.yml                   | 2 +-
 scripts/devconfig.Makefile                       | 4 ++--
 scripts/guestfs.Makefile                         | 2 +-
 workflows/linux/Makefile                         | 2 +-
 40 files changed, 44 insertions(+), 33 deletions(-)

diff --git a/playbooks/blktests.yml b/playbooks/blktests.yml
index db58d43ac73e6b8f8a22703357db9b2ad9106097..9285e8e955b92df4d41374bbd05793d6a2c63d05 100644
--- a/playbooks/blktests.yml
+++ b/playbooks/blktests.yml
@@ -1,5 +1,5 @@
 ---
 - name: Configure and run the block layer testing workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: blktests
diff --git a/playbooks/common.yml b/playbooks/common.yml
index d49e7d0ba9f703c680adc2d024901902edb0bca0..45b106d28ebc502fed7ebc472f53fc06ef75b1a0 100644
--- a/playbooks/common.yml
+++ b/playbooks/common.yml
@@ -1,5 +1,5 @@
 ---
 - name: Common tasks
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: common
diff --git a/playbooks/create_data_partition.yml b/playbooks/create_data_partition.yml
index fa925679a3595e5fecc33a9968ab5c42b12f5446..b180cf4b0ac99f37b5a9cc6377d685d397fccae2 100644
--- a/playbooks/create_data_partition.yml
+++ b/playbooks/create_data_partition.yml
@@ -1,5 +1,5 @@
 ---
 - name: Create Directory Data Path (e.g. /data partition)
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: create_data_partition
diff --git a/playbooks/cxl.yml b/playbooks/cxl.yml
index 65277d435a6fe13661febfea78181bf3a13e4dfc..8880ee711c2084478b94040baa012d63673755e3 100644
--- a/playbooks/cxl.yml
+++ b/playbooks/cxl.yml
@@ -1,5 +1,5 @@
 ---
 - name: cxl
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: cxl
diff --git a/playbooks/devconfig.yml b/playbooks/devconfig.yml
index b4a7393e6c57abfc243cf658b805550f824b8142..b0b9d4208c1115919ad154b8be7d8e225bbb1ce6 100644
--- a/playbooks/devconfig.yml
+++ b/playbooks/devconfig.yml
@@ -1,6 +1,6 @@
 ---
 - name: Configure developer environment on target systems
-  hosts: all
+  hosts: baseline:dev
   gather_facts: no
   roles:
     - role: devconfig
diff --git a/playbooks/fstests.yml b/playbooks/fstests.yml
index 35a2122eae6cbab31585160f0421b26e2bda35be..193ecdc0f4af2a285acbf34b308e64985fe43e52 100644
--- a/playbooks/fstests.yml
+++ b/playbooks/fstests.yml
@@ -5,6 +5,6 @@
     - role: fstests_prep_localhost
 
 - name: Configure and run the filesystem testing suite workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: fstests
diff --git a/playbooks/gitr.yml b/playbooks/gitr.yml
index c210cc32d423404146df7dd1164af2f9bedd2b8a..a7464e5d77cc9d487d8c4d005062724f04f0aa26 100644
--- a/playbooks/gitr.yml
+++ b/playbooks/gitr.yml
@@ -1,5 +1,5 @@
 ---
 - name: Git regresion filesystem test workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: gitr
diff --git a/playbooks/iscsi.yml b/playbooks/iscsi.yml
index fb1e7a272254771ac5a2b973783f811cb77dcae3..6d68f416d5fd0aff2384b47aa8a1dd43882bf24a 100644
--- a/playbooks/iscsi.yml
+++ b/playbooks/iscsi.yml
@@ -1,5 +1,5 @@
 ---
 - name: Provision and manage iSCSI targets and LUNs for shared block storage
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: iscsi
diff --git a/playbooks/kdc.yml b/playbooks/kdc.yml
index cab5265e31378a540dfbfb9c7790b994548448f1..69349456326055142ba8e33e8c3c29d70451cb14 100644
--- a/playbooks/kdc.yml
+++ b/playbooks/kdc.yml
@@ -1,5 +1,5 @@
 ---
 - name: Setup MIT Kerberos V5 KDC with realm and admin settings
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: kdc
diff --git a/playbooks/krb5.yml b/playbooks/krb5.yml
index a79475f883371584e02c2bec7374fbe53c1f7689..0bed7bdd66c5689130317882874f0da4eca0fc53 100644
--- a/playbooks/krb5.yml
+++ b/playbooks/krb5.yml
@@ -1,5 +1,5 @@
 ---
 - name: Setup MIT Kerberos V5 KDC and configure NFS clients for Kerberos authentication
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: krb5
diff --git a/playbooks/ktls.yml b/playbooks/ktls.yml
index b07a1611e77f5e99a1215825fa20d347c1123b66..8c3d42bd7d4964ea50a8566a6be8d04005f6ff80 100644
--- a/playbooks/ktls.yml
+++ b/playbooks/ktls.yml
@@ -1,5 +1,5 @@
 ---
 - name: Provision self-signed TLS certs and enable tlshd for kernel TLS testing (ktls)
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: ktls
diff --git a/playbooks/ltp.yml b/playbooks/ltp.yml
index d1e8835403cc6d69c44b91b8be0e83f4e10f126f..7c00488d3cfd54c683a04a95090fa755c5d8b9d1 100644
--- a/playbooks/ltp.yml
+++ b/playbooks/ltp.yml
@@ -1,5 +1,5 @@
 ---
 - name: Configure and run the Linux Test Project (LTP) suite workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: ltp
diff --git a/playbooks/nfsd.yml b/playbooks/nfsd.yml
index b129300958548debfd3431dfac3d83e9da706a43..0fe04bf987fd2663e30707abb81cb445a9101c3a 100644
--- a/playbooks/nfsd.yml
+++ b/playbooks/nfsd.yml
@@ -1,5 +1,5 @@
 ---
 - name: Set up and start the NFS server with configurable exports
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: nfsd
diff --git a/playbooks/nfstest.yml b/playbooks/nfstest.yml
index 5df62ff3f6e7fb0d8f14b06a7cfc5d81516f1bbb..380548145dbb1ddc9add0c1bf08a83ff08512a3f 100644
--- a/playbooks/nfstest.yml
+++ b/playbooks/nfstest.yml
@@ -1,5 +1,6 @@
 ---
 - name: Configure and run the nfstest workflow for NFS testing
-  hosts: all
+- name: nfstest
+  hosts: baseline:dev
   roles:
     - role: nfstest
diff --git a/playbooks/pkg.yml b/playbooks/pkg.yml
index d6718a15368482a374dd647d7f1b19009eaeb4e2..4d8aa5f9c3ff32bb64e597ae9d1c3e29f455e196 100644
--- a/playbooks/pkg.yml
+++ b/playbooks/pkg.yml
@@ -1,5 +1,5 @@
 ---
 - name: Package name wrapper
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: pkg
diff --git a/playbooks/pynfs.yml b/playbooks/pynfs.yml
index 1ce6cb7e7d238b435ceec3ab7e523105f76ac758..421ee778c0206315b3cebd0d94f02ab44028dd4d 100644
--- a/playbooks/pynfs.yml
+++ b/playbooks/pynfs.yml
@@ -1,5 +1,5 @@
 ---
 - name: Configure and run pynfs testing workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: pynfs
diff --git a/playbooks/reboot-limit.yml b/playbooks/reboot-limit.yml
index 7cbaea065d2f6e85729c414b6d011fb4aad7f058..96b8cb4c7a274f644c9e6d0aa60873d0c35501f9 100644
--- a/playbooks/reboot-limit.yml
+++ b/playbooks/reboot-limit.yml
@@ -1,5 +1,5 @@
 ---
 - name: Configure and run the reboot-limit workflow
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: reboot-limit
diff --git a/playbooks/roles/common/README.md b/playbooks/roles/common/README.md
index 2b0084c6bf42ae2382cfcaa3c4507f95bd48f06d..c5b0bbd2bcfc65d483236cc84f9ef3b11b3ac0b4 100644
--- a/playbooks/roles/common/README.md
+++ b/playbooks/roles/common/README.md
@@ -27,7 +27,7 @@ Below is an example playbook task:
 
 ```
 ---
-- hosts: all
+- hosts: baseline:dev
   roles:
     - role: common
 ```
diff --git a/playbooks/roles/devconfig/README.md b/playbooks/roles/devconfig/README.md
index fa355394537123cc2b0453070d79d2a773c91c55..10e4b213d00ae92818b27bbe417d3852f957cdfd 100644
--- a/playbooks/roles/devconfig/README.md
+++ b/playbooks/roles/devconfig/README.md
@@ -58,7 +58,7 @@ Below is an example playbook task:
 
 ```
 ---
-- hosts: all
+- hosts: baseline:dev
   roles:
     - role: devconfig
 ```
diff --git a/playbooks/roles/gen_hosts/templates/blktests.j2 b/playbooks/roles/gen_hosts/templates/blktests.j2
index 1c2f8f774b7c67f6410017c764042fa89c0a2c7f..5bf50acbddac3d6f8685cb530f37cd602a97fba8 100644
--- a/playbooks/roles/gen_hosts/templates/blktests.j2
+++ b/playbooks/roles/gen_hosts/templates/blktests.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for test_type in blktests_enabled_test_types %}
 {{ kdevops_host_prefix }}-{{ test_type }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/cxl.j2 b/playbooks/roles/gen_hosts/templates/cxl.j2
index 1b3034e05d58e1093e3ce4e3fda2336edc0d2653..64bec4561b6c4ef92df4d561b16cc1f69c20e7b2 100644
--- a/playbooks/roles/gen_hosts/templates/cxl.j2
+++ b/playbooks/roles/gen_hosts/templates/cxl.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {{ kdevops_hosts_prefix }}
 {% if kdevops_baseline_and_dev == True %}
 {{ kdevops_hosts_prefix }}-dev
diff --git a/playbooks/roles/gen_hosts/templates/fstests.j2 b/playbooks/roles/gen_hosts/templates/fstests.j2
index abcdafd56686cf2a7b6d3e7f8405ba14041650d9..f5a383ebf383b37335ac120c607b6eb330a2267e 100644
--- a/playbooks/roles/gen_hosts/templates/fstests.j2
+++ b/playbooks/roles/gen_hosts/templates/fstests.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for s in fstests_enabled_test_types %}
 {{ kdevops_host_prefix }}-{{ s }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/gitr.j2 b/playbooks/roles/gen_hosts/templates/gitr.j2
index b8f393d63f96612a8ce28fd78d0e589adbbd722e..f4190cd0ecb3ba1dcf5385e4bfc7b529440ea81f 100644
--- a/playbooks/roles/gen_hosts/templates/gitr.j2
+++ b/playbooks/roles/gen_hosts/templates/gitr.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for s in gitr_enabled_hosts %}
 {{ kdevops_host_prefix }}-{{ s }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/hosts.j2 b/playbooks/roles/gen_hosts/templates/hosts.j2
index 5032f592e466e4705979ad0c4eb23e0bb3a7f950..d5f99a69cee87c651315d43e2da4c4f205bf5b12 100644
--- a/playbooks/roles/gen_hosts/templates/hosts.j2
+++ b/playbooks/roles/gen_hosts/templates/hosts.j2
@@ -7,9 +7,11 @@ its own jinja2 template file and define its own ansible task for its generation.
 #}
 {% if kdevops_workflows_dedicated_workflow %}
 [all]
+localhost ansible_connection=local
 write-your-own-template-for-your-workflow-and-task
 {% else %}
 [all]
+localhost ansible_connection=local
 {{ kdevops_hosts_prefix }}
 {% if kdevops_baseline_and_dev == True %}
 {{ kdevops_hosts_prefix }}-dev
diff --git a/playbooks/roles/gen_hosts/templates/ltp.j2 b/playbooks/roles/gen_hosts/templates/ltp.j2
index 5b6ad9485d989c79b269831ad1af57c6970553c5..828fd63627184d98e21b11cb2025c7b67ad11e83 100644
--- a/playbooks/roles/gen_hosts/templates/ltp.j2
+++ b/playbooks/roles/gen_hosts/templates/ltp.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for s in ltp_enabled_hosts %}
 {{ kdevops_host_prefix }}-{{ s }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/nfstest.j2 b/playbooks/roles/gen_hosts/templates/nfstest.j2
index 6a0d6cdc76323ed721aa17747dee50e3fe50c774..0d3aae9fb1ae4616ec809d67bfa4db1da76b7591 100644
--- a/playbooks/roles/gen_hosts/templates/nfstest.j2
+++ b/playbooks/roles/gen_hosts/templates/nfstest.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for s in nfstest_enabled_hosts %}
 {{ kdevops_host_prefix }}-{{ s }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/pynfs.j2 b/playbooks/roles/gen_hosts/templates/pynfs.j2
index c018c5428828171cf4e652d0b2c20cc24b9da277..f5a4bb75aea194ad7000f8f4b82c4db4bfcf96ed 100644
--- a/playbooks/roles/gen_hosts/templates/pynfs.j2
+++ b/playbooks/roles/gen_hosts/templates/pynfs.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {{ kdevops_hosts_prefix }}-nfsd
 [all:vars]
 ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/selftests.j2 b/playbooks/roles/gen_hosts/templates/selftests.j2
index 085b73375518e97f901b13728dccee7ecffa5119..e505bbf194b4c45e5978b6be89f28a2b131f06aa 100644
--- a/playbooks/roles/gen_hosts/templates/selftests.j2
+++ b/playbooks/roles/gen_hosts/templates/selftests.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for test_type in selftests_enabled_test_types %}
 {{ kdevops_host_prefix }}-{{ test_type }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/gen_hosts/templates/sysbench.j2 b/playbooks/roles/gen_hosts/templates/sysbench.j2
index 76503ab761760c7ee1605e6e5bdbe9c3f1fa1e16..107eebc5fbce5cbef508aa2fb834f44d4795ce82 100644
--- a/playbooks/roles/gen_hosts/templates/sysbench.j2
+++ b/playbooks/roles/gen_hosts/templates/sysbench.j2
@@ -1,4 +1,5 @@
 [all]
+localhost ansible_connection=local
 {% for test_type in enabled_sysbench_tests %}
 {{ kdevops_host_prefix }}-{{ test_type }}
 {% if kdevops_baseline_and_dev %}
diff --git a/playbooks/roles/pkg/README.md b/playbooks/roles/pkg/README.md
index a3309d57f835d5ddb35e2d2956eeffef323ce66c..620d9efb2f5c64847fd962b860471963a1ce369a 100644
--- a/playbooks/roles/pkg/README.md
+++ b/playbooks/roles/pkg/README.md
@@ -22,7 +22,7 @@ Below is an example playbook task:
 
 ```
 ---
-- hosts: all
+- hosts: baseline:dev
   roles:
     - role: dpkg
 ```
diff --git a/playbooks/roles/update_etc_hosts/tasks/main.yml b/playbooks/roles/update_etc_hosts/tasks/main.yml
index 4c1307fb7c62c9e8db0bceb9847081c330f49f53..2b9af91debb601637ff8fc9cc82fd4a41bb2f5c9 100644
--- a/playbooks/roles/update_etc_hosts/tasks/main.yml
+++ b/playbooks/roles/update_etc_hosts/tasks/main.yml
@@ -26,7 +26,7 @@
 
 - name: Build list of hosts
   set_fact:
-    ueh_hosts: "{{ groups.all | flatten(levels=1) | reject('eq', inventory_hostname) }}"
+    ueh_hosts: "{{ ansible_play_hosts_all | difference([inventory_hostname]) }}"
 
 - debug:
     var: ueh_hosts
diff --git a/playbooks/rxe.yml b/playbooks/rxe.yml
index a5d058fe2130eeb53b6e5294a201ac58aaeb6bc6..03afedc54857eb7b2bd3bd5d2d21da4681fb869c 100644
--- a/playbooks/rxe.yml
+++ b/playbooks/rxe.yml
@@ -1,5 +1,5 @@
 ---
 - name: Set up software-emulated RoCE RDMA over Ethernet (rxe) via udev
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: rxe
diff --git a/playbooks/selftests.yml b/playbooks/selftests.yml
index 89bc824c778fa4f78a45f207a805997d8a9326b4..8f3ba682c0c1c7c4d04015711eb81f319c8acc1e 100644
--- a/playbooks/selftests.yml
+++ b/playbooks/selftests.yml
@@ -1,5 +1,5 @@
 ---
 - name: Configure and run Linux kernel selftests (kselftests)
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: selftests
diff --git a/playbooks/siw.yml b/playbooks/siw.yml
index e6b9d6167a6e178deb00b35d0b6a7c0f5b9130a5..7803827734c7f32b99747b9205aba9c57e05ac0e 100644
--- a/playbooks/siw.yml
+++ b/playbooks/siw.yml
@@ -1,5 +1,5 @@
 ---
 - name: Set up software-emulated iWARP RDMA over TCP/IP (siw) via udev
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: siw
diff --git a/playbooks/smbd.yml b/playbooks/smbd.yml
index ec5176a64cbfe79fcaf91d8d2924283beda3255c..250e9bae54a96be057f82889d84d31047905011c 100644
--- a/playbooks/smbd.yml
+++ b/playbooks/smbd.yml
@@ -1,5 +1,5 @@
 ---
 - name: Set up Samba server with shared volume and system integration
-  hosts: all
+  hosts: baseline:dev
   roles:
     - role: smbd
diff --git a/playbooks/terraform.yml b/playbooks/terraform.yml
index 9b5baede529876717eeda537d434c1cde8a93c02..14952965fff83b8f3744629dddecf7f976f904f4 100644
--- a/playbooks/terraform.yml
+++ b/playbooks/terraform.yml
@@ -1,7 +1,6 @@
 ---
-- name: Provision target nodes with terraform
-  hosts: all
+- name: Manage infrastructure lifecycle and SSH access with Terraform
+  hosts: baseline:dev
   gather_facts: false
-  hosts: all
   roles:
     - role: terraform
diff --git a/playbooks/update_etc_hosts.yml b/playbooks/update_etc_hosts.yml
index 269f23c1e041f91b643038f86d7edbbeadc93adf..90cf7083b3314ea7b02dccd03412e31367a09fa2 100644
--- a/playbooks/update_etc_hosts.yml
+++ b/playbooks/update_etc_hosts.yml
@@ -1,6 +1,6 @@
 ---
 - name: Update target /etc/hosts with all targets and disable cloud-init
-  hosts: all
+  hosts: baseline:dev
   gather_facts: no
   roles:
     - role: update_etc_hosts
diff --git a/scripts/devconfig.Makefile b/scripts/devconfig.Makefile
index bdff088589cd240717023f79d7adf349f196a463..0e5e58c38e2d2a4a8488f116b2d0824837d2fb38 100644
--- a/scripts/devconfig.Makefile
+++ b/scripts/devconfig.Makefile
@@ -57,7 +57,7 @@ extend-extra-args-devconfig:
 PHONY += devconfig
 devconfig: $(KDEVOPS_NODES)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i $(KDEVOPS_HOSTFILE) \
-		-l all,nfsd \
+		--limit 'baseline:dev:nfsd' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" \
 		--extra-vars '{ kdevops_cli_install: True }' \
@@ -72,7 +72,7 @@ ifeq (y,$(CONFIG_SYSCTL_TUNING))
 PHONY += sysctl-tunings
 sysctl-tunings: $(KDEVOPS_NODES)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i $(KDEVOPS_HOSTFILE) \
-		-l all,nfsd \
+		--limit 'baseline:dev:nfsd' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) --tags vars,sysctl
 
diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile
index cad1bb3357f8021c1438cbd2bce5bba197a287a2..8bae2ae6861aee5463ba060b20deae0a0ff7f4de 100644
--- a/scripts/guestfs.Makefile
+++ b/scripts/guestfs.Makefile
@@ -64,7 +64,7 @@ $(KDEVOPS_PROVISIONED_SSH):
 			LIBVIRT_DEFAULT_URI=$(CONFIG_LIBVIRT_URI) \
 			$(TOPDIR)/scripts/update_ssh_config_guestfs.py; \
 	fi
-	$(Q)ansible $(ANSIBLE_VERBOSE) -i hosts all -m wait_for_connection
+	$(Q)ansible $(ANSIBLE_VERBOSE) -i hosts 'baseline:dev' -m wait_for_connection
 	$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
 
 install_libguestfs:
diff --git a/workflows/linux/Makefile b/workflows/linux/Makefile
index f68c0905ed3e96cfd01c3e65ac75dbe5a47b2072..1e92264362ec8c7c2757d37423172425ae296316 100644
--- a/workflows/linux/Makefile
+++ b/workflows/linux/Makefile
@@ -154,7 +154,7 @@ linux-reboot:
 
 PHONY += uname
 uname:
-	$(Q)ansible all -i hosts -b -m command -a "uname -r" -o \
+	$(Q)ansible 'baseline:dev' -i hosts -b -m command -a "uname -r" -o \
 	| awk -F '|' '{gsub(/^ +| +$$/, "", $$2); printf "%-30s %s\n", $$1, $$4}' \
 	| sed -e 's|(stdout)||'
 

-- 
2.50.0


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

* [PATCH v4 08/11] Makefile: use inventory from ansible.cfg
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (6 preceding siblings ...)
  2025-07-02 19:35 ` [PATCH v4 07/11] gen_hosts: templates: include localhost in the all group Daniel Gomez
@ 2025-07-02 19:36 ` Daniel Gomez
  2025-07-02 19:36 ` [PATCH v4 09/11] ansible_cfg: add support to change ansible.cfg file location Daniel Gomez
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:36 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

We can define the Ansible inventory via ansible.cfg inventory variable.
Make use of it and remove all the -i/--inventory arguments in all the
ansible-playbook calls.

Target selection is now handled in two ways:

At the playbook level (hosts: <targets>): E.g. using patterns like all,
baseline:dev (which targets all nodes except localhost), or localhost.
While all!localhost could be used as an alternative to baseline:dev,
it is not semantically correct for kdevops. In addition, all!localhost
would prevent playbooks from running on the controller host that also
functions as a target node.

So, most of the playbooks have been converted from all -> baseline:dev.
Except for bootlinux playbook, where all is kept as the playbook runs
limited to localhost in linux-clone-9p and limited to baseline:dev for
the rest of the targets.

- At command line: ansible-playbook --limit 'SUBSET': In order to
control the hosts when the playbook defines something wider (such as the
case where we want to run only on baseline targets for example), we use
the ansible-playbook argument --limit.

Use --limits argument with the proper syntax [1]: with quotes and colons
(for list of targets or group of targets).

Ensure the target string in CONFIG_ANSIBLE_CFG_INVENTORY excludes the
double quotes to avoid the ANSIBLE_CFG_INVENTORY target to be triggered
every time.

Also, include support for KDEVOPS_HOSTS via _SET_BY_CLI to keep
compatibility with the KDEVOPS_HOSTS Makefile variable that could be
overwritten by the user when make was invoked to define a specific hosts
file.

[1]
https://docs.ansible.com/ansible/latest/inventory_guide/intro_patterns.html

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 Makefile                                    | 21 +++++-----
 Makefile.btrfs_progs                        |  4 +-
 Makefile.build_qemu                         | 12 ++----
 Makefile.hypervisor-tunings                 |  3 +-
 Makefile.kdevops                            | 19 +++------
 Makefile.linux-mirror                       |  6 +--
 Makefile.postfix                            |  3 +-
 docs/kdevops-terraform.md                   |  2 +-
 kconfigs/Kconfig.ansible_cfg                |  7 +++-
 playbooks/roles/bootlinux/README.md         | 12 +++---
 playbooks/roles/gen_hosts/defaults/main.yml |  1 -
 playbooks/roles/gen_hosts/tasks/main.yml    | 54 +++++++++++++-------------
 playbooks/roles/guestfs/tasks/main.yml      |  6 +++
 playbooks/roles/libvirt_user/README.md      |  4 +-
 scripts/archive.Makefile                    |  3 +-
 scripts/devconfig.Makefile                  |  4 +-
 scripts/dynamic-pci-kconfig.Makefile        |  3 +-
 scripts/firstconfig.Makefile                |  5 ++-
 scripts/gen-hosts.Makefile                  |  1 -
 scripts/guestfs.Makefile                    | 19 +++++----
 scripts/install-menuconfig-deps.Makefile    |  3 +-
 scripts/iscsi.Makefile                      |  2 +-
 scripts/journal-server.Makefile             | 23 ++++++-----
 scripts/kotd.Makefile                       | 16 +++++---
 scripts/krb5.Makefile                       |  4 +-
 scripts/ktls.Makefile                       |  1 -
 scripts/nfsd.Makefile                       |  2 +-
 scripts/provision.Makefile                  |  5 ++-
 scripts/rdma.Makefile                       |  2 -
 scripts/smbd.Makefile                       |  2 +-
 scripts/systemd-timesync.Makefile           |  8 ++--
 scripts/terraform.Makefile                  |  6 +--
 scripts/update_etc_hosts.Makefile           |  2 +-
 scripts/vagrant.Makefile                    | 10 ++---
 scripts/workflows/lib/crash.py              |  4 +-
 workflows/blktests/Makefile                 | 20 ++++++----
 workflows/common/Makefile                   |  2 +-
 workflows/cxl/Makefile                      | 14 +++----
 workflows/demos/reboot-limit/Makefile       | 32 +++++++++------
 workflows/fstests/Makefile                  | 40 +++++++++++--------
 workflows/gitr/Makefile                     |  8 ++--
 workflows/linux/Makefile                    | 60 +++++++++++++++++++----------
 workflows/ltp/Makefile                      |  8 ++--
 workflows/nfstest/Makefile                  |  8 ++--
 workflows/pynfs/Makefile                    | 12 +++---
 workflows/selftests/Makefile                | 11 ++++--
 workflows/sysbench/Makefile                 | 12 +++---
 47 files changed, 269 insertions(+), 237 deletions(-)

diff --git a/Makefile b/Makefile
index 53694288ff9d6fa15946df80313dacb91fd5fba3..9387c7cd82dbf8a68cc3738d7b2211c37f4298e7 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,6 @@ include Makefile.subtrees
 
 export KDEVOPS_EXTRA_VARS ?=			extra_vars.yaml
 export KDEVOPS_PLAYBOOKS_DIR :=			playbooks
-export KDEVOPS_HOSTFILE ?=			hosts
 export KDEVOPS_NODES :=
 export KDEVOPS_VAGRANT :=
 export PYTHONUNBUFFERED=1
@@ -27,6 +26,8 @@ KDEVOPS_NODES_ROLE_TEMPLATE_DIR :=		$(KDEVOPS_PLAYBOOKS_DIR)/roles/gen_nodes/tem
 export KDEVOPS_NODES_TEMPLATE :=
 export KDEVOPS_MRPROPER :=
 
+ANSIBLE_INVENTORY_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_INVENTORY) | tr --delete '"')
+
 KDEVOPS_INSTALL_TARGETS :=
 
 DEFAULT_DEPS :=
@@ -79,8 +80,7 @@ CFLAGS += $(INCLUDES)
 
 ANSIBLE_EXTRA_ARGS += kdevops_version='$(PROJECTRELEASE)'
 
-export KDEVOPS_HOSTS_TEMPLATE := $(KDEVOPS_HOSTFILE).j2
-export KDEVOPS_HOSTS := $(KDEVOPS_HOSTFILE)
+export KDEVOPS_HOSTS_TEMPLATE := hosts.j2
 
 LOCAL_DEVELOPMENT_ARGS	:=
 ifeq (y,$(CONFIG_NEEDS_LOCAL_DEVELOPMENT_PATH))
@@ -197,8 +197,7 @@ include scripts/gen-nodes.Makefile
 
 
 ansible.cfg: .config
-	@$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	@$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ansible_cfg.yml \
 		--extra-vars=@./.extra_vars_auto.yaml
 
@@ -226,17 +225,15 @@ ifneq (,$(KDEVOPS_BRING_UP_DEPS))
 include scripts/bringup.Makefile
 endif
 
-DEFAULT_DEPS += $(KDEVOPS_HOSTS)
-$(KDEVOPS_HOSTS): .config ansible.cfg $(KDEVOPS_HOSTS_TEMPLATE)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+DEFAULT_DEPS += $(ANSIBLE_INVENTORY_FILE)
+$(ANSIBLE_INVENTORY_FILE): .config ansible.cfg $(KDEVOPS_HOSTS_TEMPLATE)
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gen_hosts.yml \
 		--extra-vars=@./extra_vars.yaml
 
 DEFAULT_DEPS += $(KDEVOPS_NODES)
 $(KDEVOPS_NODES) $(KDEVOPS_VAGRANT): .config ansible.cfg $(KDEVOPS_NODES_TEMPLATE)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gen_nodes.yml \
 		--extra-vars=@./extra_vars.yaml
 
@@ -264,7 +261,7 @@ mrproper:
 	$(Q)rm -rf terraform/*/.terraform
 	$(Q)rm -f terraform/*/.terraform.lock.hcl
 	$(Q)rm -f $(KDEVOPS_NODES)
-	$(Q)rm -f $(KDEVOPS_HOSTFILE) $(KDEVOPS_MRPROPER)
+	$(Q)rm -f $(ANSIBLE_CFG_INVENTORY) $(KDEVOPS_MRPROPER)
 	$(Q)rm -f .config .config.old extra_vars.yaml $(KCONFIG_YAMLCFG)
 	$(Q)rm -f ansible.cfg
 	$(Q)rm -f playbooks/secret.yml $(KDEVOPS_EXTRA_ADDON_DEST)
diff --git a/Makefile.btrfs_progs b/Makefile.btrfs_progs
index 73a1c95f169a67637cc65febf417b61b967e4668..9ccfafa360eab112e13588ab1908209f62247406 100644
--- a/Makefile.btrfs_progs
+++ b/Makefile.btrfs_progs
@@ -5,8 +5,8 @@ BTRFS_PROGS_SETUP_ARGS += btrfs_progs_build=True
 
 PHONY += btrfs-progs
 btrfs-progs: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/btrfs-progs.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		$(KDEVOPS_PLAYBOOKS_DIR)/btrfs-progs.yml \
 		--extra-vars=$(BTRFS_PROGS_SETUP_ARGS) $(LIMIT_HOSTS)
 
 btrfs-progs-help-menu:
diff --git a/Makefile.build_qemu b/Makefile.build_qemu
index 72e1cba4dfbccccf8c546c613b788a26be86ee3f..2eac6e9b56f7f9c67dbff079309b97fab52bee3e 100644
--- a/Makefile.build_qemu
+++ b/Makefile.build_qemu
@@ -20,29 +20,25 @@ QEMU_BUILD_SETUP_ARGS += qemu_target="ppc64-softmmu"
 endif
 
 qemu: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/build_qemu.yml \
 		--extra-vars=@./extra_vars.yaml
 PHONY += qemu
 
 qemu-install: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/build_qemu.yml \
 		--extra-vars=@./extra_vars.yaml --tags vars,install
 PHONY += qemu-install
 
 qemu-configure: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/build_qemu.yml \
 		--extra-vars=@./extra_vars.yaml --tags vars,configure
 PHONY += qemu-configure
 
 qemu-build: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/build_qemu.yml \
 		--extra-vars=@./extra_vars.yaml --tags vars,build
 PHONY += qemu-build
diff --git a/Makefile.hypervisor-tunings b/Makefile.hypervisor-tunings
index 39547c02f1b68a5bfb4ea770f37e4d3563109532..ff29b89cfbc93c0d5416e8c4bdf6842cbfd2d697 100644
--- a/Makefile.hypervisor-tunings
+++ b/Makefile.hypervisor-tunings
@@ -14,8 +14,7 @@ HYPERVISOR_TUNING_ARGS += hypervisor_tunning_zswap_max_pool_percent=$(ZSWAP_MAX_
 endif
 
 kdevops_hypervisor_tunning: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/hypervisor-tuning.yml \
 		--extra-vars=@./extra_vars.yaml
 PHONY += kdevops_hypervisor_tunning
diff --git a/Makefile.kdevops b/Makefile.kdevops
index 60d79a5a3e48e25fbda6647e86abc25fcd5611f3..7a156312176048edf37e903323a01c48a642d2f2 100644
--- a/Makefile.kdevops
+++ b/Makefile.kdevops
@@ -2,26 +2,22 @@
 # allow your project to define these and just include this file.
 KDEVOPS_TERRAFORM_DIR ?=	terraform
 KDEVOPS_PLAYBOOKS_DIR ?=	playbooks
-KDEVOPS_HOSTFILE ?=		hosts
 KDEVOPS_LOCAL_WORK :=
 
 kdevops_all: kdevops_deps
 PHONY := kdevops_all
 
 kdevops_terraform_deps:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/install_terraform.yml
 PHONY += kdevops_terraform_deps
 
 kdevops_install_libvirt:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/libvirt_user.yml -e "skip_configuration=True"
 
 kdevops_configure_libvirt:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/libvirt_user.yml -e "skip_install=True" \
 		-e 'running_user=$(USER)'
 
@@ -33,23 +29,20 @@ PHONY += kdevops_vagrant_deps
 KDEVOPS_VAGRANT_WORK := kdevops_vagrant_deps
 
 kdevops_vagrant_boxes:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/install_vagrant_boxes.yml
 PHONY += kdevops_vagrant_boxes
 KDEVOPS_VAGRANT_WORK += kdevops_vagrant_boxes
 
 kdevops_verify_libvirt_user:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/libvirt_user.yml -e "only_verify_user=True"
 
 PHONY += kdevops_verify_libvirt_user
 KDEVOPS_VAGRANT_WORK += kdevops_verify_libvirt_user
 
 kdevops_libvirt_storage_pool_create:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/libvirt_storage_pool_create.yml
 
 PHONY += kdevops_libvirt_storage_pool_create
diff --git a/Makefile.linux-mirror b/Makefile.linux-mirror
index 6961a55b47ce0796b39841ae125f52f07f11a96f..ccda361ba17396aad80c5cf846a5a21ec155450b 100644
--- a/Makefile.linux-mirror
+++ b/Makefile.linux-mirror
@@ -25,8 +25,7 @@ endif
 MIRROR_CODE      := $(TOPDIR)/playbooks/roles/linux-mirror/linux-mirror-systemd/
 
 kdevops_linux_mirror: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook \
 		--tags vars,mirror \
 		$(KDEVOPS_PLAYBOOKS_DIR)/linux-mirror.yml \
 		--extra-vars=@./extra_vars.yaml
@@ -37,8 +36,7 @@ mirror: $(KDEVOPS_EXTRA_VARS) kdevops_linux_mirror
 PHONY += mirror
 
 mirror-status: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook \
 		--tags vars,mirror-status \
 		$(KDEVOPS_PLAYBOOKS_DIR)/linux-mirror.yml \
 		--extra-vars=@./extra_vars.yaml
diff --git a/Makefile.postfix b/Makefile.postfix
index 5db23dc973711dfbd697d5b353e64e257c8f1d0d..704c71550bd0cc0f724aaef2e64db071ca99e92e 100644
--- a/Makefile.postfix
+++ b/Makefile.postfix
@@ -7,8 +7,7 @@ POSTFIX_SETUP_ARGS += postfix_relay_host_setup=True
 POSTFIX_SETUP_ARGS += postfix_relay_host=$(POSTFIX_RELAY_HOST)
 
 kdevops_postfix_setup_relay: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/postfix_relay_host.yml \
 		--extra-vars=@./extra_vars.yaml
 PHONY += kdevos_postfix_setup_relay
diff --git a/docs/kdevops-terraform.md b/docs/kdevops-terraform.md
index e6a518c7f1cf9b500a9a249767293c073b70afe5..3291444d2f7245a670ca9e93036b49673c30fca5 100644
--- a/docs/kdevops-terraform.md
+++ b/docs/kdevops-terraform.md
@@ -120,7 +120,7 @@ connectivity issues. In such cases, you can run the Ansible role yourself
 manually:
 
 ```bash
-ansible-playbook -i hosts -l kdevops playbooks/devconfig.yml
+ansible-playbook -l kdevops playbooks/devconfig.yml
 ```
 
 Note that there a few configuration items you may have enabled, for things
diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg
index d78ea7507632ae86481633e83a845e81e6f7ad92..40faa6fb6ff1fb37980fa72c4ed9cecd91b16726 100644
--- a/kconfigs/Kconfig.ansible_cfg
+++ b/kconfigs/Kconfig.ansible_cfg
@@ -10,6 +10,10 @@ config ANSIBLE_CFG_FORKS_SET_BY_CLI
 	bool
 	default $(shell, scripts/check-cli-set-var.sh ANSIBLE_CFG_FORKS)
 
+config ANSIBLE_CFG_INVENTORY_SET_BY_CLI
+	bool
+	default $(shell, scripts/check-cli-set-var.sh KDEVOPS_HOSTS)
+
 menu "Ansible Callback Plugin Configuration"
 choice
 	prompt "Ansible Callback Plugin"
@@ -210,7 +214,8 @@ endif # !ANSIBLE_CFG_FORKS_CUSTOM
 config ANSIBLE_CFG_INVENTORY
 	string "Ansible inventory sources"
 	output yaml
-	default "$(TOPDIR_PATH)/hosts"
+	default "$(TOPDIR_PATH)/hosts" if !ANSIBLE_CFG_INVENTORY_SET_BY_CLI
+	default $(shell, ./scripts/append-makefile-vars-int.sh $(KDEVOPS_HOSTS)) if ANSIBLE_CFG_INVENTORY_SET_BY_CLI
 	help
 	  Comma-separated list of Ansible inventory source paths.
 
diff --git a/playbooks/roles/bootlinux/README.md b/playbooks/roles/bootlinux/README.md
index 8c0b1d59906d0f3ec35585bbf69f41c7a0141511..5179f49dc4c5dae4407b74f3c61f5661f10d1865 100644
--- a/playbooks/roles/bootlinux/README.md
+++ b/playbooks/roles/bootlinux/README.md
@@ -78,7 +78,7 @@ You can compile say a vanilla kernel v4.19.58 with an extra set of patches we'd
 
 ```
 cd ansible
-ansible-playbook -i hosts -l dev --extra-vars "target_linux_extra_patch=pend-v4.19.58-fixes-20190716-v2.patch" bootlinux.yml
+ansible-playbook -l dev --extra-vars "target_linux_extra_patch=pend-v4.19.58-fixes-20190716-v2.patch" bootlinux.yml
 ```
 
 You'd place the `pend-v4.19.58-fixes-20190716-v2.patch` file on the directory
@@ -87,19 +87,19 @@ You'd place the `pend-v4.19.58-fixes-20190716-v2.patch` file on the directory
 Now say you wantd to be explicit about a tag of Linux you'd want to use:
 
 ```
-ansible-playbook -i hosts -l dev --extra-vars "target_linux_ref=v4.19.21 "target_linux_extra_patch=try-v4.19.20-fixes-20190716-v1.patch" bootlinux.yml
+ansible-playbook -l dev --extra-vars "target_linux_ref=v4.19.21 "target_linux_extra_patch=try-v4.19.20-fixes-20190716-v1.patch" bootlinux.yml
 ```
 
 To uninstall a kernel:
 
 ```
-ansible-playbook -i hosts -l dev --tags uninstall-linux --extra-vars "uninstall_kernel_ver=4.19.58+" bootlinux.yml
+ansible-playbook -l dev --tags uninstall-linux --extra-vars "uninstall_kernel_ver=4.19.58+" bootlinux.yml
 ```
 
 To ensure you can get the grub prompt:
 
 ```bash
-ansible-playbook -i hosts --tags vars,manual-update-grub playbooks/bootlinux.yml
+ansible-playbook --tags vars,manual-update-grub playbooks/bootlinux.yml
 ```
 
 The ansible bootlinux role relies on the create_partition role to create a data
@@ -107,13 +107,13 @@ partition where we can stuff code, and compile it. To test that aspect of
 the bootlinux role you can run:
 
 ```
-ansible-playbook -i hosts -l baseline --tags data_partition,partition bootlinux.yml
+ansible-playbook -l baseline --tags data_partition,partition bootlinux.yml
 ```
 
 To reboot all hosts:
 
 ```bash
-ansible-playbook -i hosts bootlinux.yml --tags reboot
+ansible-playbook bootlinux.yml --tags reboot
 ```
 
 For further examples refer to one of this role's users, the
diff --git a/playbooks/roles/gen_hosts/defaults/main.yml b/playbooks/roles/gen_hosts/defaults/main.yml
index f6ab9bcce1669b28bb04f8139f07e3d8091a2a88..1a2f737a63462ce90b868578577f7d1f1575e05c 100644
--- a/playbooks/roles/gen_hosts/defaults/main.yml
+++ b/playbooks/roles/gen_hosts/defaults/main.yml
@@ -6,7 +6,6 @@ hosts_type_generic: True
 hosts_type_fs: False
 hosts_type_block: False
 
-kdevops_hosts: "hosts"
 kdevops_hosts_template: "hosts.in"
 kdevops_playbooks_dir: "/dev/null"
 kdevops_genhosts_templates_dir: "/dev/null"
diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml
index 5f5234591acb878a77c7a0e99fa546d4395e91f1..de5de1ab28ec422d2a37aa2dc4e6c91b351db770 100644
--- a/playbooks/roles/gen_hosts/tasks/main.yml
+++ b/playbooks/roles/gen_hosts/tasks/main.yml
@@ -18,23 +18,23 @@
   command: "id -g -n"
   register: my_group
 
-- name: Check if the file {{ kdevops_hosts }} exists already
+- name: Check if the inventory file exists already
   stat:
-    path: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    path: "{{ ansible_cfg_inventory }}"
   register: kdevops_hosts_dest
 
-- name: Ensure proper permission on the file {{ kdevops_hosts }}
+- name: Ensure proper permission on the inventory file
   become: yes
   become_flags: 'su - -c'
   become_method: sudo
   file:
-    path: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    path: "{{ ansible_cfg_inventory }}"
     owner: "{{ my_user.stdout }}"
     group: "{{ my_group.stdout }}"
   when:
     - kdevops_hosts_dest.stat.exists
 
-- name: Verify Ansible host template file exists {{ kdevops_hosts_template_full_path }}
+- name: Verify Ansible inventory template file exists
   stat:
     path: "{{ kdevops_hosts_template_full_path }}"
   register: ansible_hosts_template
@@ -56,11 +56,11 @@
   when:
     - is_fstests
 
-- name: Generate the Ansible hosts file
+- name: Generate the Ansible inventory file
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -70,15 +70,15 @@
 
 - name: Update Ansible inventory access modification time so make sees it updated
   ansible.builtin.file:
-    path: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    path: "{{ ansible_cfg_inventory }}"
     state: touch
     mode: '0755'
 
-- name: Generate the Ansible hosts file for dedicated cxl work
+- name: Generate the Ansible inventory file for dedicated cxl work
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ anisble_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -87,11 +87,11 @@
     - kdevops_workflow_enable_cxl
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for dedicated pynfs work
+- name: Generate the Ansible inventory file for dedicated pynfs work
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -100,13 +100,13 @@
     - kdevops_workflow_enable_pynfs
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for dedicated gitr workflow
+- name: Generate the Ansible inventory file for dedicated gitr workflow
   tags: [ 'hosts' ]
   vars:
     gitr_enabled_hosts: "{{ gitr_enabled_test_groups|ansible.builtin.split }}"
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: true
     trim_blocks: true
     lstrip_blocks: true
@@ -115,13 +115,13 @@
     - kdevops_workflow_enable_gitr
     - ansible_hosts_template.stat.exists
 
-- name: Generate an Ansible hosts file for a dedicated ltp workflow
+- name: Generate an Ansible inventory file for a dedicated ltp workflow
   tags: [ 'hosts' ]
   vars:
     ltp_enabled_hosts: "{{ ltp_enabled_test_groups|ansible.builtin.split }}"
   ansible.builtin.template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -130,13 +130,13 @@
     - kdevops_workflow_enable_ltp
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for dedicated nfstest workflow
+- name: Generate the Ansible inventory file for dedicated nfstest workflow
   tags: [ 'hosts' ]
   vars:
     nfstest_enabled_hosts: "{{ nfstest_enabled_test_groups | ansible.builtin.split }}"
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: true
     trim_blocks: true
     lstrip_blocks: true
@@ -189,7 +189,7 @@
     - ansible_hosts_template.stat.exists
     - item.changed
 
-- name: Generate the Ansible hosts file for a dedicated fstests setup
+- name: Generate the Ansible inventory file for a dedicated fstests setup
   tags: [ 'hosts' ]
   vars:
     fs_config_data: "{{ lookup('file', fs_config_path) }}"
@@ -200,7 +200,7 @@
     sections: "{{ sections_replace_underscore |  replace(\"'\", '') | split(', ') }}"
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -231,11 +231,11 @@
     - kdevops_workflow_enable_blktests
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for a dedicated blktests setup
+- name: Generate the Ansible inventory file for a dedicated blktests setup
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -258,11 +258,11 @@
     - kdevops_workflow_enable_selftests
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for a dedicated selftests setup
+- name: Generate the Ansible inventory file for a dedicated selftests setup
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -299,11 +299,11 @@
     - kdevops_workflows_dedicated_workflow
     - kdevops_workflow_enable_sysbench
 
-- name: Generate the Ansible hosts file for a dedicated sysbench setup
+- name: Generate the Ansible inventory file for a dedicated sysbench setup
   tags: [ 'hosts' ]
   template:
     src: "{{ kdevops_hosts_template }}"
-    dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    dest: "{{ ansible_cfg_inventory }}"
     force: yes
     trim_blocks: True
     lstrip_blocks: True
@@ -314,7 +314,7 @@
 
 - name: Verify if final host file exists
   stat:
-    path: "{{ topdir_path }}/{{ kdevops_hosts }}"
+    path: "{{ ansible_cfg_inventory }}"
   register: final_hosts_file
 
 - name: Fail if the dedicated workflow has no rules for node configuration for hosts file configuration
diff --git a/playbooks/roles/guestfs/tasks/main.yml b/playbooks/roles/guestfs/tasks/main.yml
index d6530f8adc2d1efe85df1014bae9b3aba577aaf5..644922b958d8862f69b8950e87782a95d2be9845 100644
--- a/playbooks/roles/guestfs/tasks/main.yml
+++ b/playbooks/roles/guestfs/tasks/main.yml
@@ -23,6 +23,7 @@
     - bringup
   ansible.builtin.set_fact:
     storagedir: "{{ kdevops_storage_pool_path }}/guestfs"
+  delegate_to: localhost
 
 - name: Set the pathname of the OS base image
   tags:
@@ -30,6 +31,7 @@
     - bringup
   ansible.builtin.set_fact:
     base_image: "{{ storagedir }}/base_images/{{ virtbuilder_os_version }}.raw"
+  delegate_to: localhost
 
 - name: Ensure the required base OS image exists
   tags:
@@ -39,12 +41,14 @@
   vars:
     base_image_os_version: "{{ virtbuilder_os_version }}"
     base_image_pathname: "{{ base_image }}"
+  delegate_to: localhost
 
 - name: Bring up each target node
   tags:
     - bringup
   ansible.builtin.import_tasks:
     file: "{{ role_path }}/tasks/bringup/main.yml"
+  delegate_to: localhost
 
 - name: Set up target node console permissions
   tags:
@@ -53,9 +57,11 @@
     file: "{{ role_path }}/tasks/bringup/console-permissions.yml"
   when:
     - libvirt_uri_system|bool
+  delegate_to: localhost
 
 - name: Shut down and destroy each target node
   tags:
     - destroy
   ansible.builtin.import_tasks:
     file: "{{ role_path }}/tasks/destroy.yml"
+  delegate_to: localhost
diff --git a/playbooks/roles/libvirt_user/README.md b/playbooks/roles/libvirt_user/README.md
index 2120e841779209a1df0cbe95df81eab27ea030d2..7a0e034449e57620420ca3301e2ad5889b35ba67 100644
--- a/playbooks/roles/libvirt_user/README.md
+++ b/playbooks/roles/libvirt_user/README.md
@@ -65,11 +65,11 @@ take effect So for instance you would have:
 
 ```bash
 # Does the actual work
-ansible-playbook -i hosts playbooks/libvirt_user.yml
+ansible-playbook playbooks/libvirt_user.yml
 
 # Verify if the changes are already effective if not warn the user to log
 # out and back in.
-ansible-playbook -i hosts playbooks/libvirt_user.yml -e "only_verify_user=True"
+ansible-playbook playbooks/libvirt_user.yml -e "only_verify_user=True"
 ```
 
 ## Running libvirt as a regular user
diff --git a/scripts/archive.Makefile b/scripts/archive.Makefile
index 54928d328472bb89e03ea0b11c259dbfabbe1c09..23a693d793f3c0659b6f42bc5eb222c560d1d37b 100644
--- a/scripts/archive.Makefile
+++ b/scripts/archive.Makefile
@@ -13,8 +13,7 @@ ARCHIVE_DYNAMIC_RUNTIME_VARS += \
 endif
 
 ci-archive:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		playbooks/kdevops_archive.yml \
 		--extra-vars '{ $(ARCHIVE_DYNAMIC_RUNTIME_VARS) }' \
 		--extra-vars=@./extra_vars.yaml
diff --git a/scripts/devconfig.Makefile b/scripts/devconfig.Makefile
index 0e5e58c38e2d2a4a8488f116b2d0824837d2fb38..146c70f78897bffe6129a4c9dec8afd7a5e7a5ec 100644
--- a/scripts/devconfig.Makefile
+++ b/scripts/devconfig.Makefile
@@ -56,7 +56,7 @@ extend-extra-args-devconfig:
 
 PHONY += devconfig
 devconfig: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i $(KDEVOPS_HOSTFILE) \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		--limit 'baseline:dev:nfsd' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" \
@@ -71,7 +71,7 @@ HELP_TARGETS+=devconfig-generic-help-menu
 ifeq (y,$(CONFIG_SYSCTL_TUNING))
 PHONY += sysctl-tunings
 sysctl-tunings: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i $(KDEVOPS_HOSTFILE) \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		--limit 'baseline:dev:nfsd' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) --tags vars,sysctl
diff --git a/scripts/dynamic-pci-kconfig.Makefile b/scripts/dynamic-pci-kconfig.Makefile
index 716cdc1e4814a26532c8bb3550670cdd1e4caf3a..8902da29e53d8a34df077f72f4969565f867ae3c 100644
--- a/scripts/dynamic-pci-kconfig.Makefile
+++ b/scripts/dynamic-pci-kconfig.Makefile
@@ -42,8 +42,7 @@ endif # CONFIG_KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH
 HELP_TARGETS += dynamic-kconfig-pci-help
 
 dynamic_pcipassthrough_kconfig:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		playbooks/gen-pci-kconfig.yml \
 		--extra-vars '{ $(PCIE_RUNTIME_VARS) }'
 
diff --git a/scripts/firstconfig.Makefile b/scripts/firstconfig.Makefile
index f1a4423e6d96f551f2ae8652fa2f8a08bc06fce8..9f8a63a8ff849decf2256a24d3c756664ef07d61 100644
--- a/scripts/firstconfig.Makefile
+++ b/scripts/firstconfig.Makefile
@@ -1,8 +1,9 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 
 firstconfig:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --extra-vars '{ kdevops_cli_install: True }' \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--extra-vars '{ kdevops_cli_install: True }' \
 		--tags vars_simple,firstconfig \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
diff --git a/scripts/gen-hosts.Makefile b/scripts/gen-hosts.Makefile
index 84e47fd73c9b716abd9b2e4ba52aa548dc6e59d8..0d1e0cd77c2ed92b5df678012e292ff386f3af2e 100644
--- a/scripts/gen-hosts.Makefile
+++ b/scripts/gen-hosts.Makefile
@@ -4,7 +4,6 @@ KDEVOPS_PLAYBOOKS_DIR_FULL_PATH=$(TOPDIR_PATH)/$(KDEVOPS_PLAYBOOKS_DIR)
 KDEVOPS_HOSTS_TEMPLATE_DIR=$(KDEVOPS_PLAYBOOKS_DIR_FULL_PATH)/roles/gen_hosts/templates
 
 GENHOSTS_EXTRA_ARGS += kdevops_playbooks_dir='$(KDEVOPS_PLAYBOOKS_DIR)'
-GENHOSTS_EXTRA_ARGS += kdevops_hosts='$(KDEVOPS_HOSTFILE)'
 
 # Relative path so that ansible can work with it
 KDEVOPS_HOSTS_TEMPLATE_SHORT:=$(KDEVOPS_HOSTS_TEMPLATE)
diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile
index 8bae2ae6861aee5463ba060b20deae0a0ff7f4de..93d331562c4634356544c9547ffa90ae9ba994ca 100644
--- a/scripts/guestfs.Makefile
+++ b/scripts/guestfs.Makefile
@@ -51,41 +51,40 @@ KDEVOPS_PROVISION_DESTROY_METHOD	:= destroy_guestfs
 	$(Q)make linux-clone
 
 libvirt_pcie_passthrough_permissions:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		playbooks/libvirt_pcie_passthrough.yml
 
 $(KDEVOPS_PROVISIONED_SSH):
 	$(Q)if [[ "$(CONFIG_KDEVOPS_SSH_CONFIG_UPDATE)" == "y" ]]; then \
-		ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-			--inventory localhost, \
+		ansible-playbook $(ANSIBLE_VERBOSE) \
 			playbooks/update_ssh_config_guestfs.yml \
 			--extra-vars=@./extra_vars.yaml; \
 			LIBVIRT_DEFAULT_URI=$(CONFIG_LIBVIRT_URI) \
 			$(TOPDIR)/scripts/update_ssh_config_guestfs.py; \
 	fi
-	$(Q)ansible $(ANSIBLE_VERBOSE) -i hosts 'baseline:dev' -m wait_for_connection
+	$(Q)ansible $(ANSIBLE_VERBOSE) 'baseline:dev' -m wait_for_connection
 	$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
 
 install_libguestfs:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		--inventory localhost, \
+		--limit 'localhost' \
 		playbooks/guestfs.yml \
 		--extra-vars=@./extra_vars.yaml \
 		--tags install-deps
 
 bringup_guestfs: $(GUESTFS_BRINGUP_DEPS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		--connection=local --inventory localhost, \
+		--limit 'localhost' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/guestfs.yml \
 		--extra-vars=@./extra_vars.yaml \
 		--tags network,pool,base_image
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/guestfs.yml \
+		--limit 'baseline:dev' \
+		playbooks/guestfs.yml \
 		--extra-vars=@./extra_vars.yaml \
 		--tags bringup
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		--connection=local --inventory localhost, \
+		--limit 'localhost' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/guestfs.yml \
 		--extra-vars=@./extra_vars.yaml \
 		--tags console
@@ -97,7 +96,7 @@ PHONY += status_guestfs
 
 destroy_guestfs:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/guestfs.yml \
+		playbooks/guestfs.yml \
 		--extra-vars=@./extra_vars.yaml \
 		--tags destroy
 	$(Q)rm -f $(KDEVOPS_PROVISIONED_SSH) $(KDEVOPS_PROVISIONED_DEVCONFIG)
diff --git a/scripts/install-menuconfig-deps.Makefile b/scripts/install-menuconfig-deps.Makefile
index 772e65df2528d1fdd191b7fad4ae68ebe0e35979..4b9aef8db20d63b8ab3ab131bf614ea54b5a6372 100644
--- a/scripts/install-menuconfig-deps.Makefile
+++ b/scripts/install-menuconfig-deps.Makefile
@@ -1,8 +1,7 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 
 menuconfig-deps:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/install-menuconfig-deps.yml \
 		-e 'kdevops_first_run=True'
 PHONY += menuconfig-deps
diff --git a/scripts/iscsi.Makefile b/scripts/iscsi.Makefile
index d9ac22befa0277c27c19e52ca548f93d0eb18f70..940dce35df54ff7457a13c51cb07b207168128ae 100644
--- a/scripts/iscsi.Makefile
+++ b/scripts/iscsi.Makefile
@@ -7,7 +7,7 @@ ANSIBLE_EXTRA_ARGS += $(ISCSI_EXTRA_ARGS)
 
 iscsi:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l iscsi \
+		--limit 'iscsi' \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/iscsi.yml
 
diff --git a/scripts/journal-server.Makefile b/scripts/journal-server.Makefile
index da61fa30269826088ef261df91a1f9974f3a9493..d3c39712351dd60ed2f2e3dba9201cd8439c7912 100644
--- a/scripts/journal-server.Makefile
+++ b/scripts/journal-server.Makefile
@@ -11,24 +11,26 @@ ANSIBLE_EXTRA_ARGS += devconfig_systemd_journal_use_http='True'
 endif
 
 journal-client:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --extra-vars '{ kdevops_cli_install: True }' \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--extra-vars '{ kdevops_cli_install: True }' \
 		--tags vars_simple,journal \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
 journal-server:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/install_systemd_journal_remote.yml
 
 journal-restart:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --tags vars_extra,journal-upload-restart \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--tags vars_extra,journal-upload-restart \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
 journal-status:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --tags vars_extra,journal-status \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--tags vars_extra,journal-status \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
 journal-ls:
@@ -39,8 +41,9 @@ journal-dump:
 
 
 journal-ln:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --tags vars_extra,journal_ln \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--tags vars_extra,journal_ln \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
 LOCALHOST_SETUP_WORK += journal-server
diff --git a/scripts/kotd.Makefile b/scripts/kotd.Makefile
index b9b7cf650612d0fb4c28475444ca52b866051c45..c74aad5a1a3c208e7ca74822983b6baf18812cea 100644
--- a/scripts/kotd.Makefile
+++ b/scripts/kotd.Makefile
@@ -9,19 +9,23 @@ endif # HAVE_DISTRO_CUSTOM_KOTD_REPO
 
 ANSIBLE_CMD_KOTD_ENABLE :=
 
-kotd: $(KDEVOPS_HOSTS) .config
+kotd: inventory .config
 	$(Q)$(ANSIBLE_CMD_KOTD_ENABLE)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/devconfig.yml --tags vars,kotd \
+		playbooks/devconfig.yml --tags vars,kotd \
 		--extra-vars=@./extra_vars.yaml
 
-kotd-baseline: $(KDEVOPS_HOSTS) .config
+kotd-baseline: inventory .config
 	$(Q)$(ANSIBLE_CMD_KOTD_ENABLE)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/devconfig.yml --tags vars,kotd \
+		--limit 'baseline' \
+		playbooks/devconfig.yml \
+		--tags vars,kotd \
 		--extra-vars=@./extra_vars.yaml
 
-kotd-dev: $(KDEVOPS_HOSTS) .config
+kotd-dev: inventory .config
 	$(Q)$(ANSIBLE_CMD_KOTD_ENABLE)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/devconfig.yml --tags vars,kotd \
+		--limit 'dev' \
+		playbooks/devconfig.yml \
+		--tags vars,kotd \
 		--extra-vars=@./extra_vars.yaml
 
 kotd-help-menu:
diff --git a/scripts/krb5.Makefile b/scripts/krb5.Makefile
index d49e77ba02a8efcf09b8fbc689abe2a09a39c435..eeadadc519b495aefa7732a529d8d1f650108de7 100644
--- a/scripts/krb5.Makefile
+++ b/scripts/krb5.Makefile
@@ -8,13 +8,13 @@ ANSIBLE_EXTRA_ARGS += $(KRB5_EXTRA_ARGS)
 
 kdc:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l kdc \
+		--limit 'kdc' \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/kdc.yml
 
 krb5:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l krb5 \
+		--limit 'krb5' \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/krb5.yml
 
diff --git a/scripts/ktls.Makefile b/scripts/ktls.Makefile
index ee1de731329f47fec26e270acbd215c1aefa6629..83a8dbe6c88df4ce1161bfa827bf86ddb577de71 100644
--- a/scripts/ktls.Makefile
+++ b/scripts/ktls.Makefile
@@ -2,7 +2,6 @@ ifeq (y,$(CONFIG_KDEVOPS_SETUP_KTLS))
 
 ktls:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ktls.yml
 
diff --git a/scripts/nfsd.Makefile b/scripts/nfsd.Makefile
index 79b980123591094c18a967e013c543166e886e4b..9779ec56b06d3cc6b1164f0dca0f1b0795169e7d 100644
--- a/scripts/nfsd.Makefile
+++ b/scripts/nfsd.Makefile
@@ -29,7 +29,7 @@ ANSIBLE_EXTRA_ARGS += $(NFSD_EXTRA_ARGS)
 
 nfsd:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l nfsd \
+		--limit 'nfsd' \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/nfsd.yml
 
diff --git a/scripts/provision.Makefile b/scripts/provision.Makefile
index 92a7541089fcea5ae7471a6b49584ab3a3ee4e78..59d68abb2637644b3c9c7fd5d0657ede67c26918 100644
--- a/scripts/provision.Makefile
+++ b/scripts/provision.Makefile
@@ -69,8 +69,9 @@ KDEVOPS_MRPROPER += $(KDEVOPS_PROVISIONED_DEVCONFIG)
 
 $(KDEVOPS_PROVISIONED_DEVCONFIG):
 	$(Q)if [[ "$(CONFIG_KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK)" != "" ]]; then \
-		ansible-playbook $(ANSIBLE_VERBOSE) -i \
-			$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/$(KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK) ;\
+		ansible-playbook $(ANSIBLE_VERBOSE) \
+			--limit 'baseline:dev' \
+			$(KDEVOPS_PLAYBOOKS_DIR)/$(KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK) ;\
 	fi
 	$(Q)touch $(KDEVOPS_PROVISIONED_DEVCONFIG)
 
diff --git a/scripts/rdma.Makefile b/scripts/rdma.Makefile
index 5c8b60d72f25e5e8a88f1301e1efccb2f2c58a99..c63b63a7c9395d458745a63ba699cf5294875f96 100644
--- a/scripts/rdma.Makefile
+++ b/scripts/rdma.Makefile
@@ -2,7 +2,6 @@ ifeq (y,$(CONFIG_KDEVOPS_SETUP_RDMA_SIW))
 
 siw:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/siw.yml
 
@@ -16,7 +15,6 @@ ifeq (y,$(CONFIG_KDEVOPS_SETUP_RDMA_RXE))
 
 rxe:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/rxe.yml
 
diff --git a/scripts/smbd.Makefile b/scripts/smbd.Makefile
index 1be5b93411a5629122de19f4470fbd0d9230a2bf..ba696f7366eb1971aacb5064bd66504041a05756 100644
--- a/scripts/smbd.Makefile
+++ b/scripts/smbd.Makefile
@@ -9,7 +9,7 @@ ANSIBLE_EXTRA_ARGS += $(SMBD_EXTRA_ARGS)
 
 smbd:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l smbd \
+		--limit 'smbd' \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/smbd.yml
 
diff --git a/scripts/systemd-timesync.Makefile b/scripts/systemd-timesync.Makefile
index 9b84b4a1135961ee6feaa22f4c760b2009fd4a6e..148bf1737db42bce077bab215de5c99722ebbd77 100644
--- a/scripts/systemd-timesync.Makefile
+++ b/scripts/systemd-timesync.Makefile
@@ -20,14 +20,14 @@ ANSIBLE_EXTRA_ARGS += devconfig_enable_systemd_timesyncd_ntp_google_debian='True
 endif
 
 timesyncd-client:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts --extra-vars '{ kdevops_cli_install: True }' \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		--extra-vars '{ kdevops_cli_install: True }' \
 		--tags vars_simple,timesyncd \
 		$(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml
 
 timesyncd-server:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/install_systemd_timesyncd.yml
 
 timesyncd-status:
diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile
index 865c84c3c4bdd293d69fc6ce4df9e660c9742fac..c2883695e44bcbbe89047f3f96a9720f95f61404 100644
--- a/scripts/terraform.Makefile
+++ b/scripts/terraform.Makefile
@@ -101,13 +101,11 @@ ANSIBLE_EXTRA_ARGS += $(TERRAFORM_EXTRA_VARS)
 
 bringup_terraform:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		--connection=local --inventory localhost, \
 		playbooks/terraform.yml --tags bringup \
 		--extra-vars=@./extra_vars.yaml
 
 $(KDEVOPS_PROVISIONED_SSH):
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) \
 		playbooks/terraform.yml --tags ssh \
 		--extra-vars=@./extra_vars.yaml
 	$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
@@ -117,13 +115,11 @@ status_terraform:
 
 destroy_terraform:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		--connection=local -i $(KDEVOPS_HOSTFILE) \
 		playbooks/terraform.yml --tags destroy \
 		--extra-vars=@./extra_vars.yaml
 	$(Q)rm -f $(KDEVOPS_PROVISIONED_SSH) $(KDEVOPS_PROVISIONED_DEVCONFIG)
 
 $(KDEVOPS_TFVARS): $(KDEVOPS_TFVARS_TEMPLATE) .config
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gen_tfvars.yml \
 		--extra-vars=@./extra_vars.yaml
diff --git a/scripts/update_etc_hosts.Makefile b/scripts/update_etc_hosts.Makefile
index 4da15ea528374924b950824999fd6d70b4fd5aba..5fb90e987a32d5ae0449e09a2af5a5854b8a2ba5 100644
--- a/scripts/update_etc_hosts.Makefile
+++ b/scripts/update_etc_hosts.Makefile
@@ -1,6 +1,6 @@
 update_etc_hosts:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/update_etc_hosts.yml
+		playbooks/update_etc_hosts.yml
 
 KDEVOPS_BRING_UP_DEPS_EARLY += update_etc_hosts
 
diff --git a/scripts/vagrant.Makefile b/scripts/vagrant.Makefile
index e43a21d3c056225a0af5c3494cf64e75b648cd56..2c97f466a26127362971da6da0942fbff62a9b8c 100644
--- a/scripts/vagrant.Makefile
+++ b/scripts/vagrant.Makefile
@@ -80,21 +80,19 @@ extend-extra-args-vagrant:
 	fi
 
 vagrant_private_box_install:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/install_vagrant_boxes.yml
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		$(KDEVOPS_PLAYBOOKS_DIR)/install_vagrant_boxes.yml
 
 vagrant_9p_linux_clone:
 	$(Q)make linux-clone
 
 libvirt_pcie_passthrough_permissions:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		playbooks/libvirt_pcie_passthrough.yml
 
 $(KDEVOPS_PROVISIONED_SSH):
 	$(Q)if [[ "$(CONFIG_KDEVOPS_SSH_CONFIG_UPDATE)" == "y" ]]; then \
-		ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-			--inventory localhost, \
+		ansible-playbook $(ANSIBLE_VERBOSE) \
 			playbooks/update_ssh_config_vagrant.yml
 	fi
 	$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
diff --git a/scripts/workflows/lib/crash.py b/scripts/workflows/lib/crash.py
index 663de9324e87e3103bd9532e9ea6c44e6352d87a..d9d121d10a248c2ed00932918e5c8867c58495b4 100755
--- a/scripts/workflows/lib/crash.py
+++ b/scripts/workflows/lib/crash.py
@@ -769,9 +769,7 @@ class KernelCrashWatchdog:
             subprocess.run(
                 [
                     "ansible",
-                    "-i",
-                    "hosts",
-                    "all",
+                    "'baseline:dev'",
                     "-m",
                     "wait_for_connection",
                     "-l",
diff --git a/workflows/blktests/Makefile b/workflows/blktests/Makefile
index 33fb6482e2fa70f992893c3a076313992e19ce4f..92c96babccf05508732a976ab93e43a493ed9ba3 100644
--- a/workflows/blktests/Makefile
+++ b/workflows/blktests/Makefile
@@ -67,12 +67,13 @@ extend-extra-args-blktests:
 
 blktests:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/blktests.yml \
+		playbooks/blktests.yml \
 		--skip-tags run_tests,copy_results $(LIMIT_HOSTS)
 
 blktests-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/blktests.yml \
+		--limit 'baseline' \
+		playbooks/blktests.yml \
 		--tags run_tests,copy_results \
 		--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -85,14 +86,16 @@ blktests-baseline-kernelci:
 
 blktests-baseline-skip-kdevops-update:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/blktests.yml \
+		--limit 'baseline' \
+		playbooks/blktests.yml \
 		--tags run_tests,copy_results --skip-tags git_update \
 		--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
 
 blktests-baseline-run-oscheck-only:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/blktests.yml \
+		--limit 'baseline' \
+		playbooks/blktests.yml \
 		--tags run_tests,copy_results \
 		--skip-tags git_update,reboot,clean_results \
 		--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
@@ -100,14 +103,16 @@ blktests-baseline-run-oscheck-only:
 
 blktests-dev:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/blktests.yml \
+		--limit 'dev' \
+		playbooks/blktests.yml \
 		--tags run_tests,copy_results \
 		--extra-vars '{ $(BLKTESTS_DYNAMIC_RUNTIME_VARS) }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
 
 blktests-baseline-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/blktests.yml \
+		--limit 'baseline' \
+		playbooks/blktests.yml \
 		--tags copy_results,print_results \
 		--extra-vars '{ kdevops_run_blktests: True }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -116,7 +121,8 @@ blktests-results: blktests-baseline-results
 
 blktests-dev-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/blktests.yml \
+		--limit 'dev' \
+		playbooks/blktests.yml \
 		--tags copy_results,print_results \
 		--extra-vars '{ kdevops_run_blktests: True }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
diff --git a/workflows/common/Makefile b/workflows/common/Makefile
index cfbebebd8ce2ced1147d7f9f4982bcdcbce89118..9ae0a0a9aff51276bedcbc3682841d7f7de04168 100644
--- a/workflows/common/Makefile
+++ b/workflows/common/Makefile
@@ -38,7 +38,7 @@ endif # CONFIG_WORKFLOW_INFER_USER_AND_GROUP == y
 ifeq (y,$(CONFIG_KDEVOPS_WORKFLOW_GIT_CLONES_KDEVOPS_GIT))
 kdevops-git-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/common.yml --tags vars,kdevops_reset \
+		playbooks/common.yml --tags vars,kdevops_reset \
 		--extra-vars '{ kdevops_git_reset: True }' $(LIMIT_HOSTS)
 
 kdevops-help-menu:
diff --git a/workflows/cxl/Makefile b/workflows/cxl/Makefile
index 11d3e8582b43a7fd13ce07ca626799fffe5168cd..bb13005763f81327a3fa71df2367b8e9418e7428 100644
--- a/workflows/cxl/Makefile
+++ b/workflows/cxl/Makefile
@@ -20,42 +20,42 @@ include $(TOPDIR)/workflows/cxl/Makefile.kernel
 
 cxl:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--skip-tags run_tests,copy_results \
 		$(LIMIT_HOSTS)
 
 cxl-test-probe:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,cxl-test-prep,cxl-test-probe \
 		--extra-vars '{ $(CXL_DYNAMIC_RUNTIME_VARS) }' \
 		$(LIMIT_HOSTS)
 
 cxl-test-meson:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,cxl-test-prep,cxl-test-meson \
 		--extra-vars '{ $(CXL_DYNAMIC_RUNTIME_VARS) }' \
 		$(LIMIT_HOSTS)
 
 cxl-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,copy_results $(LIMIT_HOSTS)
 
 cxl-mem-setup:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,extra-vars,cxl-mem-setup $(LIMIT_HOSTS)
 
 cxl-create-dc-region:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,cxl-create-dc-region $(LIMIT_HOSTS)
 
 cxl-dcd-setup:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/cxl.yml \
+		playbooks/cxl.yml \
 		--tags vars,cxl-dcd-setup $(LIMIT_HOSTS)
 
 cxl-help-menu:
diff --git a/workflows/demos/reboot-limit/Makefile b/workflows/demos/reboot-limit/Makefile
index a6b4aaf788bd2e8fb30922a58c26f2bbe9a69a1e..e4cbf2947164dadc2c7bf4587f4afc6c8c46fdc5 100644
--- a/workflows/demos/reboot-limit/Makefile
+++ b/workflows/demos/reboot-limit/Makefile
@@ -25,7 +25,7 @@ REBOOT_LIMIT_TEST_TYPE :=$(subst ",,$(CONFIG_REBOOT_LIMIT_TEST_TYPE))
 # into the file extra_vars.yaml. The extra_vars.yaml file is always used as an
 # argument to ansible so that it reads our manually converted kconfig varibles
 # in ansible. We typically call a playbook with something like:
-# ansible-playbook -i hosts -l baseline playbooks/foo.yml --tags bar --extra-vars=@./extra_vars.yaml
+# ansible-playbook -l baseline playbooks/foo.yml --tags bar --extra-vars=@./extra_vars.yaml
 #
 # Likewise most playbooks also have something like the following as their first
 # task in their playbooks, so that they don't have to be specifying the
@@ -104,7 +104,7 @@ endif # CONFIG_KERNEL_CI
 # with tags "run_tests" or "copy_results".
 reboot-limit:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/reboot-limit.yml \
+		playbooks/reboot-limit.yml \
 		--skip-tags run_tests,copy_results
 
 # kdevops supports generic workflows such as the enabling you to then use the
@@ -134,10 +134,13 @@ reboot-limit:
 # fly.
 reboot-limit-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/reboot-limit.yml \
-		--tags vars,first_run,reset --extra-vars=@./extra_vars.yaml
+		--limit 'baseline' \
+		playbooks/reboot-limit.yml \
+		--tags vars,first_run,reset \
+		--extra-vars=@./extra_vars.yaml
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/reboot-limit.yml \
+		--limit 'baseline' \
+		playbooks/reboot-limit.yml \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml
 
@@ -155,16 +158,21 @@ reboot-limit-baseline-kernelci:
 # Resets the boot counters so we start from scratch
 reboot-limit-baseline-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/reboot-limit.yml \
-		--tags vars,reset --extra-vars=@./extra_vars.yaml
+		--limit 'baseline' \
+		playbooks/reboot-limit.yml \
+		--tags vars,reset \
+		--extra-vars=@./extra_vars.yaml
 
 # Below are the corresponding dev targets
 reboot-limit-dev-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/reboot-limit.yml \
-		--tags vars,first_run,reset --extra-vars=@./extra_vars.yaml
+		--limit 'dev' \
+		playbooks/reboot-limit.yml \
+		--tags vars,first_run,reset \
+		--extra-vars=@./extra_vars.yaml
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/reboot-limit.yml \
+		--limit 'dev' \
+		playbooks/reboot-limit.yml \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml
 
@@ -176,7 +184,9 @@ reboot-limit-dev-kernelci:
 
 reboot-limit-dev-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/reboot-limit.yml --tags vars,reset \
+		--limit 'dev' \
+		playbooks/reboot-limit.yml \
+		--tags vars,reset \
 		--extra-vars=@./extra_vars.yaml
 
 reboot-limit-help-menu:
diff --git a/workflows/fstests/Makefile b/workflows/fstests/Makefile
index a5e307b61b395a5a836d69bd9fea98d5cd49491c..48790d99c1dd6790d87accc56547853bb58a41b7 100644
--- a/workflows/fstests/Makefile
+++ b/workflows/fstests/Makefile
@@ -138,19 +138,22 @@ endif
 endif
 
 fstests: $(FSTESTS_BASELINE_EXTRA)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l localhost,baseline,dev \
-		-i hosts playbooks/fstests.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'localhost:baseline:dev' \
+		playbooks/fstests.yml \
 		--skip-tags run_tests,copy_results $(LIMIT_HOSTS)
 
 fstests-kdevops-setup: $(KDEVOPS_EXTRA_VARS) $(FSTESTS_BASELINE_EXTRA)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -l baseline,dev \
-		-i hosts playbooks/fstests.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		playbooks/fstests.yml \
 		--tags vars,kdevops_fstests_setup,gendisks \
 		$(LIMIT_HOSTS)
 
 fstests-baseline: $(FSTESTS_BASELINE_EXTRA)
 	$(Q)PYTHONUNBUFFERED=1 ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags vars,run_tests,copy_results \
 		--extra-vars '{ $(FSTESTS_DYNAMIC_RUNTIME_VARS) }' \
 		--extra-vars=@./extra_vars.yaml $(LIMIT_HOSTS)
@@ -163,7 +166,8 @@ fstests-baseline-kernelci: $(KDEVOPS_EXTRA_VARS)
 
 fstests-baseline-skip-kdevops-update: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags run_tests,copy_results \
 		--skip-tags git_update \
 		--extra-vars \
@@ -173,7 +177,8 @@ fstests-baseline-skip-kdevops-update: $(KDEVOPS_EXTRA_VARS)
 
 fstests-baseline-run-oscheck-only: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags run_tests,copy_results \
 		--skip-tags git_update,reboot,clean_results \
 		--extra-vars \
@@ -183,14 +188,14 @@ fstests-baseline-run-oscheck-only: $(KDEVOPS_EXTRA_VARS)
 
 fstests-config: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags vars,generate-fstests-config \
 		--extra-vars=@./extra_vars.yaml \
 		$(LIMIT_HOSTS)
 
 fstests-config-debug: $(KDEVOPS_EXTRA_VARS)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		playbooks/fstests.yml \
 		-e 'fstests_debug_localhost=True' \
 		--tags vars,generate-fstests-config \
@@ -198,7 +203,8 @@ fstests-config-debug: $(KDEVOPS_EXTRA_VARS)
 
 fstests-dev: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/fstests.yml \
+		--limit 'dev' \
+		playbooks/fstests.yml \
 		--tags vars,run_tests,copy_results \
 		--extra-vars \
 		'{ $(FSTESTS_DYNAMIC_RUNTIME_VARS) }' \
@@ -206,7 +212,8 @@ fstests-dev: $(KDEVOPS_EXTRA_VARS)
 
 fstests-baseline-results-tfb-ls: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags vars,tfb \
 		--skip-tags copy_final \
 		--extra-vars \
@@ -215,7 +222,8 @@ fstests-baseline-results-tfb-ls: $(KDEVOPS_EXTRA_VARS)
 
 fstests-baseline-results-tfb-trim: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags vars,tfb \
 		--skip-tags copy_final \
 		--extra-vars \
@@ -224,7 +232,8 @@ fstests-baseline-results-tfb-trim: $(KDEVOPS_EXTRA_VARS)
 
 fstests-baseline-results: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/fstests.yml \
+		--limit 'baseline' \
+		playbooks/fstests.yml \
 		--tags copy_results,print_results,tfb \
 		--extra-vars '{ kdevops_run_fstests: True }' \
 		--extra-vars=@./extra_vars.yaml \
@@ -234,7 +243,8 @@ fstests-results: fstests-baseline-results
 
 fstests-dev-results: $(KDEVOPS_EXTRA_VARS)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l dev playbooks/fstests.yml \
+		--limit 'dev' \
+		playbooks/fstests.yml \
 		--tags copy_results,print_results \
 		--extra-vars '{ kdevops_run_fstests: True }' \
 		--extra-vars=@./extra_vars.yaml \
diff --git a/workflows/gitr/Makefile b/workflows/gitr/Makefile
index b8a1b3a439911247c0b0289321e64873efb5bc83..09ef466f70b955fd3032f8f836ba1ce4854f8513 100644
--- a/workflows/gitr/Makefile
+++ b/workflows/gitr/Makefile
@@ -90,13 +90,13 @@ endif
 
 gitr:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline,dev \
+		--limit 'baseline:dev' \
 		--skip-tags run_tests,run_specific_tests,copy_results \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gitr.yml
 
 gitr-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline \
+		--limit 'baseline' \
 		--tags $(GITR_PLAY_TAGS) \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gitr.yml
@@ -109,7 +109,7 @@ gitr-baseline-kernelci:
 
 gitr-dev-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags $(GITR_PLAY_TAGS) \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gitr.yml
@@ -122,7 +122,7 @@ gitr-dev-kernelci:
 
 gitr-dev-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gitr.yml
diff --git a/workflows/linux/Makefile b/workflows/linux/Makefile
index 1e92264362ec8c7c2757d37423172425ae296316..18fd071bddb4c2fe2406038beefa2ff130666fe5 100644
--- a/workflows/linux/Makefile
+++ b/workflows/linux/Makefile
@@ -75,6 +75,7 @@ linux-help-menu:
 		echo "linux-mount        - Mounts 9p path on targets" ;\
 	fi
 	@echo "linux-deploy       - Builds, installs, updates GRUB and reboots - useful for rapid development"
+	@echo "linux-build        - Builds kernel"
 	@echo "linux-install      - Only builds and installs Linux"
 	@echo "linux-uninstall    - Remove a kernel you can pass arguments for the version such as KVER=6.5.0-rc7-next-20230825"
 	@echo "linux-clone        - Only clones Linux"
@@ -90,49 +91,63 @@ LINUX_HELP_EXTRA :=
 
 PHONY += linux
 linux: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
 
 PHONY += linux-mount
 linux-mount:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--tags vars,9p_mount \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
 
 PHONY += linux-deploy
 linux-deploy:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--tags vars,build-linux,install-linux,manual-update-grub,saved,vars,reboot \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
 
+PHONY += linux-build
+linux-build:
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+		--tags vars,build-linux,saved,vars \
+		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
+
 PHONY += linux-install
 linux-install:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--tags vars,build-linux,install-linux \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
 
 PHONY += linux-uninstall
 linux-uninstall:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--tags uninstall-linux,vars \
 		--extra-vars '{ "uninstall_kernel_enable": "True", $(LINUX_DYNAMIC_RUNTIME_VARS) }' \
 		$(LIMIT_HOSTS)
 
 linux-clone-clients: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) \
 		--tags vars,clone
 
 PHONY += linux-clone-9p
 linux-clone-9p: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
-		--inventory localhost, \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'localhost' \
 		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" \
 		--tags vars,clone
@@ -142,27 +157,30 @@ linux-clone: $(KDEVOPS_NODES) $(LINUX_CLONE_DEFAULT_TYPE)
 
 PHONY += linux-grub-setup
 linux-grub-setup:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) --tags manual-update-grub,saved,vars
 
 PHONY += linux-reboot
 linux-reboot:
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) --tags vars,reboot
 
 PHONY += uname
 uname:
-	$(Q)ansible 'baseline:dev' -i hosts -b -m command -a "uname -r" -o \
+	$(Q)ansible 'baseline:dev' -b -m command -a "uname -r" -o \
 	| awk -F '|' '{gsub(/^ +| +$$/, "", $$2); printf "%-30s %s\n", $$1, $$4}' \
 	| sed -e 's|(stdout)||'
 
 ifeq (y,$(CONFIG_KDEVOPS_WORKFLOW_ENABLE_CXL))
 PHONY += linux-cxl
 linux-cxl: $(KDEVOPS_NODES)
-	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
-		$(KDEVOPS_HOSTFILE) $(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+		--limit 'baseline:dev' \
+		$(KDEVOPS_PLAYBOOKS_DIR)/bootlinux.yml \
 		--tags 'vars,cxl-build,cxl-install'                             \
 		--extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS)
 
diff --git a/workflows/ltp/Makefile b/workflows/ltp/Makefile
index 081e8364d7f7dbf0cb713285ec869d9f1977f539..ddbdf7399789ffae037dabd4ec8f49e696cff18b 100644
--- a/workflows/ltp/Makefile
+++ b/workflows/ltp/Makefile
@@ -116,13 +116,13 @@ endif
 
 ltp:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline,dev \
+		--limit 'baseline:dev' \
 		--skip-tags run_tests,copy_results \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ltp.yml
 
 ltp-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline \
+		--limit 'baseline' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ltp.yml
@@ -135,7 +135,7 @@ ltp-baseline-kernelci:
 
 ltp-dev-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ltp.yml
@@ -148,7 +148,7 @@ ltp-dev-kernelci:
 
 ltp-dev-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ltp.yml
diff --git a/workflows/nfstest/Makefile b/workflows/nfstest/Makefile
index 80c00c12c20520953e0c0a11d2f324512fb51190..3945edf66d83dcc422337c3f6c693ddd04500251 100644
--- a/workflows/nfstest/Makefile
+++ b/workflows/nfstest/Makefile
@@ -73,13 +73,13 @@ endif
 
 nfstest:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline,dev \
+		--limit 'baseline:dev' \
 		--skip-tags run_tests,copy_results \
 		$(KDEVOPS_PLAYBOOKS_DIR)/nfstest.yml
 
 nfstest-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline \
+		--limit 'baseline' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/nfstest.yml
@@ -92,7 +92,7 @@ nfstest-baseline-kernelci:
 
 nfstest-dev-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/nfstest.yml
@@ -105,7 +105,7 @@ nfstest-dev-kernelci:
 
 nfstest-dev-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/nfstest.yml
diff --git a/workflows/pynfs/Makefile b/workflows/pynfs/Makefile
index dc4b29c52ccf6455e52a6de8f1f12de81bc484a2..1dfd349c868c3fd58565ac8a8f9eb86aabc1b588 100644
--- a/workflows/pynfs/Makefile
+++ b/workflows/pynfs/Makefile
@@ -45,18 +45,18 @@ endif
 # Makefile for pynfs targets
 pynfs:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline,dev \
+		--limit 'baseline:dev' \
 		--skip-tags run_tests,copy_results,clean_local_results \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
 
 pynfs-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline \
+		--limit 'baseline' \
 		--tags vars,first_run,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l baseline \
+		--limit 'baseline' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
@@ -75,12 +75,12 @@ pynfs-baseline-kernelci:
 # Below are the corresponding dev targets
 pynfs-dev-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,first_run,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,run_tests,copy_results \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
@@ -93,7 +93,7 @@ pynfs-dev-kernelci:
 
 pynfs-dev-reset:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i $(KDEVOPS_HOSTFILE) -l dev \
+		--limit 'dev' \
 		--tags vars,reset \
 		--extra-vars=@./extra_vars.yaml \
 		$(KDEVOPS_PLAYBOOKS_DIR)/pynfs.yml
diff --git a/workflows/selftests/Makefile b/workflows/selftests/Makefile
index 075da61b0c26829ab4732d640da736cc958ee394..d3b7044c4ec7bf2468e36b5a1242ff1831356041 100644
--- a/workflows/selftests/Makefile
+++ b/workflows/selftests/Makefile
@@ -33,24 +33,27 @@ include $(TOPDIR)/workflows/selftests/tests/Makefile.xarray
 
 selftests:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/selftests.yml \
+		playbooks/selftests.yml \
 		--skip-tags run_tests,copy_results,check_results \
 		$(LIMIT_HOSTS)
 
 selftests-baseline:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/selftests.yml \
+		--limit 'baseline' \
+		playbooks/selftests.yml \
 		--extra-vars '{ $(SELFTESTS_DYNAMIC_RUNTIME_VARS) }' \
 		--tags vars,run_tests,copy_results,check_results $(LIMIT_HOSTS)
 
 selftests-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/selftests.yml \
+		--limit 'baseline' \
+		playbooks/selftests.yml \
 		--tags vars,copy_results,check_results $(LIMIT_HOSTS)
 
 selftests-check-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts -l baseline playbooks/selftests.yml \
+		--limit 'baseline' \
+		playbooks/selftests.yml \
 		--tags vars,check_results $(LIMIT_HOSTS)
 
 selftests-help-main:
diff --git a/workflows/sysbench/Makefile b/workflows/sysbench/Makefile
index 21cb297e722c6190ecd2b8ced96d7fa675a38214..daf7bc75da2b7b164ca8a2bd891a41d097b8669b 100644
--- a/workflows/sysbench/Makefile
+++ b/workflows/sysbench/Makefile
@@ -29,36 +29,36 @@ TAGS_SYSBENCH_RESULTS += results
 # Target to set up sysbench (MySQL or PostgreSQL)
 sysbench:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--skip-tags $(subst $(space),$(comma),$(TAGS_SYSBENCH_RUN))
 
 # Target to run sysbench tests (including telemetry)
 sysbench-test:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--tags $(subst $(space),$(comma),$(TAGS_SYSBENCH_TEST))
 
 # Optional target to collect telemetry
 sysbench-telemetry:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--tags $(subst $(space),$(comma),$(TAGS_SYSBENCH_TELEMETRY))
 
 # Optional target to collect all results
 sysbench-results:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--tags $(subst $(space),$(comma),$(TAGS_SYSBENCH_RESULTS))
 
 sysbench-clean:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--tags vars,clean
 
 # Optional in case you want to improve graphing
 sysbench-plot:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-		-i hosts playbooks/sysbench.yml \
+		playbooks/sysbench.yml \
 		--tags vars,plot
 
 # Help target to show available options

-- 
2.50.0


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

* [PATCH v4 09/11] ansible_cfg: add support to change ansible.cfg file location
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (7 preceding siblings ...)
  2025-07-02 19:36 ` [PATCH v4 08/11] Makefile: use inventory from ansible.cfg Daniel Gomez
@ 2025-07-02 19:36 ` Daniel Gomez
  2025-07-02 19:36 ` [PATCH v4 10/11] docs: ansible_cfg: add documentation Daniel Gomez
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:36 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

This adds support to change the Ansible Configuration filename and
location via Kconfig.

Ansible checks the ansible.cfg file using the following order [1]:

* ANSIBLE_CONFIG (environment variable if set)
* ansible.cfg (in the current directory)
* ~/.ansible.cfg (in the home directory)
* /etc/ansible/ansible.cfg

In order to set a custom path, export the ANSIBLE_CONFIG [2] that points
to the file selected in Kconfig. But only when the Kconfig option is not
empty. In such case, let the user handle the ANSIBLE_CONFIG variable.

[1]
https://docs.ansible.com/ansible/latest/reference_appendices/
config.html#the-configuration-file

[2]
https://docs.ansible.com/ansible/latest/reference_appendices/
config.html#envvar-ANSIBLE_CONFIG

In addition, fix verbose mode (V=1) for the ansible-playbook command by
removing the extra @.

Remove the file from MAINTAINERS list as it is autogenerated and not
in tree.

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 MAINTAINERS                                |  1 -
 Makefile                                   | 17 ++++++++++-------
 kconfigs/Kconfig.ansible_cfg               | 23 +++++++++++++++++++++++
 playbooks/roles/ansible_cfg/tasks/main.yml |  3 ++-
 4 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 30591209e5a05faacfba87ddd2038c92ec846bda..d6f578c0be62ac3809084223ae190a70d3b23d0a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -72,7 +72,6 @@ M:	Daniel Gomez <da.gomez@samsung.com>
 L:	kdevops@lists.linux.dev
 S:	Maintained
 T:	git https://github.com/linux-kdevops/kdevops.git
-F:	ansible.cfg
 F:	kconfigs/Kconfig.ansible_cfg
 F:	playbooks/ansible_cfg.yml
 F:	playbooks/roles/ansible_cfg
diff --git a/Makefile b/Makefile
index 9387c7cd82dbf8a68cc3738d7b2211c37f4298e7..acbdd1abd946bf1de22fb063183848b6f4b7508e 100644
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,10 @@ KDEVOPS_NODES_ROLE_TEMPLATE_DIR :=		$(KDEVOPS_PLAYBOOKS_DIR)/roles/gen_nodes/tem
 export KDEVOPS_NODES_TEMPLATE :=
 export KDEVOPS_MRPROPER :=
 
+ifneq ($(strip $(CONFIG_ANSIBLE_CFG_FILE)),)
+ANSIBLE_CFG_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_FILE) | tr --delete '"')
+export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE)
+endif
 ANSIBLE_INVENTORY_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_INVENTORY) | tr --delete '"')
 
 KDEVOPS_INSTALL_TARGETS :=
@@ -195,9 +199,8 @@ include scripts/gen-nodes.Makefile
 	make -f scripts/build.Makefile help                             ;\
 	false)
 
-
-ansible.cfg: .config
-	@$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+$(ANSIBLE_CFG_FILE): .config
+	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/ansible_cfg.yml \
 		--extra-vars=@./.extra_vars_auto.yaml
 
@@ -215,7 +218,7 @@ playbooks/secret.yml:
 	@echo "$(CONFIG_KDEVOPS_REG_TWOLINE_REGCODE_VAR): $(CONFIG_KDEVOPS_REG_TWOLINE_REGCODE)" >> $@
 
 ifeq (y,$(CONFIG_KDEVOPS_ENABLE_DISTRO_EXTRA_ADDONS))
-$(KDEVOPS_EXTRA_ADDON_DEST): .config ansible.cfg $(KDEVOPS_EXTRA_ADDON_SOURCE)
+$(KDEVOPS_EXTRA_ADDON_DEST): .config $(ANSIBLE_CFG_FILE) $(KDEVOPS_EXTRA_ADDON_SOURCE)
 	$(Q)cp $(KDEVOPS_EXTRA_ADDON_SOURCE) $(KDEVOPS_EXTRA_ADDON_DEST)
 endif
 
@@ -226,13 +229,13 @@ include scripts/bringup.Makefile
 endif
 
 DEFAULT_DEPS += $(ANSIBLE_INVENTORY_FILE)
-$(ANSIBLE_INVENTORY_FILE): .config ansible.cfg $(KDEVOPS_HOSTS_TEMPLATE)
+$(ANSIBLE_INVENTORY_FILE): .config $(ANSIBLE_CFG_FILE) $(KDEVOPS_HOSTS_TEMPLATE)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gen_hosts.yml \
 		--extra-vars=@./extra_vars.yaml
 
 DEFAULT_DEPS += $(KDEVOPS_NODES)
-$(KDEVOPS_NODES) $(KDEVOPS_VAGRANT): .config ansible.cfg $(KDEVOPS_NODES_TEMPLATE)
+$(KDEVOPS_NODES) $(KDEVOPS_VAGRANT): .config $(ANSIBLE_CFG_FILE) $(KDEVOPS_NODES_TEMPLATE)
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
 		$(KDEVOPS_PLAYBOOKS_DIR)/gen_nodes.yml \
 		--extra-vars=@./extra_vars.yaml
@@ -263,7 +266,7 @@ mrproper:
 	$(Q)rm -f $(KDEVOPS_NODES)
 	$(Q)rm -f $(ANSIBLE_CFG_INVENTORY) $(KDEVOPS_MRPROPER)
 	$(Q)rm -f .config .config.old extra_vars.yaml $(KCONFIG_YAMLCFG)
-	$(Q)rm -f ansible.cfg
+	$(Q)rm -f $(ANSIBLE_CFG_FILE)
 	$(Q)rm -f playbooks/secret.yml $(KDEVOPS_EXTRA_ADDON_DEST)
 	$(Q)rm -rf include
 	$(Q)rm -rf guestfs
diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg
index 40faa6fb6ff1fb37980fa72c4ed9cecd91b16726..3ca66966fadec39975a50c992911df9a71df77ee 100644
--- a/kconfigs/Kconfig.ansible_cfg
+++ b/kconfigs/Kconfig.ansible_cfg
@@ -14,6 +14,29 @@ config ANSIBLE_CFG_INVENTORY_SET_BY_CLI
 	bool
 	default $(shell, scripts/check-cli-set-var.sh KDEVOPS_HOSTS)
 
+config ANSIBLE_CFG_FILE
+	string "Ansible configuration file"
+	output yaml
+	default "$(TOPDIR_PATH)/ansible.cfg"
+	help
+	  Path and filename to the Ansible configuration file.
+
+	  This option lets you specify the path and filename for the Ansible
+	  configuration file. If the specified file already exists, it will not
+	  be overwritten. Otherwise, kdevops will generate one using the settings
+	  defined in this Kconfig menu.
+
+	  If this option is left undefined or set to an empty string, kdevops
+	  will not generate any configuration file. In that case, Ansible will
+	  fall back to its own search order to locate a config file:
+	    1. The ANSIBLE_CONFIG environment variable (if set)
+	    2. ./ansible.cfg (in the current working directory)
+	    3. ~/.ansible.cfg (in the user's home directory)
+	    4. /etc/ansible/ansible.cfg (system-wide default)
+
+	  For more details, refer to the Ansible documentation:
+	  https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file
+
 menu "Ansible Callback Plugin Configuration"
 choice
 	prompt "Ansible Callback Plugin"
diff --git a/playbooks/roles/ansible_cfg/tasks/main.yml b/playbooks/roles/ansible_cfg/tasks/main.yml
index 83a1659f8a87829795d38f7f4c65840ab93e403b..c2b0db1057acc2fc1187c8ca0409b2b4011930af 100644
--- a/playbooks/roles/ansible_cfg/tasks/main.yml
+++ b/playbooks/roles/ansible_cfg/tasks/main.yml
@@ -14,7 +14,8 @@
 - name: Generate kdevops ansible.cfg
   ansible.builtin.template:
     src: "ansible.cfg.j2"
-    dest: "{{ topdir_path }}/ansible.cfg"
+    dest: "{{ ansible_cfg_file }}"
+    mode: '0755'
 
 - name: Update ansible.cfg access modification time so make sees it updated
   ansible.builtin.file:

-- 
2.50.0


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

* [PATCH v4 10/11] docs: ansible_cfg: add documentation
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (8 preceding siblings ...)
  2025-07-02 19:36 ` [PATCH v4 09/11] ansible_cfg: add support to change ansible.cfg file location Daniel Gomez
@ 2025-07-02 19:36 ` Daniel Gomez
  2025-07-02 19:36 ` [PATCH v4 11/11] build.Makefile: fix verbosity of clean target Daniel Gomez
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:36 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Add documentation file for the Ansible Configuration Module
(ansible_cfg).

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 MAINTAINERS                           |   1 +
 docs/kdevops-ansible-configuration.md | 102 ++++++++++++++++++++++++++++++++++
 2 files changed, 103 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index d6f578c0be62ac3809084223ae190a70d3b23d0a..87273caa77c737de6b3d6b3c88c12653a1f886d9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -72,6 +72,7 @@ M:	Daniel Gomez <da.gomez@samsung.com>
 L:	kdevops@lists.linux.dev
 S:	Maintained
 T:	git https://github.com/linux-kdevops/kdevops.git
+F:	docs/kdevops-ansible-configuration.md
 F:	kconfigs/Kconfig.ansible_cfg
 F:	playbooks/ansible_cfg.yml
 F:	playbooks/roles/ansible_cfg
diff --git a/docs/kdevops-ansible-configuration.md b/docs/kdevops-ansible-configuration.md
new file mode 100644
index 0000000000000000000000000000000000000000..c5d3a5d5d7ada4821735d6eae7e93512216a2e85
--- /dev/null
+++ b/docs/kdevops-ansible-configuration.md
@@ -0,0 +1,102 @@
+# kdevops Ansible Configuration
+
+The Ansible Configuration module in kdevops allows the user to configure the
+[Ansible configuration file](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file)
+, typically `ansible.cfg` (in kdevops `$TOPDIR_PATH` directory). This file
+includes some Ansible settings such as the callback plugin and the Ansible
+inventory file configuration (a comma-separated list).
+
+
+## Ansible Configuration File (`ANSIBLE_CFG_FILE`)
+
+This setting allows the user to define a path and filename to the Ansible
+configuration file.
+
+If the specified file already exists, it will not be overwritten. Otherwise,
+kdevops will generate one using the Kconfig settings.
+
+Default: `$(TOPDIR_PATH)/ansible.cfg`
+
+See: [Ansible config file](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file)
+
+
+## Ansible Inventory File (`ANSIBLE_CFG_INVENTORY`)
+
+Comma-separated list of Ansible inventory source paths. Each entry can be a path
+to a file or directory.
+
+Example: `/path/to/hosts,/path/to/inventory_dir`
+
+This is written to the `[defaults]` section of the generated `ansible.cfg`:
+
+```ini
+[defaults]
+inventory = /path/to/hosts,/path/to/inventory_dir
+```
+
+Default: `$(TOPDIR_PATH)/hosts`
+
+See: [Ansible inventory sources](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list)
+
+
+## Callback Plugin Configuration (`ANSIBLE_CFG_CALLBACK_PLUGIN*`)
+
+The callback plugin determines how Ansible output is displayed. You may select one of:
+
+- [debug](https://docs.ansible.com/ansible/latest/collections/ansible/posix/debug_callback.html): formatted stdout/stderr display
+- [dense](https://docs.ansible.com/ansible/latest/collections/community/general/dense_callback.html): minimal stdout output
+- custom: this allows defining the plugin name manually
+
+See more plugins:
+[Ansible callback plugins list](https://docs.ansible.com/ansible/latest/collections/index_callback.html)
+
+Also, see the Parameters section in the debug/dense for a description of the
+callback plugin options.
+
+
+## Python Interpreter Configuration (`ANSIBLE_CFG_INTERPRETER_PYTHON`)
+
+This allows selecting how Ansible discovers or uses a Python interpreter on target systems.
+
+Options include:
+
+- auto
+- auto_legacy
+- auto_legacy_client
+- auto_silent
+- custom: this allows defining the path manually
+
+See:
+- [Interpreter Discovery](https://docs.ansible.com/ansible/latest/reference_appendices/interpreter_discovery.html#interpreter-discovery)
+- [Using Python 3](https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html#using-python-3-on-the-managed-machines-with-commands-and-playbooks)
+
+This option can be controlled via command line Makefile parameter `ANSIBLE_CFG_INTERPRETER_PYTHON`.
+
+
+## Forks Configuration (`ANSIBLE_CFG_FORKS`)
+
+Control the number of parallel forks (concurrent tasks) Ansible may use.
+
+Default: 10
+
+See: [Forks](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_strategies.html#setting-the-number-of-forks)
+
+This option can be controlled via command line Makefile parameter `ANSIBLE_CFG_FORKS`.
+
+
+## Ansible Deprecation Warnings (`ANSIBLE_CFG_DEPRECATION_WARNINGS`)
+
+Toggle whether Ansible displays deprecation warnings.
+
+Default: Enabled
+
+See: [Deprecation warnings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#deprecation-warnings)
+
+
+## Ansible Reconnection Retries (`ANSIBLE_CFG_RECONNECTION_RETRIES`, OpenSUSE only)
+
+Number of SSH reconnection attempts. Ansible retries connections only on SSH return code 255.
+
+Default: 2000
+
+See: [Reconnection retries](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ssh_connection.html#parameter-reconnection_retries)

-- 
2.50.0


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

* [PATCH v4 11/11] build.Makefile: fix verbosity of clean target
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (9 preceding siblings ...)
  2025-07-02 19:36 ` [PATCH v4 10/11] docs: ansible_cfg: add documentation Daniel Gomez
@ 2025-07-02 19:36 ` Daniel Gomez
  2025-07-02 23:27 ` [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Chuck Lever
  2025-07-04 15:39 ` Chuck Lever
  12 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-02 19:36 UTC (permalink / raw)
  To: Luis Chamberlain, Chuck Lever; +Cc: kdevops, Daniel Gomez, Daniel Gomez

From: Daniel Gomez <da.gomez@samsung.com>

Fixes verbosity of the clean target. When used with new verbosity, it
makes it fail as it tries to print the @ command.

==> [mrproper]
+ @rm -f *.o
/bin/sh: 1: @rm: not found
make[1]: *** [scripts/build.Makefile:7: clean] Error 127
make: *** [Makefile:267: mrproper] Error 2

Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
---
 scripts/build.Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/build.Makefile b/scripts/build.Makefile
index 62aaccf9928daabb04d4da681850087aeab85996..6fe5c114d2b5a8f5779ff9b3cce79a1e1685c496 100644
--- a/scripts/build.Makefile
+++ b/scripts/build.Makefile
@@ -4,7 +4,7 @@
 PHONY += clean
 clean: $(clean-subdirs)
 	$(Q)$(MAKE) -C scripts/kconfig/ clean
-	$(Q)@rm -f *.o $(obj-y)
+	$(Q)rm -f *.o $(obj-y)
 
 PHONY += mrproper
 mrproper:

-- 
2.50.0


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

* Re: [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (10 preceding siblings ...)
  2025-07-02 19:36 ` [PATCH v4 11/11] build.Makefile: fix verbosity of clean target Daniel Gomez
@ 2025-07-02 23:27 ` Chuck Lever
  2025-07-03 11:48   ` Daniel Gomez
  2025-07-04 15:39 ` Chuck Lever
  12 siblings, 1 reply; 16+ messages in thread
From: Chuck Lever @ 2025-07-02 23:27 UTC (permalink / raw)
  To: Daniel Gomez, Luis Chamberlain; +Cc: kdevops, Daniel Gomez

On 7/2/25 3:35 PM, Daniel Gomez wrote:
> Following Chuck's proposed changes to make task parallelism configurable
> via the Ansible configuration file [1], and the subsequent cleanup
> of ansible-playbook calls [2] along with the Python interpreter
> improvements [3] to better support distros like NixOS through simplified
> global interpreter configuration [4], I considered applying the same
> approach to the inventory file. This would further streamline our
> Ansible wrapper in the kdevops Makefiles.
> 
> Why make this change? By specifying the inventory file (typically
> 'hosts' file in kdevops) directly in ansible.cfg, we eliminate the
> need for repeated -i/--inventory arguments and gain flexibility in
> where the inventory file is located. This also supports the broader
> sandboxing goal discussed in [5]. Moreover, by including localhost in
> the inventory, we can clean up the Makefile wrapper even further by
> removing --connection=localhost and -i localhost options, while also
> enabling workflows to run directly on the controller node (with some
> extra more modifications).
> 
> https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/
> 
> [1]
> Increase default task parallelism
> https://lore.kernel.org/kdevops/20250404204827.34941-1-cel@kernel.org/
> [2]
> [PATCH 2/2] Makefile: Remove "-f 30" command line argument
> https://lore.kernel.org/kdevops/20250417172119.3190398-2-cel@kernel.org/
> 
> [3]
> https://lore.kernel.org/kdevops/20250404-python-interpreter-v1-0-04783b627ce7@samsung.com/
> 
> [4]
> https://lore.kernel.org/kdevops/kwpt5iizzmryybpg6z3fgs6koak27rjggydfighd42wn7mxqja@2hwvtppppzsk/
> 
> [5]
> https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/
> 
> This series promotes the Ansible inventory file (typically 'hosts'
> in kdevops) to the Ansible Configuration file (ansible.cfg). By doing
> this, we allow to control the hosts globally rather than in all the
> ansible-playbook commands, as well as clean up the ansible-playbook
> command.
> 
> So, we don't need to define anymore the inventory file in the command.
> However, playbooks may still be controlled on which targets the playbook
> is run. This is done through the playbook itself and/or through the
> ansible-playbook argument --limit. Also notice delegate_to is needed
> when the playbook runs and iterates on specific nodes such as baseline
> and dev but a specific task needs to be handled back to the controller
> node.
> 
> As part of the series, the term 'all' to refer to all hosts is redefined
> to include the localhost. This removes the need to be explicit with
> localhost playbooks runs, as it's now just another target in the
> inventory file. This term redefinition requires to change playbooks that
> use the term all, either through ansible-playbook command or through
> the host: field in the YAML playbook file. For this reason, the term
> has been replaced in most cases with 'baseline:dev', which means all
> targets in the inventory file in the baseline and dev groups, matching
> the 'all' concept in the former configuration 'hosts' file. Except the
> bootlinux.yml and guestfs.yml playbooks, all playbooks run either on
> localhost or remote targets (the previous 'all' definition). Therefore,
> all playbooks have been converted to use 'hosts: baseline:dev'. For
> the bootlinux.yml playbook, 'all' is kept and the control of host
> execution is done via the --limit argument. It was found that only
> the linux-clone-9p target runs the bootlinux playbook in the localhost
> while the rest of linux-* targets run the playbook in all the remotes
> (baseline:dev). For guestfs.yml, a combination of --limit + delegate_to
> is needed for the reason explained above: to iterate on the targets
> (baseline:dev) but delegate certain tags to the controller node with
> delegate_to.
> 
> In addition, in order to help me debug this change, I found it
> convenient to print the Makefile target name being run before the
> command. This allows to be more explicit in verbose mode (V=1) when a
> playbook is run (or any subsequent command in the target). And makes it
> easier to discover which target the ansible-playbook command belongs to
> when debugging playbook execution. To clarify, V=1 already prints the
> command but not the Makefile target. The command output behaviour will
> be a bit different as it is today as the command itself will be printed
> in one line, instead of multiple.
> 
> Series has been tested here:
> v1:
> https://github.com/linux-kdevops/kdevops/actions/runs/14773869477
> v3:
> https://github.com/linux-kdevops/kdevops/actions/runs/14846101950
> v4:
> https://github.com/linux-kdevops/kdevops/actions/runs/16033723055
> 
> Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
> ---
> Changes in v4:
> - Add trailers (from Luis)
> - Rebase on top of main
> - Link to v3: https://lore.kernel.org/r/20250505-ansible_cfg_inventory-v3-0-a153d93c35c4@samsung.com
> 
> Changes in v3:
> - Fix LIMIT_HOSTS. When HOSTS="host1" was used, the --limit replacement
> did not work anymore because of the quotes where not needed when using
> long form arguments
> - Fix bootlinux-local limit in linux target.
> - Replace all:!localhost with baseline:dev as suggested by Luis. This
> allows to include localhost as part of the baseline and/or dev groups
> for baremetal workflows
> - Allow to configure the ansible.cfg location. This requires to export
> the ANSIBLE_CONFIG. This also enables sandboxing
> - Fix debug mode when ansible.cfg is created (command was not printed
> because of double @)
> - Add back KDEVOPS_HOSTS as cli option. KDEVOPS_HOSTS was not part of
> the cli before but it was allowed to be overwritten at command line
> time. This allows to be explicit and keeps backwards compatibility with
> the variable
> - Extend ANSIBLE_CFG_FILE help as per Chuck's suggestion
> - Move ANSIBLE_CFG_FILE location in Kconfig and place it after
> SET_BY_CLI options
> - Remove crash_watchdog.py inventory arguments (Reported by Luis)
> - Remove inventory arguments from docs, READMEs and remaining Makefiles
> - Move ueh_hosts hunk to fix undefined variable in patch "gen_hosts:
> templates: add localhost to all hosts"
> - Rename CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE to CONFIG_ANSIBLE_CFG_INVENTORY
> in scripts/lib.sh and kconfigs/Kconfig.ansible_provisioning
> - Update cover letter reasoning and commit messages for better clarity
> - Link to v2: https://lore.kernel.org/r/20250502-ansible_cfg_inventory-v2-0-d3c19ff4aa6e@samsung.com
> 
> Changes in v2:
> - Update ANSIBLE_CFG_INVENTORY help description as per Chuck suggestion
> - Add docs/kdevops-ansible-configuration.md for extensive module
> documentation
> - Include fix to avoid generating always the ansible.cfg and hosts
> files. Reported by Chuck
> The same commit change also includes support to change the ansible.cfg
> path.
> - Link to v1: https://lore.kernel.org/r/20250501-ansible_cfg_inventory-v1-0-c568bbaa3502@samsung.com
> 
> ---
> Daniel Gomez (11):
>       playbooks: fix playbook name for all hosts plays
>       playbooks: fix playbook name for localhost plays
>       Makefile: use long form of limit argument for clarity
>       Makefile: print target when debug
>       .github/workflows/fstests.yml: enable make verbosity
>       ansible_cfg: add inventory support
>       gen_hosts: templates: include localhost in the all group
>       Makefile: use inventory from ansible.cfg
>       ansible_cfg: add support to change ansible.cfg file location
>       docs: ansible_cfg: add documentation
>       build.Makefile: fix verbosity of clean target
> 
>  .github/workflows/fstests.yml                      |  16 ++--
>  MAINTAINERS                                        |   2 +-
>  Makefile                                           |  42 +++++----
>  Makefile.btrfs_progs                               |   4 +-
>  Makefile.build_qemu                                |  12 +--
>  Makefile.hypervisor-tunings                        |   3 +-
>  Makefile.kdevops                                   |  19 ++--
>  Makefile.linux-mirror                              |   6 +-
>  Makefile.postfix                                   |   3 +-
>  docs/kdevops-ansible-configuration.md              | 102 +++++++++++++++++++++
>  docs/kdevops-terraform.md                          |   2 +-
>  kconfigs/Kconfig.ansible_cfg                       |  46 ++++++++++
>  kconfigs/Kconfig.ansible_provisioning              |   8 +-
>  playbooks/blktests.yml                             |   3 +-
>  playbooks/bootlinux.yml                            |   3 +-
>  playbooks/build_qemu.yml                           |   3 +-
>  playbooks/common.yml                               |   3 +-
>  playbooks/create_data_partition.yml                |   3 +-
>  playbooks/cxl.yml                                  |   3 +-
>  playbooks/devconfig.yml                            |   3 +-
>  playbooks/fstests.yml                              |   6 +-
>  playbooks/gen-pci-kconfig.yml                      |   3 +-
>  playbooks/gen_hosts.yml                            |   3 +-
>  playbooks/gen_nodes.yml                            |   3 +-
>  playbooks/gen_tfvars.yml                           |   3 +-
>  playbooks/gitr.yml                                 |   3 +-
>  playbooks/hypervisor-tuning.yml                    |   3 +-
>  playbooks/install-menuconfig-deps.yml              |   3 +-
>  playbooks/install_systemd_journal_remote.yml       |   3 +-
>  playbooks/install_systemd_timesyncd.yml            |   3 +-
>  playbooks/install_terraform.yml                    |   3 +-
>  playbooks/install_vagrant_boxes.yml                |   3 +-
>  playbooks/iscsi.yml                                |   3 +-
>  playbooks/kdc.yml                                  |   3 +-
>  playbooks/kdevops_archive.yml                      |   3 +-
>  playbooks/krb5.yml                                 |   3 +-
>  playbooks/ktls.yml                                 |   3 +-
>  playbooks/libvirt_pcie_passthrough.yml             |   3 +-
>  playbooks/libvirt_storage_pool_create.yml          |   3 +-
>  playbooks/libvirt_user.yml                         |   3 +-
>  playbooks/linux-mirror.yml                         |   3 +-
>  playbooks/ltp.yml                                  |   3 +-
>  playbooks/nfsd.yml                                 |   3 +-
>  playbooks/nfstest.yml                              |   4 +-
>  playbooks/pkg.yml                                  |   3 +-
>  playbooks/postfix_relay_host.yml                   |   3 +-
>  playbooks/pynfs.yml                                |   3 +-
>  playbooks/reboot-limit.yml                         |   3 +-
>  playbooks/roles/ansible_cfg/tasks/main.yml         |   3 +-
>  .../roles/ansible_cfg/templates/ansible.cfg.j2     |   1 +
>  playbooks/roles/bootlinux/README.md                |  12 +--
>  playbooks/roles/common/README.md                   |   2 +-
>  playbooks/roles/devconfig/README.md                |   2 +-
>  playbooks/roles/gen_hosts/defaults/main.yml        |   1 -
>  playbooks/roles/gen_hosts/tasks/main.yml           |  54 +++++------
>  playbooks/roles/gen_hosts/templates/blktests.j2    |   1 +
>  playbooks/roles/gen_hosts/templates/cxl.j2         |   1 +
>  playbooks/roles/gen_hosts/templates/fstests.j2     |   1 +
>  playbooks/roles/gen_hosts/templates/gitr.j2        |   1 +
>  playbooks/roles/gen_hosts/templates/hosts.j2       |   2 +
>  playbooks/roles/gen_hosts/templates/ltp.j2         |   1 +
>  playbooks/roles/gen_hosts/templates/nfstest.j2     |   1 +
>  playbooks/roles/gen_hosts/templates/pynfs.j2       |   1 +
>  playbooks/roles/gen_hosts/templates/selftests.j2   |   1 +
>  playbooks/roles/gen_hosts/templates/sysbench.j2    |   1 +
>  playbooks/roles/guestfs/tasks/main.yml             |   6 ++
>  playbooks/roles/libvirt_user/README.md             |   4 +-
>  playbooks/roles/pkg/README.md                      |   2 +-
>  playbooks/roles/update_etc_hosts/tasks/main.yml    |   2 +-
>  playbooks/rxe.yml                                  |   3 +-
>  playbooks/selftests.yml                            |   3 +-
>  playbooks/siw.yml                                  |   3 +-
>  playbooks/smbd.yml                                 |   3 +-
>  playbooks/sysbench.yml                             |   3 +-
>  playbooks/terraform.yml                            |   4 +-
>  playbooks/update_etc_hosts.yml                     |   3 +-
>  playbooks/update_ssh_config_guestfs.yml            |   3 +-
>  playbooks/update_ssh_config_vagrant.yml            |   3 +-
>  scripts/archive.Makefile                           |   3 +-
>  scripts/build.Makefile                             |   2 +-
>  scripts/devconfig.Makefile                         |   8 +-
>  scripts/dynamic-pci-kconfig.Makefile               |   3 +-
>  scripts/firstconfig.Makefile                       |   5 +-
>  scripts/gen-hosts.Makefile                         |   1 -
>  scripts/guestfs.Makefile                           |  19 ++--
>  scripts/install-menuconfig-deps.Makefile           |   3 +-
>  scripts/iscsi.Makefile                             |   2 +-
>  scripts/journal-server.Makefile                    |  23 +++--
>  scripts/kotd.Makefile                              |  16 ++--
>  scripts/krb5.Makefile                              |   4 +-
>  scripts/ktls.Makefile                              |   1 -
>  scripts/lib.sh                                     |   2 +-
>  scripts/nfsd.Makefile                              |   2 +-
>  scripts/provision.Makefile                         |   5 +-
>  scripts/rdma.Makefile                              |   2 -
>  scripts/smbd.Makefile                              |   2 +-
>  scripts/systemd-timesync.Makefile                  |   8 +-
>  scripts/terraform.Makefile                         |   6 +-
>  scripts/update_etc_hosts.Makefile                  |   2 +-
>  scripts/vagrant.Makefile                           |  10 +-
>  scripts/workflows/lib/crash.py                     |   4 +-
>  workflows/blktests/Makefile                        |  20 ++--
>  workflows/common/Makefile                          |   2 +-
>  workflows/cxl/Makefile                             |  14 +--
>  workflows/demos/reboot-limit/Makefile              |  32 ++++---
>  workflows/fstests/Makefile                         |  40 +++++---
>  workflows/gitr/Makefile                            |   8 +-
>  workflows/linux/Makefile                           |  60 +++++++-----
>  workflows/ltp/Makefile                             |   8 +-
>  workflows/nfstest/Makefile                         |   8 +-
>  workflows/pynfs/Makefile                           |  12 +--
>  workflows/selftests/Makefile                       |  11 ++-
>  workflows/sysbench/Makefile                        |  12 +--
>  113 files changed, 548 insertions(+), 314 deletions(-)
> ---
> base-commit: 4d8e5043bf64d51fe391245d1526c1c65617e437
> change-id: 20250430-ansible_cfg_inventory-7955944ce8ff
> 
> Best regards,

Give me a few days to test this series locally. I think it looks
basically OK.


-- 
Chuck Lever

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

* Re: [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file
  2025-07-02 23:27 ` [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Chuck Lever
@ 2025-07-03 11:48   ` Daniel Gomez
  0 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-03 11:48 UTC (permalink / raw)
  To: Chuck Lever, Luis Chamberlain; +Cc: kdevops, Daniel Gomez



On 03/07/2025 01.27, Chuck Lever wrote:
> On 7/2/25 3:35 PM, Daniel Gomez wrote:
> Give me a few days to test this series locally. I think it looks
> basically OK.
> 
> 

Thanks Chuck.

So far, I've tested fstests, blktests and selftests workflows and they look good
on my side. Let me know if you find anything.

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

* Re: [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file
  2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
                   ` (11 preceding siblings ...)
  2025-07-02 23:27 ` [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Chuck Lever
@ 2025-07-04 15:39 ` Chuck Lever
  2025-07-05 17:48   ` Daniel Gomez
  12 siblings, 1 reply; 16+ messages in thread
From: Chuck Lever @ 2025-07-04 15:39 UTC (permalink / raw)
  To: Daniel Gomez; +Cc: kdevops, Daniel Gomez, Luis Chamberlain

On 7/2/25 3:35 PM, Daniel Gomez wrote:
> Following Chuck's proposed changes to make task parallelism configurable
> via the Ansible configuration file [1], and the subsequent cleanup
> of ansible-playbook calls [2] along with the Python interpreter
> improvements [3] to better support distros like NixOS through simplified
> global interpreter configuration [4], I considered applying the same
> approach to the inventory file. This would further streamline our
> Ansible wrapper in the kdevops Makefiles.
> 
> Why make this change? By specifying the inventory file (typically
> 'hosts' file in kdevops) directly in ansible.cfg, we eliminate the
> need for repeated -i/--inventory arguments and gain flexibility in
> where the inventory file is located. This also supports the broader
> sandboxing goal discussed in [5]. Moreover, by including localhost in
> the inventory, we can clean up the Makefile wrapper even further by
> removing --connection=localhost and -i localhost options, while also
> enabling workflows to run directly on the controller node (with some
> extra more modifications).
> 
> https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/
> 
> [1]
> Increase default task parallelism
> https://lore.kernel.org/kdevops/20250404204827.34941-1-cel@kernel.org/
> [2]
> [PATCH 2/2] Makefile: Remove "-f 30" command line argument
> https://lore.kernel.org/kdevops/20250417172119.3190398-2-cel@kernel.org/
> 
> [3]
> https://lore.kernel.org/kdevops/20250404-python-interpreter-v1-0-04783b627ce7@samsung.com/
> 
> [4]
> https://lore.kernel.org/kdevops/kwpt5iizzmryybpg6z3fgs6koak27rjggydfighd42wn7mxqja@2hwvtppppzsk/
> 
> [5]
> https://lore.kernel.org/kdevops/20240827-ansible-cleanups-v1-0-2828a816de5e@samsung.com/
> 
> This series promotes the Ansible inventory file (typically 'hosts'
> in kdevops) to the Ansible Configuration file (ansible.cfg). By doing
> this, we allow to control the hosts globally rather than in all the
> ansible-playbook commands, as well as clean up the ansible-playbook
> command.
> 
> So, we don't need to define anymore the inventory file in the command.
> However, playbooks may still be controlled on which targets the playbook
> is run. This is done through the playbook itself and/or through the
> ansible-playbook argument --limit. Also notice delegate_to is needed
> when the playbook runs and iterates on specific nodes such as baseline
> and dev but a specific task needs to be handled back to the controller
> node.
> 
> As part of the series, the term 'all' to refer to all hosts is redefined
> to include the localhost. This removes the need to be explicit with
> localhost playbooks runs, as it's now just another target in the
> inventory file. This term redefinition requires to change playbooks that
> use the term all, either through ansible-playbook command or through
> the host: field in the YAML playbook file. For this reason, the term
> has been replaced in most cases with 'baseline:dev', which means all
> targets in the inventory file in the baseline and dev groups, matching
> the 'all' concept in the former configuration 'hosts' file. Except the
> bootlinux.yml and guestfs.yml playbooks, all playbooks run either on
> localhost or remote targets (the previous 'all' definition). Therefore,
> all playbooks have been converted to use 'hosts: baseline:dev'. For
> the bootlinux.yml playbook, 'all' is kept and the control of host
> execution is done via the --limit argument. It was found that only
> the linux-clone-9p target runs the bootlinux playbook in the localhost
> while the rest of linux-* targets run the playbook in all the remotes
> (baseline:dev). For guestfs.yml, a combination of --limit + delegate_to
> is needed for the reason explained above: to iterate on the targets
> (baseline:dev) but delegate certain tags to the controller node with
> delegate_to.
> 
> In addition, in order to help me debug this change, I found it
> convenient to print the Makefile target name being run before the
> command. This allows to be more explicit in verbose mode (V=1) when a
> playbook is run (or any subsequent command in the target). And makes it
> easier to discover which target the ansible-playbook command belongs to
> when debugging playbook execution. To clarify, V=1 already prints the
> command but not the Makefile target. The command output behaviour will
> be a bit different as it is today as the command itself will be printed
> in one line, instead of multiple.
> 
> Series has been tested here:
> v1:
> https://github.com/linux-kdevops/kdevops/actions/runs/14773869477
> v3:
> https://github.com/linux-kdevops/kdevops/actions/runs/14846101950
> v4:
> https://github.com/linux-kdevops/kdevops/actions/runs/16033723055
> 
> Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
> ---
> Changes in v4:
> - Add trailers (from Luis)
> - Rebase on top of main
> - Link to v3: https://lore.kernel.org/r/20250505-ansible_cfg_inventory-v3-0-a153d93c35c4@samsung.com
> 
> Changes in v3:
> - Fix LIMIT_HOSTS. When HOSTS="host1" was used, the --limit replacement
> did not work anymore because of the quotes where not needed when using
> long form arguments
> - Fix bootlinux-local limit in linux target.
> - Replace all:!localhost with baseline:dev as suggested by Luis. This
> allows to include localhost as part of the baseline and/or dev groups
> for baremetal workflows
> - Allow to configure the ansible.cfg location. This requires to export
> the ANSIBLE_CONFIG. This also enables sandboxing
> - Fix debug mode when ansible.cfg is created (command was not printed
> because of double @)
> - Add back KDEVOPS_HOSTS as cli option. KDEVOPS_HOSTS was not part of
> the cli before but it was allowed to be overwritten at command line
> time. This allows to be explicit and keeps backwards compatibility with
> the variable
> - Extend ANSIBLE_CFG_FILE help as per Chuck's suggestion
> - Move ANSIBLE_CFG_FILE location in Kconfig and place it after
> SET_BY_CLI options
> - Remove crash_watchdog.py inventory arguments (Reported by Luis)
> - Remove inventory arguments from docs, READMEs and remaining Makefiles
> - Move ueh_hosts hunk to fix undefined variable in patch "gen_hosts:
> templates: add localhost to all hosts"
> - Rename CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE to CONFIG_ANSIBLE_CFG_INVENTORY
> in scripts/lib.sh and kconfigs/Kconfig.ansible_provisioning
> - Update cover letter reasoning and commit messages for better clarity
> - Link to v2: https://lore.kernel.org/r/20250502-ansible_cfg_inventory-v2-0-d3c19ff4aa6e@samsung.com
> 
> Changes in v2:
> - Update ANSIBLE_CFG_INVENTORY help description as per Chuck suggestion
> - Add docs/kdevops-ansible-configuration.md for extensive module
> documentation
> - Include fix to avoid generating always the ansible.cfg and hosts
> files. Reported by Chuck
> The same commit change also includes support to change the ansible.cfg
> path.
> - Link to v1: https://lore.kernel.org/r/20250501-ansible_cfg_inventory-v1-0-c568bbaa3502@samsung.com
> 
> ---
> Daniel Gomez (11):
>       playbooks: fix playbook name for all hosts plays
>       playbooks: fix playbook name for localhost plays
>       Makefile: use long form of limit argument for clarity
>       Makefile: print target when debug
>       .github/workflows/fstests.yml: enable make verbosity
>       ansible_cfg: add inventory support
>       gen_hosts: templates: include localhost in the all group
>       Makefile: use inventory from ansible.cfg
>       ansible_cfg: add support to change ansible.cfg file location
>       docs: ansible_cfg: add documentation
>       build.Makefile: fix verbosity of clean target
> 
>  .github/workflows/fstests.yml                      |  16 ++--
>  MAINTAINERS                                        |   2 +-
>  Makefile                                           |  42 +++++----
>  Makefile.btrfs_progs                               |   4 +-
>  Makefile.build_qemu                                |  12 +--
>  Makefile.hypervisor-tunings                        |   3 +-
>  Makefile.kdevops                                   |  19 ++--
>  Makefile.linux-mirror                              |   6 +-
>  Makefile.postfix                                   |   3 +-
>  docs/kdevops-ansible-configuration.md              | 102 +++++++++++++++++++++
>  docs/kdevops-terraform.md                          |   2 +-
>  kconfigs/Kconfig.ansible_cfg                       |  46 ++++++++++
>  kconfigs/Kconfig.ansible_provisioning              |   8 +-
>  playbooks/blktests.yml                             |   3 +-
>  playbooks/bootlinux.yml                            |   3 +-
>  playbooks/build_qemu.yml                           |   3 +-
>  playbooks/common.yml                               |   3 +-
>  playbooks/create_data_partition.yml                |   3 +-
>  playbooks/cxl.yml                                  |   3 +-
>  playbooks/devconfig.yml                            |   3 +-
>  playbooks/fstests.yml                              |   6 +-
>  playbooks/gen-pci-kconfig.yml                      |   3 +-
>  playbooks/gen_hosts.yml                            |   3 +-
>  playbooks/gen_nodes.yml                            |   3 +-
>  playbooks/gen_tfvars.yml                           |   3 +-
>  playbooks/gitr.yml                                 |   3 +-
>  playbooks/hypervisor-tuning.yml                    |   3 +-
>  playbooks/install-menuconfig-deps.yml              |   3 +-
>  playbooks/install_systemd_journal_remote.yml       |   3 +-
>  playbooks/install_systemd_timesyncd.yml            |   3 +-
>  playbooks/install_terraform.yml                    |   3 +-
>  playbooks/install_vagrant_boxes.yml                |   3 +-
>  playbooks/iscsi.yml                                |   3 +-
>  playbooks/kdc.yml                                  |   3 +-
>  playbooks/kdevops_archive.yml                      |   3 +-
>  playbooks/krb5.yml                                 |   3 +-
>  playbooks/ktls.yml                                 |   3 +-
>  playbooks/libvirt_pcie_passthrough.yml             |   3 +-
>  playbooks/libvirt_storage_pool_create.yml          |   3 +-
>  playbooks/libvirt_user.yml                         |   3 +-
>  playbooks/linux-mirror.yml                         |   3 +-
>  playbooks/ltp.yml                                  |   3 +-
>  playbooks/nfsd.yml                                 |   3 +-
>  playbooks/nfstest.yml                              |   4 +-
>  playbooks/pkg.yml                                  |   3 +-
>  playbooks/postfix_relay_host.yml                   |   3 +-
>  playbooks/pynfs.yml                                |   3 +-
>  playbooks/reboot-limit.yml                         |   3 +-
>  playbooks/roles/ansible_cfg/tasks/main.yml         |   3 +-
>  .../roles/ansible_cfg/templates/ansible.cfg.j2     |   1 +
>  playbooks/roles/bootlinux/README.md                |  12 +--
>  playbooks/roles/common/README.md                   |   2 +-
>  playbooks/roles/devconfig/README.md                |   2 +-
>  playbooks/roles/gen_hosts/defaults/main.yml        |   1 -
>  playbooks/roles/gen_hosts/tasks/main.yml           |  54 +++++------
>  playbooks/roles/gen_hosts/templates/blktests.j2    |   1 +
>  playbooks/roles/gen_hosts/templates/cxl.j2         |   1 +
>  playbooks/roles/gen_hosts/templates/fstests.j2     |   1 +
>  playbooks/roles/gen_hosts/templates/gitr.j2        |   1 +
>  playbooks/roles/gen_hosts/templates/hosts.j2       |   2 +
>  playbooks/roles/gen_hosts/templates/ltp.j2         |   1 +
>  playbooks/roles/gen_hosts/templates/nfstest.j2     |   1 +
>  playbooks/roles/gen_hosts/templates/pynfs.j2       |   1 +
>  playbooks/roles/gen_hosts/templates/selftests.j2   |   1 +
>  playbooks/roles/gen_hosts/templates/sysbench.j2    |   1 +
>  playbooks/roles/guestfs/tasks/main.yml             |   6 ++
>  playbooks/roles/libvirt_user/README.md             |   4 +-
>  playbooks/roles/pkg/README.md                      |   2 +-
>  playbooks/roles/update_etc_hosts/tasks/main.yml    |   2 +-
>  playbooks/rxe.yml                                  |   3 +-
>  playbooks/selftests.yml                            |   3 +-
>  playbooks/siw.yml                                  |   3 +-
>  playbooks/smbd.yml                                 |   3 +-
>  playbooks/sysbench.yml                             |   3 +-
>  playbooks/terraform.yml                            |   4 +-
>  playbooks/update_etc_hosts.yml                     |   3 +-
>  playbooks/update_ssh_config_guestfs.yml            |   3 +-
>  playbooks/update_ssh_config_vagrant.yml            |   3 +-
>  scripts/archive.Makefile                           |   3 +-
>  scripts/build.Makefile                             |   2 +-
>  scripts/devconfig.Makefile                         |   8 +-
>  scripts/dynamic-pci-kconfig.Makefile               |   3 +-
>  scripts/firstconfig.Makefile                       |   5 +-
>  scripts/gen-hosts.Makefile                         |   1 -
>  scripts/guestfs.Makefile                           |  19 ++--
>  scripts/install-menuconfig-deps.Makefile           |   3 +-
>  scripts/iscsi.Makefile                             |   2 +-
>  scripts/journal-server.Makefile                    |  23 +++--
>  scripts/kotd.Makefile                              |  16 ++--
>  scripts/krb5.Makefile                              |   4 +-
>  scripts/ktls.Makefile                              |   1 -
>  scripts/lib.sh                                     |   2 +-
>  scripts/nfsd.Makefile                              |   2 +-
>  scripts/provision.Makefile                         |   5 +-
>  scripts/rdma.Makefile                              |   2 -
>  scripts/smbd.Makefile                              |   2 +-
>  scripts/systemd-timesync.Makefile                  |   8 +-
>  scripts/terraform.Makefile                         |   6 +-
>  scripts/update_etc_hosts.Makefile                  |   2 +-
>  scripts/vagrant.Makefile                           |  10 +-
>  scripts/workflows/lib/crash.py                     |   4 +-
>  workflows/blktests/Makefile                        |  20 ++--
>  workflows/common/Makefile                          |   2 +-
>  workflows/cxl/Makefile                             |  14 +--
>  workflows/demos/reboot-limit/Makefile              |  32 ++++---
>  workflows/fstests/Makefile                         |  40 +++++---
>  workflows/gitr/Makefile                            |   8 +-
>  workflows/linux/Makefile                           |  60 +++++++-----
>  workflows/ltp/Makefile                             |   8 +-
>  workflows/nfstest/Makefile                         |   8 +-
>  workflows/pynfs/Makefile                           |  12 +--
>  workflows/selftests/Makefile                       |  11 ++-
>  workflows/sysbench/Makefile                        |  12 +--
>  113 files changed, 548 insertions(+), 314 deletions(-)
> ---
> base-commit: 4d8e5043bf64d51fe391245d1526c1c65617e437
> change-id: 20250430-ansible_cfg_inventory-7955944ce8ff
> 
> Best regards,

Some test results...

I see a new warning with the initial "make" :

Doing minimum kdevops version check using
scripts/version_check/ansible-playbook ...
ansible-playbook: OK
The current minimum kdevops expected dependencies are met.

[WARNING]: provided hosts list is empty, only localhost is available.
Note that the implicit localhost does not match 'all'


PLAY [Ansible Configuration Role]
**************************************************************************************************************

TASK [Gathering Facts]
*************************************************************************************************************************
ok: [localhost]


I noticed a minor spelling mistake:

PLAY [Generate Ansible inentory for guests (hosts)]



I tried running the gitr workflow. During "make":

TASK [gen_nodes : Generate XML files for the libvirt guests]
***********************************************************************************
changed: [localhost] => (item={'name': 'cel-nfs-v3'})
changed: [localhost] => (item={'name': 'cel-nfsd'})


But then later:

TASK [update_ssh_config_guestfs : Ensure ~/.ssh/config permissions]
****************************************************************************
changed: [localhost]

PLAY RECAP
*************************************************************************************************************************************
localhost                  : ok=9    changed=5    unreachable=0
failed=0    skipped=0    rescued=0    ignored=0

Traceback (most recent call last):
  File
"/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
line 98, in <module>
    main()
    ~~~~^^
  File
"/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
line 87, in main
    addr = get_addr(name)
  File
"/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
line 39, in get_addr
    raise Exception(f"Unable to get an address for {name} after 60s")
Exception: Unable to get an address for cel-nfsd after 60s
make: *** [scripts/guestfs.Makefile:58: .provisioned_once_ssh] Error 1
cel@renoir:~/src/kdevops/dev$ virsh list
 Id   Name         State
----------------------------
 2    cel-nfs-v3   running

cel@renoir:~/src/kdevops/dev$


Looks like the guestfs playbook brought up only the NFS client, but not
the NFS server.


-- 
Chuck Lever

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

* Re: [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file
  2025-07-04 15:39 ` Chuck Lever
@ 2025-07-05 17:48   ` Daniel Gomez
  0 siblings, 0 replies; 16+ messages in thread
From: Daniel Gomez @ 2025-07-05 17:48 UTC (permalink / raw)
  To: Chuck Lever; +Cc: kdevops, Daniel Gomez, Luis Chamberlain



On 04/07/2025 17.39, Chuck Lever wrote:
> On 7/2/25 3:35 PM, Daniel Gomez wrote:
> Some test results...

Thanks for testing and sharing!

> 
> I see a new warning with the initial "make" :
> 
> Doing minimum kdevops version check using
> scripts/version_check/ansible-playbook ...
> ansible-playbook: OK
> The current minimum kdevops expected dependencies are met.
> 
> [WARNING]: provided hosts list is empty, only localhost is available.
> Note that the implicit localhost does not match 'all'

I noticed that too but I thought it was okay to ignore it since we are
generating the ansible.cfg and no inventory is yet available. This is the
ansible-playbook command:

==> [/media/tarkir/dagomez/src/linux-kdevops/kdevops/ansible.cfg]
+ ansible-playbook -v playbooks/ansible_cfg.yml --extra-vars=@./.extra_vars_auto.yaml
No config file found; using defaults
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

However, reverting the changes removes the WARNING.

==> [/media/tarkir/dagomez/src/linux-kdevops/kdevops/ansible.cfg]
+ ansible-playbook -vv --inventory localhost, --connection=local playbooks/ansible_cfg.yml --extra-vars=@./.extra_vars_auto.yaml
ansible-playbook [core 2.19.0b4]
  config file = None
  configured module search path = ['/home/dagomez/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/dagomez/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.13.3 (main, Apr 10 2025, 21:38:51) [GCC 14.2.0] (/usr/bin/python3)
  jinja version = 3.1.6
  pyyaml version = 6.0.2 (with libyaml v0.2.5)
No config file found; using defaults
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback

One of the purposes of this series was to avoid specifying the inventory and
connection type for localhost runs. But I do now think it makes sense to keep
these args for this specific target/ansible-playbook run.

> 
> 
> PLAY [Ansible Configuration Role]
> **************************************************************************************************************
> 
> TASK [Gathering Facts]
> *************************************************************************************************************************
> ok: [localhost]
> 
> 
> I noticed a minor spelling mistake:
> 
> PLAY [Generate Ansible inentory for guests (hosts)]

Fixed.

> 
> 
> 
> I tried running the gitr workflow. During "make":

FYI, I fixed and pushed [1] some missing build and runtime dependencies for
Debian while trying to replicate this.

[1] Link:
https://github.com/linux-kdevops/kdevops/commit/9af865ba040f94a06c47157bd07e747fb6aca1ef

I've also found that we can remove this line:

diff --git a/workflows/gitr/Makefile b/workflows/gitr/Makefile
index 09ef466..76dcf0e 100644
--- a/workflows/gitr/Makefile
+++ b/workflows/gitr/Makefile
@@ -90,7 +90,6 @@ endif

 gitr:
        $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-               --limit 'baseline:dev' \
                --skip-tags run_tests,run_specific_tests,copy_results \
                $(KDEVOPS_PLAYBOOKS_DIR)/gitr.yml

Since gitr playbook runs already only in baseline and dev hosts, we don't need
to be explicit here. Same reasoning for ltp, nfstests and pynfs workflows.

Well, maybe not. I wrote this before finding the issue below.

> 
> TASK [gen_nodes : Generate XML files for the libvirt guests]
> ***********************************************************************************
> changed: [localhost] => (item={'name': 'cel-nfs-v3'})
> changed: [localhost] => (item={'name': 'cel-nfsd'})
> 
> 
> But then later:
> 
> TASK [update_ssh_config_guestfs : Ensure ~/.ssh/config permissions]
> ****************************************************************************
> changed: [localhost]
> 
> PLAY RECAP
> *************************************************************************************************************************************
> localhost                  : ok=9    changed=5    unreachable=0
> failed=0    skipped=0    rescued=0    ignored=0
> 
> Traceback (most recent call last):
>   File
> "/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
> line 98, in <module>
>     main()
>     ~~~~^^
>   File
> "/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
> line 87, in main
>     addr = get_addr(name)
>   File
> "/home/cel/src/kdevops/dev/.//scripts/update_ssh_config_guestfs.py",
> line 39, in get_addr
>     raise Exception(f"Unable to get an address for {name} after 60s")
> Exception: Unable to get an address for cel-nfsd after 60s
> make: *** [scripts/guestfs.Makefile:58: .provisioned_once_ssh] Error 1
> cel@renoir:~/src/kdevops/dev$ virsh list
>  Id   Name         State
> ----------------------------
>  2    cel-nfs-v3   running
> 
> cel@renoir:~/src/kdevops/dev$
> 
> 
> Looks like the guestfs playbook brought up only the NFS client, but not
> the NFS server.
> 
> 

I've managed to reproduce the issue. The "problem" is that gitr hosts file (and
also other workflow hosts files) includes targets that are not baseline or dev.

So, removing the --limit for bringup should fix it:

diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile
index 93d3315..bddf2d9 100644
--- a/scripts/guestfs.Makefile
+++ b/scripts/guestfs.Makefile
@@ -79,7 +79,6 @@ bringup_guestfs: $(GUESTFS_BRINGUP_DEPS)
                --extra-vars=@./extra_vars.yaml \
                --tags network,pool,base_image
        $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-               --limit 'baseline:dev' \
                playbooks/guestfs.yml \
                --extra-vars=@./extra_vars.yaml \
                --tags bringup

This is what we do in the destroy path. It works, because guestfs has hosts:
all in the playbook YAML file. However, we cannot apply the same strategy here
because of we have this (in bringup):

- name: List defined libvirt guests
  run_once: true
  community.libvirt.virt:
    command: list_vms
    uri: "{{ libvirt_uri }}"
  register: defined_vms

- name: Provision each target node
  when:
    - 'inventory_hostname not in defined_vms.list_vms'
  block:
    - name: Set the pathname of the ssh directory for each target node
      ansible.builtin.set_fact:
        ssh_key_dir: "{{ guestfs_path }}/{{ inventory_hostname }}/ssh"
{...}

Which loops over all guests including localhost.

So, we should be explicit instead:

diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile
index 93d3315..a341f25 100644
--- a/scripts/guestfs.Makefile
+++ b/scripts/guestfs.Makefile
@@ -62,7 +62,8 @@ $(KDEVOPS_PROVISIONED_SSH):
                        LIBVIRT_DEFAULT_URI=$(CONFIG_LIBVIRT_URI) \
                        $(TOPDIR)/scripts/update_ssh_config_guestfs.py; \
        fi
-       $(Q)ansible $(ANSIBLE_VERBOSE) 'baseline:dev' -m wait_for_connection
+       $(Q)ansible $(ANSIBLE_VERBOSE) 'baseline:dev:nfsd:iscsi:smbd:kdc:krb5' \
+       -m wait_for_connection
        $(Q)touch $(KDEVOPS_PROVISIONED_SSH)

 install_libguestfs:
@@ -79,8 +80,8 @@ bringup_guestfs: $(GUESTFS_BRINGUP_DEPS)
                --extra-vars=@./extra_vars.yaml \
                --tags network,pool,base_image
        $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
-               --limit 'baseline:dev' \
                playbooks/guestfs.yml \
+               --limit 'baseline:dev:nfsd:iscsi:smbd:kdc:krb5' \
                --extra-vars=@./extra_vars.yaml \
                --tags bringup
        $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \

This fixes the issue but I'd rather have these hosts as part of a group. Does it
make sense to add them to the baseline group or should we create another group?
What do you think?

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

end of thread, other threads:[~2025-07-05 17:48 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-02 19:35 [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 01/11] playbooks: fix playbook name for all hosts plays Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 02/11] playbooks: fix playbook name for localhost plays Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 03/11] Makefile: use long form of limit argument for clarity Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 04/11] Makefile: print target when debug Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 05/11] .github/workflows/fstests.yml: enable make verbosity Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 06/11] ansible_cfg: add inventory support Daniel Gomez
2025-07-02 19:35 ` [PATCH v4 07/11] gen_hosts: templates: include localhost in the all group Daniel Gomez
2025-07-02 19:36 ` [PATCH v4 08/11] Makefile: use inventory from ansible.cfg Daniel Gomez
2025-07-02 19:36 ` [PATCH v4 09/11] ansible_cfg: add support to change ansible.cfg file location Daniel Gomez
2025-07-02 19:36 ` [PATCH v4 10/11] docs: ansible_cfg: add documentation Daniel Gomez
2025-07-02 19:36 ` [PATCH v4 11/11] build.Makefile: fix verbosity of clean target Daniel Gomez
2025-07-02 23:27 ` [PATCH v4 00/11] Define Ansible inventory in the Ansible Configuration file Chuck Lever
2025-07-03 11:48   ` Daniel Gomez
2025-07-04 15:39 ` Chuck Lever
2025-07-05 17:48   ` Daniel Gomez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox