* [PATCH v2 00/33] remove vagrant and bootlinux shape up
@ 2025-07-28 1:14 Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory Luis Chamberlain
` (33 more replies)
0 siblings, 34 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
On this v2 I just dropped the accidental patches which Chuck asked for
and merged the fixes onto his patches. That's it.
Chuck Lever (21):
terraform: Clean up the destroy tasks
Switch to the cloud.terraform.terraform module
terraform: Make use of the new "terraform_output" module
terraform: Move "wait_for_connection" out of the terraform playbook
terraform: Remove "delegate_to: localhost"
terraform: Replace scripts/status_terraform.sh
Kconfig: Convert the 9p option to a choice menu
bootlinux: Relocate tasks that select a kernel .config
bootlinux: Simplify tasks that select the kernel .config to build
bootlinux: Select the kernel .config earlier
bootlinux: Move 9p build tasks to a subrole
bootlinux: Move tasks for building on target nodes to a subrole
bootlinux: Clean up a grub set-up task
bootlinux: Harden update-grub/install.yml
Add a guest/instance for building the test kernel
bootlinux: Add a new builder choice
workflows: Add a kconfig setting for installing kernels via package
bootlinux: Enclose tasks to find kernel release name in a block:
bootlinux: Pick up kernel release info for pre-built packages
bootlinux: Install pre-built kernels from packages
bootlinux: Add an option to build with clang instead of gcc
Luis Chamberlain (12):
vagrant: remove entire vagrant configuration directory
kconfigs: fix Kconfig references after vagrant removal
scripts: remove Vagrant-specific scripts and Makefiles
playbooks: remove Vagrant-specific playbooks and roles
gitignore: remove Vagrant-specific ignore patterns
docs: remove Vagrant-specific documentation files
Remove all remaining Vagrant references from codebase
bootlinux: fix making 9p default if using libvirt
Makefile: add make style for style checking
CLAUDE.md: new workflow guide for hosts and nodes
CLAUDE.md: add don't BS rules
gen_nodes/gen_hosts: avoid usage of fs_config_path on task names
.gitignore | 5 -
CLAUDE.md | 720 ++++++++++++++++++
...e => Kconfig.passthrough_libvirt.generated | 0
Makefile | 12 +-
Makefile.kdevops | 32 +-
Makefile.subtrees | 4 +-
docs/custom-vagrant-boxes.md | 581 --------------
docs/kdevops-vagrant.md | 130 ----
docs/the-gen-nodes-ansible-role-vagrant.md | 78 --
docs/why-vagrant.md | 66 --
kconfigs/Kconfig.ansible_provisioning | 3 +-
kconfigs/Kconfig.bringup | 11 +-
kconfigs/Kconfig.hypervisor | 4 +-
kconfigs/Kconfig.kdevops | 5 -
kconfigs/Kconfig.kernel-ci | 5 +-
kconfigs/Kconfig.libvirt | 73 +-
kconfigs/Kconfig.libvirt.largeio | 2 +-
kconfigs/Kconfig.ssh | 6 +-
kconfigs/workflows/Kconfig | 18 +
kconfigs/workflows/Kconfig.data_partition | 8 +-
kconfigs/workflows/Kconfig.shared | 4 -
kdevops-ci | 1 +
playbooks/install_vagrant_boxes.yml | 5 -
.../blktests/augment_expunge_list.py | 3 +-
.../workflows/fstests/augment_expunge_list.py | 5 +-
playbooks/roles/bootlinux/defaults/main.yml | 16 +-
playbooks/roles/bootlinux/tasks/build/9p.yml | 205 +++++
.../roles/bootlinux/tasks/build/builder.yml | 264 +++++++
.../roles/bootlinux/tasks/build/targets.yml | 125 +++
playbooks/roles/bootlinux/tasks/config.yml | 38 +
.../tasks/install-deps/redhat/main.yml | 34 +
.../install-minimal-deps/debian/main.yml | 19 +
.../tasks/install-minimal-deps/main.yml | 15 +
.../install-minimal-deps/redhat/main.yml | 27 +
.../tasks/install-minimal-deps/suse/main.yml | 13 +
.../bootlinux/tasks/install/packages.yml | 41 +
playbooks/roles/bootlinux/tasks/main.yml | 477 +-----------
.../bootlinux/tasks/update-grub/install.yml | 128 +++-
playbooks/roles/devconfig/defaults/main.yml | 2 +-
.../devconfig/scripts/prepare_suse_repos.sh | 2 +-
playbooks/roles/gen_hosts/defaults/main.yml | 3 +
playbooks/roles/gen_hosts/tasks/main.yml | 16 +-
.../roles/gen_hosts/templates/builder.j2 | 13 +
playbooks/roles/gen_nodes/defaults/main.yml | 14 +-
playbooks/roles/gen_nodes/tasks/main.yml | 24 +-
.../roles/gen_nodes/templates/Vagrantfile.j2 | 478 ------------
.../kdevops_nodes_split_start.j2.yaml | 171 -----
.../roles/gen_pci_kconfig/tasks/main.yml | 2 +-
.../roles/guestfs/tasks/bringup/main.yml | 10 +
.../roles/install_vagrant_boxes/README.md | 46 --
.../install_vagrant_boxes/defaults/main.yml | 6 -
.../scripts/add-box-if-missing.sh | 48 --
.../install_vagrant_boxes/tasks/main.yml | 49 --
playbooks/roles/terraform/tasks/main.yml | 70 +-
.../roles/terraform/templates/ssh_config.j2 | 4 +-
.../roles/update_ssh_config_vagrant/README.md | 66 --
.../defaults/main.yml | 13 -
.../python/update_ssh_config.py | 1 -
.../update_ssh_config_vagrant/tasks/main.yml | 69 --
.../update_ssh_config/.gitignore | 6 -
.../update_ssh_config/.travis.yml | 12 -
.../update_ssh_config/CONTRIBUTING | 49 --
.../update_ssh_config/LICENSE | 239 ------
.../update_ssh_config/Makefile | 15 -
.../update_ssh_config/README.md | 159 ----
.../test_update_ssh_config.py | 417 ----------
.../tests/0001_remove_hosts_top.orig | 53 --
.../tests/0001_remove_hosts_top.res | 33 -
.../tests/0002_remove_hosts_middle.orig | 53 --
.../tests/0002_remove_hosts_middle.res | 33 -
.../tests/0003_remove_hosts_bottom.orig | 53 --
.../tests/0003_remove_hosts_bottom.res | 33 -
.../tests/0004_remove_hosts_missing.orig | 33 -
.../tests/0004_remove_hosts_missing.res | 33 -
.../tests/0005_remove_hosts_similar.orig | 53 --
.../tests/0005_remove_hosts_similar.res | 53 --
.../tests/0006_add_hosts_manual.orig | 33 -
.../tests/0006_add_hosts_manual.res | 53 --
..._remove_hosts_two_separate_ops_top.add.res | 53 --
...add_remove_hosts_two_separate_ops_top.orig | 53 --
...move_hosts_two_separate_ops_top.remove.res | 33 -
.../0008_add_remove_hosts_one_shot_top.orig | 1 -
.../0008_add_remove_hosts_one_shot_top.res | 1 -
..._hosts_vagrant_emulate_top.emulate_vagrant | 20 -
.../0009_add_hosts_vagrant_emulate_top.orig | 1 -
.../0009_add_hosts_vagrant_emulate_top.res | 53 --
...rithms_vagrant_emulate_top.emulate_vagrant | 20 -
...sts_kexalgorithms_vagrant_emulate_top.orig | 53 --
...osts_kexalgorithms_vagrant_emulate_top.res | 55 --
...two_separate_ops_kexalgorithms_top.add.res | 55 --
...ts_two_separate_ops_kexalgorithms_top.orig | 53 --
..._separate_ops_kexalgorithms_top.remove.res | 33 -
.../0012_add_remove_hosts_empty_file.res | 20 -
.../update_ssh_config/update_ssh_config.py | 325 --------
.../update_ssh_config_vagrant/vars/main.yml | 1 -
playbooks/terraform.yml | 3 +-
playbooks/update_ssh_config_vagrant.yml | 4 -
scripts/bringup.Makefile | 3 -
scripts/bringup_vagrant.sh | 101 ---
scripts/check_commit_format.py | 85 +++
scripts/check_distro_kconfig.sh | 6 +-
scripts/check_pciepassthrough_kconfig.sh | 6 +-
scripts/ci.Makefile | 8 +
scripts/destroy_vagrant.sh | 30 -
scripts/detect_whitespace_issues.py | 109 +++
scripts/dynamic-pci-kconfig.Makefile | 4 +-
scripts/fix_whitespace_issues.py | 137 ++++
scripts/gen-nodes.Makefile | 5 -
scripts/get-distro-default-bridge.sh | 11 +-
scripts/provision.Makefile | 4 -
scripts/prune_stale_vagrant.sh | 164 ----
scripts/status_terraform.sh | 17 -
scripts/terraform.Makefile | 12 +-
scripts/tests.Makefile | 1 -
scripts/vagrant.Makefile | 109 ---
scripts/workflows/generic/run_kernel_ci.sh | 4 +-
terraform/azure/main.tf | 2 +-
vagrant/.gitignore | 2 -
vagrant/Kconfig | 295 -------
vagrant/Kconfig.debian | 46 --
vagrant/Kconfig.fedora | 29 -
vagrant/Kconfig.kdevops | 42 -
vagrant/Kconfig.opensuse | 144 ----
vagrant/Kconfig.pcie_passthrough_libvirt | 53 --
workflows/blktests/Kconfig | 9 +-
workflows/demos/reboot-limit/Makefile | 2 +-
workflows/fstests/Kconfig | 2 -
.../xfs/unassigned/fstests-next-20230515 | 347 ---------
workflows/fstests/xfs/Kconfig | 2 -
workflows/linux/Kconfig | 90 ++-
workflows/linux/Kconfig.linus | 1 -
workflows/linux/Kconfig.mcgrof | 1 -
workflows/linux/Kconfig.modules | 1 -
workflows/linux/Kconfig.next | 1 -
workflows/linux/Kconfig.stable | 1 -
workflows/linux/Kconfig.vfs | 1 -
workflows/linux/Kconfig.xfs | 1 -
workflows/linux/Makefile | 5 +-
138 files changed, 2276 insertions(+), 6157 deletions(-)
rename vagrant/Kconfig.suse => Kconfig.passthrough_libvirt.generated (100%)
delete mode 100644 docs/custom-vagrant-boxes.md
delete mode 100644 docs/kdevops-vagrant.md
delete mode 100644 docs/the-gen-nodes-ansible-role-vagrant.md
delete mode 100644 docs/why-vagrant.md
create mode 160000 kdevops-ci
delete mode 100644 playbooks/install_vagrant_boxes.yml
create mode 100644 playbooks/roles/bootlinux/tasks/build/9p.yml
create mode 100644 playbooks/roles/bootlinux/tasks/build/builder.yml
create mode 100644 playbooks/roles/bootlinux/tasks/build/targets.yml
create mode 100644 playbooks/roles/bootlinux/tasks/config.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/debian/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/redhat/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/suse/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install/packages.yml
create mode 100644 playbooks/roles/gen_hosts/templates/builder.j2
delete mode 100644 playbooks/roles/gen_nodes/templates/Vagrantfile.j2
delete mode 100644 playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml
delete mode 100644 playbooks/roles/install_vagrant_boxes/README.md
delete mode 100644 playbooks/roles/install_vagrant_boxes/defaults/main.yml
delete mode 100755 playbooks/roles/install_vagrant_boxes/scripts/add-box-if-missing.sh
delete mode 100644 playbooks/roles/install_vagrant_boxes/tasks/main.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/README.md
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/defaults/main.yml
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/python/update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/tasks/main.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.gitignore
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.travis.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/CONTRIBUTING
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/LICENSE
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/Makefile
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md
delete mode 100755 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/test_update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.add.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.remove.res
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.orig
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.emulate_vagrant
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.emulate_vagrant
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.add.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.remove.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0012_add_remove_hosts_empty_file.res
delete mode 100755 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/vars/main.yml
delete mode 100644 playbooks/update_ssh_config_vagrant.yml
delete mode 100755 scripts/bringup_vagrant.sh
create mode 100755 scripts/check_commit_format.py
delete mode 100755 scripts/destroy_vagrant.sh
create mode 100755 scripts/detect_whitespace_issues.py
create mode 100755 scripts/fix_whitespace_issues.py
delete mode 100755 scripts/prune_stale_vagrant.sh
delete mode 100755 scripts/status_terraform.sh
delete mode 100644 scripts/vagrant.Makefile
delete mode 100644 vagrant/.gitignore
delete mode 100644 vagrant/Kconfig
delete mode 100644 vagrant/Kconfig.debian
delete mode 100644 vagrant/Kconfig.fedora
delete mode 100644 vagrant/Kconfig.kdevops
delete mode 100644 vagrant/Kconfig.opensuse
delete mode 100644 vagrant/Kconfig.pcie_passthrough_libvirt
delete mode 100644 workflows/fstests/expunges/6.4.0-rc2-next-20230515/xfs/unassigned/fstests-next-20230515
--
2.47.2
^ permalink raw reply [flat|nested] 35+ messages in thread
* [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 02/33] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
` (32 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove the complete vagrant/ directory and all its configuration files
as Vagrant support has been removed from kdevops. This includes:
- Kconfig files for various distributions
- PCIe passthrough configurations
- Main Vagrant configuration
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
vagrant/.gitignore | 2 -
vagrant/Kconfig | 295 -----------------------
vagrant/Kconfig.debian | 46 ----
vagrant/Kconfig.fedora | 29 ---
vagrant/Kconfig.kdevops | 42 ----
vagrant/Kconfig.opensuse | 144 -----------
vagrant/Kconfig.pcie_passthrough_libvirt | 53 ----
vagrant/Kconfig.suse | 0
8 files changed, 611 deletions(-)
delete mode 100644 vagrant/.gitignore
delete mode 100644 vagrant/Kconfig
delete mode 100644 vagrant/Kconfig.debian
delete mode 100644 vagrant/Kconfig.fedora
delete mode 100644 vagrant/Kconfig.kdevops
delete mode 100644 vagrant/Kconfig.opensuse
delete mode 100644 vagrant/Kconfig.pcie_passthrough_libvirt
delete mode 100644 vagrant/Kconfig.suse
diff --git a/vagrant/.gitignore b/vagrant/.gitignore
deleted file mode 100644
index 2a00270b..00000000
--- a/vagrant/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.vagrant
-*.img
diff --git a/vagrant/Kconfig b/vagrant/Kconfig
deleted file mode 100644
index ecf7bcaf..00000000
--- a/vagrant/Kconfig
+++ /dev/null
@@ -1,295 +0,0 @@
-if VAGRANT
-
-choice
- prompt "Vagrant virtualization technology to use"
- default VAGRANT_LIBVIRT_SELECT
-
-config VAGRANT_LIBVIRT_SELECT
- bool "Libvirt"
- help
- Select this option if you want to use KVM / libvirt for
- local virtualization.
-
-config VAGRANT_VIRTUALBOX
- bool "Virtualbox"
- select EXTRA_STORAGE_SUPPORTS_512
- select EXTRA_STORAGE_SUPPORTS_1K
- select EXTRA_STORAGE_SUPPORTS_2K
- select EXTRA_STORAGE_SUPPORTS_4K
- help
- Select this option if you want to use VirtualBox for
- local virtualization.
-
-endchoice
-
-if VAGRANT_VIRTUALBOX
-
-choice
- prompt "VirtualBox storage pool path"
- default VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_MANUAL if !DISTRO_SUSE
- default VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_CWD if DISTRO_SUSE
-
-config VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_CWD
- bool "Use the current vagrant working directory"
- help
- Select this option if you want to use the vagrant directory inside
- where you git cloned kdevops as the Vagrant storage pool path where
- additional NVMe drives will be created. As it is today it
- would seem only fedora restricts the $HOME to g-rwx o-rwx and so
- by default this option won't work on Fedora by default. This used
- to be the old default on kdevops but because of this it should not
- be used by default. Distributions still relying on this should
- verify they can change this default.
-
-config VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_MANUAL
- bool "Custom manual path"
- help
- Select this option if you want to manually specify where to use as
- the directory where we'll have kdevops create additional NVMe drives
- for VirtualBox to use. This is today's default given otherwise
- we may have to muck with the $HOME directory permissions.
-
-endchoice
-
-config VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM
- string "VirtualBox storage pool path"
- default $(shell, scripts/cwd-append.sh vagrant) if VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_CWD
- default "/opt/virtualbox/storage/" if VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM_MANUAL
- help
- The path to use for creating additional NVMe drives used by
- VirtualBox. kdevops adds a postfix "kdevops" to this directory as it
- wants to allow Vagrant full control over that directory. For instance
- if this is /opt/virtualbox/storage/ kdevops will have VirtualBox
- create the NVMe files under the directory
- /opt/virtualbox/storage/kdevops/.vagrant/nvme_disks/guest-hostname/.
-
-choice
- prompt "VirtualBox extra drive format"
- default VIRTUALBOX_EXTRA_DRIVE_VDI
-
-config VIRTUALBOX_EXTRA_DRIVE_VDI
- bool "vdi"
- help
- Select this option if you want to use the vdi format.
-
-config VIRTUALBOX_EXTRA_DRIVE_VMDK
- bool "vmdk"
- help
- Select this option if you want to use the vmdk format.
-
-config VIRTUALBOX_EXTRA_DRIVE_VHD
- bool "vhd"
- help
- Select this option if you want to use the vhd format.
-
-endchoice
-
-config VIRTUALBOX_EXTRA_DRIVE_FORMAT
- string
- default "vdi" if VIRTUALBOX_EXTRA_DRIVE_VDI
- default "vmdk" if VIRTUALBOX_EXTRA_DRIVE_VMDK
- default "vhd" if VIRTUALBOX_EXTRA_DRIVE_VHD
-
-endif # VAGRANT_VIRTUALBOX
-
-config HAVE_SUSE_VAGRANT
- bool
- default $(shell, scripts/check_distro_kconfig.sh suse)
-
-choice
- prompt "Vagrant guest Linux distribution to use"
- default VAGRANT_DEBIAN if DISTRO_DEBIAN || DISTRO_UBUNTU
- default VAGRANT_FEDORA if DISTRO_FEDORA
- default VAGRANT_OPENSUSE if DISTRO_OPENSUSE
- default VAGRANT_SUSE if HAVE_SUSE_VAGRANT
-
-config VAGRANT_DEBIAN
- bool "Debian"
- select HAVE_CUSTOM_DISTRO_HOST_PREFIX
- select HAVE_DISTRO_XFS_PREFERS_MANUAL if FSTESTS_XFS
- select HAVE_DISTRO_BTRFS_PREFERS_MANUAL if FSTESTS_BTRFS
- select HAVE_DISTRO_EXT4_PREFERS_MANUAL if FSTESTS_EXT4
- select HAVE_DISTRO_PREFERS_CUSTOM_HOST_PREFIX
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- help
- This option will set the target guest to Debian.
-
-config VAGRANT_OPENSUSE
- bool "OpenSUSE"
- select HAVE_CUSTOM_DISTRO_HOST_PREFIX
- select HAVE_DISTRO_XFS_PREFERS_MANUAL if FSTESTS_XFS
- select HAVE_DISTRO_BTRFS_PREFERS_MANUAL if FSTESTS_BTRFS
- select HAVE_DISTRO_EXT4_PREFERS_MANUAL if FSTESTS_EXT4
- select HAVE_DISTRO_BLKTESTS_PREFERS_MANUAL if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_CUSTOM_HOST_PREFIX
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- help
- This option will set the target guest to OpenSUSE.
-
-config VAGRANT_SUSE
- bool "SUSE"
- depends on HAVE_SUSE_VAGRANT
- select HAVE_KDEVOPS_CUSTOM_DEFAULTS
- select HAVE_CUSTOM_DISTRO_HOST_PREFIX
- select HAVE_DISTRO_PREFERS_CUSTOM_HOST_PREFIX
- select HAVE_DISTRO_XFS_PREFERS_MANUAL if FSTESTS_XFS
- select HAVE_DISTRO_BTRFS_PREFERS_MANUAL if FSTESTS_BTRFS
- select HAVE_DISTRO_BLKTESTS_PREFERS_MANUAL if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_SUSE
- select HAVE_DISTRO_PREFERS_REGISTRATION
- select HAVE_DISTRO_REG_METHOD_TWOLINE
- select VAGRANT_INSTALL_PRIVATE_BOXES
- select HAVE_CUSTOM_KDEVOPS_GIT
- select HAVE_CUSTOM_KDEVOPS_GIT_DATA
- select HAVE_CUSTOM_KDEVOPS_DIR
- help
- This option will set the target guest to SUSE. There is currently
- no scriptable way to download Vagrant images, however the images
- are available for download via:
-
- https://suse.com/download
-
-config VAGRANT_FEDORA
- bool "Fedora (or derived distro)"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_PREFERS_MANUAL if FSTESTS_XFS
- select HAVE_DISTRO_BTRFS_PREFERS_MANUAL if FSTESTS_BTRFS
- select HAVE_DISTRO_EXT4_PREFERS_MANUAL if FSTESTS_EXT4
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- help
- This option will set the target guest to be a distro in the Fedora family.
- For example, Fedora, CentOS Stream, RHEL, etc.
-
-config VAGRANT_KDEVOPS
- bool "kdevops kernel builds"
- select HAVE_CUSTOM_DISTRO_HOST_PREFIX
- select HAVE_DISTRO_XFS_PREFERS_MANUAL if FSTESTS_XFS
- select HAVE_DISTRO_BTRFS_PREFERS_MANUAL if FSTESTS_BTRFS
- select HAVE_DISTRO_EXT4_PREFERS_MANUAL if FSTESTS_EXT4
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_FSTESTS
- help
- This option will let you select custom kernel builds by the
- kdevops project. The distributions may vary and are are specified.
-endchoice
-
-config HAVE_VAGRANT_BOX_VERSION
- bool
- default n
-
-source "vagrant/Kconfig.debian"
-source "vagrant/Kconfig.opensuse"
-source "vagrant/Kconfig.fedora"
-source "vagrant/Kconfig.kdevops"
-
-if HAVE_SUSE_VAGRANT
-source "vagrant/Kconfig.suse"
-endif # HAVE_SUSE_VAGRANT
-
-config VAGRANT_BOX
- string
- default "debian/testing64" if VAGRANT_DEBIAN_TESTING64 || !VAGRANT
- default "debian/bullseye64" if VAGRANT_DEBIAN_BULLSEYE64
- default "debian/buster64" if VAGRANT_DEBIAN_BUSTER64
- default "opensuse/Tumbleweed.x86_64" if VAGRANT_OPENSUSE_X86_64_TW
- default VAGRANT_FEDORA_BOX_STRING if VAGRANT_FEDORA
- default "generic/rhel8" if VAGRANT_REDHAT_GENERIC_RHEL8_X86_64
- default "generic/rhel9" if VAGRANT_REDHAT_GENERIC_RHEL9_X86_64
- default "opensuse/Leap-15.3.x86_64" if VAGRANT_OPENSUSE_X86_64_LEAP_15_3
- default "opensuse/Leap-15.4.x86_64" if VAGRANT_OPENSUSE_X86_64_LEAP_15_4
- default "Leap-15.4.x86_64" if VAGRANT_OPENSUSE_X86_64_LEAP_15_4
- default "linux-kdevops/debian-next-20220629" if VAGRANT_KDEVOPS_DEBIAN_TESTING64_NEXT_20220629 || !VAGRANT
- default "linux-kdevops/debian-xfs-20230427" if VAGRANT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427 || !VAGRANT
- default VAGRANT_SUSE_BOX if VAGRANT_SUSE
- help
- The Vagrant box to use.
-
-config VAGRANT_BOX_UPDATE_ON_BRINGUP
- bool "Run Vagrant box update prior to bringup"
- default y
- help
- When you use Vagrant on a system the target box for the distribution
- will first be downloaded on its first use. It will not be updated
- until you manually run "vagrant box update" on the respective vagrant
- directory. This can mean that if your system first used kdevops in
- January 2022 and you are using Debian testing, the old version of
- Debian testing as of January 2022 will be used if you try to
- instantiate a guest in January 2023. This can means your userspace
- may be too old to deal with some new kernel features. An example
- is zstd module support for initframfs does not work well with old
- userspace on Debian testing. The boot will fail when trying to
- run "make linux" and it would not be clear why, the reason would be
- a failed ext4 module could not be loaded, in fact no modules could
- be loaded by the initramfs. To fix the user experience we ensure we
- always run "vagrant box update" as the first step to "make bringup".
-
- Folks testing stable kernels will use stable distributions, such as
- Debian bullseye that don't move userspace as often but in fact welcome
- their own stable updates to userspace, and this is why this is kept
- as enabled by default.
-
- You may want to disable this if you don't want to deal with these
- updates on bringup, and you want to do the updates on your own.
- Note that if you already ran bringup with an old box, you won't
- reap benefits of the new one until you "make destroy" and then
- "make bringup" again. If you are already on an old box and don't
- want to destroy your current box image you can just upgrade userspace
- manually by the typical distro means to update itself. For example
- on Debian testing that's "apt-get update && apt-get dist-upgrade".
-
-config VAGRANT_VALIDATE_BEFORE_BRINGUP
- bool "Validate Vagrantfile prior to bringup"
- default y
- help
- Folks hacking on the Vagrantfile may want to ensure they validate
- the Vagrantfile first. This will allow developers to identify issues
- prior to running some real virtualization commands. Enable this by
- default as validation is fast and safe.
-
-config VAGRANT_PREFERRED_KERNEL_CI_SUBJECT_TOPIC
- string
- default VAGRANT_BOX if VAGRANT_DEBIAN_BUSTER64
- default VAGRANT_BOX if VAGRANT_DEBIAN_BULLSEYE64
-
-config HAVE_VAGRANT_BOX_URL
- bool
-
-if HAVE_VAGRANT_BOX_URL
-
-config VAGRANT_BOX_URL
- string
- depends on HAVE_VAGRANT_BOX_URL
- default VAGRANT_SUSE_BOX_URL if HAVE_SUSE_VAGRANT
- default "https://download.opensuse.org/repositories/Virtualization:/Appliances:/Images:/openSUSE-Leap-15.4/images/boxes/Leap-15.4.x86_64.json" if VAGRANT_OPENSUSE_X86_64_LEAP_15_4
-
-endif # HAVE_VAGRANT_BOX_URL
-
-if HAVE_VAGRANT_BOX_VERSION
-
-config VAGRANT_BOX_VERSION
- string
- default "1.0.20230425" if VAGRANT_OPENSUSE_X86_64_TW_1020230425
- default "1.0.20220528" if VAGRANT_OPENSUSE_X86_64_TW_1020220528
- default "1.0.20210915" if VAGRANT_OPENSUSE_X86_64_TW_1020210915
- default "1.0.20210203" if VAGRANT_OPENSUSE_X86_64_TW_1020210203
- default "1.0.20200714" if VAGRANT_OPENSUSE_X86_64_TW_1020200714
- default "1.0.20210203" if VAGRANT_OPENSUSE_X86_64_TW_1020210203
- default "0.1.0" if VAGRANT_KDEVOPS_DEBIAN_TESTING64_NEXT_20220629
- help
- The Vagrant box version to use. This is set for you depending on the
- image you select. You can manually override the version we have last
- tested here.
-
-endif # HAVE_VAGRANT_BOX_VERSION
-
-if !HAVE_VAGRANT_BOX_VERSION
-
-config VAGRANT_BOX_VERSION
- string
- default ""
-
-endif # !HAVE_VAGRANT_BOX_VERSION
-endif # VAGRANT
diff --git a/vagrant/Kconfig.debian b/vagrant/Kconfig.debian
deleted file mode 100644
index c316e728..00000000
--- a/vagrant/Kconfig.debian
+++ /dev/null
@@ -1,46 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-if VAGRANT_DEBIAN
-
-choice
- prompt "Debian release to use"
- default VAGRANT_DEBIAN_TESTING64
-
-config VAGRANT_DEBIAN_BUSTER64
- bool "debian/buster64"
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- depends on TARGET_ARCH_X86_64
- help
- This option will set the target guest to debian/buster64.
-
-config VAGRANT_DEBIAN_BULLSEYE64
- bool "debian/bullseye64"
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- depends on TARGET_ARCH_X86_64
- help
- This option will set the target guest to debian/bullseye64.
-
-config VAGRANT_DEBIAN_TESTING64
- bool "debian/testing64"
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- depends on TARGET_ARCH_X86_64
- help
- This option will set the target guest to debian/testing64.
-
-endchoice
-
-config VAGRANT_DEBIAN_BOX_SHORT
- string
- default "buster64" if VAGRANT_DEBIAN_BUSTER64
- default "bullseye64" if VAGRANT_DEBIAN_BULLSEYE64
- default "testing64" if VAGRANT_DEBIAN_TESTING64
-
-endif # VAGRANT_DEBIAN
diff --git a/vagrant/Kconfig.fedora b/vagrant/Kconfig.fedora
deleted file mode 100644
index 420e6cc8..00000000
--- a/vagrant/Kconfig.fedora
+++ /dev/null
@@ -1,29 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-if VAGRANT_FEDORA
-
-config VAGRANT_FEDORA_BOX_STRING
- string "Vagrant box string"
- default "fedora/38-cloud-base"
- help
- This is the box string that vagrant should use. This is typically
- something like fedora/??-cloud-base or generic/rhel?. We default
- to the latest Fedora cloud-base release.
-
-config VAGRANT_FEDORA_OLD_RELEASE
- bool "Is this an old release (pre-Fedora 32)?"
- default n
- help
- XFS on older Fedora releases lacked support for certain
- features. Enabling this will disable testing certain
- configurations by default in the fstests workflow.
-
-config VAGRANT_FEDORA_NEW_RELEASE
- bool
- default y
- depends on !VAGRANT_FEDORA_OLD_RELEASE
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
-
-endif # VAGRANT_FEDORA
diff --git a/vagrant/Kconfig.kdevops b/vagrant/Kconfig.kdevops
deleted file mode 100644
index 25398034..00000000
--- a/vagrant/Kconfig.kdevops
+++ /dev/null
@@ -1,42 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-if VAGRANT_KDEVOPS
-
-choice
- prompt "Kdevops release to use"
- default VAGRANT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427
-
-config VAGRANT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427
- bool "linux-kdevops/debian-xfs-20230427"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- select HAVE_SUPPORTS_PURE_IOMAP
- depends on TARGET_ARCH_X86_64
- help
- This option will set the target guest to
- linux-kdevops/debian-xfs-20230423 which is based on
- debian-testing and only uses XFS for the root fs.
-
-config VAGRANT_KDEVOPS_DEBIAN_TESTING64_NEXT_20220629
- bool "linux-kdevops/debian-next-20220629"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- depends on TARGET_ARCH_X86_64
- help
- This option will set the target guest to
- linux-kdevops/debian-next-20220629 which is based on
- debian-testing. It just has linux-next next-20220629.
-
-endchoice
-
-config VAGRANT_DEBIAN_BOX_SHORT
- string
- default "debian-next-20220629" if VAGRANT_KDEVOPS_DEBIAN_TESTING64_NEXT_20220629
- default "debian-xfs-20230427" if VAGRANT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427
-
-endif # VAGRANT_KDEVOPS
diff --git a/vagrant/Kconfig.opensuse b/vagrant/Kconfig.opensuse
deleted file mode 100644
index 6da40275..00000000
--- a/vagrant/Kconfig.opensuse
+++ /dev/null
@@ -1,144 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-if VAGRANT_OPENSUSE
-
-choice
- prompt "OpenSUSE release to use"
- default VAGRANT_OPENSUSE_X86_64_LEAP_15_3
-
-config VAGRANT_OPENSUSE_X86_64_TW
- bool "opensuse/Tumbleweed.x86_64"
- depends on TARGET_ARCH_X86_64
- help
- Enable this to be able to select between the supported OpenSUSE
- Tumbleweed releases.
-
-config VAGRANT_OPENSUSE_X86_64_LEAP_15_4
- bool "opensuse/Leap-15.4.x86_64"
- depends on TARGET_ARCH_X86_64
- select HAVE_DISTRO_BTRFS_DISABLES_RAID56 if FSTESTS_BTRFS
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL
- select HAVE_DISTRO_BLKTESTS_TEST_BLOCK if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_BLKTESTS_TEST_LOOP if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_BLKTESTS_TEST_NBD if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_BLKTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_BLKTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_REFRESH
- select HAVE_DISTRO_PREFERS_UPDATE
- select HAVE_DISTRO_PREFERS_INSTALL_KDEVTOOLS
- select HAVE_DISTRO_PREFERS_ANSIBLE_PYTHON2 if !HAVE_DISTRO_PREFERS_DISABLE_ANSIBLE && KDEVOPS_ANSIBLE_PROVISION_ENABLE
- help
- This enables the OpenSUSE Leap 15.4 release.
-
-config VAGRANT_OPENSUSE_X86_64_LEAP_15_3
- bool "opensuse/Leap-15.3.x86_64"
- depends on TARGET_ARCH_X86_64
- select HAVE_DISTRO_BTRFS_DISABLES_RAID56 if FSTESTS_BTRFS
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG
- select HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL
- select HAVE_DISTRO_BLKTESTS_TEST_BLOCK if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_BLKTESTS_TEST_LOOP if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_BLKTESTS_TEST_NBD if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_BLKTESTS_WATCHDOG if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_BLKTESTS_WATCHDOG_KILL if KDEVOPS_WORKFLOW_ENABLE_BLKTESTS
- select HAVE_DISTRO_PREFERS_REFRESH
- select HAVE_DISTRO_PREFERS_UPDATE
- select HAVE_DISTRO_PREFERS_INSTALL_KDEVTOOLS
- select HAVE_DISTRO_PREFERS_ANSIBLE_PYTHON2 if !HAVE_DISTRO_PREFERS_DISABLE_ANSIBLE && KDEVOPS_ANSIBLE_PROVISION_ENABLE
- help
- This enables the OpenSUSE Leap 15.3 release.
-
-endchoice
-
-if VAGRANT_OPENSUSE_X86_64_TW
-
-choice
- prompt "opensuse/Tumbleweed.x86_64 version to use"
- default VAGRANT_OPENSUSE_X86_64_TW_1020230529
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020230529
- bool "opensuse/Tumbleweed.x86_64 1.0.20230529"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20230529.
-
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020230425
- bool "opensuse/Tumbleweed.x86_64 1.0.20230425"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20230425.
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020220528
- bool "opensuse/Tumbleweed.x86_64 1.0.20220528"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20220528.
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020210915
- bool "opensuse/Tumbleweed.x86_64 1.0.20210915 "
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20210915.
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020210203
- bool "opensuse/Tumbleweed.x86_64 1.0.20210203 "
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20210203.
-
-config VAGRANT_OPENSUSE_X86_64_TW_1020200714
- bool "opensuse/Tumbleweed.x86_64 1.0.20200714"
- select HAVE_VAGRANT_BOX_VERSION
- select HAVE_DISTRO_XFS_SUPPORTS_CRC if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_REFLINKS if FSTESTS_XFS
- select HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS if FSTESTS_XFS
- help
- This option will set the target guest to opensuse/Tumbleweed.x86_64
- release 1.0.20200714.
-
-endchoice
-
-endif # VAGRANT_OPENSUSE_X86_64_TW
-
-config VAGRANT_OPENSUSE_BOX_SHORT
- string
- default "tw" if VAGRANT_OPENSUSE_X86_64_TW
- default "leap15sp3" if VAGRANT_OPENSUSE_X86_64_LEAP_15_3
- default "leap15sp4" if VAGRANT_OPENSUSE_X86_64_LEAP_15_4
-
-endif # VAGRANT_OPENSUSE
diff --git a/vagrant/Kconfig.pcie_passthrough_libvirt b/vagrant/Kconfig.pcie_passthrough_libvirt
deleted file mode 100644
index 62d3a86d..00000000
--- a/vagrant/Kconfig.pcie_passthrough_libvirt
+++ /dev/null
@@ -1,53 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-config KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH
- bool "Enable libvirt PCIE passthrough support"
- default n
- help
- Enable this if you want to enable PCI-E passthrough onto target
- guests.
-
-if KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH
-
-choice
- prompt "What guest target type to passthrough to"
- default KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TYPE_FIRST
-
-config KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TYPE_FIRST
- bool "Onto the first guest"
- help
- Select this option if you want to passthrough PCI-E devices selected
- onto the first guest that kdevops generates on the nodes list.
-
-config KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TYPE_SPECIFIC
- bool "Onto a specific host name you'll specify"
- help
- Select this option if you want to passthrough PCI-E devices onto
- a guest hostname. This means you have foresight into the future
- generated kdevops nodes that will be available and you will manually
- specify a target hostname you want to use to pass on the selected
- PCI-E devices to.
-
-config KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TYPE_EACH
- bool "Per device specific host"
- help
- Select this option if you want to have the option passthrough PCI-E
- devices to different target guests. This will allow you to have the
- ability to specify for each found PCI-E device which, to which target
- guest you want to enable the device to passthrough onto.
-
-endchoice
-
-config KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TARGET_HOSTNAME
- string "Guest target hostname to passthrough PCI-E devices to"
- default "enter-valid-hostname"
- depends on KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH_TYPE_SPECIFIC
- help
- Set this to the hostname of the target guest you want to passthrough
- the enabled PCI-E devices to.
-
-menu "Select which PCI-E devices to passthrough"
-source "vagrant/Kconfig.passthrough_libvirt.generated"
-endmenu
-
-endif # KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH
diff --git a/vagrant/Kconfig.suse b/vagrant/Kconfig.suse
deleted file mode 100644
index e69de29b..00000000
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 02/33] kconfigs: fix Kconfig references after vagrant removal
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 03/33] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
` (31 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove Vagrant references from Kconfig files that were causing build
failures after the vagrant directory was removed:
- Remove vagrant/Kconfig source line from Kconfig.bringup
- Remove VAGRANT_LIBVIRT_SELECT dependency from LIBVIRT config
- Remove PCIe passthrough Vagrant references from Kconfig.libvirt
- Remove VAGRANT-dependent machine type options
- Update help text to remove Vagrant mentions
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
kconfigs/Kconfig.bringup | 11 +++++------
kconfigs/Kconfig.libvirt | 20 --------------------
2 files changed, 5 insertions(+), 26 deletions(-)
diff --git a/kconfigs/Kconfig.bringup b/kconfigs/Kconfig.bringup
index a9aefc56..887d3851 100644
--- a/kconfigs/Kconfig.bringup
+++ b/kconfigs/Kconfig.bringup
@@ -14,8 +14,8 @@ config GUESTFS
select KDEVOPS_ENABLE_GUESTFS
select EXTRA_STORAGE_SUPPORTS_LARGEIO
help
- This option will use libguestfs utilities instead of Vagrant to build
- guest images and spin them up using libvirt with KVM.
+ This option will use libguestfs utilities to build guest images and
+ spin them up using libvirt with KVM.
config TERRAFORM
bool "Terraform for cloud environments"
@@ -24,8 +24,8 @@ config TERRAFORM
select EXTRA_STORAGE_SUPPORTS_2K
select EXTRA_STORAGE_SUPPORTS_4K
help
- This option will enable use of Vagrant. Enable this if you want to
- use terraform to create nodes on a cloud environment such as:
+ Enable this if you want to use terraform to create nodes on a cloud
+ environment such as:
* Azure
* AWS
@@ -55,11 +55,10 @@ endchoice
config LIBVIRT
bool
- depends on VAGRANT_LIBVIRT_SELECT || GUESTFS
+ depends on GUESTFS
default y
source "kconfigs/Kconfig.guestfs"
-source "vagrant/Kconfig"
source "terraform/Kconfig"
if LIBVIRT
source "kconfigs/Kconfig.libvirt"
diff --git a/kconfigs/Kconfig.libvirt b/kconfigs/Kconfig.libvirt
index 1b8f4b95..743a76c6 100644
--- a/kconfigs/Kconfig.libvirt
+++ b/kconfigs/Kconfig.libvirt
@@ -463,32 +463,12 @@ config HAVE_LIBVIRT_PCIE_PASSTHROUGH
bool
default $(shell, scripts/check_pciepassthrough_kconfig.sh passthrough_libvirt.generated)
-if HAVE_LIBVIRT_PCIE_PASSTHROUGH
-source "vagrant/Kconfig.pcie_passthrough_libvirt"
-endif # HAVE_LIBVIRT_PCIE_PASSTHROUGH
choice
prompt "Machine type to use"
default LIBVIRT_MACHINE_TYPE_Q35 if TARGET_ARCH_X86_64
default LIBVIRT_MACHINE_TYPE_VIRT if TARGET_ARCH_ARM64
-config LIBVIRT_MACHINE_TYPE_DEFAULT
- bool "Use the default machine type"
- depends on VAGRANT
- help
- Use whatever default the guest was intended to use. This will either
- be the machine type used at virt-install time or some other default
- by QEMU / libvirt. This is important for backward compatibility with
- older kernels. For example if you enable q35 on an old kernel the old
- kernel may not boot. For details refer to kdevops commit 83952e2e532e
- ("vagrant/kdevops_nodes.yaml.in: remove machine_type)".
-
- It would seem today's default for libvirt is to still use "pc" which
- is the old i440x, so you will not get PCIe support.
-
- We only want to support PCI-E capable guests with libguest so the
- default is not allowed on libguest.
-
config LIBVIRT_MACHINE_TYPE_Q35
bool "q35"
depends on TARGET_ARCH_X86_64
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 03/33] scripts: remove Vagrant-specific scripts and Makefiles
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 02/33] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 04/33] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
` (30 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove all Vagrant-related scripts as Vagrant support has been removed:
- vagrant.Makefile - Vagrant build targets
- bringup_vagrant.sh - Vagrant VM bringup script
- destroy_vagrant.sh - Vagrant VM cleanup script
- prune_stale_vagrant.sh - Vagrant state cleanup script
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
scripts/bringup_vagrant.sh | 101 --------------------
scripts/destroy_vagrant.sh | 30 ------
scripts/prune_stale_vagrant.sh | 164 ---------------------------------
scripts/vagrant.Makefile | 109 ----------------------
4 files changed, 404 deletions(-)
delete mode 100755 scripts/bringup_vagrant.sh
delete mode 100755 scripts/destroy_vagrant.sh
delete mode 100755 scripts/prune_stale_vagrant.sh
delete mode 100644 scripts/vagrant.Makefile
diff --git a/scripts/bringup_vagrant.sh b/scripts/bringup_vagrant.sh
deleted file mode 100755
index 4e163871..00000000
--- a/scripts/bringup_vagrant.sh
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-set -e
-
-source ${TOPDIR}/.config
-source ${TOPDIR}/scripts/lib.sh
-
-# Convert the version string x.y.z to a canonical 5 or 6-digit form.
-# Inspired by ld-version.sh on linux. This is the way.
-get_canonical_version()
-{
- IFS=.
- set -- $1
-
- # If the 2nd or 3rd field is missing, fill it with a zero.
- #
- # The 4th field, if present, is ignored.
- # This occurs in development snapshots as in 2.35.1.20201116
- echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
-}
-
-_vagrant_lacks_parallel()
-{
- PARALLEL_MISSING="0.7.0"
- VAGRANT_LIBVIRT_VERSION="$(vagrant plugin list | sed -e 's|(| |g' | sed -e 's|,| |g' | awk '{print $2}')"
-
- OLD=$(get_canonical_version $PARALLEL_MISSING)
- CURRENT=$(get_canonical_version $VAGRANT_LIBVIRT_VERSION)
- if [[ "$CURRENT" -le "$OLD" ]]; then
- return 1
- fi
- return 0
-}
-
-vagrant_check_dups()
-{
- NEW_POSSIBLE_INSTANCES=$(vagrant status --machine-readable | grep ",state," | awk -F"," '{print $2}')
- EXISTING_USER_INSTANCES=$(vagrant global-status | grep -A 200 -e "-----" | grep -v -e "----" | grep -B 200 " " | awk '{print $2}')
- for instance in $NEW_POSSIBLE_INSTANCES ; do
- INSTANCE_STATE=$(vagrant status --machine-readable | grep ",state," | awk -F",${instance}," '{print $2}' |awk -F"," '{print $2}')
- # We're dealing with a new local instance which is not created
- # yet. Now we check to see if globally this user doesn't have
- # an existing instance already created.
- if [[ "$INSTANCE_STATE" == "not_created" ]]; then
- INSTANCE_NEW="true"
- for old_instance in $EXISTING_USER_INSTANCES; do
- # An older instance already exists, complain
- if [[ "$instance" == "$old_instance" ]]; then
- INSTANCE_NEW="false"
- break
- fi
- done
- # At this point we're only dealing with not_created
- # instances *and* we know one does not exist in another
- # directory for this user.
-
- kdevops_pool_path="$CONFIG_LIBVIRT_STORAGE_POOL_PATH"
- # For libvirt we can do one more global sanity check
- if [[ "$CONFIG_LIBVIRT" == "y" ]]; then
- possible_image="${kdevops_pool_path}/vagrant_${instance}.img"
- if [[ -f $possible_image ]]; then
- echo "Image for instance $instance already exists ($possible_image), skippin bringup wipe of spare drives ..."
- continue
- fi
- fi
-
- # If we don't do this, old spare drives might be
- # left over and we'd be using them up again.
- spare_drive_instance_dir="${kdevops_pool_path}/kdevops/$instance"
- if [[ -d ${spare_drive_instance_dir} ]]; then
- echo "Wiping old instance spare drive directory ... $spare_drive_instance_dir"
- rm -rf ${kdevops_pool_path}/kdevops/$instance
- fi
- fi
- done
-}
-
-# This is just a workaround for fedora since we have an old vagrant-libvirt
-# plugin that doesn't work with parallel
-ARG=
-if ! _vagrant_lacks_parallel; then
- ARG='--no-parallel'
-fi
-cd vagrant
-if [[ "$CONFIG_VAGRANT_BOX_UPDATE_ON_BRINGUP" == "y" ]]; then
- if [[ ! -f $(basename "$KDEVOPS_VAGRANT_PROVISIONED") ]]; then
- vagrant box update
- fi
-fi
-if [[ "$CONFIG_VAGRANT_VALIDATE_BEFORE_BRINGUP" == "y" ]]; then
- vagrant validate
- if [[ $? -ne 0 ]]; then
- echo "kdevops: Failed to validate Vagrantfile, stopping here"
- exit 1
- fi
-fi
-
-vagrant_check_dups
-
-vagrant up $ARG
diff --git a/scripts/destroy_vagrant.sh b/scripts/destroy_vagrant.sh
deleted file mode 100755
index bd5e43d0..00000000
--- a/scripts/destroy_vagrant.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-set -e
-
-source ${TOPDIR}/.config
-source ${TOPDIR}/scripts/lib.sh
-
-cd vagrant
-vagrant destroy -f
-# Make sure the user can nuke this stuff
-sudo chgrp $USER . .vagrant
-sudo chmod g+rwx . .vagrant
-rm -rf .vagrant
-
-# These are not initilized instances, our current directory possible
-# instances. If you're running 'make destroy' you know what you are
-# doing so we don't check for global dups or anything like that.
-UNINIT_CURRENT_INSTANCES=$(vagrant status --machine-readable | grep ",state," | grep not_created | awk -F "," '{print $2}')
-for i in $UNINIT_CURRENT_INSTANCES; do
- UNINIT_INSTANCE_SPARE_DRIVE_DIR="${CONFIG_LIBVIRT_STORAGE_POOL_PATH}/kdevops/$i"
- if [[ -d $UNINIT_INSTANCE_SPARE_DRIVE_DIR ]]; then
- echo "Found unitialized (possibly old) instance spare drive directory, removing it ... $i"
- rm -rf $UNINIT_INSTANCE_SPARE_DRIVE_DIR
- fi
-done
-
-if [[ -f $(basename "$KDEVOPS_VAGRANT_PROVISIONED") ]]; then
- rm -f $(basename "$KDEVOPS_VAGRANT_PROVISIONED") ]];
-fi
diff --git a/scripts/prune_stale_vagrant.sh b/scripts/prune_stale_vagrant.sh
deleted file mode 100755
index 61ac0e86..00000000
--- a/scripts/prune_stale_vagrant.sh
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-set -e
-
-source .config
-source scripts/lib.sh
-
-SUDO_REQ="sudo"
-EVALUATE="false"
-THIS_SCRIPT=$0
-
-run_prune_path()
-{
- EVAL_ARGS=""
- if [[ "$1" == "true" ]]; then
- EVAL_ARGS="--evaluate"
- fi
- POOLS=$($SUDO_REQ virsh pool-list | grep -A 2000 -e "---" | grep -v -e "---" | awk '{print $1}')
- for p in $POOLS; do
- POOL_PATH=$($SUDO_REQ virsh pool-dumpxml $p | grep path | sed -e 's|<path>||' | sed -e 's|</path>||' | awk '{print $1}')
- echo "Evaluating pool $p with path $POOL_PATH ..."
- $THIS_SCRIPT $EVAL_ARGS $POOL_PATH
- if [[ $? -ne 0 ]]; then
- echo "Inspect pool $p there is something odd with it or its empty and unused"
- fi
- done
-}
-
-if [[ "$CONFIG_LIBVIRT_URI_SESSION" == "y" ]]; then
- SUDO_REQ=""
-fi
-
-if [[ "$CONFIG_LIBVIRT" != "y" ]]; then
- echo "Only libvirt is supported at this time for this prune"
- exit 1
-fi
-
-if [[ $# -eq 0 ]]; then
- KDEVOPS_POOL_PATH="$CONFIG_LIBVIRT_STORAGE_POOL_PATH"
-elif [[ $# -eq 1 ]]; then
- if [[ "$1" == "--help" ]]; then
- echo "Usage: $0"
- echo " --evaluate -- evaluates how much savings you could on your configured pool"
- echo " --evaluate <path-to-libvirt-pool> -- evaluates how much savings you could on a specific pool path"
- echo " --prune-eval-pools -- evaluates how much savings you could save if we tried to prune all kdevops pools"
- echo " --prune-pools -- prunes all pools found for kdevops"
- exit
- elif [[ "$1" == "--prune-pools" ]]; then
- echo unsupported
- exit 1
- run_prune_path false
- exit
- elif [[ "$1" == "--prune-eval-pools" ]]; then
- run_prune_path true
- exit
- else
- KDEVOPS_POOL_PATH="$1"
- fi
-elif [[ $# -eq 2 ]]; then
- if [[ "$1" == "--evaluate" ]]; then
- EVALUATE="true"
- KDEVOPS_POOL_PATH="$2"
- else
- echo "Usage: $0 --evaluate | $0 | $0 <path-to-libvirt-pool>"
- exit
- fi
-else
- echo "Usage: $0 --evaluate | $0 | $0 <path-to-libvirt-pool>"
- exit
-fi
-
-if [[ ! -d $KDEVOPS_POOL_PATH ]]; then
- echo "$KDEVOPS_POOL_PATH does not exist, no need to prune, maybe destroy and undefine this pool"
- echo "Consider running the following if this is a stale pool:"
- echo "$SUDO_REQ virsh pool-destroy <pool-name>"
- echo "$SUDO_REQ virsh pool-undefine <pool-name>"
- exit 1
-fi
-
-HOMES=$(cat /etc/passwd| awk -F":" '{print $6}')
-for i in $HOMES; do
- if [[ "$KDEVOPS_POOL_PATH" == "$i" || "$KDEVOPS_POOL_PATH" == "$i/" ]]; then
- echo "Skipping odd pool on a home directory $i"
- exit 1
- fi
-done
-
-EXISTING_USAGE=$(du -hs $KDEVOPS_POOL_PATH)
-EXISTING_USAGE_BYTES=$(du -s --block-size=1 $KDEVOPS_POOL_PATH | awk '{print $1}')
-
-echo -e "Existing disk usage:\n$EXISTING_USAGE"
-
-ALL_LIBVIRT_INSTANCES=$($SUDO_REQ virsh list --all --title | grep -A 200 -e "----" | grep -v -e "---" | awk '{print $2}')
-
-BYTES_COULD_SAVE=0
-
-# Scan the libvirt images with a vagrant prefix images not registered somehow
-# to libvirt. This would be odd. We ignore libvirt images not related to
-# vagrant.
-for i in ${KDEVOPS_POOL_PATH}/vagrant_*.img; do
- EXISTS="n"
- IMAGE_INSTANCE=$(basename ${i%*.img})
- for INSTANCE in $ALL_LIBVIRT_INSTANCES; do
- if [[ "$INSTANCE" == "$IMAGE_INSTANCE" ]]; then
- EXISTS="y"
- fi
- done
- if [[ "$EXISTS" == "n" ]]; then
- echo "Instance $IMAGE_INSTANCE does not exist and is therefore stale"
- if [[ "$EVALUATE" == "true" ]]; then
- BYTES=$(du -s --block-size=1 $i | awk '{print $1}')
- let BYTES_COULD_SAVE=$BYTES_COULD_SAVE+BYTES
- else
- rm -rf $i
- fi
- fi
-done
-
-# Now scan only the spare kdevops drives. Since we're only looking
-# at the kdevops directory we are ignoring non-kdevops instances
-# data.
-for i in ${KDEVOPS_POOL_PATH}/kdevops/*; do
- EXISTS="n"
- if [[ ! -d $i ]]; then
- continue
- fi
- DIR=$(basename $i)
- for INSTANCE in $ALL_LIBVIRT_INSTANCES; do
- if [[ "vagrant_${DIR}" == "$INSTANCE" ]]; then
- EXISTS="y"
- fi
- done
- if [[ "$EXISTS" == "n" ]]; then
- echo "Spare kdevops drive exists without any instance: $DIR"
- if [[ "$EVALUATE" == "true" ]]; then
- BYTES=$(du -s --block-size=1 $i | awk '{print $1}')
- let BYTES_COULD_SAVE=$BYTES_COULD_SAVE+BYTES
- else
- rm -rf $i
- fi
- fi
-done
-
-
-if [[ "$EVALUATE" == "true" ]]; then
- if [[ "$BYTES_COULD_SAVE" == "0" ]]; then
- echo "Nothing to prune on $KDEVOPS_POOL_PATH"
- else
- echo "You could save $BYTES_COULD_SAVE bytes ( $((BYTES_COULD_SAVE/1024/1024)) MiB or $((BYTES_COULD_SAVE/1024/1024/1024)) GiB $((BYTES_COULD_SAVE/1024/1024/1024/1024)) TiB)"
- fi
-else
- AFTER_USAGE_BYTES=$(du -s --block-size=1 $KDEVOPS_POOL_PATH | awk '{print $1}')
- DELTA=0
- DELTA=$((EXISTING_USAGE_BYTES-AFTER_USAGE_BYTES))
-
- AFTER_USAGE=$(du -hs $KDEVOPS_POOL_PATH)
- echo -e "After prune disk usage:\n$AFTER_USAGE"
- if [[ $DELTA == "0" ]]; then
- echo "No disk savings after prune"
- else
- echo "Saved $DELTA bytes ( $((DELTA/1024/1024)) MiB or $((DELTA/1024/1024/1024)) GiB $((DELTA/1024/1024/1024/1024)) TiB)"
- fi
-fi
diff --git a/scripts/vagrant.Makefile b/scripts/vagrant.Makefile
deleted file mode 100644
index e43a21d3..00000000
--- a/scripts/vagrant.Makefile
+++ /dev/null
@@ -1,109 +0,0 @@
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-VAGRANT_ARGS :=
-
-KDEVOPS_NODES_TEMPLATE := $(KDEVOPS_NODES_ROLE_TEMPLATE_DIR)/kdevops_nodes_split_start.j2.yaml
-KDEVOPS_NODES := vagrant/kdevops_nodes.yaml
-
-KDEVOPS_VAGRANT_TEMPLATE := $(KDEVOPS_NODES_ROLE_TEMPLATE_DIR)/Vagrantfile.j2
-KDEVOPS_VAGRANT_GENERATED:= vagrant/.Vagrantfile.generated
-KDEVOPS_VAGRANT := vagrant/Vagrantfile
-
-export KDEVOPS_PROVISIONED_SSH := $(KDEVOPS_PROVISIONED_SSH_DEFAULT_GUARD)
-
-KDEVOPS_MRPROPER += $(KDEVOPS_VAGRANT_GENERATED)
-KDEVOPS_MRPROPER += $(KDEVOPS_VAGRANT)
-
-VAGRANT_ARGS += kdevops_vagrant_template_full_path='$(TOPDIR_PATH)/$(KDEVOPS_VAGRANT_TEMPLATE)'
-
-VAGRANT_ARGS += kdevops_enable_vagrant=True
-VAGRANT_ARGS += kdevops_vagrant='$(KDEVOPS_VAGRANT)'
-VAGRANT_ARGS += kdevops_vagrant_generated='$(KDEVOPS_VAGRANT_GENERATED)'
-VAGRANT_ARGS += kdevops_vagrant_template='$(KDEVOPS_VAGRANT_TEMPLATE)'
-
-VAGRANT_ARGS += data_user='vagrant'
-VAGRANT_ARGS += data_vagrant='vagrant'
-
-ifeq (y,$(CONFIG_HAVE_VAGRANT_BOX_URL))
-VAGRANT_PRIVATE_BOX_DEPS := vagrant_private_box_install
-else
-VAGRANT_PRIVATE_BOX_DEPS :=
-endif
-
-ifeq (y,$(CONFIG_LIBVIRT))
-VAGRANT_ARGS += libvirt_provider=True
-
-QEMU_GROUP:=$(subst ",,$(CONFIG_LIBVIRT_QEMU_GROUP))
-VAGRANT_ARGS += kdevops_storage_pool_group='$(QEMU_GROUP)'
-VAGRANT_ARGS += storage_pool_group='$(QEMU_GROUP)'
-endif
-
-ifeq (y,$(CONFIG_VAGRANT_VIRTUALBOX))
-VAGRANT_ARGS += virtualbox_provider=True
-endif
-
-VAGRANT_9P_HOST_CLONE :=
-ifeq (y,$(CONFIG_BOOTLINUX_9P))
-VAGRANT_9P_HOST_CLONE := vagrant_9p_linux_clone
-endif
-
-LIBVIRT_PCIE_PASSTHROUGH :=
-ifeq (y,$(CONFIG_KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH))
-LIBVIRT_PCIE_PASSTHROUGH := libvirt_pcie_passthrough_permissions
-endif
-
-ifneq ($(strip $(CONFIG_RHEL_ORG_ID)),)
-ifneq ($(strip $(CONFIG_RHEL_ACTIVATION_KEY)),)
-RHEL_ORG_ID:=$(subst ",,$(CONFIG_RHEL_ORG_ID))
-RHEL_ACTIVATION_KEY:=$(subst ",,$(CONFIG_RHEL_ACTIVATION_KEY))
-VAGRANT_ARGS += rhel_org_id="$(RHEL_ORG_ID)"
-VAGRANT_ARGS += rhel_activation_key="$(RHEL_ACTIVATION_KEY)"
-endif
-endif
-
-EXTRA_VAR_INPUTS += extend-extra-args-vagrant
-ANSIBLE_EXTRA_ARGS += $(VAGRANT_ARGS)
-
-VAGRANT_BRINGUP_DEPS :=
-VAGRANT_BRINGUP_DEPS += $(VAGRANT_PRIVATE_BOX_DEPS)
-VAGRANT_BRINGUP_DEPS += $(VAGRANT_9P_HOST_CLONE)
-VAGRANT_BRINGUP_DEPS += $(LIBVIRT_PCIE_PASSTHROUGH)
-
-KDEVOPS_PROVISION_METHOD := bringup_vagrant
-KDEVOPS_PROVISION_DESTROY_METHOD := destroy_vagrant
-
-extend-extra-args-vagrant:
- @if [[ "$(CONFIG_HAVE_VAGRANT_BOX_URL)" == "y" ]]; then \
- echo "kdevops_install_vagrant_boxes: True" >> $(KDEVOPS_EXTRA_VARS) ;\
- echo "vagrant_boxes:" >> $(KDEVOPS_EXTRA_VARS) ;\
- echo " - { name: '$(CONFIG_VAGRANT_BOX)', box_url: '$(CONFIG_VAGRANT_BOX_URL)' }" >> $(KDEVOPS_EXTRA_VARS) ;\
- fi
-
-vagrant_private_box_install:
- $(Q)ansible-playbook $(ANSIBLE_VERBOSE) -i \
- $(KDEVOPS_HOSTFILE) $(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, \
- 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, \
- playbooks/update_ssh_config_vagrant.yml
- fi
- $(Q)touch $(KDEVOPS_PROVISIONED_SSH)
-
-bringup_vagrant: $(VAGRANT_BRINGUP_DEPS)
- $(Q)$(TOPDIR)/scripts/bringup_vagrant.sh
-PHONY += bringup_vagrant
-
-destroy_vagrant:
- $(Q)$(TOPDIR)/scripts/destroy_vagrant.sh
- $(Q)rm -f $(KDEVOPS_PROVISIONED_SSH)
- $(Q)rm -f $(KDEVOPS_PROVISIONED_SSH) $(KDEVOPS_PROVISIONED_DEVCONFIG)
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 04/33] playbooks: remove Vagrant-specific playbooks and roles
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (2 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 03/33] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 05/33] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
` (29 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove all Vagrant-related Ansible playbooks and roles:
- install_vagrant_boxes.yml playbook and role
- update_ssh_config_vagrant.yml playbook and role
- Vagrantfile.j2 template from gen_nodes role
This removes the complete Vagrant integration from the Ansible
provisioning system.
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
playbooks/install_vagrant_boxes.yml | 5 -
.../roles/gen_nodes/templates/Vagrantfile.j2 | 478 ------------------
.../roles/install_vagrant_boxes/README.md | 46 --
.../install_vagrant_boxes/defaults/main.yml | 6 -
.../scripts/add-box-if-missing.sh | 48 --
.../install_vagrant_boxes/tasks/main.yml | 49 --
.../roles/update_ssh_config_vagrant/README.md | 66 ---
.../defaults/main.yml | 13 -
.../python/update_ssh_config.py | 1 -
.../update_ssh_config_vagrant/tasks/main.yml | 69 ---
.../update_ssh_config/.gitignore | 6 -
.../update_ssh_config/.travis.yml | 12 -
.../update_ssh_config/CONTRIBUTING | 49 --
.../update_ssh_config/LICENSE | 239 ---------
.../update_ssh_config/Makefile | 15 -
.../update_ssh_config/README.md | 159 ------
.../test_update_ssh_config.py | 417 ---------------
.../tests/0001_remove_hosts_top.orig | 53 --
.../tests/0001_remove_hosts_top.res | 33 --
.../tests/0002_remove_hosts_middle.orig | 53 --
.../tests/0002_remove_hosts_middle.res | 33 --
.../tests/0003_remove_hosts_bottom.orig | 53 --
.../tests/0003_remove_hosts_bottom.res | 33 --
.../tests/0004_remove_hosts_missing.orig | 33 --
.../tests/0004_remove_hosts_missing.res | 33 --
.../tests/0005_remove_hosts_similar.orig | 53 --
.../tests/0005_remove_hosts_similar.res | 53 --
.../tests/0006_add_hosts_manual.orig | 33 --
.../tests/0006_add_hosts_manual.res | 53 --
..._remove_hosts_two_separate_ops_top.add.res | 53 --
...add_remove_hosts_two_separate_ops_top.orig | 53 --
...move_hosts_two_separate_ops_top.remove.res | 33 --
.../0008_add_remove_hosts_one_shot_top.orig | 1 -
.../0008_add_remove_hosts_one_shot_top.res | 1 -
..._hosts_vagrant_emulate_top.emulate_vagrant | 20 -
.../0009_add_hosts_vagrant_emulate_top.orig | 1 -
.../0009_add_hosts_vagrant_emulate_top.res | 53 --
...rithms_vagrant_emulate_top.emulate_vagrant | 20 -
...sts_kexalgorithms_vagrant_emulate_top.orig | 53 --
...osts_kexalgorithms_vagrant_emulate_top.res | 55 --
...two_separate_ops_kexalgorithms_top.add.res | 55 --
...ts_two_separate_ops_kexalgorithms_top.orig | 53 --
..._separate_ops_kexalgorithms_top.remove.res | 33 --
.../0012_add_remove_hosts_empty_file.res | 20 -
.../update_ssh_config/update_ssh_config.py | 325 ------------
.../update_ssh_config_vagrant/vars/main.yml | 1 -
playbooks/update_ssh_config_vagrant.yml | 4 -
47 files changed, 3028 deletions(-)
delete mode 100644 playbooks/install_vagrant_boxes.yml
delete mode 100644 playbooks/roles/gen_nodes/templates/Vagrantfile.j2
delete mode 100644 playbooks/roles/install_vagrant_boxes/README.md
delete mode 100644 playbooks/roles/install_vagrant_boxes/defaults/main.yml
delete mode 100755 playbooks/roles/install_vagrant_boxes/scripts/add-box-if-missing.sh
delete mode 100644 playbooks/roles/install_vagrant_boxes/tasks/main.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/README.md
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/defaults/main.yml
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/python/update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/tasks/main.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.gitignore
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.travis.yml
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/CONTRIBUTING
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/LICENSE
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/Makefile
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md
delete mode 100755 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/test_update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.add.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.remove.res
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.orig
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.emulate_vagrant
delete mode 120000 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.emulate_vagrant
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.add.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.orig
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.remove.res
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0012_add_remove_hosts_empty_file.res
delete mode 100755 playbooks/roles/update_ssh_config_vagrant/update_ssh_config/update_ssh_config.py
delete mode 100644 playbooks/roles/update_ssh_config_vagrant/vars/main.yml
delete mode 100644 playbooks/update_ssh_config_vagrant.yml
diff --git a/playbooks/install_vagrant_boxes.yml b/playbooks/install_vagrant_boxes.yml
deleted file mode 100644
index 8cffb36a..00000000
--- a/playbooks/install_vagrant_boxes.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- hosts: localhost
- tasks:
- - include_role:
- name: install_vagrant_boxes
diff --git a/playbooks/roles/gen_nodes/templates/Vagrantfile.j2 b/playbooks/roles/gen_nodes/templates/Vagrantfile.j2
deleted file mode 100644
index a52f5566..00000000
--- a/playbooks/roles/gen_nodes/templates/Vagrantfile.j2
+++ /dev/null
@@ -1,478 +0,0 @@
-# -*- mode: ruby -*-
-# # vi: set ft=ruby :
-# Automatically generated file by kdevops {{ kdevops_version }}
-
-# This file should only be edited to *grow* support for new features.
-# This file is automatically created for you from a jinja2 template file
-# and parsed with ansible after extra_vars.yaml file is created. The source is
-# playbooks/roles/gen_nodes/templates/Vagrantfile.j2
-
-Vagrant.require_version ">= 1.6.0"
-
-require 'json'
-require 'yaml'
-require 'fileutils'
-require 'rbconfig'
-
-@os = RbConfig::CONFIG['host_os']
-
-# XXX: upstream libvirt enhancement needed
-#
-# Vagrant allows multiple provider code to be supported easily, however
-# this logic assuems all provider setup is supported through configuration
-# variables from the provider. This is not the case for libvirt. We need
-# to create the qemu image, and the libvirt vagrant provider doesn't have
-# support to create the images as virtual box does. We run the commands
-# natively, however this also reveals that on execution path even code
-# for other providers gets executed regardless of the provider you are
-# using *unless* that code is using provider specific variables. Best we
-# can do for now is detect your OS and set a local variable where we *do*
-# run different local code paths depending on the target provider.
-#
-# Right now we make these assumptions:
-#
-# Your OS Provider
-# -------------------------------
-# Linux libirt
-# Mac OS X virtualbox
-provider = "libvirt"
-
-# Are we in a nested virtualized environment? For now we just
-# do something different if we're not on bare metal. We may want
-# to do something different later to optimize this further but
-# we have to draw the line somewhere.
-nested = %x(which systemd-detect-virtd 1>/dev/null 2>&1 || systemd-detect-virt) != "none"
-
-case
-when @os.downcase.include?('linux')
- provider = "libvirt"
-when @os.downcase.include?('darwin')
- provider = "virtualbox"
-else
- puts "You OS hasn't been tested yet, go add support and send a patch."
- exit
-end
-
-# We assume if you are in kdevops/vagrant/ your project namespace is kdevops
-project_namespace = File.basename(File.dirname(Dir.getwd))
-
-node_config = "kdevops_nodes.yaml"
-node_config_override = "kdevops_nodes_override.yaml"
-
-config_data = YAML.load_file(node_config)
-
-override_data = false
-if File.file?(node_config_override)
- override_data = true
- config_data_override = YAML.load_file(node_config_override)
-end
-
-global_data = config_data['vagrant_global']
-vagrant_boxes = config_data['vagrant_boxes']
-
-if override_data
- if config_data_override['vagrant_global']
- global_data = config_data_override['vagrant_global']
- end
- if config_data_override['vagrant_boxes']
- vagrant_boxes = config_data_override['vagrant_boxes']
- end
-end
-
-supported_provider = case provider
- when "virtualbox" then true
- when "libvirt" then true
- else false
-end
-
-if ! supported_provider
- puts "Unsupported provider: #{provider} on " + RbConfig::CONFIG['host_os']
- puts "Consider adding support and send a patch"
- exit
-end
-
-qemu_group = global_data['libvirt_cfg']['qemu_group']
-qemu_group_auto = global_data['libvirt_cfg']['qemu_group_auto']
-
-if qemu_group_auto
- if File.exist?('/etc/debian_version')
- qemu_group = 'libvirt-qemu'
- else
- qemu_group = 'qemu'
- end
-end
-
-kdevops_pool_path = global_data['storage_pool_path']
-
-libvirt_session_public_network_dev = global_data['libvirt_cfg']['session_public_network_dev']
-
-Vagrant.configure("2") do |config|
- vagrant_boxes.each do |server_data|
- if Vagrant.has_plugin?("vagrant-timezone")
- config.timezone.value = "{{ kdevops_host_timezone.stdout }}"
- end
- # Using sync folders won't work for say openstack / aws / azure / gce, and
- # for that we'll use terraform, so best to allow whatever data we want to
- # sync be provisioned with ansible.
- config.vm.synced_folder './', '/vagrant', type: '9p', disabled: true, accessmode: "mapped", mount: false
- config.vm.define server_data["name"] do |srv|
- srv.vm.box = server_data['box'] ? server_data['box'] : global_data["box"]
- server_box_version = server_data['box_version'] ? server_data['box_version'] : global_data["box_version"]
- if server_box_version != ""
- srv.vm.box_version = server_box_version
- end
-{% if not libvirt_session %}
- if ! nested
- srv.vm.network "private_network", ip: server_data["ip"]
- end
-{% endif %}
- host_name = server_data["name"]
- node_custom_data_path = kdevops_pool_path + "/#{host_name}"
- FileUtils.mkdir_p(node_custom_data_path) unless File.exist?(node_custom_data_path)
- extra_disk_path = "#{node_custom_data_path}/" + "{{ extra_disk_path }}"
- FileUtils.mkdir_p(extra_disk_path) unless File.exist?(extra_disk_path)
-{% if libvirt_enable_cxl %}
- cxl_path = "#{node_custom_data_path}" + "/cxl"
- FileUtils.mkdir_p(cxl_path) unless File.exist?(cxl_path)
-{% endif %}
-{% if virtualbox_provider %}
- srv.vm.provider "virtualbox" do |vb, override|
- if provider == "virtualbox" && ! global_data['virtualbox_cfg']['auto_update']
- # we'll need to run later: vagrant vbguest install
- config.vbguest.auto_update = false
- end
- override.vm.hostname = host_name
- override.vm.boot_timeout = global_data['boot_timeout']
- vb.memory = global_data["memory"]
- vb.cpus = global_data["cpus"]
- if global_data['extra_disks']
- port = 0
- port_count = global_data['extra_disks'].size()
- global_data['extra_disks'].each do |key, value|
- size = value['size']
- # The "purpose" value below is currently an unused label at
- # the moment. The serial number is we really use with the
- # /dev/disk-id to ensure the extra drives are used as intended.
- purpose = key
- port_plus = port + 1
- extra_disk = extra_disk_path + "/{{ extra_disk_driver }}#{port}n#{port_plus}.{{ libvirt_extra_drive_format }}"
-
- # "Standard" provides a sparse file. That's what we want, we cheat
- # the OS and only use what we need. If you want the real file size
- # add a global config option and send a patch and justify it. I'd
- # like to hear about it. We use sparse files for libvirt as well
- # and should try to keep setup in sync.
- if (! File.file?(extra_disk))
- vb.customize ["createmedium", "disk", "--filename", extra_disk, "--variant", "Standard", "--format", "{{ libvirt_extra_drive_format | upper }}", "--size", size]
- end
- # Virtualbox supports only one nvme controller... this will fail
- # unless you are a Virtualbox hacker adding support for this :)
- if global_data['virtualbox_cfg']['nvme_controller_per_disk']
- # https://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl
- # This command attaches, modifies, and removes a storage
- # controller. After this, virtual media can be attached to the
- # controller with the storageattach command.
- extra_drive_name = "{{ extra_disk_driver }}#{port}"
- if (! File.file?(extra_disk))
- vb.customize ["storagectl", :id, "--name", "#{extra_drive_name}", "--add", "pcie", "--controller", "{{ extra_disk_controller }}", "--portcount", 1, "--bootable", "off"]
- end
- # Now attach the drive
- vb.customize ["storageattach", :id, "--storagectl", "#{extra_drive_name}", "--type", "hdd", "--medium", extra_disk, "--port", 0]
- else
- if (port == 0 && !File.file?(extra_disk))
- vb.customize ["storagectl", :id, "--name", "{{ extra_disk_driver }}0", "--add", "pcie", "--controller", "{{ extra_disk_controller }}", "--portcount", port + 1, "--bootable", "off"]
- end
- vb.customize ["storageattach", :id, "--storagectl", "{{ extra_disk_driver }}0", "--type", "hdd", "--medium", extra_disk, "--port", port]
- end
-
- if global_data['enable_sse4']
- # Support for the SSE4.x instruction is required in some versions of VB.
- vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"]
- vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"]
- end
- port += 1
- end # end of looping all extra disks
- end # end of checking for extra disks
- end # end of virtualbox provider section
-{% endif %}
-{% if libvirt_provider %}
- # For details see: https://github.com/vagrant-libvirt/vagrant-libvirt
- srv.vm.provider "libvirt" do |libvirt, override|
- #libvirt.host = "localhost"
- override.vm.hostname = host_name
- override.vm.boot_timeout = global_data['boot_timeout']
- libvirt.watchdog :model => 'i6300esb', :action => 'reset'
- libvirt.storage_pool_path = kdevops_pool_path
-{% if libvirt_host_passthrough %}
- libvirt.cpu_mode = 'host-passthrough'
-{% endif %}
-{% if libvirt_storage_pool_create %}
- libvirt.storage_pool_name = '{{ libvirt_storage_pool_name }}'
-{% endif %}
-{% if libvirt_session %}
- libvirt.qemu_use_session = true
- libvirt.uri = global_data['libvirt_cfg']['uri']
- libvirt.system_uri = global_data['libvirt_cfg']['system_uri']
- libvirt.socket = global_data['libvirt_cfg']['session_socket']
- libvirt.management_network_device = global_data['libvirt_cfg']['session_management_network_device']
-{% else %}
- if nested
- libvirt.management_network_name = 'vagrant-libvirt-private'
- libvirt.management_network_address = '192.168.124.0/24'
- libvirt.management_network_device = global_data['libvirt_cfg']['session_management_network_device']
- end
-{% endif %}
- libvirt.memory = global_data["memory"]
- libvirt.cpus = global_data["cpus"]
- libvirt.emulator_path = global_data['libvirt_cfg']['emulator_path']
- if server_data["machine_type"]
- libvirt.machine_type = server_data["machine_type"]
- else
- if global_data['libvirt_cfg']['machine_type']
- libvirt.machine_type = global_data['libvirt_cfg']['machine_type']
- end
- end
- # Add an extra spare PCI or PCI-E root bus to be used for extra drives.
- #
- # We use a dedicated PCI or PCI-E root bus to not clash with defaults
- # which libvirt may use on PCI root bus (pci.0 if PCI, pcie.0 if PCI-E).
- # For a while in kdevops we were not clashing with the defaults brought
- # up by libvirt-qemu, however recent versions seem to start clashing up
- # to pci.0,addr=0x3 so we'd see an error like:
- #
- # PCI: slot 3 function 0 not available for virtio-blk-pci, in use by nvme,id=(null) (Libvirt::Error)
- #
- # Just create a PCI or PCI-E root bus dedicated for extra drives. We
- # use 0x08 to place this PCI / PCI-E root bus as we know this is
- # available on modern x86-64 systems. Eventually we may need to bump
- # this to 0x9, but it would be better instead to have vagant-libvirt
- # speak "add a new PCI or PCI-E root bus" and "add extra drives" whether
- # that is nvme or virtio.
- #
-{% if not libvirt_override_machine_type %}
- # For i440x on x86_64 (default on libvirt as of today) we use PCI, not
- # PCI-E. Below assumes i440x. i440x cannot support CXL as it does not
- # support PCI-E.
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "pci-bridge,id=custom-pci-for-{{ extra_disk_driver }},chassis_nr=1,bus=pci.0,addr=0x8"
-{% else %}
-{% if libvirt_machine_type == "q35" %}
- libvirt.qemuargs :value => "-global"
- libvirt.qemuargs :value => "ICH9-LPC.disable_s3=0"
- libvirt.qemuargs :value => "-global"
- libvirt.qemuargs :value => "ICH9-LPC.disable_s4=0"
-{% endif %}
- # This is for exclusive PCIe hierarchies.
- #
- # For 'q35' on x86_64 and 'virt' for AArch64 we use can use PCI-E
- # only hierarchies.
- #
- # We add a dedicated PCI root bus (pxb-pcie) just for dedicated PCI
- # root ports for extra drives, this will be pcie.1.
- #
- # We can keep doing this to support new technologies. For instance,
- # it may be reasonable to add a PCI-E root bus also to support PCI-E
- # hotplug on PCI-E capable systems and avoid clashes with libvirt
- # defaults on pcie.0. CXL uses its own host bridge so device
- # enumeration is pretty well isolated already so no need to do anything
- # extra there.
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "pxb-pcie,id=pcie.1,bus_nr=32,bus=pcie.0,addr=0x8"
-{% if libvirt_enable_cxl %}
- libvirt.qemuargs :value => "-machine"
- libvirt.qemuargs :value => "cxl=on"
- cpus = global_data["cpus"]
- memory = global_data["memory"]
- libvirt.numa_nodes = [
- {:cpus => "0-#{cpus - 1}", :memory => global_data["memory"]}
- ]
- libvirt.qemuargs :value => "-m"
- libvirt.qemuargs :value => "maxmem=#{memory *2}M,slots=16"
- # CXL host bus
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "pxb-cxl,bus=pcie.0,id=cxl.0,bus_nr=52,addr=0x9"
-
-
- cxl_mem1_path = cxl_path + "/cxl-mem1.raw"
- libvirt.qemuargs :value => "-object"
- libvirt.qemuargs :value => "memory-backend-file,id=kdevops-cxl-mem1,share=on,mem-path=#{cxl_mem1_path},size=4G"
-
- # Label Storage Area, used to store CXL namespace labels and region labels
- cxl_lsa1_path = cxl_path + "/cxl-lsa1.raw"
- libvirt.qemuargs :value => "-object"
- libvirt.qemuargs :value => "memory-backend-file,id=kdevops-cxl-lsa1,share=on,mem-path=#{cxl_lsa1_path},size=256M"
-
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-rp,port=0,bus=cxl.0,id=kdevops_cxl_root_port0,chassis=0,slot=2"
-
-{% if libvirt_enable_cxl_demo_topo2 %}
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-rp,port=1,bus=cxl.0,id=kdevops_cxl_root_port1,chassis=0,slot=3"
-{% endif %} # TOPO 2
-
-
-{% if libvirt_enable_cxl_switch_topo1 %}
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-upstream,bus=kdevops_cxl_root_port0,id=kdevops_cxl_us0,addr=0.0,multifunction=on"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-switch-mailbox-cci,bus=kdevops_cxl_root_port0,addr=0.1,target=kdevops_cxl_us0"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-downstream,port=0,bus=kdevops_cxl_us0,id=kdevops_cxl_swport0,chassis=0,slot=4"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-downstream,port=1,bus=kdevops_cxl_us0,id=kdevops_cxl_swport1,chassis=0,slot=5"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-type3,bus=kdevops_cxl_swport0,memdev=kdevops-cxl-mem1,lsa=kdevops-cxl-lsa1,id=kdevops-cxl-pmem0"
-{% else %} # !switch topo1
- {% if not libvirt_enable_cxl_dcd_topo1 %}
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-type3,bus=kdevops_cxl_root_port0,memdev=kdevops-cxl-mem1,lsa=kdevops-cxl-lsa1,id=kdevops-cxl-pmem0"
- {% else %} # dcd_topo1
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "cxl-type3,bus=kdevops_cxl_root_port0,nonvolatile-dc-memdev=kdevops-cxl-mem1,lsa=kdevops-cxl-lsa1,id=kdevops-cxl-dcd0,num-dc-regions=2"
- {% endif %} # dcd topo1
-{% endif %} # !switch topo1
- libvirt.qemuargs :value => "-M"
- libvirt.qemuargs :value => "cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.size=8G"
-{% if libvirt_enable_qmp %}
- libvirt.qemuargs :value => "-qmp"
-{% if libvirt_qemu_qmp_wait %}
- libvirt.qemuargs :value => "{{ libvirt_qemu_qmp_string }},wait=on"
-{% else %} # !qmp_wait
- libvirt.qemuargs :value => "{{ libvirt_qemu_qmp_string }},wait=off"
-{% endif %} # libvirt_qemu_qmp_wait
-{% endif %} # libvirt_enable_qmp
-{% endif %} # CXL
-{% endif %}
-
- if server_data['pcipassthrough']
- server_data['pcipassthrough'].each do |key, value|
- libvirt.pci :domain => value['domain'], :bus => value['bus'], :slot => value['slot'], :function => value['function']
- end
- end
- if global_data['extra_disks']
- port = 0
- port_count = global_data['extra_disks'].size()
- global_data['extra_disks'].each do |key, value|
- size = value['size']
- zoned = value['zoned']
- largio = value['largio']
- if zoned && !global_data['enable_zns']
- next
- end
- extra_drive_largio_args=""
- if zoned
- logical_block_size = value['logical_block_size']
- physical_block_size = value['physical_block_size']
- zone_size = value['zone_size']
- zone_capacity = value['zone_capacity']
- zone_max_open = value['zone_max_open']
- zone_max_active = value['zone_max_active']
- zone_zasl = value['zone_zasl']
- end
- if largio
- largeio_logical_block_size = value['logical_block_size']
- largeio_physical_block_size = value['physical_block_size']
- extra_drive_logical_block_size_args = "logical_block_size=#{largeio_logical_block_size}"
- extra_drive_physical_block_size_args = "physical_block_size=#{largeio_physical_block_size}"
- extra_drive_largio_args=",#{extra_drive_logical_block_size_args},#{extra_drive_physical_block_size_args}"
- end
- purpose = key
- port_plus = port + 1
- key_id_prefix = "{{ libvirt_extra_drive_id_prefix }}"
- disk_id = "#{key_id_prefix}#{port}"
- serial_id = "kdevops#{port}"
- extra_disk_name = "{{ extra_disk_driver }}#{port}n#{port_plus}.{{ libvirt_extra_drive_format }}"
- extra_disk = extra_disk_path + "/" + "#{extra_disk_name}"
- unless File.exist? (extra_disk)
- if provider == "libvirt"
- cmd = "qemu-img create -f {{ libvirt_extra_drive_format }} #{extra_disk} #{size}M"
- ok = system(cmd)
- if ! ok
- puts "Command failed: #{cmd}"
- exit
- end
- end
- end
-{% if not libvirt_override_machine_type %}
- bus_for_extra_drives = "custom-pci-for-{{ extra_disk_driver }}"
- pci_function = 0 + port
-{% else %}
- # A PCI-E root port must be added per extra drive.
- # Chassis must be something unique for the entire topology it seems (?)
- chassis = 50 + port
- bus_for_extra_drives = "pcie-port-for-{{ extra_disk_driver }}-#{port}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "pcie-root-port,id=#{bus_for_extra_drives},multifunction=on,bus=pcie.1,addr=0x#{port},chassis=#{chassis}"
- pci_function = "0x0"
-{% endif %}
-{% if libvirt_extra_storage_drive_ide %}
- libvirt.qemuargs :value => "-drive"
- libvirt.qemuargs :value => "file=#{extra_disk},format={{ libvirt_extra_drive_format }},aio={{ libvirt_extra_storage_aio_mode }},cache={{ libvirt_extra_storage_aio_cache_mode }},if=ide,serial=#{serial_id}"
-{% elif libvirt_extra_storage_drive_virtio %}
- virtio_pbs = "{{ libvirt_extra_storage_virtio_physical_block_size }}"
- virtio_lbs = "{{ libvirt_extra_storage_virtio_logical_block_size }}"
- libvirt.qemuargs :value => "-object"
- libvirt.qemuargs :value => "iothread,id=kdevops-virtio-iothread-#{port}"
- libvirt.qemuargs :value => "-drive"
- libvirt.qemuargs :value => "file=#{extra_disk},format={{ libvirt_extra_drive_format }},if=none,aio={{ libvirt_extra_storage_aio_mode }},cache={{ libvirt_extra_storage_aio_cache_mode }},id=#{disk_id}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "virtio-blk-pci,drive=#{disk_id},id=virtio-#{disk_id},serial=#{serial_id},bus=#{bus_for_extra_drives},addr=#{pci_function},iothread=kdevops-virtio-iothread-#{port}#{extra_drive_largio_args},logical_block_size=#{virtio_lbs},physical_block_size=#{virtio_pbs}"
-{% elif libvirt_extra_storage_drive_scsi %}
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "virtio-scsi-pci,id=scsi#{port},bus=#{bus_for_extra_drives},addr=#{pci_function}"
- libvirt.qemuargs :value => "-drive"
- libvirt.qemuargs :value => "file=#{extra_disk},format={{ libvirt_extra_drive_format }},if=none,aio={{ libvirt_extra_storage_aio_mode }},cache={{ libvirt_extra_storage_aio_cache_mode }},id=#{disk_id}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "scsi-hd,drive=#{disk_id},bus=scsi#{port}.0"
-{% elif libvirt_extra_storage_drive_nvme %}
- if ! largio
- nvme_lbs = "{{ libvirt_extra_storage_nvme_logical_block_size }}"
- extra_drive_largio_args=",logical_block_size=#{nvme_lbs},physical_block_size=#{nvme_lbs}"
- end
- extra_drive_interface = "none"
- if zoned
- libvirt.qemuargs :value => "-drive"
- libvirt.qemuargs :value => "file=#{extra_disk},format={{ libvirt_extra_drive_format }},aio={{ libvirt_extra_storage_aio_mode }},cache={{ libvirt_extra_storage_aio_cache_mode }},if=#{extra_drive_interface},id=#{disk_id}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "nvme,id={{ extra_disk_driver }}#{port},serial=#{serial_id},bus=#{bus_for_extra_drives},addr=#{pci_function},zoned.zasl=#{zone_zasl}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "nvme-ns,drive=#{disk_id},bus={{ extra_disk_driver }}#{port},nsid=1,logical_block_size=#{logical_block_size},physical_block_size=#{physical_block_size},zoned=true,zoned.zone_size=#{zone_size},zoned.zone_capacity=#{zone_capacity},zoned.max_open=#{zone_max_open},zoned.max_active=#{zone_max_active}"
- else
- libvirt.qemuargs :value => "-drive"
- libvirt.qemuargs :value => "file=#{extra_disk},format={{ libvirt_extra_drive_format }},aio={{ libvirt_extra_storage_aio_mode }},cache={{ libvirt_extra_storage_aio_cache_mode }},if=#{extra_drive_interface},id=#{disk_id}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "nvme,id={{ extra_disk_driver }}#{port},serial=#{serial_id},bus=#{bus_for_extra_drives},addr=#{pci_function}"
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "nvme-ns,drive=#{disk_id},bus={{ extra_disk_driver }}#{port},nsid=1#{extra_drive_largio_args}"
- end
-{% endif %}
- port += 1
- end
- if provider == "libvirt"
- cmd = "sudo chgrp -R #{qemu_group} #{node_custom_data_path}"
- ok = system("#{cmd}")
- if ! ok
- puts "Command failed: #{cmd}"
- exit
- end
- cmd = "sudo chmod -R g+rw #{node_custom_data_path}"
- ok = system("#{cmd}")
- if ! ok
- puts "Command failed: #{cmd}"
- exit
- end
- end # end of provider check for libvirt
- end # end of check for extra disks for libvirt
-{% if bootlinux_9p %}
-
- libvirt.qemuargs :value => "-device"
- libvirt.qemuargs :value => "{{ bootlinux_9p_driver }},fsdev={{ bootlinux_9p_fsdev }},mount_tag={{ bootlinux_9p_mount_tag }},bus=pcie.0,addr=0x10"
- libvirt.qemuargs :value => "-fsdev"
- libvirt.qemuargs :value => "local,id={{ bootlinux_9p_fsdev }},path={{ bootlinux_9p_host_path }},security_model={{ bootlinux_9p_security_model }}"
-
-{% endif %}
- end # end of libvirt provider code
-{% endif %}
- end # end of srv defined loop
- end # end of vagrant_boxes loop
-end
diff --git a/playbooks/roles/install_vagrant_boxes/README.md b/playbooks/roles/install_vagrant_boxes/README.md
deleted file mode 100644
index b755febc..00000000
--- a/playbooks/roles/install_vagrant_boxes/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-install-vagrant-boxes
-=====================
-
-The ansible install-vagrant-boxes role lets you get install additional vagrant
-boxes which may be outside of the public catalog.
-
-Requirements
-------------
-
-Run system using vagrant.
-
-Role Variables
---------------
-
- * kdevops_install_vagrant_boxes: set to True to enable installing boxes
- * vagrant_boxes: this role is designed so that you override this varaible
- your own list of boxes.
-
-Dependencies
-------------
-
-None.
-
-Example Playbook
-----------------
-
-Below is an example playbook, say a install-vagrant-boxes-sle.yml file which
-would try to install the aarch64 vagrant boxes for SLE using some URLs you
-have access to:
-
-```
----
-- hosts: localhost
- tasks:
- - include_role:
- name: install-vagrant-boxes
- vars:
- vagrant_boxes:
- - { name: 'suse/sle12sp5.aarch64', box_url: 'http://some.com/SLES12-SP5-Vagrant.aarch64-12.5-libvirt_aarch64-GM.vagrant.libvirt.box' }
- - { name: 'suse/sle15sp2.aarch64', box_url: 'http://some.com/SLES15-SP2-Vagrant.aarch64-15.2-libvirt_aarch64-Snapshot2.vagrant.libvirt.box' }
-```
-
-License
--------
-
-copyleft-next-0.3.1
diff --git a/playbooks/roles/install_vagrant_boxes/defaults/main.yml b/playbooks/roles/install_vagrant_boxes/defaults/main.yml
deleted file mode 100644
index 13165a7c..00000000
--- a/playbooks/roles/install_vagrant_boxes/defaults/main.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-# Example boxes with URLs. You would override this.
-kdevops_install_vagrant_boxes: False
-vagrant_boxes:
- - { name: 'suse/sle12sp5.x86_64', box_url: 'http://example.com/SLE-12-SP5-Vagrant-GM/SLES12-SP5-Vagrant.x86_64-12.5-libvirt-GM.vagrant.libvirt.box' }
- - { name: 'suse/sle15sp2.x86_64', box_url: 'http://example.com/SLES15-SP2-Vagrant.x86_64-15.2-libvirt-Snapshot2.vagrant.libvirt.box' }
diff --git a/playbooks/roles/install_vagrant_boxes/scripts/add-box-if-missing.sh b/playbooks/roles/install_vagrant_boxes/scripts/add-box-if-missing.sh
deleted file mode 100755
index b14a52f3..00000000
--- a/playbooks/roles/install_vagrant_boxes/scripts/add-box-if-missing.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-# Looks to see if a vagrant box is present
-# Vagrant lacks the ability to tell you if a box is present in one
-# single command line so we have to wrap this up for it.
-
-TMP_FILE=""
-
-box_search_finish()
-{
- if [[ ! -z $TMP_FILE ]]; then
- rm -f $TMP_FILE
- fi
-}
-
-trap "box_search_finish" EXIT
-
-if [[ $# -ne 2 ]]; then
- echo "Usage: $0 <box_name> <box_url>"
- exit 1
-fi
-
-BOX=$1
-BOX_URL=$2
-
-BOX_SEARCH="$1\s\+"
-TMP_FILE=$(mktemp)
-
-vagrant box list > $TMP_FILE
-grep -q "$BOX_SEARCH" $TMP_FILE
-if [ $? -eq 0 ] ; then
- exit 0
-else
- NAME_ARGS=""
- echo $BOX_URL | grep -q json$
- # Sadly we cannot rename boxes in json format, so we must stick to
- # what is given.
- if [[ $? -ne 0 ]]; then
- NAME_ARGS="--name $BOX"
- fi
- vagrant box add --provider=libvirt --insecure $NAME_ARGS $BOX_URL
- RET=$?
- # We use a special return value to indicate change to the
- # ansible script, so that it can tell a change has occurred.
- if [ $RET -eq 0 ]; then
- exit 314
- fi
- exit $RET
-fi
diff --git a/playbooks/roles/install_vagrant_boxes/tasks/main.yml b/playbooks/roles/install_vagrant_boxes/tasks/main.yml
deleted file mode 100644
index 430050f5..00000000
--- a/playbooks/roles/install_vagrant_boxes/tasks/main.yml
+++ /dev/null
@@ -1,49 +0,0 @@
----
-- name: Import optional extra_args file
- include_vars: "{{ item }}"
- ignore_errors: yes
- with_first_found:
- - files:
- - "../extra_vars.yml"
- - "../extra_vars.yaml"
- - "../extra_vars.json"
- skip: true
- tags: vars
-
-- name: Import optional distribution specific variables
- include_vars: "{{ item }}"
- ignore_errors: yes
- with_first_found:
- - files:
- - "{{ ansible_facts['os_family']|lower }}.yml"
- skip: true
- tags: vars
-
-- name: Verify vagrant installation
- command: "which vagrant"
- register: vagrant_present
- changed_when: vagrant_present.rc == 0
- failed_when: vagrant_present.rc != 0
- tags: [ 'vagrant', 'verify' ]
- when:
- - kdevops_install_vagrant_boxes|bool
-
-# vagrant has no single command line to check for this so we have to
-# wrap it up ourselves, and we only add a box if not present
-- name: Add vagrant box if not present
- shell: |
- set -o pipefail
- {{ role_path }}/scripts/add-box-if-missing.sh {{ item.name }} {{ item.box_url }}
- args:
- executable: /bin/bash
- chdir: "{{ role_path }}"
- register: box_check
- changed_when: box_check.rc == 314
- failed_when: ( box_check.rc not in [ 0, 314, 58 ] )
- with_items:
- - "{{ vagrant_boxes }}"
- loop_control:
- label: "Adding vagrant box {{ item.name }} if not present"
- tags: [ 'vagrant', 'box', 'install' ]
- when:
- - kdevops_install_vagrant_boxes|bool
diff --git a/playbooks/roles/update_ssh_config_vagrant/README.md b/playbooks/roles/update_ssh_config_vagrant/README.md
deleted file mode 100644
index ddd6989d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/README.md
+++ /dev/null
@@ -1,66 +0,0 @@
-update_ssh_config_vagrant
-=========================
-
-Update your `~/.ssh/config` with the same information vagrant has.
-If you `vagrant destroy -f` and then `vagrant up` and information
-has changed, this role will delete old stale entries and replace
-them with the new ones.
-
-Care must be taken as this *does* update your local user's ~/.ssh/config by
-default. That is, this role is intended to be run locally, never on virtual
-host, unless of course you are doing nested virtualization.
-
-Development notes
------------------
-The code for updating your ssh configuration is shared with terraform.
-We do this by having the code for this ansible role effectively
-present on this ansible role through a git subtree within kdevops.
-The code upstream on that tree is used to publish a terraform module:
-
- * https://registry.terraform.io/modules/mcgrof/add-host-ssh-config
-
-To learn how to make changes to the shared code read:
-
- * [update_ssh_config documentation](playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md)
-
-Requirements
-------------
-
-You can use this if you are using vagrant to deploy guests.
-
-Role Variables
---------------
-
- * sshconfig: your ssh configuration file
- * sshconfig_backup: where to dump the backup file
- * vagrant_dir: the location of your vagrant deployment
- * kexalgorithms: if set, this sets a custom ssh KexAlgorithms, useful
- on older hosts
-
-Dependencies
-------------
-
-You should be using vagrant if you are using this role. Your system
-isa lso expected to have some sort of .ssh/config file. This runs
-*locally* on your system.
-
-Example Playbook
-----------------
-
-Below is an example playbook, say a update_ssh_config_vagrant.yml file, this
-would be fine if your vagrant deployment is located on ../vagrant/ directory:
-
-```
----
-- hosts: localhost
- roles:
- - role: update_ssh_config_vagrant
-```
-
-For further examples refer to one of this role's users, the
-[https://github.com/mcgrof/kdevops](kdevops) project.
-
-License
--------
-
-copyleft-next-0.3.1
diff --git a/playbooks/roles/update_ssh_config_vagrant/defaults/main.yml b/playbooks/roles/update_ssh_config_vagrant/defaults/main.yml
deleted file mode 100644
index 5b488e7a..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/defaults/main.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier copyleft-next-0.3.1
----
-# Our sensible defaults for dev_config. You can override them by putting
-# your variables in these files, the later has major precedence:
-#
-# ansible/extra_vars.yml
-
-# On your own system
-sshconfig: "~/.ssh/config"
-sshconfig_backup: "{{sshconfig}}.backup.kdevops.vagrant"
-vagrant_dir: "../vagrant"
-use_kexalgorithms: False
-kexalgorithms: ""
diff --git a/playbooks/roles/update_ssh_config_vagrant/python/update_ssh_config.py b/playbooks/roles/update_ssh_config_vagrant/python/update_ssh_config.py
deleted file mode 120000
index c3c2d5f7..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/python/update_ssh_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../update_ssh_config/update_ssh_config.py
\ No newline at end of file
diff --git a/playbooks/roles/update_ssh_config_vagrant/tasks/main.yml b/playbooks/roles/update_ssh_config_vagrant/tasks/main.yml
deleted file mode 100644
index c11dfe7e..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/tasks/main.yml
+++ /dev/null
@@ -1,69 +0,0 @@
----
-- name: Import optional extra_args file
- include_vars: "{{ item }}"
- ignore_errors: yes
- with_first_found:
- - files:
- - "../extra_vars.yml"
- - "../extra_vars.yaml"
- - "../extra_vars.json"
- skip: true
- tags: vars
-
-- name: Set kexalgorithms preference
- set_fact:
- custom_ssh_kexalgorithms: '--kexalgorithms {{ kexalgorithms }}'
- when:
- - use_kexalgorithms|bool
-
-- name: Ignoring kexalgorithms
- set_fact:
- custom_ssh_kexalgorithms: ''
- when:
- - not use_kexalgorithms|bool
-
-- name: Get target hosts
- shell: |
- set -o pipefail
- if [ -d .vagrant ]; then
- if uname | grep Darwin >/dev/null; then
- SED='gsed'
- else
- SED='sed'
- fi
- vagrant ssh-config | $SED '/^[[:space:]]*$/d' | grep ^Host | awk '{print $2}' | $SED ':a;N;$!ba;s/\n/,/g'
- else
- echo You are not in a directory with a .vagrant directory
- exit 1
- fi
- args:
- executable: /bin/bash
- chdir: "{{ vagrant_dir }}"
- register: target_hosts_comma
- changed_when: "target_hosts_comma.rc == 0"
-
-- name: Verify sshconfig directory exists
- delegate_to: localhost
- local_action: file path="{{ sshconfig | dirname }}" state=directory
- run_once: true
-
-- name: Verify sshconfig file exists
- delegate_to: localhost
- local_action: file path="{{ sshconfig }}" state=touch
- run_once: true
-
-- name: Set vagrant python extra args
- set_fact:
- update_extra_args: '--remove {{ target_hosts_comma.stdout }} --addvagranthosts {{ custom_ssh_kexalgorithms }}'
-
-- name: Update {{ sshconfig }} with hosts entries for vagrant
- delegate_to: localhost
- shell: |
- set -o pipefail
- {{ role_path }}/python/update_ssh_config.py {{ sshconfig }} --backup_file {{ sshconfig_backup }} {{ update_extra_args }}
- args:
- executable: /bin/bash
- chdir: "{{ vagrant_dir }}"
- register: add_entry
- changed_when: "add_entry.rc == 0"
- run_once: true
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.gitignore b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.gitignore
deleted file mode 100644
index e02dcd09..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-tests/*.copy
-tests/*.bk
-
-*.swp
-__pycache__/
-
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.travis.yml b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.travis.yml
deleted file mode 100644
index 1d14a66b..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/.travis.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-language: python
-python:
- - "3.6"
-script:
- - make test
- - make flake8
-notifications:
- email:
- recipients:
- - mcgrof@kernel.org
- on_success: never
- on_failure: always
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/CONTRIBUTING b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/CONTRIBUTING
deleted file mode 100644
index f2889597..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/CONTRIBUTING
+++ /dev/null
@@ -1,49 +0,0 @@
-
-This project embraces the Developer Certificate of Origin (DCO) for
-contributions. This means you must agree to the following prior to submitting
-patches, if you agree with this developer certificate you acknowledge this by
-adding a Signed-off-by tag to your patch commit log. Every submitted patch
-must have this.
-
-The source for the DCO:
-
-http://developercertificate.org/
-
------------------------------------------------------------------------
-
-Developer Certificate of Origin
-Version 1.1
-
-Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
-660 York Street, Suite 102,
-San Francisco, CA 94110 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
-
-
-Developer's Certificate of Origin 1.1
-
-By making a contribution to this project, I certify that:
-
-(a) The contribution was created in whole or in part by me and I
- have the right to submit it under the open source license
- indicated in the file; or
-
-(b) The contribution is based upon previous work that, to the best
- of my knowledge, is covered under an appropriate open source
- license and I have the right under that license to submit that
- work with modifications, whether created in whole or in part
- by me, under the same open source license (unless I am
- permitted to submit under a different license), as indicated
- in the file; or
-
-(c) The contribution was provided directly to me by some other
- person who certified (a), (b) or (c) and I have not modified
- it.
-
-(d) I understand and agree that this project and the contribution
- are public and that a record of the contribution (including all
- personal information I submit with it, including my sign-off) is
- maintained indefinitely and may be redistributed consistent with
- this project or the open source license(s) involved.
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/LICENSE b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/LICENSE
deleted file mode 100644
index 431ea9e9..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/LICENSE
+++ /dev/null
@@ -1,239 +0,0 @@
-Valid-License-Identifier: copyleft-next-0.3.1
-SPDX-URL: https://spdx.org/licenses/copyleft-next-0.3.1
-Usage-Guide:
- This license can be used in code, it has been found to be GPLv2 compatible
- by attorneys at Redhat and SUSE, however to err on the side of caution,
- if used on Linux it's best to only use it together with a GPL2 compatible
- license using "OR". You do not have to do this for this project, kdevops,
- as this project is licensed under the copyleft-next-0.3.1 license.
- To use the copyleft-next-0.3.1 license on Linux put the following SPDX
- tag/value pair into a comment according to the placement guidelines in the
- licensing rules documentation:
- SPDX-License-Identifier: GPL-2.0 OR copyleft-next-0.3.1
- SPDX-License-Identifier: GPL-2.0-only OR copyleft-next 0.3.1
- SPDX-License-Identifier: GPL-2.0+ OR copyleft-next-0.3.1
- SPDX-License-Identifier: GPL-2.0-or-later OR copyleft-next-0.3.1
-License-Text:
-
-=======================================================================
-
- copyleft-next 0.3.1 ("this License")
- Release date: 2016-04-29
-
-1. License Grants; No Trademark License
-
- Subject to the terms of this License, I grant You:
-
- a) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
- copyright license, to reproduce, Distribute, prepare derivative works
- of, publicly perform and publicly display My Work.
-
- b) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
- patent license under Licensed Patents to make, have made, use, sell,
- offer for sale, and import Covered Works.
-
- This License does not grant any rights in My name, trademarks, service
- marks, or logos.
-
-2. Distribution: General Conditions
-
- You may Distribute Covered Works, provided that You (i) inform
- recipients how they can obtain a copy of this License; (ii) satisfy the
- applicable conditions of sections 3 through 6; and (iii) preserve all
- Legal Notices contained in My Work (to the extent they remain
- pertinent). "Legal Notices" means copyright notices, license notices,
- license texts, and author attributions, but does not include logos,
- other graphical images, trademarks or trademark legends.
-
-3. Conditions for Distributing Derived Works; Outbound GPL Compatibility
-
- If You Distribute a Derived Work, You must license the entire Derived
- Work as a whole under this License, with prominent notice of such
- licensing. This condition may not be avoided through such means as
- separate Distribution of portions of the Derived Work.
-
- If the Derived Work includes material licensed under the GPL, You may
- instead license the Derived Work under the GPL.
-
-4. Condition Against Further Restrictions; Inbound License Compatibility
-
- When Distributing a Covered Work, You may not impose further
- restrictions on the exercise of rights in the Covered Work granted under
- this License. This condition is not excused merely because such
- restrictions result from Your compliance with conditions or obligations
- extrinsic to this License (such as a court order or an agreement with a
- third party).
-
- However, You may Distribute a Covered Work incorporating material
- governed by a license that is both OSI-Approved and FSF-Free as of the
- release date of this License, provided that compliance with such
- other license would not conflict with any conditions stated in other
- sections of this License.
-
-5. Conditions for Distributing Object Code
-
- You may Distribute an Object Code form of a Covered Work, provided that
- you accompany the Object Code with a URL through which the Corresponding
- Source is made available, at no charge, by some standard or customary
- means of providing network access to source code.
-
- If you Distribute the Object Code in a physical product or tangible
- storage medium ("Product"), the Corresponding Source must be available
- through such URL for two years from the date of Your most recent
- Distribution of the Object Code in the Product. However, if the Product
- itself contains or is accompanied by the Corresponding Source (made
- available in a customarily accessible manner), You need not also comply
- with the first paragraph of this section.
-
- Each direct and indirect recipient of the Covered Work from You is an
- intended third-party beneficiary of this License solely as to this
- section 5, with the right to enforce its terms.
-
-6. Symmetrical Licensing Condition for Upstream Contributions
-
- If You Distribute a work to Me specifically for inclusion in or
- modification of a Covered Work (a "Patch"), and no explicit licensing
- terms apply to the Patch, You license the Patch under this License, to
- the extent of Your copyright in the Patch. This condition does not
- negate the other conditions of this License, if applicable to the Patch.
-
-7. Nullification of Copyleft/Proprietary Dual Licensing
-
- If I offer to license, for a fee, a Covered Work under terms other than
- a license that is OSI-Approved or FSF-Free as of the release date of this
- License or a numbered version of copyleft-next released by the
- Copyleft-Next Project, then the license I grant You under section 1 is no
- longer subject to the conditions in sections 3 through 5.
-
-8. Copyleft Sunset
-
- The conditions in sections 3 through 5 no longer apply once fifteen
- years have elapsed from the date of My first Distribution of My Work
- under this License.
-
-9. Pass-Through
-
- When You Distribute a Covered Work, the recipient automatically receives
- a license to My Work from Me, subject to the terms of this License.
-
-10. Termination
-
- Your license grants under section 1 are automatically terminated if You
-
- a) fail to comply with the conditions of this License, unless You cure
- such noncompliance within thirty days after becoming aware of it, or
-
- b) initiate a patent infringement litigation claim (excluding
- declaratory judgment actions, counterclaims, and cross-claims)
- alleging that any part of My Work directly or indirectly infringes
- any patent.
-
- Termination of Your license grants extends to all copies of Covered
- Works You subsequently obtain. Termination does not terminate the
- rights of those who have received copies or rights from You subject to
- this License.
-
- To the extent permission to make copies of a Covered Work is necessary
- merely for running it, such permission is not terminable.
-
-11. Later License Versions
-
- The Copyleft-Next Project may release new versions of copyleft-next,
- designated by a distinguishing version number ("Later Versions").
- Unless I explicitly remove the option of Distributing Covered Works
- under Later Versions, You may Distribute Covered Works under any Later
- Version.
-
-** 12. No Warranty **
-** **
-** My Work is provided "as-is", without warranty. You bear the risk **
-** of using it. To the extent permitted by applicable law, each **
-** Distributor of My Work excludes the implied warranties of title, **
-** merchantability, fitness for a particular purpose and **
-** non-infringement. **
-
-** 13. Limitation of Liability **
-** **
-** To the extent permitted by applicable law, in no event will any **
-** Distributor of My Work be liable to You for any damages **
-** whatsoever, whether direct, indirect, special, incidental, or **
-** consequential damages, whether arising under contract, tort **
-** (including negligence), or otherwise, even where the Distributor **
-** knew or should have known about the possibility of such damages. **
-
-14. Severability
-
- The invalidity or unenforceability of any provision of this License
- does not affect the validity or enforceability of the remainder of
- this License. Such provision is to be reformed to the minimum extent
- necessary to make it valid and enforceable.
-
-15. Definitions
-
- "Copyleft-Next Project" means the project that maintains the source
- code repository at <https://github.com/copyleft-next/copyleft-next.git/>
- as of the release date of this License.
-
- "Corresponding Source" of a Covered Work in Object Code form means (i)
- the Source Code form of the Covered Work; (ii) all scripts,
- instructions and similar information that are reasonably necessary for
- a skilled developer to generate such Object Code from the Source Code
- provided under (i); and (iii) a list clearly identifying all Separate
- Works (other than those provided in compliance with (ii)) that were
- specifically used in building and (if applicable) installing the
- Covered Work (for example, a specified proprietary compiler including
- its version number). Corresponding Source must be machine-readable.
-
- "Covered Work" means My Work or a Derived Work.
-
- "Derived Work" means a work of authorship that copies from, modifies,
- adapts, is based on, is a derivative work of, transforms, translates or
- contains all or part of My Work, such that copyright permission is
- required. The following are not Derived Works: (i) Mere Aggregation;
- (ii) a mere reproduction of My Work; and (iii) if My Work fails to
- explicitly state an expectation otherwise, a work that merely makes
- reference to My Work.
-
- "Distribute" means to distribute, transfer or make a copy available to
- someone else, such that copyright permission is required.
-
- "Distributor" means Me and anyone else who Distributes a Covered Work.
-
- "FSF-Free" means classified as 'free' by the Free Software Foundation.
-
- "GPL" means a version of the GNU General Public License or the GNU
- Affero General Public License.
-
- "I"/"Me"/"My" refers to the individual or legal entity that places My
- Work under this License. "You"/"Your" refers to the individual or legal
- entity exercising rights in My Work under this License. A legal entity
- includes each entity that controls, is controlled by, or is under
- common control with such legal entity. "Control" means (a) the power to
- direct the actions of such legal entity, whether by contract or
- otherwise, or (b) ownership of more than fifty percent of the
- outstanding shares or beneficial ownership of such legal entity.
-
- "Licensed Patents" means all patent claims licensable royalty-free by
- Me, now or in the future, that are necessarily infringed by making,
- using, or selling My Work, and excludes claims that would be infringed
- only as a consequence of further modification of My Work.
-
- "Mere Aggregation" means an aggregation of a Covered Work with a
- Separate Work.
-
- "My Work" means the particular work of authorship I license to You
- under this License.
-
- "Object Code" means any form of a work that is not Source Code.
-
- "OSI-Approved" means approved as 'Open Source' by the Open Source
- Initiative.
-
- "Separate Work" means a work that is separate from and independent of a
- particular Covered Work and is not by its nature an extension or
- enhancement of the Covered Work, and/or a runtime library, standard
- library or similar component that is used to generate an Object Code
- form of a Covered Work.
-
- "Source Code" means the preferred form of a work for making
- modifications to it.
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/Makefile b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/Makefile
deleted file mode 100644
index 5dbca28d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-all: python-tests
-PHONY += all
-
-python-tests: test flake8
-PHONY += python-tests
-
-test:
- python3 -m unittest discover -v
-PHONY += test
-
-flake8:
- flake8 --statistics
-PHONY += flake8
-
-.PHONY: $(PHONY)
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md
deleted file mode 100644
index 6b540c8a..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md
+++ /dev/null
@@ -1,159 +0,0 @@
-# Project home
-
-This project's home page is:
-
- * https://github.com/linux-kdevops/update_ssh_config/
-
-This code lives under the linux-kdevops organization as code changes
-can be made to it there by any member of the linux-kdevops organization.
-
-# Sharing this code between vagrant and terraform
-
-The main user of this project is [kdevops](https://github.com/linux-kdevops/kdevops)
-and it uses this code today for vagranta nd terraform bringup methods. When
-using terraform, as part of the last part of bring up it calls ansible
-against the localhost with an ansible role [update_ssh_config_vagrant](https://github.com/linux-kdevops/kdevops/tree/master/playbooks/roles/update_ssh_config_vagrant).
-
-Kdevop's terraform provisioning uses this code by publishing an terraform
-module and referring to it on each cloud specific provider:
-
- * https://registry.terraform.io/modules/linux-kdevops/add-host-ssh-config/kdevops/latest
-
-kdevops uses the code in this tree as a git subtree. Delta for the code
-in this directory can be queued up in kdevops, but a developer should at some
-point in time push the code also back up to the master tree. This can be done
-with something like this:
-
-```bash
-git subtree push --prefix=playbooks/roles/update_ssh_config_vagrant/update_ssh_config update_ssh_config master
-```
-
-This will only push the code changes under the directory `playbooks/roles/update_ssh_config_vagrant/update_ssh_config`
-back to the update_ssh_config repository. In order for a new terraform
-module to be published a git tag is required to be tagged on the
-`update_ssh_config` git tree. Terraform will do sanity checks and publish
-a new module once that is available. Then each terraform provider file
-must be updated to ensure they use the latest avilable version of the module.
-
-# update_ssh_config
-
-This Python script you update your ssh configuration file, typically
-` ~/.ssh/config` programatically. It was originally designed to extend
-vagrant so that it would update your user's ssh configuration, and later
-terraform support was added. The same python script however is shared
-between both projects:
-
- * [update_ssh_config_vagrant](https://github.com/linux-kdevops/update_ssh_config_vagrant) - ansible role for vagrant to update your ssh configuration
- * [terraform-kdevops-add-host-ssh-config](https://github.com/linux-kdevops/terraform-kdevops-add-host-ssh-config) - terraform module to update you ssh configuration
-
-This git tree aims at providing a mechanism to allow both projects to share
-the same python script. They bring in this code using a git subtree.
-
-## Usage
-
-Below are example command line uses:
-
-## Adding hosts to the top
-
-Note that as noted on the reported [issue#3](https://github.com/mcgrof/kdevops/issues/3)
-[ssh_config(5)](https://man7.org/linux/man-pages/man5/ssh_config.5.html)
-man page states that we should add entries at the top:
-
-```
-Since the first obtained value for each parameter is used, more host-specific
-declarations should be given near the beginning of the file, and general
-defaults at the end.
-```
-
-This project adheres to this best practice.
-
-## Tests
-
-To run tests:
-
-```bash
-make test
-make flake8
-```
-
-### The vagrant use case
-
-This will remove the hosts entries for two hosts, kdevops and kdevops-dev,
-and then it adds the hosts using the output from `vagrant ssh-config`. The
-output from the command `vagrant ssh-config` is processed by the script,
-to allow further extensions.
-
-A backup file is used, just for safe measures.
-
-```
-update_ssh_config.py \
- ~/.ssh/config \
- --backup_file ~/.ssh/config.backup.kdevops.vagrant \
- --remove kdevops,kdevops-dev \
- --addvagranthosts
-```
-
-Contrary to the terraform use case we don't perform two operations, and so
-we only use one backup file. This is tested under the test case:
-
- * `test_0009_add_hosts_vagrant_emulate_top()`
-
-## The terraform use case
-
-Terraform does the same, both removal and addition in one shot, but it passes
-the parameters on the command line:
-
-```
-update_ssh_config.py \
- --addhost kdevops,kdevops-dev \
- --hostname 51.179.84.243,52.195.142.18 \
- --username mcgrof \
- --port 22 \
- --identity \
- ~/.ssh/kdevops_terraform \
- --addstrict \
- --backup_file ~/.ssh/config.backup.kdevops.terraform \
- ~/.ssh/config
-```
-
-This is tested under test case:
-
- * `test_0008_add_remove_hosts_one_shot_top()`
-
-## Custom KexAlgorithms
-
-Certain old hosts require a custom KexAlgorithms entry to be added.
-To add that use the `--kexalgorithms` parameter. This is tested
-with the following test test cases:
-
- * `0010_add_hosts_kexalgorithms_vagrant_emulate_top()`: to mimic the use
- case if used by vagrant
- * `0011_add_remove_hosts_two_separate_ops_kexalgorithms_top()`: to mimic the
- use case if used by terraform
-
-## Rationale for using Python3
-
-We explicitly rely on python3 because our current use case is vagrant and
-terraform users, and that software should be used on recent distributions,
-hopefully rolling distrubutions which get updated more often than not. Because
-modern distributions are expected to be used as your command and control, it
-is a safe assumption you must have python3 available.
-
-Also, some distributions, such as Debian testing as of September 2020, no longer
-have a `/usr/bin/python` symlink, and the
-[Debian Python Policy](https://www.debian.org/doc/packaging-manuals/python-policy/ch-python.html#s-interpreter)
-specifically requests that scripts do not use `/usr/bin/env`, do not use
-`/usr/bin/python` and instead use the exact version desired.
-
-If you'd like to add Python2 support feel free to add a python2 version file,
-maybe `update_ssh_config2.py` and just have your project symlink to it. The
-way vagrant and terraform will use this script is to symlink to the Python3
-version.
-
-### Author
-
-[Luis Chamberlain](https://www.do-not-panic.com)
-
-### License
-
-copyleft-next-0.3.1
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/test_update_ssh_config.py b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/test_update_ssh_config.py
deleted file mode 100755
index f28d9cba..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/test_update_ssh_config.py
+++ /dev/null
@@ -1,417 +0,0 @@
-#!/usr/bin/python3
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-import unittest
-import re
-from filecmp import cmp
-import inspect
-from os import listdir, remove, path
-from shutil import copyfile
-from update_ssh_config import parse_args, run_args
-
-"""
-Unit tests for update_ssh_config.py
-"""
-
-
-def get_test_files(function_name):
- test_names = []
- target_sshconfig = 'tests/' + re.sub('^test_', '', function_name)
- test_names.append(target_sshconfig)
- target_sshconfig_orig = target_sshconfig + '.orig'
- test_names.append(target_sshconfig_orig)
- target_sshconfig_copy = target_sshconfig + '.copy'
- test_names.append(target_sshconfig_copy)
- target_sshconfig_res = target_sshconfig + '.res'
- test_names.append(target_sshconfig_res)
- target_sshconfig_bk = target_sshconfig + '.bk'
- test_names.append(target_sshconfig_bk)
- return test_names
-
-
-class TestUpdateSshConfig(unittest.TestCase):
- def test_0001_remove_hosts_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev'])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0002_remove_hosts_middle(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev'])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0003_remove_hosts_bottom(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev'])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0004_remove_hosts_missing(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev'])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0005_remove_hosts_similar(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev'])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0006_add_hosts_manual(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args(['--addhost',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0007_add_remove_hosts_two_separate_ops_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig = tests_names[0]
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
-
- target_sshconfig_res_remove = target_sshconfig + '.remove.res'
- target_sshconfig_res_add = target_sshconfig + '.add.res'
-
- target_sshconfig_bk_remove = target_sshconfig + '.remove.bk'
- target_sshconfig_bk_add = target_sshconfig + '.add.bk'
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args(['--remove',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk_remove,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk_remove,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res_remove, shallow=False))
-
- args = parse_args(['--addhost',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk_add,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk_add,
- target_sshconfig_res_remove, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res_add, shallow=False))
-
- def test_0008_add_remove_hosts_one_shot_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args(['--remove',
- 'kdevops,kdevops-dev',
- '--addhost',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0009_add_hosts_vagrant_emulate_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig = tests_names[0]
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- target_sshconfig_vagrant_input = target_sshconfig + '.emulate_vagrant'
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev',
- '--addvagranthosts',
- '--emulatevagrantinput',
- target_sshconfig_vagrant_input])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0010_add_hosts_kexalgorithms_vagrant_emulate_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig = tests_names[0]
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- target_sshconfig_vagrant_input = target_sshconfig + '.emulate_vagrant'
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args([target_sshconfig_copy,
- '--backup_file',
- target_sshconfig_bk,
- '--remove',
- 'kdevops,kdevops-dev',
- '--addvagranthosts',
- '--kexalgorithms',
- 'diffie-hellman-group-exchange-sha1,' +
- 'diffie-hellman-group14-sha1,' +
- 'diffie-hellman-group1-sha1',
- '--emulatevagrantinput',
- target_sshconfig_vagrant_input])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def test_0011_add_remove_hosts_two_separate_ops_kexalgorithms_top(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig = tests_names[0]
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
-
- target_sshconfig_res_remove = target_sshconfig + '.remove.res'
- target_sshconfig_res_add = target_sshconfig + '.add.res'
-
- target_sshconfig_bk_remove = target_sshconfig + '.remove.bk'
- target_sshconfig_bk_add = target_sshconfig + '.add.bk'
-
- copyfile(target_sshconfig_orig, target_sshconfig_copy)
-
- args = parse_args(['--remove',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk_remove,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--kexalgorithms',
- 'diffie-hellman-group-exchange-sha1,' +
- 'diffie-hellman-group14-sha1,' +
- 'diffie-hellman-group1-sha1',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk_remove,
- target_sshconfig_orig, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res_remove, shallow=False))
-
- args = parse_args(['--addhost',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk_add,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--kexalgorithms',
- 'diffie-hellman-group-exchange-sha1,' +
- 'diffie-hellman-group14-sha1,' +
- 'diffie-hellman-group1-sha1',
- '--addstrict',
- target_sshconfig_copy])
- run_args(args)
- self.assertTrue(cmp(target_sshconfig_bk_add,
- target_sshconfig_res_remove, shallow=False))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res_add, shallow=False))
-
- def test_0012_add_remove_hosts_empty_file(self):
- this_function_name = inspect.stack()[0][3]
- tests_names = get_test_files(this_function_name)
- target_sshconfig_orig = tests_names[1]
- target_sshconfig_copy = tests_names[2]
- target_sshconfig_res = tests_names[3]
- target_sshconfig_bk = tests_names[4]
-
- args = parse_args(['--remove',
- 'kdevops,kdevops-dev',
- '--addhost',
- 'kdevops,kdevops-dev',
- '--backup_file',
- target_sshconfig_bk,
- '--username',
- 'alpha',
- '--hostname',
- '51.179.89.243,52.195.142.19',
- '--port',
- '25',
- '--identity',
- '~alpha/.ssh/go',
- '--addstrict',
- target_sshconfig_copy])
- self.assertTrue(not path.exists(target_sshconfig_orig))
- self.assertTrue(not path.exists(target_sshconfig_copy))
- run_args(args)
- self.assertTrue(not path.exists(target_sshconfig_orig))
- self.assertTrue(not path.exists(target_sshconfig_bk))
- self.assertTrue(path.exists(target_sshconfig_copy))
- self.assertTrue(cmp(target_sshconfig_copy,
- target_sshconfig_res, shallow=False))
-
- def tearDown(self):
- files = listdir("tests")
- for testfile in files:
- if testfile.endswith(".copy") or testfile.endswith(".bk"):
- remove(path.join("tests", testfile))
-
-
-if __name__ == '__main__':
- unittest.main(verbosity=2)
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.orig
deleted file mode 100644
index d519e88c..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops
- HostName 192.168.31.12
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.31.13
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0001_remove_hosts_top.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.orig
deleted file mode 100644
index dc3dfd4f..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host kdevops
- HostName 192.168.31.12
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.31.13
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0002_remove_hosts_middle.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.orig
deleted file mode 100644
index e115da8d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops
- HostName 192.168.31.12
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.31.13
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0003_remove_hosts_bottom.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.orig
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0004_remove_hosts_missing.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.orig
deleted file mode 100644
index 17896ac4..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host kdevopss
- HostName 192.168.31.12
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-devs
- HostName 192.168.31.13
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.res
deleted file mode 100644
index 17896ac4..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0005_remove_hosts_similar.res
+++ /dev/null
@@ -1,53 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host kdevopss
- HostName 192.168.31.12
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-devs
- HostName 192.168.31.13
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.orig
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.orig
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.res
deleted file mode 100644
index e65abcc3..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0006_add_hosts_manual.res
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.add.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.add.res
deleted file mode 100644
index e65abcc3..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.add.res
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.orig
deleted file mode 100644
index c497d405..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops
- HostName 192.168.3.9
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.3.10
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.remove.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.remove.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0007_add_remove_hosts_two_separate_ops_top.remove.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.orig
deleted file mode 120000
index fec797de..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.orig
+++ /dev/null
@@ -1 +0,0 @@
-0007_add_remove_hosts_two_separate_ops_top.orig
\ No newline at end of file
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.res
deleted file mode 120000
index 533331a8..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0008_add_remove_hosts_one_shot_top.res
+++ /dev/null
@@ -1 +0,0 @@
-0007_add_remove_hosts_two_separate_ops_top.add.res
\ No newline at end of file
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.emulate_vagrant b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.emulate_vagrant
deleted file mode 100644
index f9d831eb..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.emulate_vagrant
+++ /dev/null
@@ -1,20 +0,0 @@
-Host kdevops
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.orig
deleted file mode 120000
index fec797de..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.orig
+++ /dev/null
@@ -1 +0,0 @@
-0007_add_remove_hosts_two_separate_ops_top.orig
\ No newline at end of file
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.res
deleted file mode 100644
index 26401701..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0009_add_hosts_vagrant_emulate_top.res
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.emulate_vagrant b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.emulate_vagrant
deleted file mode 100644
index f9d831eb..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.emulate_vagrant
+++ /dev/null
@@ -1,20 +0,0 @@
-Host kdevops
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.orig
deleted file mode 100644
index c497d405..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops
- HostName 192.168.3.9
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.3.10
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.res
deleted file mode 100644
index 2c315e68..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0010_add_hosts_kexalgorithms_vagrant_emulate_top.res
+++ /dev/null
@@ -1,55 +0,0 @@
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.add.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.add.res
deleted file mode 100644
index 6699c65f..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.add.res
+++ /dev/null
@@ -1,55 +0,0 @@
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.orig b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.orig
deleted file mode 100644
index c497d405..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.orig
+++ /dev/null
@@ -1,53 +0,0 @@
-Host kdevops
- HostName 192.168.3.9
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev
- HostName 192.168.3.10
- User vagrant
- Port 22
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/kdevops-dev/libvirt/private_key
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.remove.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.remove.res
deleted file mode 100644
index b13f939d..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0011_add_remove_hosts_two_separate_ops_kexalgorithms_top.remove.res
+++ /dev/null
@@ -1,33 +0,0 @@
-Host *
- ServerAliveInterval 60
- ServerAliveCountMax 2
-Host apples
- User mcgrof
- Port 22
- HostName 192.168.1.10
- IdentityFile ~/.ssh/apples
-Host apples-pub
- User mcgrof
- Port 6913
- HostName 71.72.31.95
- IdentityFile ~/.ssh/apples
-Host starwars
- HostName 192.168.2.92
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
-Host starwars-dev
- HostName 192.168.2.78
- User vagrant
- Port 22
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentityFile /home/mcgrof/devel/kdevops/vagrant/.vagrant/machines/starwars-dev/libvirt/private_key
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0012_add_remove_hosts_empty_file.res b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0012_add_remove_hosts_empty_file.res
deleted file mode 100644
index 311eff20..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/tests/0012_add_remove_hosts_empty_file.res
+++ /dev/null
@@ -1,20 +0,0 @@
-Host kdevops 51.179.89.243
- HostName 51.179.89.243
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
-Host kdevops-dev 52.195.142.19
- HostName 52.195.142.19
- User alpha
- Port 25
- IdentityFile ~alpha/.ssh/go
- UserKnownHostsFile /dev/null
- StrictHostKeyChecking no
- PasswordAuthentication no
- IdentitiesOnly yes
- LogLevel FATAL
diff --git a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/update_ssh_config.py b/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/update_ssh_config.py
deleted file mode 100755
index feac31d2..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/update_ssh_config/update_ssh_config.py
+++ /dev/null
@@ -1,325 +0,0 @@
-#!/usr/bin/python3
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-import argparse
-import sys
-import os
-import re
-import subprocess
-from shutil import copyfile
-
-
-class VagrantError(Exception):
- pass
-
-
-class ExecutionError(VagrantError):
- def __init__(self, errcode):
- self.error_code = errcode
-
-
-def _check(process):
- if process.returncode != 0:
- raise ExecutionError(process.returncode)
-
-
-def key_val(line):
- no_comment = line.split("#")[0]
- return [x.strip() for x in re.split(r"\s+", no_comment.strip(), 1)]
-
-
-def remove_hosts(args):
- hosts = args.remove.split(",")
-
- f = open(args.ssh_config, "r")
- lines = f.read().splitlines()
- f.close()
- new_lines = list()
- rm_this_host = False
- for line in lines:
- kv = key_val(line)
- if len(kv) > 1:
- key, value = kv
- if key.lower() == "host":
- if value in hosts:
- rm_this_host = True
- continue
- else:
- rm_this_host = False
- new_lines.append(line)
- else:
- if not rm_this_host:
- new_lines.append(line)
- else:
- new_lines.append(line)
-
- f = open(args.ssh_config, "w")
- f.write("\n".join([x for x in new_lines]) + "\n")
- f.close()
-
-
-def add_vagrant_hosts(args):
- lines = None
- if args.emulatevagrantinput:
- f = open(args.emulatevagrantinput, "r")
- lines = f.read().splitlines()
- f.close()
- else:
- process = subprocess.Popen(['vagrant', 'ssh-config'],
- stdout=subprocess.PIPE,
- close_fds=True, universal_newlines=True)
- stdout = process.communicate()[0]
- process.wait()
- _check(process)
- lines = stdout.splitlines()
-
- addhost = ""
- hostname = ""
- username = ""
- port = ""
- identity = ""
- kexalgorithms = None
-
- # All vagrant hosts are strict, which allows us to skip checking all of
- # the parameters which define this.
- addstrict = True
-
- last_host_added = ""
- newhost = None
-
- if args.kexalgorithms and args.kexalgorithms is not None:
- kexalgorithms = args.kexalgorithms
-
- for line in lines:
- if not line:
- continue
- kv = key_val(line)
- if len(kv) > 1:
- key, value = kv
- if key.lower() == "host":
- if addhost != "":
- newhost = SshHost(args.ssh_config, addhost, hostname,
- username, port, identity, addstrict,
- kexalgorithms)
- newhost.call_add_host()
- last_host_added = addhost
- addhost = value
- hostname = ""
- username = ""
- port = ""
- identity = ""
- addstrict = True
- if key.lower() == "hostname":
- hostname = value
- elif key.lower() == "user":
- username = value
- elif key.lower() == "port":
- port = value
- elif key.lower() == "identityfile":
- identity = value
-
- if last_host_added != addhost:
- newhost = SshHost(args.ssh_config, addhost, hostname, username, port,
- identity, addstrict, kexalgorithms)
- newhost.call_add_host()
-
-
-# We extend the SshHost with the variables which we add to our ArgumentParser
-# and which we use on this function so that we can pass to this function either
-# an ArgumentParser object or one of our SshHost objects
-def add_host(args):
- hosts = args.addhost.split(",")
- new_lines = list()
- hostnames = list()
- ports = list()
- count = 0
-
- if args.hostname:
- hostnames = args.hostname.split(",")
-
- if len(hosts) > 1 and len(hostnames) > 1:
- if len(hosts) != len(hostnames):
- sys.stdout.write("Number of shorthosts must match number of " +
- "hostnames\n")
- sys.exit(1)
-
- if args.port:
- ports = args.port.split(",")
-
- if len(hosts) > 1 and len(ports) > 1:
- if len(hosts) != len(ports):
- sys.stdout.write("Number of shorthosts must match number of " +
- "ports\n")
- sys.exit(1)
-
- for host in hosts:
- host_port = host.split(":")
- hostname = ""
- port = ""
- if len(host_port) > 1:
- host, port = host_port
- if port == "" and args.port:
- if len(ports) > 1:
- port = ports[count]
- else:
- port = args.port
- if len(hostnames) > 1:
- hostname = hostnames[count]
- elif args.hostname:
- hostname = args.hostname
- if hostname:
- new_lines.append("Host %s %s\n" % (host, hostname))
- new_lines.append("\tHostName %s\n" % (hostname))
- else:
- new_lines.append("Host %s\n" % (host))
- if port == "" and args.port:
- port = args.port
- if args.username:
- new_lines.append("\tUser %s\n" % (args.username))
- if port != "":
- new_lines.append("\tPort %s\n" % (port))
- if args.identity:
- new_lines.append("\tIdentityFile %s\n" % (args.identity))
- if args.kexalgorithms and args.kexalgorithms is not None:
- new_lines.append("\tKexAlgorithms %s\n" % (args.kexalgorithms))
- if args.addstrict:
- new_lines.append("\tUserKnownHostsFile /dev/null\n")
- new_lines.append("\tStrictHostKeyChecking no\n")
- new_lines.append("\tPasswordAuthentication no\n")
- new_lines.append("\tIdentitiesOnly yes\n")
- new_lines.append("\tLogLevel FATAL\n")
- count = count + 1
-
- data = ""
- all_data = None
- if os.path.exists(args.ssh_config):
- f = open(args.ssh_config, "r")
- data = f.read()
- f.close()
-
- new_data = "".join([x for x in new_lines])
- all_data = new_data + data
-
- f = open(args.ssh_config, 'w')
- f.write(all_data)
- f.close()
-
-
-class SshHost:
- def __init__(self, ssh_config, name, hostname, username, port, identity,
- strict, kexalgorithms):
- self.ssh_config = ssh_config
- self.addhost = name
- self.hostname = hostname
- self.username = username
- self.port = port
- self.identity = identity
- self.addstrict = strict
- self.kexalgorithms = kexalgorithms
-
- def call_add_host(self):
- add_host(self)
-
- def call_remove_hosts(self):
- remove_hosts(self)
-
-
-def parse_args(args):
- parser = argparse.ArgumentParser()
- parser.add_argument('ssh_config', help='ssh configuration file to process')
- parser.add_argument('--addhost',
- help='The host shortcut name you are adding. This ' +
- 'can be a comma separated set of hosts and each host' +
- 'can have a port specified with a colon, if set ' +
- 'it will override override the port set by --port. ' +
- 'will let you set a default port if non specified ' +
- 'but allow you to override ports per host. We refer ' +
- 'this entry as the shorthost.')
- parser.add_argument('--addvagranthosts',
- const=True, default=False, action="store_const",
- help='Use this if you are want to add or augment ' +
- 'the entries found from the output of the command ' +
- 'vagrant ssh-config. You would typically use this ' +
- 'if you are working with vagrant, and are in the ' +
- 'vagrant directory. Only a few parameters are ' +
- 'supported when augmenting the information ' +
- 'installed per host, those are entries which ' +
- 'vagrant does not add which you may need, for ' +
- 'instance on older hosts')
- parser.add_argument('--emulatevagrantinput',
- help='Used for testing purposes only,' +
- 'where we do not want to run vagrant ssh-config.' +
- 'The parameter passed is an input file which ' +
- 'emulates the command')
- parser.add_argument('--hostname',
- help='Used only on addition, the hostname to use ' +
- 'for this entry. If the shorhost specified was a ' +
- 'comma separated list of hosts, then this can also ' +
- 'be a comma separated list, in which case each ' +
- 'shorthost index represents the hostname for that ' +
- 'shorthost, and the number of both shorthosts and ' +
- 'hostname must match.')
- parser.add_argument('--port',
- help='Used only on addition, the port to use, ' +
- 'by default none is specified')
- parser.add_argument('--username',
- help='Used only on addition, the username to use, ' +
- 'default is none, so ssh will assumes your ' +
- 'localhost username')
- parser.add_argument('--identity',
- help='Used only on addition, the host key to ' +
- 'use, the default is empty and so no file is provided')
- parser.add_argument('--kexalgorithms',
- help='Use this if you have a custom KexAlgorithms ' +
- 'entry you want to add for the host entries. ' +
- 'This is typically useful for older hosts.')
- parser.add_argument('--addstrict',
- const=True, default=False, action="store_const",
- help='Used only on addition, if set some extra ' +
- 'sensible strict defaults will be added to the host ' +
- 'entry, disabled by default')
- parser.add_argument('--remove',
- help='Comma separated list of host entries to remove')
- parser.add_argument('--backup_file',
- help='Use this file as the backup')
- parser.add_argument('--nobackup',
- const=True, default=False, action="store_const",
- help='Do not use a backup file')
- return parser.parse_args(args)
-
-
-def run_args(args):
- skip_remove_and_backup = False
- if not args.remove and not args.addhost:
- print("Must specify addition or removal request")
- sys.exit(0)
-
- if not os.path.isfile(args.ssh_config):
- args.nobackup = True
- skip_remove_and_backup = True
-
- backup_file = args.ssh_config + '.kdevops.bk'
- if args.backup_file:
- backup_file = args.backup_file
- if args.nobackup:
- backup_file = None
-
- if not skip_remove_and_backup and backup_file:
- copyfile(args.ssh_config, backup_file)
-
- if not skip_remove_and_backup and args.remove:
- remove_hosts(args)
-
- if args.addvagranthosts:
- add_vagrant_hosts(args)
- elif args.addhost:
- add_host(args)
-
-
-def main():
- args = parse_args(sys.argv[1:])
- run_args(args)
-
-
-if __name__ == "__main__":
- main()
diff --git a/playbooks/roles/update_ssh_config_vagrant/vars/main.yml b/playbooks/roles/update_ssh_config_vagrant/vars/main.yml
deleted file mode 100644
index 76b0f920..00000000
--- a/playbooks/roles/update_ssh_config_vagrant/vars/main.yml
+++ /dev/null
@@ -1 +0,0 @@
-hosts_comma: "{{ ansible_play_hosts | join(',') }}"
diff --git a/playbooks/update_ssh_config_vagrant.yml b/playbooks/update_ssh_config_vagrant.yml
deleted file mode 100644
index c8d0e996..00000000
--- a/playbooks/update_ssh_config_vagrant.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-- hosts: localhost
- roles:
- - role: update_ssh_config_vagrant
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 05/33] gitignore: remove Vagrant-specific ignore patterns
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (3 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 04/33] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 06/33] docs: remove Vagrant-specific documentation files Luis Chamberlain
` (28 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove .gitignore entries for files and directories that were part of
the Vagrant integration, including generated Vagrant configuration files
and runtime directories.
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
.gitignore | 5 -----
1 file changed, 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 706ef3fc..2e28c3f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,10 +31,6 @@ scripts/workflows/fstests/lib/__pycache__/
scripts/workflows/blktests/lib/__pycache__/
scripts/workflows/lib/__pycache__/
-vagrant/kdevops_nodes.yaml
-vagrant/.Vagrantfile.generated
-vagrant/Vagrantfile
-.vagrant/
include/
@@ -97,6 +93,5 @@ workflows/linux/refs/user
scripts/kconfig/.nconf-cfg
.dynamic-kconfig.*
-vagrant/Kconfig.passthrough_libvirt.generated
archive/
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 06/33] docs: remove Vagrant-specific documentation files
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (4 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 05/33] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 07/33] Remove all remaining Vagrant references from codebase Luis Chamberlain
` (27 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Remove all Vagrant-specific documentation as Vagrant support has been
removed from kdevops. This includes:
- kdevops-vagrant.md
- custom-vagrant-boxes.md
- why-vagrant.md
- the-gen-nodes-ansible-role-vagrant.md
Generated-by: Claude AI
Suggested-by: Chuck Lever <cel@kernel.org>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
docs/custom-vagrant-boxes.md | 581 ---------------------
docs/kdevops-vagrant.md | 130 -----
docs/the-gen-nodes-ansible-role-vagrant.md | 78 ---
docs/why-vagrant.md | 66 ---
4 files changed, 855 deletions(-)
delete mode 100644 docs/custom-vagrant-boxes.md
delete mode 100644 docs/kdevops-vagrant.md
delete mode 100644 docs/the-gen-nodes-ansible-role-vagrant.md
delete mode 100644 docs/why-vagrant.md
diff --git a/docs/custom-vagrant-boxes.md b/docs/custom-vagrant-boxes.md
deleted file mode 100644
index aa73a426..00000000
--- a/docs/custom-vagrant-boxes.md
+++ /dev/null
@@ -1,581 +0,0 @@
-# Creating your own custom Vagrant boxes or qcow2 virtual images
-
-You can create your own custom Vagrant boxes if the publicly available
-Vagrant boxes do not suit your needs. We document how to do this here.
-One reason might be you are an Enterprise Linux distribution and don't
-have public Vagrant boxes for older releases you might still support
-but want the benefit of having Vagrant boxes to work with kdevops
-kernel-ci. Another reason might be you just cannot legally share you
-images, for one reason or another. Another reason is you may have some
-new technology which is not yet easily available on distribution kernels
-and want to enable folks to test technology on some development subsystem
-or linux-nxt.
-
-## Re-using an existing box for development
-
-If you are doing Linux kernel development you may want to just enable
-a QA or other developers to quickly test a built kernel for you.
-If you don't want to do a full fresh install of a distribution you can
-opt to re-use a distribution Vagrant box and just augment it with a
-custom kernel build. This section documents how to do that with a demo
-of a successful box built using this technique.
-
-This is the lazy developer approach to customizing a Vagrant box for Linux
-kernel development. This involves four steps:
-
- * 1) One is getting your kernel binary and modules
- * 2) The GRUB configuration stuff right.
- * 3) Edit the Vagrantfile to remove stupid stuff
- * 4) Building the tarball
-
-We break this down below.
-
-### Getting your kernel over
-
-From a libvirt perspective Vagrant boxes are just compressed tarballs
-with a qcow2 file. So to hack on one first download the box. So for
-example if we visit the [debian/testing64](https://app.vagrantup.com/debian/boxes/testing64)
-page there you will see a [libvirt download URL](https://app.vagrantup.com/debian/boxes/testing64/versions/20220626.1/providers/libvirt.box)
-with the box file.
-
-So we do:
-
-```bash
-wget https://app.vagrantup.com/debian/boxes/testing64/versions/20220626.1/providers/libvirt.box
-
-sha1sum libvirt.box
-06b07c0d0b78df5369d9ed35eaf39098c1ec7846 libvirt.box
-
-file libvirt.box
-libvirt.box: gzip compressed data, from Unix, original size modulo 2^32 1197363200
-```
-
-The file can be decompressed as a regular tarball. Since it has no
-directory in it you want to copy the file to another directory and uncompress
-there, otherwise it will clutter your current directory:
-
-```bash
-mkdir box-dev
-cp libvirt.box box-dev
-cd box-dev
-tar zxvf libvirt.box
-```
-
-So you will see 3 files, one just a qcow2 file the other expresses
-how big of a drive was used to create this qcow2 file along with a
-provider, and the Vagrantfile defines how to initialize this qcow2 file
-with libvirt:
-
-```bash
-ls -1
-
-box.img
-metadata.json
-Vagrantfile
-
-file box.img
-box.img: QEMU QCOW2 Image (v3), 21474836480 bytes
-
-cat metadata.json
-{
- "provider" : "libvirt",
- "format" : "qcow2",
- "virtual_size" : 20
-}
-
-cat Vagrantfile
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-Vagrant.configure("2") do |config|
-
- config.vm.post_up_message = "Vanilla Debian box. See https://app.vagrantup.com/debian for help and bug reports"
-
- # workaround for #837992
- # use nfsv4 mode by default since rpcbind is not available on startup
- # we need to force tcp because udp is not available for nfsv4
- config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false
-
- # Options for libvirt vagrant provider.
- config.vm.provider :libvirt do |libvirt|
-
- # A hypervisor name to access. Different drivers can be specified, but
- # this version of provider creates KVM machines only. Some examples of
- # drivers are kvm (QEMU hardware accelerated), qemu (QEMU emulated),
- # xen (Xen hypervisor), lxc (Linux Containers),
- # esx (VMware ESX), vmwarews (VMware Workstation) and more. Refer to
- # documentation for available drivers (http://libvirt.org/drivers.html).
- libvirt.driver = "kvm"
-
- # The name of the server, where libvirtd is running.
- # libvirt.host = "localhost"
-
- # If use SSH tunnel to connect to Libvirt.
- libvirt.connect_via_ssh = false
-
- # The username and password to access Libvirt. Password is not used when
- # connecting via SSH.
- libvirt.username = "root"
- #libvirt.password = "secret"
-
- # Libvirt storage pool name, where box image and instance snapshots will
- # be stored.
- libvirt.storage_pool_name = "default"
-
- # Set a prefix for the machines that's different than the project dir name.
- #libvirt.default_prefix = ''
- end
-end
-```
-
-And so to hack on the qcow file we just use nbd:
-
-```bash
-sudo qemu-nbd --connect=/dev/nbd0 box.img
-mkdir debian-testing-root-vagrant
-sudo mount /dev/nbd0p1 ./vanilla-debian-zns/debian-testing-root-vagrant
-```
-
-When you finish just do:
-
-```bash
-sudo modprobe nbd max_part=8
-sudo umount debian-testing-root-vagrant
-sudo qemu-nbd --disconnect /dev/nbd0
-```
-
-It is important to run the disconnect command before copying the box file as
-backups or using it for anything.
-
-What I do then is use a kdevops linux-next guest to compile linux-next or
-whatever I want, and then I use a two step process. One to scp the modules
-directory locally, and the respective `/boot/*$(uname -r)*` files over to
-a new directory and then install these on the target. Then you need to configure
-the GRUB console so `sudo virsh console <domain>` works and you also want to
-update the GRUB menu. That is covered in the next subsection.
-
-### Getting your kernel over
-
-OK now you just need to update the `/etc/default/grub` file and also the
-`/boot/grub/grub.cfg` file. Editing `/etc/default/grub` is easy you can
-just run your editor on the mounted partition for the file and ensure
-you have these entries:
-
-```
-GRUB_DEFAULT=0
-GRUB_TIMEOUT=5
-GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
-GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
-GRUB_CMDLINE_LINUX="console=tty0 console=tty1 console=ttyS0,115200n8"
-
-GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --parity=no --stop=1"
-GRUB_TERMINAL="console serial"
-GRUB_DISABLE_SUBMENU=y
-```
-
-The last part of this file helps ensure you can get to pick a different
-kernel at boot through the GRUB prompt using the serial console
-(`virsh console`), however sadly it seems the GRUB version on the Debian
-testing as of today doesn't work with this yet, so this step could be enhanced
-to enable more flexibility to the user from the start. Until this is fixed then
-developers have to do the work manually to perhaps update GRUB to get this
-fixed.
-
-The last step is then to update the `/boot/grub/grub.cfg` file.
-To do this, I just have two guests running:
-
- * dev: some development system where I compile and install some kernel
- * baseline: a fresh Debian testing guest just brought up with Vagrant
-
-And then I scp to it the kernel / modules from dev over, run update-grub
-and copy its grub.cfg file over. Something like the following:
-
-```bash
-mkdir -p tmp/boot
-scp -r dev:/lib/modules/5.19.0-rc4-next-20220629/ tmp/
-scp -r dev:/boot/*5.19.0-rc4-next-20220629* tmp/
-
-scp -r tmp/boot/* baseline:/boot/
-scp -r tmp-provision-dir/5.19.0-rc4-next-20220629 baseline:/lib/modules/
-ssh baseline sudo update-grub
-scp baseline:/boot/grub/grub.cfg tmp
-```
-
-OK so finally we can copy that grub.cfg to the mounted nbd partition and
-hope that works.
-
-### Editing your Vagrantfile to remove stupid stuff
-
-By default Vagrant boxes enable sharing your directory to the guest
-through NFS. From a Linux kernel development perspective this is just
-lunacy. And so I like to disable it. By default then Debian uses this
-for its sync thing
-
-```
- config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_version: "4", nfs_udp: false
-```
-
-Replace this with the more sane which disables this:
-
-```
- config.vm.synced_folder './', '/vagrant', type: '9p', disabled: true, accessmode: "mapped", mount: false
-```
-
-You may also want to edit the `config.vm.post_up_message` with whatever.
-
-```
- config.vm.post_up_message = "this is kernel build for send bug reports to ignore@ignore.org"
-```
-
-### Example network name resolution
-
-Most distros use udev for consistent names for networking interfaces. If
-you just want to get a box out which will work fast the best way is to just
-append to your GRUB kernel parameter:
-
-```
-GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"
-```
-
-### Example network DHCP fix
-
-On a basic debian console install, so where no Network Manager is installed,
-you want to just have something simply like this, after testing that the
-default network name that comes up is eth0:
-
-```
-# cat /etc/network/interfaces
-# interfaces(5) file used by ifup(8) and ifdown(8)
-# Include files from /etc/network/interfaces.d:
-source-directory /etc/network/interfaces.d
-
-# The loopback network interface
-auto lo
-iface lo inet loopback
-
-# The primary network interface
-allow-hotplug eth0
-iface eth0 inet dhcp
-```
-
-### Ensuring ssh works
-
-You will want to ensure the user ~vagrant has a .ssh/ directory with
-chmod 700 permissions and the vagrant ssh key installed by default.
-When vagrant detects this a new one random one is replaced.
-
-https://github.com/hashicorp/vagrant/tree/main/keys
-
-So just do:
-
-```bash
-mkdir .ssh
-chmod 700 .ssh
-echo ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key >> authorized_keys
-```
-
-### Creating the Vagrant new box file tarball
-
-To create the box file you just tar it up. Assuming you want maximum
-compression:
-
-```bash
-tar -cvf ../mcgrof-20220629.box box.img metadata.json Vagrantfile -I "gzip --best"
-```
-
-You can now upload this box on the Vagrant cloud and use it with the
-nice shorthands provided.
-
-## A fresh install
-
-To try to save the most amount of space you want to do a fresh install.
-This section documents how to do that.
-
-First you'd install a guest using virt-install, an example script which
-you can extend to your own needs is the
-[virt-install-demo.sh](docs/virt-install-demo.sh).
-There are a a series of adjustments that needed to be made for guests
-to work for older kernel releases, should you need that. This is all
-documented below.
-
-But below is an example simple script
-
-
-```bash
-virt-install --virt-type kvm \
- --name lio \
- --arch x86_64 \
- --cpu host \
- --location /home/mcgrof/debian-testing-amd64-netinst.iso \
- --os-variant debiantesting \
- --memory 8192 --vcpus 8 \
- --disk pool=data3-xfs,size=20,bus=virtio,format=qcow2 \
- --graphics none \
- --network network=vagrant-libvirt-private,model=virtio \
- --console pty,target_type=serial \
- --debug \
- --extra-args "console=ttyS0"
-```
-
-## Extending the Vagrant box definition
-
-A Vagrant box is essentially a tarball (gzip, xc are both supported) with a
-qcow2 image and a small metadata file explaining how large the drive for the
-guest is. The Vagrant box also ensures that the guest brought up will also
-work on any new system, and so a few things need to be done to ensure for
-instance that the network interface will get a DHCP address successfully, and
-that you can ssh into the system. So a way to deal with moving guests around
-the `cloud` are needed, an example is avoiding
-`/etc/udev/rules.d/70-persistent-net.rules` upon first boot on some SLE
-systems.
-
-Standard userspace development needs are typically met with the above
-requirements. Kernel development however, have more more needs. Extensions
-can be made by you so that the custom Vagrant boxes you build extend
-what is promised by a Vagrant box, with other things which kernel developers
-would typically prefer to have set on the system. This can save time
-on bringup. Kdevops does a slew of things to help with this for you, like
-setting up the serial console, but if Vagrant boxes already have these things
-done on them that is a step which could be skipped.
-
-Below we provide a recipe of items which can be done to help on a fresh install
-of a Linux distribution on a qcow2 image so that it is easier to test new
-kernels and debug them. The standard Vagrant box definition *only* requires a
-guest to come up, and to be able to ssh into them with the Vagrant user.
-
- * 1) root/vagrant user password is vagrant
- * 2) vagrant user on /etc/sudoers does not need a password to gain root
- * 3) vagrant user has an insecure SSH key installed to enable adding a new random one
- * 4) Disable the firewall and AppArmor
- * 5) Deal with persistent net rules
- * 6) Ensure DHCP will work on the first network interface
- * 7) Ensure the console is allowed
- * 8) Ensure the correct disk size is used on the metadata json file
- * 9) Try to use disk partitions by UUID on /etc/fstab
- * 10) GRUB disk setup with UUID
- * 11) GRUB console setup
- * 12) Address lack of virtio
- * 13) Address changes in sudo for old systems
-
-These all deserve their own attention so a section is provided for them below.
-
-### root / vagrant password
-
-Although no password is needed, just to ensure one is set the `vagrant` password
-is set, just in case you need to use it.
-
-### vagrant sudoers
-
-The goal is to never have to use root directly since the boxes are for development
-purposes, and so the following entry is expected:
-
-```
-vagrant ALL=(ALL) NOPASSWD: ALL
-```
-
-### vagrant user has an insecure SSH key installed
-
-Vagrant publishes an arbitrary public static SSH public and private key, so
-that if it is detected a random SSH key is instead generated and used and
-installed.
-
-Using a random SSH key for each host is a better idea due to possible
-risks of guests being left `spawned` and then `pawned` by motivated eager
-beavers for a key the entire internet has access to.
-
-You can surely use your own key as well, however, when sharing Vagrant boxes
-you likely don't want to be sharing SSH keys.
-
-### Disable the firewall and AppArmor
-
-You are not trying to secure a bank when running a guest for
-kernel development, so running a firewall and apparmor is just
-typically noise. This is unless of course if you are testing apparmor
-or firewall changes to the kernel.
-
-The firewall and AppArmor can be enabled after initialization, however,
-if you really need it.
-
-### Deal with persistent net rules
-
-Each Linux distribution has dealt with a way to keep MAC addresses mapped
-to a specific interface name. This is to allow a network card to always get
-the same IP address, in case it changes the bus it uses on a system.
-
-Spawning a guest from a Vagrant box means we *want* a different MAC
-address for each new guest. This also means we want the first interface
-to take the first possible interface name, which will be used for DHCP
-purposes after bootup.
-
-### Ensure DHCP will work on the first network interface
-
-We expect at least one ethernet interface to come up so that it can get an IP
-address and so that we can then SSH into it. Using a network interface just to
-communicate to guests is rather archaic, however, it is the current norm.
-
-A Vagrant box *expects* a random interface to be spawned with it, and we
-want to just ensure it, whatever it is, will ask for an IP address via
-DHCP. We want to use a mechanism that will work, if possible, for older
-systems as well.
-
-The following recipe works from SLES12-SP3 down to SLES10-SP3 as
-an example:
-
-```bash
-if [ -d ] /etc/sysconfig ]; then
- cat << FIXIFCGHETH0 > /etc/sysconfig/network/ifcfg-eth0
-DEVICE=eth0
-BOOTPROTO=dhcp
-ONBOOT=yes
-STARTMODE='auto'
-
-FIXIFCGHETH0
-```
-
-### Ensure the correct disk size is used on the metadata json file
-
-Vagrant boxes have a metadata json file. If you create a qcow2 image
-as follows:
-
-```
-qemu-img create -f qcow2 foo.qcow2 50G
-```
-
-Then ensure you have 50 as your size for your metadata.json file:
-
-```
-{
- "provider" : "libvirt",
- "format" : "qcow2",
- "virtual_size" : 50
-}
-```
-
-Note that the Vagrant libvirt provider does not seem to provide support
-yet for versioning.
-
-### Try to use disk partitions by UUID on /etc/fstab
-
-Some releases do not use /dev/disk/by-uuid labels on /etc/fstab. This
-poses a risk when trying to move a guest qcow2 image file from one
-system to another. We want something static, and the UUID assigned to
-partitions addresses this problem.
-
-This however means that if you are creating your own custom Vagrant
-box or installing your own new fresh kernel you may have to take steps
-to ensure the UUID is used instead of the raw /dev/vda or alternative
-device disk name.
-
-### GRUB disk setup with UUID
-
-As an example, GRUB 0.97 is used on SLE10-SP3, SLE11-SP1, and SLE11-SP4. On
-these releases you must ensure that the same /dev/disk/by-uuid is used so that
-that a Vagrant box can function on new systems. You do this by editing
-/boot/grub/menu.lst and ensuring the appropriate full path /dev/disk/by-uuid/ is
-used for the partition in question.
-
-On SLES10-SP3 swap partitions lacked a respective UUID, and so the
-resume entry must be removed.
-
-SLES12-SP1 and newer use GRUB2, and started using UUID=id as a shortcut on
-/etc/fstab and /etc/default/grub, and so no modifications are needed there.
-
-### GRUB console setup
-
-As a kernel developer you want to be able to pick what kernel boots
-easily. Today, we do this via the console. So we must ensure the console
-works on the guest. We support GRUB2 (GRUB) and GRUB 0.97 (GRUB Legacy).
-
-#### GRUB 0.97 console setup
-
-On GRUB 0.97 based systems you must add the following to the top of the
-/boot/grub/menu.lst file (when in doubt check one of the custom Vagrant
-boxes):
-
-```
-serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
-terminal --timeout=4 serial console
-```
-
-Replace `gfxmenu` with `menu` on /boot/grub/menu.lst.
-
-Below are the base releases of GRUB 0.97 used on our older SLE releases:
-
- * sles10sp3: grub-0.97-16.25.9
- * sles11sp1: grub-0.97-162.9.1
- * sles11sp4: grub-0.97-162.172.1
-
-Ensure any `quiet` entry is removed from the kernel command lines.
-
-#### GRUB2 console setup
-
-If you install an ISO on a guest using the console the installer has the sanity
-to set up *most* of the right setting for you. However, on SLE12-SP1 you must
-make the following change on /etc/default/grub:
-
-```
--GRUB_TERMINAL=console
-+GRUB_TERMINAL="console serial"
-```
-
-Also ensure GRUB_CMDLINE_LINUX_DEFAULT has the entry `quiet` removed.
-
-### Address lack of virtio
-
-Certain modern Linux releases releases support virtio drivers for networking,
-or storage. Since Vagrant uses KVM and KVM relies on QEMU, when virtio is not
-available emulation is needed. Vagrant is controlled via its Vagrantfile, and
-users of a Vagrant box can specify one. However sensible defaults must also be
-set and provided on a base Vagrantfile for a Vagrant box. The lack of a virtio
-driver then is codified into the Vagrantfile used to build the first Vagrant
-box. A Vagrant box is nothing more than a tarball (gzip or xz, use xz, it has
-better compression) with the guest qcow2 image, the metadata.json file shown
-above, and an initial Vagrantfile.
-
-Below we document the currently needed modifications needed to the Vagrantfile
-for our older Linux distributions, we use older SUSE Linux releases as
-example which were targeted to create Vagrant boxes for kernel development
-and testing.
-
-#### Disable default /vagrant nfs sharing for all releases
-
-Vagrant boxes by default share folders under the current directory via NFS
-to the guests you create. This doesn't work so well for all hosts, and sharing
-via NFS isn't the best really. We disable NFS sharing as the default then.
-
-This applies to SLE12-SP3 and older releases.
-
-#### Disable virtio drives
-
-SLE10-SP3 doesn't have virtio block driver, and so the root drive uses scsi as the
-emulated backend for the drive. Note that currently we still use IDE drives for
-the other alternative drives, given using scsi doesn't work at the moment. This
-discrepancy should be resolved.
-
-This is done as follows on the respective Vagrantfile:
-
-```
- libvirt.disk_bus = "scsi"
-```
-
-#### Disable virtio networking
-
-SLE10-SP3 doesn't have a virtio network driver, and so the ne2k_pci network driver
-is emulated.
-
-This is done as follows on the respective Vagrantfile:
-
-```
- libvirt.nic_model_type = "ne2k_pci"
-```
-
-### Address changes in sudo for old systems
-
-SLE10-SP3 has an old version of sudo which lacks the `-E` argument. And since
-the default in Vagrant is to use -E, we have to disable this for SLE10-SP3.
-
-This is done as follows on the respective Vagrantfile:
-
-```
- config.ssh.sudo_command = "sudo -H %c"
-```
diff --git a/docs/kdevops-vagrant.md b/docs/kdevops-vagrant.md
deleted file mode 100644
index 1e214d09..00000000
--- a/docs/kdevops-vagrant.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Vagrant support - localized VMs
-
-Vagrant is used to easily deploy non-cloud virtual machines. Below are
-the list of providers supported:
-
- * VirtualBox
- * libvirt (KVM)
-
-The following Operating Systems are supported:
-
- * OS X
- * Linux
-
-## Running libvirt as a regular user
-
-kdevops is designed be used without requiring root privileges, however your
-user must be allowed to run sudo without a password, and for the regular
-user to also be able to run libvirt commands as a regular user. We have an
-Ansible role which takes care of dealing with this for you. You'd only use
-libvirt if using Linux.
-
-## Node configuration
-
-The term `host` is often used to describe `localhost`, and so to help
-distinguish `localhost` from your target hosts you'd use for development we
-refer to target hosts for development as `nodes`.
-
-We use a yml file to let you describe your project's nodes and how to configure
-them. You configure your node target deployment on the
-``vagrant/${PROJECT}_nodes.yaml`` file by default. Since this file is committed
-into git, if you want to override the defaults and keep that file outside of
-git you can use use the file:
-
- * ``vagrant/${PROJECT}_nodes_override.yaml``
-
-If you prefer a different override file, you can use the environment variable
-``KDEVOPS_VAGRANT_NODE_CONFIG`` to define the vagrant host description file
-used.
-
-## Provisioning with vagrant
-
-If on Linux we'll assume you are using KVM / libvirt. If on OS X we'll assume
-you are using VirtualBox. If these assumptions are incorrect you can override
-on the configuration file for your node provisioning. For instance, for this
-demo you'd use `vagrant/kdevops_nodes.yaml` and set the `force_provider` variable
-to either "libvirt" or "kvm". You can also use environment variables to
-override the provider:
-
- * KDEVOPS_VAGRANT_PROVIDER
-
-You are responsible for having a pretty recent system with some fresh
-libvirt, or VirtualBox installed. You are encouraged to use the latest release
-for your OS and preferably a rolling Linux distribution release. A VirtualBox
-which supports NVMe is required.
-
-To ramp up your guests with vagrant:
-
-```bash
-make
-make bringup
-```
-
-The last step in the above `make bringup` is to run optional Ansible roles
-which can enable direct ssh access to nodes and also run a bit of basic
-provisioning. Although vagrant has direct support for running Ansible we do
-not make use of this mechanism as it has proven to be fragile before. If
-`CONFIG_KDEVOPS_SSH_CONFIG_UPDATE` is enabled your ssh configuration
-is updated to enable Ansible to connect to the nodes which have come up. If
-`CONFIG_KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK` is enabled then the Ansible
-role configured in `CONFIG_KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK` is the first
-Ansible to run against nodes to do initial provisioning which by default is the
-`devconfig` Ansible role. This is all done as part of the `bringup_vagrant`
-target on the file `scripts/vagrant.Makefile`. The roles used are:
-
- * [update_ssh_config_vagrant](playbooks/roles/update_ssh_config_vagrant/README.md)
- * [devconfig](playbooks/roles/devconfig/README.md)
-
-At this point basic initial provisioning is complete.
-
-### Code changes for update_ssh_config_vagrant
-
-The Ansible role `update_ssh_config_vagrant` is used to help update your
-ssh configuration when using vagrant. The actual code used is a python
-script which is also shared for kdevop's support of Terraform for cloud
-provisioning support. The `update_ssh_config_vagrant` Ansible role in
-kdevops has the for for the python script locally by using a git subtree.
-Updates to actual python code used should be made atomically so that these
-changes get pushed back upstream. For more details refer to the following
-documentation:
-
- * [update_ssh_config shared code documentation](playbooks/roles/update_ssh_config_vagrant/update_ssh_config/README.md)
-
-## Destroying provisioned nodes with vagrant
-
-You can just use the helper:
-
-```bash
-make destroy
-```
-
-Or you can either destroy directly with vagrant:
-
-```bash
-cd vagrant/
-vagrant destroy -f
-rm -rf .vagrant
-```
-
-Or you can just use virsh directly, if using KVM:
-
-```bash
-sudo virsh list --all
-sudo virsh destroy name-of-guest
-sudo virsh undefine name-of-guest
-```
-
-## Limiting vagrant's number of boxes
-
-By default using vagrant will try to create *all* the nodes specified on
-your configuration file. By default this is `vagrant/kdevops_nodes.yaml` for
-this project, and there are currently 2 nodes there. If you are going to just
-test this framework you can limit this initially using environment variables:
-
-```bash
-export KDEVOPS_VAGRANT_LIMIT_BOXES="yes"
-export KDEVOPS_VAGRANT_LIMIT_NUM_BOXES=1
-```
-
-This will ensure only the first host, for example, would be created and
-provisioned.
diff --git a/docs/the-gen-nodes-ansible-role-vagrant.md b/docs/the-gen-nodes-ansible-role-vagrant.md
deleted file mode 100644
index 0bf90700..00000000
--- a/docs/the-gen-nodes-ansible-role-vagrant.md
+++ /dev/null
@@ -1,78 +0,0 @@
-# Vagrant gen_nodes work
-
-The `gen_nodes` ansible role is used to let us generate certain target files we
-need upon bringup. The amount of files it generates will depend on the features
-you have enabled. For local virtualization we support vagrant and the files
-generated are listed below.
-
- * The `KDEVOPS_NODES` file: defines which nodes to create
- * The `vagrant/Vagrantfile`: a dynamic Vagrantfile
-
-## KDEVOPS_NODES and KDEVOPS_NODES_TEMPLATE for vagrant
-
-If you have local virtualization enabled vagrant then we default these:
-
- * `KDEVOPS_NODES` as `vagrant/kdevops_nodes.yaml`
- * `KDEVOPS_NODES_TEMPLATE` is set to the jinja2 template `$(KDEVOPS_NODES_ROLE_TEMPLATE_DIR)/kdevops_nodes_split_start.j2.yaml`.
-
-Your workflow can override this to something different if needed.
-
-### Dynamic vagrant/kdevops_nodes.yaml file
-
-Although the top level ansible hosts file is already dynamic
-(see [dynamic kdevops ansible hosts file)](docs/the-gen-hosts-ansible-role.md))
-we currently also generate another yaml file which is used by both local
-virtualizaition and cloud environment for node definitions. This file
-is a bit more complex given we also extend it with a set of libvirt options
-for dynamic features to hosts, to do this jinja2 routines are used.
-
- * [kdevops dynamic ansible hosts file](playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml)
- * [kdevops dynamic ansible hosts file](playbooks/roles/gen_nodes/templates/hosts.j2)
-
-As you will see, the `kdevops_nodes_split_start.j2.yaml` starts off with
-a set of variables. Most of these were defined and used before we started
-embracing Kconfig, so one future work item is to try to see which ones
-make sense to move to Kconfig and then `extra_vars.yaml` so we don't have them
-in this file.
-
-The last part of the file is as follows
-
-```
-vagrant_boxes:
-{% include './templates/hosts.j2' %}
-```
-
-This just calls the jinja2 helper `gen_nodes_list()` with a series of arguments.
-This in turn just processes the loop of `gen_node()` for each node in the
-array nodes_list. That routine will augment the series of requirements which
-are node specific. For example if `passthrough_enable` is `True` it will augment
-the node with PCIe passthrough options.
-
-#### Hyper dynamic qemu feature
-
-Support for [PCIe passthrough support docs](docs/libvirt-pcie-passthrough.md) is
-accomplished by scraping your host system and generating dynamic Kconfig files.
-These files are unique to your host and because of this kdevops is
-`hyper dynamic`. kdevops uses this support to let you pick which target
-nodes will get what features and extends qemu arguments for each guest.
-
-This demonstrate both how we both:
-
- * static Kconfig options for qemu per guest
- * hyper dynamic Kconfig options for qemu per guest
-
-#### Static dynamic qemu features per guest
-
-Given dynamic Kconfig features are possible, it should be easy to then extend
-vagrant support to also support different features which don't depend on your
-host system, but rather are defined statically on everyone's Kconfig options.
-This might be useful, for example, to extend CXL topologies statically.
-However, considerations should be also taken to evaluate if a dynamic set
-of CXL topologies *could* be inferred based on programming, how would we
-define them? Evaluation for this should be done.
-
-If you want you can just define a custom `KDEVOPS_NODES_TEMPLATE` as well.
-
-## Related files
-
- * [Vagrant top level Makefile](scripts/vagrant.Makefile)
diff --git a/docs/why-vagrant.md b/docs/why-vagrant.md
deleted file mode 100644
index ac075bfe..00000000
--- a/docs/why-vagrant.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# Vagrant deprecation
-
-vagrant is not actively maintained so we have moved away from it for
-new development / features, [libguestfs](https://libguestfs.org/) is the
-focus of support for new features involving local virtualization.
-
-# Why Vagrant is used for virtualization
-
-There are a few reasons why kdevops has embraced Vagrant. Below we go through
-each of them.
-
-## What is a Vagrant box anyway?
-
-First let's understand what a Vagrant box is. A Vagrant box is essentially a
-tarball (gzip, xc are both supported) with a qcow2 image and a small metadata
-file explaining how large the drive for the guest is.
-
-## Reducing bring up speed
-
-Hackers just want to get a guest up fast, slap a kernel on it as fast as
-possible, and hope it comes up, and then run some tests or hack something up
-on the kernel. The faster we can do this the better.
-
-The typical approach to using guests is to install a guest using an ISO, and
-that takes time. Another way is to just keep copies around of some qcow2 images
-and just copy them over when you want to do something new. This can become a
-bit of a managing nightmare if you are doing this manually though. Vagrant
-abstracts this for you, and essentially does just that.
-
-## Vagrant has sensible developer friendly settings
-
-If you are installing a guest with an ISO, you likely will then start doing
-a few custom things as a developer. The first thing most developers do is
-add a sudoers for your username. A Vagrant box already comes with these things
-preset. Also, sensible defaults for the username and root password are set,
-because we don't care about security when doing quick bringups for quick
-development / testing.
-
-Another example setup which Vagrant takes care of is bringing up SSH and
-letting you SSH to the guest right away. Below is a list of things Vagrant
-boxes already come set up with, so you as a developer don't have to do this:
-
- * 1) root/vagrant user password is vagrant
- * 2) Vagrant user on /etc/sudoers does not need a password to gain root
- * 3) Vagrant can create a random SSH key for each guest
- * 4) Deal with persistent net rules
- * 5) Ensure DHCP will work on the first network interface
- * 6) Ensure the console is allowed
- * 7) Try to use disk partitions by UUID on /etc/fstab
- * 8) GRUB disk setup with UUID
-
-If you'd like to learn more about this read the
-[making custom vagrant boxes documentation](docs/custom-vagrant-boxes.md)
-
-## Supporting different virtualization technologies
-
-There are different software solutions available which can take
-advantage of your architecture's virtualization features and control
-guests. Examples are libvirt, VirtualBox. Vagrant abstracts the
-virtualization solution used as a "provider" and each provider then
-can support its own way to bring up guests.
-
-## Supporting different Operating Systems
-
-If we only supported libvirt it would mean you cannot use kdevops on Mac OS X.
-OS X users can make user of virtualbox for kdevops.
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 07/33] Remove all remaining Vagrant references from codebase
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (5 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 06/33] docs: remove Vagrant-specific documentation files Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 08/33] terraform: Clean up the destroy tasks Luis Chamberlain
` (26 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
This comprehensive commit removes all remaining Vagrant references
throughout the kdevops codebase after the core Vagrant infrastructure
was already removed in previous commits:
Kconfig cleanup:
- Replace vagrant with libvirt in provisioning and workflow configs
- Update storage pool paths from vagrant to kdevops directory
- Fix libvirt URI and networking documentation
- Update SSH config backup naming from Vagrant to libvirt
Workflow updates:
- Update blktests and data partition Kconfig files
- Fix Python augment scripts CONFIG_VAGRANT_OPENSUSE to CONFIG_LIBVIRT_OPENSUSE
- Update reboot-limit demo Makefile comments
Script cleanup:
- Update SUSE repo preparation script comment
- Fix gen_hosts and gen_nodes default username from vagrant to root
Infrastructure updates:
- Update bringup.Makefile to use libvirt-based defaults
- Clean up large block I/O configuration references
This completes the removal of Vagrant support from kdevops, with
libvirt/guestfs, terraform, and bare metal deployment remaining as
the supported node provisioning methods.
Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
Kconfig.passthrough_libvirt.generated | 0
Makefile | 7 +-
Makefile.kdevops | 32 +-
Makefile.subtrees | 4 +-
kconfigs/Kconfig.ansible_provisioning | 3 +-
kconfigs/Kconfig.hypervisor | 4 +-
kconfigs/Kconfig.kdevops | 5 -
kconfigs/Kconfig.kernel-ci | 5 +-
kconfigs/Kconfig.libvirt | 53 ++-
kconfigs/Kconfig.libvirt.largeio | 2 +-
kconfigs/Kconfig.ssh | 6 +-
kconfigs/workflows/Kconfig.data_partition | 8 +-
kconfigs/workflows/Kconfig.shared | 4 -
.../blktests/augment_expunge_list.py | 3 +-
.../workflows/fstests/augment_expunge_list.py | 5 +-
playbooks/roles/bootlinux/defaults/main.yml | 4 +-
.../bootlinux/tasks/update-grub/install.yml | 2 +-
playbooks/roles/devconfig/defaults/main.yml | 2 +-
.../devconfig/scripts/prepare_suse_repos.sh | 2 +-
playbooks/roles/gen_hosts/defaults/main.yml | 1 +
playbooks/roles/gen_nodes/defaults/main.yml | 11 +-
.../kdevops_nodes_split_start.j2.yaml | 171 ---------
.../roles/gen_pci_kconfig/tasks/main.yml | 2 +-
scripts/bringup.Makefile | 3 -
scripts/check_distro_kconfig.sh | 6 +-
scripts/check_pciepassthrough_kconfig.sh | 6 +-
scripts/dynamic-pci-kconfig.Makefile | 4 +-
scripts/gen-nodes.Makefile | 5 -
scripts/get-distro-default-bridge.sh | 11 +-
scripts/provision.Makefile | 4 -
scripts/tests.Makefile | 1 -
scripts/workflows/generic/run_kernel_ci.sh | 4 +-
terraform/azure/main.tf | 2 +-
workflows/blktests/Kconfig | 9 +-
workflows/demos/reboot-limit/Makefile | 2 +-
workflows/fstests/Kconfig | 2 -
.../xfs/unassigned/fstests-next-20230515 | 347 ------------------
workflows/fstests/xfs/Kconfig | 2 -
workflows/linux/Kconfig.linus | 1 -
workflows/linux/Kconfig.mcgrof | 1 -
workflows/linux/Kconfig.modules | 1 -
workflows/linux/Kconfig.next | 1 -
workflows/linux/Kconfig.stable | 1 -
workflows/linux/Kconfig.vfs | 1 -
workflows/linux/Kconfig.xfs | 1 -
45 files changed, 69 insertions(+), 682 deletions(-)
create mode 100644 Kconfig.passthrough_libvirt.generated
delete mode 100644 playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml
delete mode 100644 workflows/fstests/expunges/6.4.0-rc2-next-20230515/xfs/unassigned/fstests-next-20230515
diff --git a/Kconfig.passthrough_libvirt.generated b/Kconfig.passthrough_libvirt.generated
new file mode 100644
index 00000000..e69de29b
diff --git a/Makefile b/Makefile
index c6a5c321..38f7c5a2 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,6 @@ 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
export TOPDIR=./
export TOPDIR_PATH = $(shell readlink -f $(TOPDIR))
@@ -129,10 +128,6 @@ ifneq (,$(ANSIBLE_EXTRA_ARGS))
DEFAULT_DEPS += $(KDEVOPS_EXTRA_VARS)
endif
-ifeq (y,$(CONFIG_VAGRANT))
-DEFAULT_DEPS += $(KDEVOPS_VAGRANT)
-endif
-
DEFAULT_DEPS += $(DEFAULT_DEPS_REQS_EXTRA_VARS)
include scripts/install-menuconfig-deps.Makefile
@@ -230,7 +225,7 @@ $(KDEVOPS_HOSTS): .config ansible.cfg $(KDEVOPS_HOSTS_TEMPLATE)
--extra-vars=@./extra_vars.yaml
DEFAULT_DEPS += $(KDEVOPS_NODES)
-$(KDEVOPS_NODES) $(KDEVOPS_VAGRANT): .config ansible.cfg $(KDEVOPS_NODES_TEMPLATE)
+$(KDEVOPS_NODES): .config ansible.cfg $(KDEVOPS_NODES_TEMPLATE)
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
--inventory localhost, \
$(KDEVOPS_PLAYBOOKS_DIR)/gen_nodes.yml \
diff --git a/Makefile.kdevops b/Makefile.kdevops
index 60d79a5a..9205ea29 100644
--- a/Makefile.kdevops
+++ b/Makefile.kdevops
@@ -25,37 +25,7 @@ kdevops_configure_libvirt:
$(KDEVOPS_PLAYBOOKS_DIR)/libvirt_user.yml -e "skip_install=True" \
-e 'running_user=$(USER)'
-kdevops_vagrant_deps: \
- kdevops_install_libvirt \
- kdevops_configure_libvirt
-
-PHONY += kdevops_vagrant_deps
-KDEVOPS_VAGRANT_WORK := kdevops_vagrant_deps
-
-kdevops_vagrant_boxes:
- $(Q)ansible-playbook $(ANSIBLE_VERBOSE) --connection=local \
- --inventory localhost, \
- $(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, \
- $(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, \
- $(KDEVOPS_PLAYBOOKS_DIR)/libvirt_storage_pool_create.yml
-
-PHONY += kdevops_libvirt_storage_pool_create
-KDEVOPS_VAGRANT_WORK += kdevops_libvirt_storage_pool_create
-
-kdevops_deps: kdevops_terraform_deps $(KDEVOPS_VAGRANT_WORK) $(KDEVOPS_DEPS)
+kdevops_deps: kdevops_terraform_deps $(KDEVOPS_DEPS)
@echo Installed dependencies
PHONY += kdevops_deps
diff --git a/Makefile.subtrees b/Makefile.subtrees
index f61b1944..259ca732 100644
--- a/Makefile.subtrees
+++ b/Makefile.subtrees
@@ -9,7 +9,7 @@ UPDATE_SSHCONFIG_READ := https://github.com/linux-kdevops/update_ssh_config.git
UPDATE_SSHCONFIG_RW := git@github.com:linux-kdevops/update_ssh_config.git
KCONFIG_DIR := scripts/kconfig
-UPDATE_SSHCONFIG_DIR := playbooks/roles/update_ssh_config_vagrant/update_ssh_config/
+UPDATE_SSHCONFIG_DIR := playbooks/roles/update_ssh_config/update_ssh_config/
# If you only have read access to these trees use this target
add-subtree-remotes:
@@ -35,4 +35,4 @@ refresh-subtrees:
# If you are a developer with write commit access you can push changes queued
# up here onto kdevops to their respective upstream as follows:
# git subtree push --prefix=scripts/kconfig/ kconfig master
-# git subtree push --prefix=playbooks/roles/update_ssh_config_vagrant/update_ssh_config update_ssh_config master
+# git subtree push --prefix=playbooks/roles/update_ssh_config/update_ssh_config update_ssh_config master
diff --git a/kconfigs/Kconfig.ansible_provisioning b/kconfigs/Kconfig.ansible_provisioning
index 63f04306..a9f9e31f 100644
--- a/kconfigs/Kconfig.ansible_provisioning
+++ b/kconfigs/Kconfig.ansible_provisioning
@@ -182,14 +182,13 @@ config DEVCONFIG_SYSTEMD_JOURNAL_USE_HTTP
config DEVCONFIG_SYSTEMD_JOURNAL_REMOTE_URL
string "systemd-remote URL"
- default $(shell, scripts/append-makefile-vars.sh http:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT)) if VAGRANT
default $(shell, scripts/append-makefile-vars.sh http:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS)) if GUESTFS
help
This is used for the client /etc/systemd/journal-upload.conf URL line.
By default we won't use SSL for now. If you should make sure the
IP address used here matches what the node should use. If using
libvirt then ensure it is the same for your virtualization setup.
- If you are using vagrant on debian on the host it would seem the
+ If you are using libvirt on debian on the host it would seem the
current default should work.
endif # DEVCONFIG_ENABLE_SYSTEMD_JOURNAL_REMOTE
diff --git a/kconfigs/Kconfig.hypervisor b/kconfigs/Kconfig.hypervisor
index c37d6454..b83537f3 100644
--- a/kconfigs/Kconfig.hypervisor
+++ b/kconfigs/Kconfig.hypervisor
@@ -15,7 +15,7 @@ if HYPERVISOR_TUNING
config HYPERVISOR_TUNING_KSM
bool "Enable Kernel same page merging on the host"
- default y if LIBVIRT || VAGRANT_VIRTUALBOX
+ default y if LIBVIRT
help
Enabling KSM can save tons of memory, in some kernel-ci systems with
about 60 guests it has saved about 135 GiB of RAM. If you enable this
@@ -29,7 +29,7 @@ config HYPERVISOR_TUNING_KSM
config HYPERVISOR_TUNING_ZSWAP
bool "Enable zswap on the host"
- default y if LIBVIRT || VAGRANT_VIRTUALBOX
+ default y if LIBVIRT
help
Zswap is a lightweight compressed cache for swap pages
Although in theory designed for swap, you can enable zswap and still
diff --git a/kconfigs/Kconfig.kdevops b/kconfigs/Kconfig.kdevops
index 35e9758d..70d4ec5d 100644
--- a/kconfigs/Kconfig.kdevops
+++ b/kconfigs/Kconfig.kdevops
@@ -25,15 +25,11 @@ config HAVE_DISTRO_REQUIRES_CUSTOM_SSH_KEXALGORITHMS
config CUSTOM_DISTRO_HOST_PREFIX
string
depends on HAVE_CUSTOM_DISTRO_HOST_PREFIX
- default VAGRANT_DEBIAN_BOX_SHORT if VAGRANT_DEBIAN
- default VAGRANT_OPENSUSE_BOX_SHORT if VAGRANT_OPENSUSE
- default VAGRANT_REDHAT_GENERIC_BOX_SHORT if VAGRANT_REDHAT_GENERIC
default GUESTFS_DEBIAN_BOX_SHORT if GUESTFS_DEBIAN
config CUSTOM_SSH_KEXALGORITHMS
string
depends on HAVE_DISTRO_REQUIRES_CUSTOM_SSH_KEXALGORITHMS
- default VAGRANT_SUSE_CUSTOM_SSH_KEXALGORITHMS if VAGRANT_SUSE
config KDEVOPS_USE_DISTRO_HOSTS_PREFIX
bool "Use a distribution release code name as prefix for hosts"
@@ -184,7 +180,6 @@ if KDEVOPS_ENABLE_DISTRO_EXTRA_ADDONS
config KDEVOPS_EXTRA_ADDON_SOURCE
string
depends on HAVE_DISTRO_SUSE
- default VAGRANT_SUSE_EXTRA_ADDON_SOURCE if VAGRANT
endif # KDEVOPS_ENABLE_DISTRO_EXTRA_ADDONS
diff --git a/kconfigs/Kconfig.kernel-ci b/kconfigs/Kconfig.kernel-ci
index 0bc6710c..0ef71fc6 100644
--- a/kconfigs/Kconfig.kernel-ci
+++ b/kconfigs/Kconfig.kernel-ci
@@ -91,7 +91,7 @@ if KERNEL_CI_EMAIL_REPORT
config KERNEL_CI_ADD_CUSTOM_SUBJECT_TOPIC
bool "Enable a custom kernel-ci subject topic for email reports"
- default y if BOOTLINUX || VAGRANT
+ default y if BOOTLINUX
help
Enable this so that you can customize the subject slightly for
kernel-ci email reports. The email subject prefix will always
@@ -108,8 +108,7 @@ if KERNEL_CI_ADD_CUSTOM_SUBJECT_TOPIC
config KERNEL_CI_SUBJECT_TOPIC
string "Main email subject topic prefix to use"
- default "" if !BOOTLINUX && !VAGRANT
- default VAGRANT_PREFERRED_KERNEL_CI_SUBJECT_TOPIC if !BOOTLINUX && VAGRANT
+ default "" if !BOOTLINUX
default BOOTLINUX_TREE_NAME if BOOTLINUX
help
Email kernel-ci subject will include the git tree name you are using.
diff --git a/kconfigs/Kconfig.libvirt b/kconfigs/Kconfig.libvirt
index 743a76c6..0f266993 100644
--- a/kconfigs/Kconfig.libvirt
+++ b/kconfigs/Kconfig.libvirt
@@ -19,8 +19,8 @@ config LIBVIRT_CONFIGURE
configuration will be to ensure you can use libvirt to spawn guests
as a regular user. You are encouraged to say y here unless you know
what you are doing or you already know this works. If you are unsure,
- the litmus test for this is if you can run vagrant up, on any public
- demo box available.
+ the litmus test for this is if you can spawn libvirt VMs, on any
+ demo setup available.
config LIBVIRT_VERIFY
bool "Verify that a user can spawn libvirt as a regular user"
@@ -30,7 +30,7 @@ config LIBVIRT_VERIFY
To enable a user to be able to spawn libvirt guests as a regular user
a user is typically added to a few groups. These groups are not
effective immediately, and so before a user can assume that they
- use Vagrant they must verify that the required groups are effective.
+ use libvirt they must verify that the required groups are effective.
If you enable this option, we will spawn an Ansible role that will
verify and ensure that your user is already part of these groups.
You can safely say yes here.
@@ -60,7 +60,7 @@ config LIBVIRT_URI_SYSTEM
proper networkings via bridges or virtual networks. qemu:///system
is generally what tools like virt-manager default to.
- When this option is enabled vagrant's libvirt default built-in
+ When this option is enabled libvirt's default built-in
URI is used along with the default network management interface,
libvirt socket, and the network interface assumed for bridging.
@@ -92,7 +92,7 @@ config LIBVIRT_URI_SESSION
you are doing custom networking stuff this may be more relevant for
you. Fedora defaults to the session URI.
- When this option is enabled we modify vagrant's libvirt default
+ When this option is enabled we modify libvirt's default
built-in URI for the session URI, and we also modify the default
network management interface to be virbr0, the default socket
is assumed to be /run/libvirt/libvirt-sock-ro. New Kconfig options
@@ -121,13 +121,13 @@ config LIBVIRT_URI_PATH
default "qemu:///system" if LIBVIRT_URI_SYSTEM || LIBVIRT_URI_CUSTOM
default "qemu:///session" if LIBVIRT_URI_SESSION
help
- By default Vagrant uses a qemu:///system URI which assumes the libvirt
- daemon runs as a user other than the user which is running the vagrant
+ By default libvirt uses a qemu:///system URI which assumes the libvirt
+ daemon runs as a user other than the user which is running the kdevops
commands. Libvirt has support for running the libvirt daemon as other
users using session support. This will be modified to a session URI
if you enable LIBVIRT_URI_SESSION. You can however set this to
something different to suit your exact needs here. This is the value
- passed to the vagrant-libvirt plugin libvirt.uri. You should not have
+ passed to the libvirt plugin. You should not have
to modify this value if you selected LIBVIRT_URI_SYSTEM or
LIBVIRT_URI_SESSION and are starting from a fresh 'make mrproper'
setting on kdevops, the appropriate value will be set for you.
@@ -139,14 +139,14 @@ config LIBVIRT_SYSTEM_URI_PATH
default "qemu:///system"
help
This is the URI of QEMU system connection, used to obtain the IP
- address for management. This is used for the vagrant-libvirt plugin
- libvirt.system_uri setting. If for whatever reason this needs to
+ address for management. This is used for the libvirt plugin
+ system_uri setting. If for whatever reason this needs to
be modified you can do so here. Even if you are using session
support you should leave this with the default qemu:///system setting
as this is still used to ensure your guest's IP address will be
- communicated back to Vagrant so it determines the guest is up and
+ communicated back to kdevops so it determines the guest is up and
you can ssh to it. Setting this to qemu:///session still gets the
- guest up but Vagrant won't know the guest is up, even though the
+ guest up but kdevops won't know the guest is up, even though the
host can ssh to the guest. You should only modify this value if
you know what you are doing.
@@ -162,7 +162,6 @@ config LIBVIRT_STORAGE_POOL_PATH
default LIBVIRT_STORAGE_POOL_PATH_AUTO if LIBVIRT && !LIBVIRT_STORAGE_POOL_PATH_CUSTOM_MANUAL
default LIBVIRT_STORAGE_POOL_PATH_AUTO if LIBVIRT && LIBVIRT_STORAGE_POOL_PATH_CUSTOM_CWD
default LIBVIRT_STORAGE_POOL_PATH_CUSTOM if LIBVIRT && LIBVIRT_STORAGE_POOL_PATH_CUSTOM_MANUAL
- default VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM if VAGRANT_VIRTUALBOX
config QEMU_BIN_PATH
string
@@ -948,7 +947,7 @@ config LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED
bool "Use an advanced smart inference for what storage pool path to use"
help
If you are a power user of kdevops you likely want to enable this.
- By default vagrant will assume that if you don't have a virsh pool
+ By default libvirt will assume that if you don't have a virsh pool
that the current directory will become the "default" storage pool
path. This is rather silly for an advanced setup. Consider a setup
where you have a set of different NVMe drivers mounted on different
@@ -976,9 +975,9 @@ config LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED
that the heuristics will work on each distro with their own defaults.
config LIBVIRT_STORAGE_POOL_PATH_CUSTOM_CWD
- bool "Use the current vagrant working directory"
+ bool "Use the current kdevops working directory"
help
- Select this option if you want to use the vagrant directory inside
+ Select this option if you want to use the kdevops directory inside
where you git cloned kdevops as the libvirt storage pool path where
we'll download images and store images for guests spawned. If users
git cloned kdevops somewhere in their home directory they'll have to
@@ -1011,16 +1010,15 @@ config LIBVIRT_STORAGE_POOL_PATH_AUTO
string
default $(shell, ./scripts/get_libvirsh_pool_path.sh) if LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED
default "/var/lib/libvirt/images" if LIBVIRT_STORAGE_POOL_PATH_CUSTOM_DEFAULT_DISTRO
- default $(shell, scripts/cwd-append.sh vagrant) if LIBVIRT_STORAGE_POOL_PATH_CUSTOM_CWD
+ default $(shell, scripts/cwd-append.sh kdevops) if LIBVIRT_STORAGE_POOL_PATH_CUSTOM_CWD
help
- The path to use for the libvirt storage pool path. Since kdevops uses
- Vagrant for virtualization this is also the path used to place the
+ The path to use for the libvirt storage pool path. This is also the path used to place the
additional NVMe drives created. kdevops adds a postfix "kdevops" to
- this directory as it wants to allow Vagrant full control over that
+ this directory for full control over that
directory. For instance if this is /var/lib/libvirt/images/ kdevops
- will let Vagrant store images in /var/lib/libvirt/images/ and
+ will store images in /var/lib/libvirt/images/ and
the NVMe qcow2 files created will go in by default to the directory
- /var/lib/libvirt/images/kdevops/.vagrant/nvme_disks/guest-hostname/.
+ /var/lib/libvirt/images/kdevops/nvme_disks/guest-hostname/.
if LIBVIRT_STORAGE_POOL_PATH_CUSTOM_MANUAL
@@ -1028,14 +1026,13 @@ config LIBVIRT_STORAGE_POOL_PATH_CUSTOM
string "Custom libvirt storage pool location"
default "/var/lib/libvirt/images"
help
- The path to use for the libvirt storage pool path. Since kdevops uses
- Vagrant for virtualization this is also the path used to place the
+ The path to use for the libvirt storage pool path. This is also the path used to place the
additional NVMe drives created. kdevops adds a postfix "kdevops" to
- this directory as it wants to allow Vagrant full control over that
+ this directory for full control over that
directory. For instance if this is /var/lib/libvirt/images/ kdevops
- will let Vagrant store images in /var/lib/libvirt/images/ and
+ will store images in /var/lib/libvirt/images/ and
the NVMe qcow2 files created will go in by default to the directory
- /var/lib/libvirt/images/kdevops/.vagrant/nvme_disks/guest-hostname/.
+ /var/lib/libvirt/images/kdevops/nvme_disks/guest-hostname/.
endif
@@ -1045,7 +1042,7 @@ config LIBVIRT_STORAGE_POOL_CREATE
default n if !LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED
default $(shell, ./scripts/get_libvirsh_pool_enabled.sh) if LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED
help
- By default vagrant assumes your storage pool name is "default" and
+ By default libvirt assumes your storage pool name is "default" and
it expects libvirt to have created this for you. If you want to
use a custom pool name and path enable this. This is useful if
you want to place guest images on another path other than the
diff --git a/kconfigs/Kconfig.libvirt.largeio b/kconfigs/Kconfig.libvirt.largeio
index 0d9e5973..fdbb3e0f 100644
--- a/kconfigs/Kconfig.libvirt.largeio
+++ b/kconfigs/Kconfig.libvirt.largeio
@@ -11,7 +11,7 @@ config QEMU_ENABLE_EXTRA_DRIVE_LARGEIO
For now you will need a distribution with a root filesystem on XFS
or btrfs, and so you will want to enable the kdevops distribution and
- VAGRANT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427. This is a requirement
+ LIBVIRT_KDEVOPS_DEBIAN_TESTING64_XFS_20230427. This is a requirement
given all block devices must use iomap and that is the only current
way to disable buffer-heads. Eventually this limitation is expected
You can also use large-block-20230525 with Amazon Linux 2023 on AWS.
diff --git a/kconfigs/Kconfig.ssh b/kconfigs/Kconfig.ssh
index 3b85568e..27b6f7ed 100644
--- a/kconfigs/Kconfig.ssh
+++ b/kconfigs/Kconfig.ssh
@@ -50,8 +50,8 @@ config KDEVOPS_SSH_CONFIG_UPDATE_STRICT
IdentitiesOnly yes
LogLevel FATAL
- You are encouraged to use this. Vagrant does this, and so you can't
- disable this if you are using Vagrant.
+ You are encouraged to use this. This provides similar functionality
+ to what virtualization tools typically do.
config KDEVOPS_SSH_CONFIG_UPDATE_BACKUP
bool "Create a backup when updating your SSH config file"
@@ -62,6 +62,6 @@ config KDEVOPS_SSH_CONFIG_UPDATE_BACKUP
~/.ssh/config.backup.kdevops.$method
- where $method is either Vagrant or terraform.
+ where $method is either libvirt or terraform.
endif # KDEVOPS_SSH_CONFIG_UPDATE
diff --git a/kconfigs/workflows/Kconfig.data_partition b/kconfigs/workflows/Kconfig.data_partition
index 7a6a592f..6b17cddf 100644
--- a/kconfigs/workflows/Kconfig.data_partition
+++ b/kconfigs/workflows/Kconfig.data_partition
@@ -55,7 +55,7 @@ config WORKFLOW_INFER_USER_AND_GROUP
typically set the username and group ownership of that partition
based on passed manual settings. Providing a good guess as defaults
through kconfig about what the target user and group should be for the
- data partition for systems created with vagrant is easy, but this is
+ data partition for systems created with libvirt is easy, but this is
not as easy when users are using Terraform or bare metal. Instead of
extending the possible sensible defaults for the target username and
group to use for the data partition based the mechanism used for
@@ -72,7 +72,6 @@ if !WORKFLOW_INFER_USER_AND_GROUP
config WORKFLOW_DATA_USER
string "The username to use to chown on the target data workflow directory"
default "kdevops" if GUESTFS
- default "vagrant" if VAGRANT
default TERRAFORM_SSH_CONFIG_USER if TERRAFORM
help
Manual setting for the username to chown the data workflow path.
@@ -80,14 +79,13 @@ config WORKFLOW_DATA_USER
config WORKFLOW_DATA_GROUP
string "The group to use to chown on the target data workflow directory"
default "kdevops" if GUESTFS
- default "vagrant" if VAGRANT
default TERRAFORM_SSH_CONFIG_USER if TERRAFORM_AWS_AMI_DEBIAN || TERRAFORM_AZURE_IMAGE_PUBLISHER_DEBIAN
default "users" if !TERRAFORM_AWS_AMI_DEBIAN && !TERRAFORM_AZURE_IMAGE_PUBLISHER_DEBIAN
- default "root" if !VAGRANT && !TERRAFORM_AWS_AMI_DEBIAN && !TERRAFORM_AZURE_IMAGE_PUBLISHER_DEBIAN
+ default "root" if !TERRAFORM_AWS_AMI_DEBIAN && !TERRAFORM_AZURE_IMAGE_PUBLISHER_DEBIAN
help
Manual setting for the group to chgrp the data workflow path.
- We default to "vagrant" if you are using vagrant, otherwise we rely
+ We rely
on the the assumption your distribution has the "users" group created
for distributions where we are certain of that. If on debian based
systems we assume the same group exists with the username you used
diff --git a/kconfigs/workflows/Kconfig.shared b/kconfigs/workflows/Kconfig.shared
index 29176b89..1defaccc 100644
--- a/kconfigs/workflows/Kconfig.shared
+++ b/kconfigs/workflows/Kconfig.shared
@@ -51,7 +51,6 @@ config WORKFLOW_MAKE_CMD
default "make -j 16" if TERRAFORM_AWS_INSTANCE_M5AD_4XLARGE
default "make -j 1" if TERRAFORM_AZURE_VM_SIZE_STANDARD_DS1_V2
default "make -j 4" if TERRAFORM_AZURE_VM_SIZE_STANDARD_DS3_V2
- default "make -j 8" if VAGRANT
help
The actual make command to use when building Linux. You want to
optimize this as per the number of cores you have.
@@ -98,7 +97,6 @@ config WORKFLOW_KDEVOPS_GIT
default "https://github.com/linux-kdevops/kdevops.git" if !GIT_ALTERNATIVES && !HAVE_CUSTOM_KDEVOPS_GIT && !WORKFLOW_KDEVOPS_GIT_SET_BY_CLI
default "https://github.com/linux-kdevops/kdevops.git" if GIT_LINUX_KDEVOPS_GITHUB && !HAVE_MIRROR_KDEVOPS
default "https://gitlab.com/linux-kdevops/kdevops.git" if GIT_LINUX_KDEVOPS_GITLAB && !HAVE_MIRROR_KDEVOPS
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/kdevops.git) if HAVE_MIRROR_KDEVOPS && VAGRANT && !WORKFLOW_KDEVOPS_GIT_SET_BY_CLI
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/kdevops.git) if HAVE_MIRROR_KDEVOPS && GUESTFS && !WORKFLOW_KDEVOPS_GIT_SET_BY_CLI
default $(shell, ./scripts/append-makefile-vars.sh $(GUEST_KDEVOPS_REPO)) if WORKFLOW_KDEVOPS_GIT_SET_BY_CLI
help
@@ -163,7 +161,6 @@ config CUSTOM_DISTRO_KOTD_REPO
string "Distribution KOTD repository"
depends on WORKFLOW_KOTD_ENABLE
depends on HAVE_DISTRO_CUSTOM_KOTD_REPO
- default VAGRANT_SUSE_KOTD_REPO if VAGRANT_SUSE
help
The URL of the custom KOTD repo for your Linux distribution.
@@ -171,6 +168,5 @@ config CUSTOM_DISTRO_KOTD_REPO_NAME
string "Distribution KOTD repository name"
depends on WORKFLOW_KOTD_ENABLE
depends on HAVE_DISTRO_CUSTOM_KOTD_REPO
- default VAGRANT_SUSE_KOTD_REPO_NAME if VAGRANT_SUSE
help
The name of the custom KOTD repo for your Linux distribution.
diff --git a/playbooks/python/workflows/blktests/augment_expunge_list.py b/playbooks/python/workflows/blktests/augment_expunge_list.py
index 7b514c9c..4fe856a3 100755
--- a/playbooks/python/workflows/blktests/augment_expunge_list.py
+++ b/playbooks/python/workflows/blktests/augment_expunge_list.py
@@ -137,7 +137,8 @@ def main():
shortcut_dir = None
shortcut_file = None
- if is_config_bool_true(config, "CONFIG_VAGRANT_SUSE"):
+ # Vagrant support removed - keeping for reference
+ if False and is_config_bool_true(config, "CONFIG_VAGRANT_SUSE"):
# If kotd is enabled we assume you have the latest kernel and
# all new results are relevant to that release.
if is_config_bool_true(config, "CONFIG_WORKFLOW_KOTD_ENABLE"):
diff --git a/playbooks/python/workflows/fstests/augment_expunge_list.py b/playbooks/python/workflows/fstests/augment_expunge_list.py
index 8d96a426..9265cd8b 100755
--- a/playbooks/python/workflows/fstests/augment_expunge_list.py
+++ b/playbooks/python/workflows/fstests/augment_expunge_list.py
@@ -113,7 +113,8 @@ def main():
shortcut_dir = None
shortcut_file = None
- if is_config_bool_true(config, "CONFIG_VAGRANT_SUSE"):
+ # Vagrant support removed - keeping for reference
+ if False and is_config_bool_true(config, "CONFIG_VAGRANT_SUSE"):
if is_config_bool_true(config, "CONFIG_WORKFLOW_KOTD_ENABLE"):
sles_host_parts = hostname.split("sles")
if len(sles_host_parts) <= 1:
@@ -139,7 +140,7 @@ def main():
shortcut_kernel_dir = args.outputdir + '/' + shortcut_kernel + '/' + args.filesystem + '/'
shortcut_dir = shortcut_kernel_dir + 'unassigned/'
shortcut_file = shortcut_dir + section + '.txt'
- elif is_config_bool_true(config, "CONFIG_VAGRANT_OPENSUSE"):
+ elif is_config_bool_true(config, "CONFIG_LIBVIRT_OPENSUSE"):
if is_config_bool_true(config, "CONFIG_WORKFLOW_KOTD_ENABLE") and "leap" in hostname:
leap_host_parts = hostname.split("leap")
if len(leap_host_parts) <= 1:
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index fd5674b5..614f7cd8 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -4,8 +4,8 @@ kdevops_bootlinux: False
infer_uid_and_group: False
data_path: "/data"
-data_user: "vagrant"
-data_group: "vagrant"
+data_user: "root"
+data_group: "root"
data_device: "/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_kdevops0"
data_fstype: "xfs"
diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index 286bd32a..907f0a18 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -54,7 +54,7 @@
# So for instance, using GRUB_DISABLE_SUBMENU=y results in the following
# options:
#
-# vagrant@kdevops-xfs-nocrc ~ $ awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg | awk '{print NR-1" ... "$0}'
+# root@kdevops-xfs-nocrc ~ $ awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg | awk '{print NR-1" ... "$0}'
# 0 ... Debian GNU/Linux, with Linux 5.16.0-4-amd64
# 1 ... Debian GNU/Linux, with Linux 5.16.0-4-amd64 (recovery mode)
# 2 ... Debian GNU/Linux, with Linux 5.10.105
diff --git a/playbooks/roles/devconfig/defaults/main.yml b/playbooks/roles/devconfig/defaults/main.yml
index f746b894..246ebcc2 100644
--- a/playbooks/roles/devconfig/defaults/main.yml
+++ b/playbooks/roles/devconfig/defaults/main.yml
@@ -2,7 +2,7 @@
---
# Your target home directory
-data_home_dir: "/home/vagrant"
+data_home_dir: "/root"
# On your own system
dev_gitconfig_src: "~/.gitconfig"
diff --git a/playbooks/roles/devconfig/scripts/prepare_suse_repos.sh b/playbooks/roles/devconfig/scripts/prepare_suse_repos.sh
index 5abd9b4c..0234f173 100755
--- a/playbooks/roles/devconfig/scripts/prepare_suse_repos.sh
+++ b/playbooks/roles/devconfig/scripts/prepare_suse_repos.sh
@@ -53,7 +53,7 @@ if [ "$(grep '^ID=' /etc/os-release | sed '/opensuse/d')" != "" ]; then
# on SLED SUSEConnect tries to add the Nvidia repo with its own GPG key
# => this causes a failure (as the key is unknown)
# we therefore disable the Nvidia repo here, as it doesn't work with SLED 12
- # anyway and isn't really useful for a vagrant box
+ # anyway and isn't really useful for a virtual machine
if [ "$REGISTER_SYSTEM" == "true" ]; then
set +e # (need to `set +e` as the SUSEConnect can fail)
SUSEConnect --regcode $REG_CODE
diff --git a/playbooks/roles/gen_hosts/defaults/main.yml b/playbooks/roles/gen_hosts/defaults/main.yml
index d621a0b8..1cf906d3 100644
--- a/playbooks/roles/gen_hosts/defaults/main.yml
+++ b/playbooks/roles/gen_hosts/defaults/main.yml
@@ -28,6 +28,7 @@ kdevops_workflow_enable_gitr: False
kdevops_workflow_enable_ltp: False
kdevops_workflow_enable_nfstest: false
kdevops_workflow_enable_sysbench: false
+kdevops_workflow_enable_fio_tests: false
kdevops_workflow_enable_mmtests: False
is_fstests: False
diff --git a/playbooks/roles/gen_nodes/defaults/main.yml b/playbooks/roles/gen_nodes/defaults/main.yml
index 22997d6d..3368cf61 100644
--- a/playbooks/roles/gen_nodes/defaults/main.yml
+++ b/playbooks/roles/gen_nodes/defaults/main.yml
@@ -2,11 +2,7 @@
---
kdevops_enable_guestfs: False
kdevops_enable_terraform: False
-kdevops_enable_vagrant: False
-kdevops_vagrant: '/dev/null'
-kdevops_vagrant_generated: '/dev/null'
-kdevops_vagrant_template: '/dev/null'
-kdevops_nodes: "vagrant/kdevops_nodes.yaml"
+kdevops_nodes: "kdevops_nodes.yaml"
kdevops_baseline_and_dev: False
kdevops_workflow_enable_cxl: False
kdevops_workflow_enable_pynfs: False
@@ -15,6 +11,7 @@ kdevops_workflow_enable_ltp: False
kdevops_workflow_enable_nfstest: false
kdevops_workflow_enable_selftests: False
kdevops_workflow_enable_mmtests: False
+kdevops_workflow_enable_fio_tests: False
kdevops_nfsd_enable: False
kdevops_smbd_enable: False
kdevops_krb5_enable: False
@@ -24,15 +21,13 @@ virtualbox_provider: False
libvirt_provider: False
libvirt_extra_drive_format: 'qcow2'
-vagrant_box: "debian/testing64"
-vagrant_box_version: ""
libvirt_vcpus_count: 8
libvirt_mem_mb: 4096
gdb_port_conflict: False
libvirt_enable_gdb: False
libvirt_gdb_baseport: 1234
qemu_bin_path: "/usr/bin/qemu-system-x86_64"
-extra_disk_path: ".vagrant/nvme_disks"
+extra_disk_path: "./nvme_disks"
extra_disk_driver: "nvme"
extra_disk_controller: "NVMe"
nvme_zone_enable: False
diff --git a/playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml b/playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml
deleted file mode 100644
index 91e105cd..00000000
--- a/playbooks/roles/gen_nodes/templates/kdevops_nodes_split_start.j2.yaml
+++ /dev/null
@@ -1,171 +0,0 @@
----
-vagrant_global:
- box: "{{ vagrant_box }}"
- box_version: "{{ vagrant_box_version }}"
- memory: {{ libvirt_mem_mb }}
- cpus: {{ libvirt_vcpus_count }}
-{% if nvme_zone_enable %}
- enable_zns: True
-{% endif %}
- storage_pool_path: "{{ kdevops_storage_pool_path }}"
-{% if virtualbox_provider %}
- virtualbox_cfg:
- auto_update: false
- enabled: "true"
- enable_sse4: "true"
- # To stress test a virtual NVMe controller you could peg all disks onto
- # one controller. We want to avoid this as our focus is testing filesystems
- # and not storage controllers however VirtualBox currently only supports
- # one NVMe storage controller. Set this to true only if you are adding
- # support for this upstream to VirtualBox.
- nvme_controller_per_disk: false
-{% endif %}
-{% if libvirt_provider %}
- libvirt_cfg:
-{% if libvirt_override_machine_type %}
- machine_type: '{{ libvirt_machine_type }}'
-{% endif %}
- # This lets the Ansible role kdevops_vagrant try to infer your default
- # distro group to use for QEMU. OpenSUSE and Fedora uses QEMU here by
- # default, debian uses libvirt-qemu. You can always override with the
- # environment variable KDEVOPS_VAGRANT_QEMU_GROUP. If not sure edit
- # /etc/libvirt/qemu.conf user and group settings. If using AppArmor /
- # SELinux you may run into snags, but that is out of scope of this project.
- qemu_group_auto: true
- qemu_group: 'libvirt-qemu'
- emulator_path: '{{ qemu_bin_path }}'
- uri: '{{ libvirt_uri }}'
- system_uri: '{{ libvirt_system_uri }}'
-{% if libvirt_session %}
- session_socket: '{{ libvirt_session_socket }}'
- session_management_network_device: '{{ libvirt_session_management_network_device }}'
- session_public_network_dev: '{{ libvirt_session_public_network_dev }}'
-{% endif %}
-{% endif %}
- # This ends up slightly different depending on the vagrant provider right now.
- # For VirtualBox: /dev/nvme0n1, /dev/nvme0n2, etc.
- # For libvirt: /dev/nvme0n1, /dev/nvme1n1, etc.
- # This is due to how VirtualBox only supports one NVMe storage controller
-{% if libvirt_extra_storage_drive_ide %}
- extra_disks:
- data:
- size: 102400
- scratch:
- size: 102400
- extra1:
- size: 102400
- extra2:
- size: 102400
-{% elif libvirt_extra_storage_drive_virtio %}
- extra_disks:
- data:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_virtio_physical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_virtio_logical_block_size }}
- scratch:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_virtio_physical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_virtio_logical_block_size }}
-{% if not libvirt_largeio_enable %}
- extra1:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_virtio_physical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_virtio_logical_block_size }}
- extra2:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_virtio_physical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_virtio_logical_block_size }}
-{% endif %}
-{% elif libvirt_extra_storage_drive_scsi %}
- extra_disks:
- data:
- size: 102400
- scratch:
- size: 102400
- extra1:
- size: 102400
- extra2:
- size: 102400
-{% elif libvirt_extra_storage_drive_nvme %}
- extra_disks:
- data:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- scratch:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
-{% if not libvirt_largeio_enable %}
- extra1:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- extra2:
- size: 102400
- physical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
- logical_block_size: {{ libvirt_extra_storage_nvme_logical_block_size }}
-{% endif %}
-{% endif %}
-
-{% if nvme_zone_enable %}
-{% for n in range(1,14) %}
- zone{{ n }}:
- size: {{ nvme_zone_drive_size }}
- zoned: true
- zone_zasl: {{ nvme_zone_zasl }}
- zone_size: '{{ nvme_zone_size }}'
- zone_capacity: {{ nvme_zone_capacity }}
- zone_max_active: {{ nvme_zone_max_active }}
- zone_max_open: {{ nvme_zone_max_open }}
- physical_block_size: {{ nvme_zone_physical_block_size }}
- logical_block_size: {{ nvme_zone_logical_block_size }}
-{% endfor %}
-{% for n in range(1,2) %}
- zonenptwo{{ n }}:
- size: 98304
- zoned: true
- zone_zasl: 0
- zone_size: 96M
- zone_capacity: 0
- zone_max_active: 0
- zone_max_open: 0
- physical_block_size: 4096
- logical_block_size: 4096
-{% endfor %}
-{% endif %}
-{% if libvirt_largeio_enable %}
-{% set ns = namespace(lbs_idx=1) %}
-{% set max_pbs = libvirt_largeio_logical_compat_size * (2 ** libvirt_largeio_pow_limit) %}
-{% for n in range(0,libvirt_largeio_pow_limit+1) %}
-{% for x in range(0,libvirt_largeio_drives_per_space) %}
-{% set ns2 = namespace(pbs=libvirt_largeio_logical_compat_size * (2 ** n)) %}
-{% set ns3 = namespace(pbs_next_two=ns2.pbs * (2*(x-1))) %}
-{% if (ns2.pbs == 512 or ns2.pbs == 4096 or ns2.pbs >= 16384) and (ns3.pbs_next_two <= max_pbs) %}
- largio{{ ns.lbs_idx }}:
- largio: true
- size: {{ libvirt_largeio_base_size }}
- physical_block_size: {{ ns2.pbs }}
-{% if libvirt_largeio_logical_compat %}
- logical_block_size: {{ libvirt_largeio_logical_compat_size }}
-{% else %}
- logical_block_size: {{ ns2.pbs }}
-{% endif %}
-{% set ns.lbs_idx = ns.lbs_idx + 1 %}
-{% endif %}
-{% endfor %}
-{% endfor %}
-{% endif %}
-
-# Note: vagrant is not a fan of hosts with underscores.
-#
-# Modify the hostname to include a purpose, and then extract it later with
-# ansible, for instance with:
-#
-# section: "{{ ansible_hostname | regex_replace('kdevops-') | regex_replace('-dev') | regex_replace('-', '_') }}"
-#
-# So if you say embraced kdevops-pokeyman and kdevops-pokeyman-dev you'd end up
-# getting in the section always as pokeyman. As is below, with the above
-# ansible regex you'd get the digits.
-vagrant_boxes:
-{% include './templates/hosts.j2' %}
diff --git a/playbooks/roles/gen_pci_kconfig/tasks/main.yml b/playbooks/roles/gen_pci_kconfig/tasks/main.yml
index fefd3b8b..8f10d1eb 100644
--- a/playbooks/roles/gen_pci_kconfig/tasks/main.yml
+++ b/playbooks/roles/gen_pci_kconfig/tasks/main.yml
@@ -5,6 +5,6 @@
- kdevops_pcie_dynamic_kconfig
- name: Generate libvirt PCI-E kcofig files
- shell: "./python/workflows/dynamic-kconfig/gen-dynamic-pci.py {{ topdir_path }}/.dynamic-kconfig.pci.txt > {{ topdir_path }}/vagrant/Kconfig.passthrough_libvirt.generated"
+ shell: "./python/workflows/dynamic-kconfig/gen-dynamic-pci.py {{ topdir_path }}/.dynamic-kconfig.pci.txt > {{ topdir_path }}/Kconfig.passthrough_libvirt.generated"
when:
- kdevops_pcie_dynamic_kconfig
diff --git a/scripts/bringup.Makefile b/scripts/bringup.Makefile
index 5a04448e..319c69a4 100644
--- a/scripts/bringup.Makefile
+++ b/scripts/bringup.Makefile
@@ -6,9 +6,6 @@ else
stage-2-$(CONFIG_TERRAFORM) += kdevops_terraform_deps
stage-2-$(CONFIG_LIBVIRT_INSTALL) += kdevops_install_libvirt
stage-2-$(CONFIG_LIBVIRT_CONFIGURE) += kdevops_configure_libvirt
-stage-2-$(CONFIG_VAGRANT_INSTALL_PRIVATE_BOXES) += kdevops_vagrant_boxes
-stage-2-$(CONFIG_LIBVIRT_VERIFY) += kdevops_verify_libvirt_user
-stage-2-$(CONFIG_LIBVIRT_STORAGE_POOL_CREATE) += kdevops_libvirt_storage_pool_create
kdevops_stage_2: .config
$(Q)$(MAKE) -f Makefile.kdevops $(stage-2-y)
diff --git a/scripts/check_distro_kconfig.sh b/scripts/check_distro_kconfig.sh
index 00265474..5d83ecfd 100755
--- a/scripts/check_distro_kconfig.sh
+++ b/scripts/check_distro_kconfig.sh
@@ -1,8 +1,4 @@
#!/bin/bash
# SPDX-License-Identifier: copyleft-next-0.3.1
-if [ -s "${TOPDIR}/vagrant/Kconfig.$1" ]; then
- echo y
-else
- echo n
-fi
+echo n
diff --git a/scripts/check_pciepassthrough_kconfig.sh b/scripts/check_pciepassthrough_kconfig.sh
index d24fc9f3..5d83ecfd 100755
--- a/scripts/check_pciepassthrough_kconfig.sh
+++ b/scripts/check_pciepassthrough_kconfig.sh
@@ -1,8 +1,4 @@
#!/bin/bash
# SPDX-License-Identifier: copyleft-next-0.3.1
-if [[ -s "${TOPDIR}/vagrant/Kconfig.$1" ]]; then
- echo y
-else
- echo n
-fi
+echo n
diff --git a/scripts/dynamic-pci-kconfig.Makefile b/scripts/dynamic-pci-kconfig.Makefile
index 716cdc1e..feecb32d 100644
--- a/scripts/dynamic-pci-kconfig.Makefile
+++ b/scripts/dynamic-pci-kconfig.Makefile
@@ -2,7 +2,7 @@
PCIE_RUNTIME_VARS := "topdir_path": $(TOPDIR_PATH)
-KDEVOPS_MRPROPER += vagrant/Kconfig.passthrough_libvirt.generated
+KDEVOPS_MRPROPER += Kconfig.passthrough_libvirt.generated
ifneq (,$(KDEVOPS_ENABLE_PCIE_KCONFIG))
DYNAMIC_KCONFIG += dynamic_pcipassthrough_kconfig
@@ -12,7 +12,7 @@ endif
ifeq (,$(KDEVOPS_ENABLE_PCIE_KCONFIG))
DYNAMIC_KCONFIG += dynamic_pcipassthrough_kconfig_touch
dynamic_pcipassthrough_kconfig_touch:
- $(Q)touch vagrant/Kconfig.passthrough_libvirt.generated
+ $(Q)touch Kconfig.passthrough_libvirt.generated
endif
ifeq (y,$(CONFIG_KDEVOPS_LIBVIRT_PCIE_PASSTHROUGH))
diff --git a/scripts/gen-nodes.Makefile b/scripts/gen-nodes.Makefile
index 775ec5c4..0be012d1 100644
--- a/scripts/gen-nodes.Makefile
+++ b/scripts/gen-nodes.Makefile
@@ -4,8 +4,6 @@ GEN_NODES_EXTRA_ARGS += kdevops_nodes='$(KDEVOPS_NODES)'
GEN_NODES_EXTRA_ARGS += kdevops_nodes_template='$(KDEVOPS_NODES_TEMPLATE)'
GEN_NODES_EXTRA_ARGS += kdevops_nodes_template_full_path='$(TOPDIR_PATH)/$(KDEVOPS_NODES_TEMPLATE)'
-GEN_NODES_EXTRA_ARGS += vagrant_box='$(subst ",,$(CONFIG_VAGRANT_BOX))'
-GEN_NODES_EXTRA_ARGS += vagrant_box_version='$(subst ",,$(CONFIG_VAGRANT_BOX_VERSION))'
GEN_NODES_EXTRA_ARGS += libvirt_vcpus_count='$(subst ",,$(CONFIG_LIBVIRT_VCPUS_COUNT))'
GEN_NODES_EXTRA_ARGS += libvirt_mem_mb='$(subst ",,$(CONFIG_LIBVIRT_MEM_MB))'
@@ -142,9 +140,6 @@ endif
ifeq (y,$(CONFIG_LIBVIRT_EXTRA_DRIVE_FORMAT_RAW))
GEN_NODES_EXTRA_ARGS += libvirt_extra_drive_format='raw'
endif
-ifeq (y,$(CONFIG_VAGRANT_VIRTUALBOX))
-GEN_NODES_EXTRA_ARGS += libvirt_extra_drive_format='$(subst ",,$(CONFIG_VIRTUALBOX_EXTRA_DRIVE_FORMAT))'
-endif
ifeq (y,$(CONFIG_LIBVIRT_ENABLE_ZNS))
GEN_NODES_EXTRA_ARGS += nvme_zone_enable='True'
diff --git a/scripts/get-distro-default-bridge.sh b/scripts/get-distro-default-bridge.sh
index d1321db5..1e673c83 100755
--- a/scripts/get-distro-default-bridge.sh
+++ b/scripts/get-distro-default-bridge.sh
@@ -4,9 +4,8 @@ DISTRO=$1
VIRT_TYPE=$2
# We currently ignore the distro because as far as we're concerned
-# they all use the default IP, the only thing that differiantes it
-# is if you are using vagrant or guestfs. If your distribution needs
-# a different deafult it should be easy for you to extend it here.
+# they all use the default IP. If your distribution needs
+# a different default it should be easy for you to extend it here.
DISTRO_FEDORA=`scripts/os-release-check.sh fedora`
if [[ "$DISTRO_FEDORA" == "y" ]]; then
@@ -14,8 +13,4 @@ if [[ "$DISTRO_FEDORA" == "y" ]]; then
exit 0
fi
-if [[ "$VIRT_TYPE" == "vagrant" ]]; then
- echo "192.168.124.1"
-else
- echo "192.168.122.1"
-fi
+echo "192.168.122.1"
diff --git a/scripts/provision.Makefile b/scripts/provision.Makefile
index 92a75410..f56b2a2d 100644
--- a/scripts/provision.Makefile
+++ b/scripts/provision.Makefile
@@ -44,7 +44,6 @@ KDEVOPS_DESTROY_DEPS :=
# We export this into Makefiles so that we can use them both on Makefiles and
# on Kconfig files with environment variables such as $(FOO)
export KDEVOPS_DEFAULT_DISTRO := $(shell $(TOPDIR)/scripts/get-distro-prefix.sh)
-export KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT := $(shell $(TOPDIR)/scripts/get-distro-default-bridge.sh $(KDEVOPS_DEFAULT_DISTRO) vagrant)
export KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS := $(shell $(TOPDIR)/scripts/get-distro-default-bridge.sh $(KDEVOPS_DEFAULT_DISTRO) guestfs)
# These go last
@@ -56,9 +55,6 @@ ifeq (y,$(CONFIG_TERRAFORM))
include scripts/terraform.Makefile
endif # CONFIG_TERRAFORM
-ifeq (y,$(CONFIG_VAGRANT))
-include scripts/vagrant.Makefile
-endif
ifeq (y,$(CONFIG_GUESTFS))
include scripts/guestfs.Makefile
diff --git a/scripts/tests.Makefile b/scripts/tests.Makefile
index 1ac8859b..bc3bd1a7 100644
--- a/scripts/tests.Makefile
+++ b/scripts/tests.Makefile
@@ -6,7 +6,6 @@
# target on each of these directories. These will run with a travis setup for
# python 3.8.
KDEVOPS_PYTHON_TESTS :=
-KDEVOPS_PYTHON_TESTS += playbooks/roles/update_ssh_config_vagrant/update_ssh_config/
KDEVOPS_TEST_TYPES :=
KDEVOPS_TEST_TYPES += python-tests
diff --git a/scripts/workflows/generic/run_kernel_ci.sh b/scripts/workflows/generic/run_kernel_ci.sh
index 2bf14278..47c0bee1 100755
--- a/scripts/workflows/generic/run_kernel_ci.sh
+++ b/scripts/workflows/generic/run_kernel_ci.sh
@@ -239,9 +239,7 @@ kernel_ci_watchdog_loop()
fi
if [[ "$WATCHDOG_RESET_HUNG_SYSTEMS" == "y" ]]; then
for i in $(awk '{print $1}' $KERNEL_CI_WATCHDOG_RESULTS | grep -E -v "runtime|Hostname"); do
- if [[ "$CONFIG_VAGRANT" == "y" ]]; then
- sudo virsh reset vagrant_$i
- elif [[ "$CONFIG_GUESTFS" == "y" ]]; then
+ if [[ "$CONFIG_GUESTFS" == "y" ]]; then
sudo virsh reset $i
else
echo "$i : Unsupported crashy reset for this bringup configuration" >> $KERNEL_CI_WATCHDOG_FAIL_LOG
diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf
index 7a91a869..2df0dc60 100644
--- a/terraform/azure/main.tf
+++ b/terraform/azure/main.tf
@@ -93,7 +93,7 @@ resource "azurerm_linux_virtual_machine" "kdevops_vm" {
count = local.kdevops_num_boxes
# As of terraform 0.11 there is no easy way to convert a list to a map
- # for the structure we have defined for the vagrant_boxes. We can use
+ # for the structure we have defined for the nodes. We can use
# split to construct a subjset list though, and then key in with the
# target left hand value name we want to look for. On the last split we
# call always uses the second element given its a value: figure, we want
diff --git a/workflows/blktests/Kconfig b/workflows/blktests/Kconfig
index 6fea6771..c5ed2ba1 100644
--- a/workflows/blktests/Kconfig
+++ b/workflows/blktests/Kconfig
@@ -20,7 +20,6 @@ config HAVE_MIRROR_DBENCH
config BLKTESTS_DBENCH_GIT_URL
string
default DEFAULT_DBENCH_URL if !HAVE_MIRROR_DBENCH
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/dbench.git) if HAVE_MIRROR_XFSDUMP && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/dbench.git) if HAVE_MIRROR_XFSDUMP && GUESTFS
config BLKTESTS_WATCHDOG
@@ -131,10 +130,10 @@ config BLKTESTS_WATCHDOG_RESET_HUNG_SYSTEMS
have to also implement a way to try to capture kernel logs
before a reset.
- We currently only enable this for Vagrant provisioning, given we have
+ We currently only enable this for libvirt provisioning, given we have
to figure out a unified way to express a reset for cloud solution and
- also figure out a way to enable this for bare metal. For vagrant we
- currently use 'virsh reset' and so this works only if on libvirt.
+ also figure out a way to enable this for bare metal. For libvirt we
+ currently use 'virsh reset'.
endif # BLKTESTS_WATCHDOG
@@ -146,7 +145,6 @@ config HAVE_MIRROR_BLKTESTS
config BLKTESTS_GIT
string "The blktests git tree to clone"
default DEFAULT_BLKTESTS_URL if !HAVE_MIRROR_BLKTESTS
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/blktests.git) if HAVE_MIRROR_BLKTESTS && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/blktests.git) if HAVE_MIRROR_BLKTESTS && GUESTFS
help
The blktests git tree to clone.
@@ -167,7 +165,6 @@ config HAVE_MIRROR_BLKTRACE
config BLKTRACE_GIT
string "The blktrace git tree to clone"
default DEFAULT_BLKTRACE_URL if !HAVE_MIRROR_BLKTRACE
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/blktrace.git) if HAVE_MIRROR_BLKTRACE && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/blktrace.git) if HAVE_MIRROR_BLKTRACE && GUESTFS
help
The blktrace git tree to clone.
diff --git a/workflows/demos/reboot-limit/Makefile b/workflows/demos/reboot-limit/Makefile
index a6b4aaf7..5b67431d 100644
--- a/workflows/demos/reboot-limit/Makefile
+++ b/workflows/demos/reboot-limit/Makefile
@@ -7,7 +7,7 @@
# This simple workflow relies on the default setting of the variable
# KDEVOPS_NODES_TEMPLATE which to generate your target nodes. This can
-# either be used by vagrant or terraform when building the nodes it will
+# either be used by libvirt or terraform when building the nodes it will
# create for bringup. The template file relies on jinja2 templating for
# its parsing and generation and we rely on the ansible template module
# to process this template file.
diff --git a/workflows/fstests/Kconfig b/workflows/fstests/Kconfig
index fa441c3c..a878b932 100644
--- a/workflows/fstests/Kconfig
+++ b/workflows/fstests/Kconfig
@@ -324,11 +324,9 @@ config FSTESTS_GIT
string "The fstests git tree to clone"
output yaml
default DEFAULT_FSTESTS_HTTPS_URL if !GIT_ALTERNATIVES && !HAVE_MIRROR_FSTESTS
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/fstests.git) if !GIT_ALTERNATIVES && HAVE_MIRROR_FSTESTS && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/fstests.git) if !GIT_ALTERNATIVES && HAVE_MIRROR_FSTESTS && GUESTFS
default DEFAULT_FSTESTS_KDEVOPS_GITHUB_HTTPS_URL if GIT_LINUX_KDEVOPS_GITHUB && !HAVE_MIRROR_KDEVOPS_FSTESTS
default DEFAULT_FSTESTS_KDEVOPS_GITLAB_HTTPS_URL if GIT_LINUX_KDEVOPS_GITLAB && !HAVE_MIRROR_KDEVOPS_FSTESTS
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/kdevops/fstests.git) if GIT_ALTERNATIVES && HAVE_MIRROR_FSTESTS && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/kdevops/fstests.git) if GIT_ALTERNATIVES && HAVE_MIRROR_FSTESTS && GUESTFS
default "https://github.com/btrfs/fstests.git" if FSTESTS_BTRFS
help
diff --git a/workflows/fstests/expunges/6.4.0-rc2-next-20230515/xfs/unassigned/fstests-next-20230515 b/workflows/fstests/expunges/6.4.0-rc2-next-20230515/xfs/unassigned/fstests-next-20230515
deleted file mode 100644
index e1b4c8ad..00000000
--- a/workflows/fstests/expunges/6.4.0-rc2-next-20230515/xfs/unassigned/fstests-next-20230515
+++ /dev/null
@@ -1,347 +0,0 @@
-#
-# Automatically generated file; DO NOT EDIT.
-# kdevops 5.0.2-00102-g8b70127
-#
-# CONFIG_KDEVOPS_FIRST_RUN is not set
-CONFIG_DISTRO_DEBIAN=y
-
-#
-# Target architecture
-#
-CONFIG_TARGET_ARCH_X86_64=y
-# CONFIG_TARGET_ARCH_ARM64 is not set
-# CONFIG_TARGET_ARCH_PPC64LE is not set
-CONFIG_TARGET_ARCH="x86_64"
-# end of Target architecture
-
-#
-# SSH update configuration
-#
-CONFIG_KDEVOPS_SSH_CONFIG_UPDATE=y
-CONFIG_KDEVOPS_SSH_CONFIG="~/.ssh/config"
-CONFIG_KDEVOPS_SSH_CONFIG_UPDATE_STRICT=y
-CONFIG_KDEVOPS_SSH_CONFIG_UPDATE_BACKUP=y
-# end of SSH update configuration
-
-CONFIG_GIT_ALTERNATIVES=y
-CONFIG_GIT_LINUX_KDEVOPS_GITHUB=y
-# CONFIG_GIT_LINUX_KDEVOPS_GITLAB is not set
-# CONFIG_SETUP_POSTFIX_EMAIL_RELAY is not set
-# CONFIG_HYPERVISOR_TUNING is not set
-CONFIG_ENABLE_LOCAL_LINUX_MIRROR=y
-CONFIG_USE_LOCAL_LINUX_MIRROR=y
-# CONFIG_INSTALL_LOCAL_LINUX_MIRROR is not set
-
-#
-# Bring up methods
-#
-CONFIG_VAGRANT=y
-# CONFIG_TERRAFORM is not set
-# CONFIG_SKIP_BRINGUP is not set
-CONFIG_VAGRANT_LIBVIRT=y
-# CONFIG_VAGRANT_VIRTUALBOX is not set
-CONFIG_USE_VAGRANT_LIBVIRT_MIRROR=y
-# CONFIG_VAGRANT_LARGE_CPU is not set
-# CONFIG_VAGRANT_VCPUS_2 is not set
-# CONFIG_VAGRANT_VCPUS_4 is not set
-CONFIG_VAGRANT_VCPUS_8=y
-# CONFIG_VAGRANT_VCPUS_16 is not set
-# CONFIG_VAGRANT_VCPUS_32 is not set
-# CONFIG_VAGRANT_VCPUS_64 is not set
-# CONFIG_VAGRANT_VCPUS_128 is not set
-# CONFIG_VAGRANT_VCPUS_255 is not set
-CONFIG_VAGRANT_VCPUS_COUNT=8
-# CONFIG_VAGRANT_MEM_2G is not set
-# CONFIG_VAGRANT_MEM_3G is not set
-CONFIG_VAGRANT_MEM_4G=y
-# CONFIG_VAGRANT_MEM_8G is not set
-# CONFIG_VAGRANT_MEM_16G is not set
-# CONFIG_VAGRANT_MEM_32G is not set
-CONFIG_VAGRANT_MEM_MB=4096
-# CONFIG_LIBVIRT_MACHINE_TYPE_DEFAULT is not set
-CONFIG_LIBVIRT_MACHINE_TYPE_Q35=y
-CONFIG_LIBVIRT_HOST_PASSTHROUGH=y
-# CONFIG_QEMU_BUILD is not set
-# CONFIG_QEMU_USE_DEVELOPMENT_VERSION is not set
-CONFIG_QEMU_BIN_PATH_LIBVIRT="/usr/bin/qemu-system-x86_64"
-CONFIG_QEMU_INSTALL_DIR_LIBVIRT="/usr/bin"
-CONFIG_LIBVIRT_EXTRA_STORAGE_DRIVE_NVME=y
-# CONFIG_LIBVIRT_EXTRA_STORAGE_DRIVE_VIRTIO is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_DRIVE_IDE is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_512 is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_1K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_2K is not set
-CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_4K=y
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_8K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_16K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_32K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_64K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_128K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_256K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_512K is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_1M is not set
-# CONFIG_LIBVIRT_EXTRA_STORAGE_NVME_LOGICAL_BLOCK_SIZE_2M is not set
-CONFIG_LIBVIRT_STORAGE_POOL_PATH_INFER_ADVANCED=y
-# CONFIG_LIBVIRT_STORAGE_POOL_PATH_CUSTOM_CWD is not set
-# CONFIG_LIBVIRT_STORAGE_POOL_PATH_CUSTOM_DEFAULT_DISTRO is not set
-# CONFIG_LIBVIRT_STORAGE_POOL_PATH_CUSTOM_MANUAL is not set
-CONFIG_LIBVIRT_STORAGE_POOL_CREATE=y
-CONFIG_LIBVIRT_STORAGE_POOL_NAME="pool00"
-CONFIG_LIBVIRT_STORAGE_POOL_PATH_CUSTOM="/mirror/pools.d/pool00"
-CONFIG_LIBVIRT_URI_SYSTEM=y
-# CONFIG_LIBVIRT_URI_SESSION is not set
-# CONFIG_LIBVIRT_URI_CUSTOM is not set
-CONFIG_LIBVIRT_URI_PATH="qemu:///system"
-CONFIG_LIBVIRT_SYSTEM_URI_PATH="qemu:///system"
-CONFIG_LIBVIRT_QEMU_GROUP="libvirt-qemu"
-CONFIG_KDEVOPS_STORAGE_POOL_PATH="/mirror/pools.d/pool00"
-CONFIG_QEMU_BIN_PATH="/usr/bin/qemu-system-x86_64"
-CONFIG_LIBVIRT_URI="qemu:///system"
-CONFIG_LIBVIRT_SYSTEM_URI="qemu:///system"
-CONFIG_VAGRANT_DEBIAN=y
-# CONFIG_VAGRANT_OPENSUSE is not set
-# CONFIG_VAGRANT_FEDORA is not set
-# CONFIG_VAGRANT_REDHAT_GENERIC is not set
-# CONFIG_VAGRANT_KDEVOPS is not set
-# CONFIG_VAGRANT_DEBIAN_BUSTER64 is not set
-# CONFIG_VAGRANT_DEBIAN_BULLSEYE64 is not set
-CONFIG_VAGRANT_DEBIAN_TESTING64=y
-CONFIG_VAGRANT_DEBIAN_BOX_SHORT="testing64"
-CONFIG_VAGRANT_BOX="debian/testing64"
-CONFIG_VAGRANT_BOX_UPDATE_ON_BRINGUP=y
-CONFIG_VAGRANT_BOX_VERSION=""
-# CONFIG_VAGRANT_LIBVIRT_INSTALL is not set
-# CONFIG_VAGRANT_LIBVIRT_CONFIGURE is not set
-# CONFIG_VAGRANT_LIBVIRT_VERIFY is not set
-CONFIG_VAGRANT_INSTALL_PRIVATE_BOXES=y
-# CONFIG_LIBVIRT_NVME_DRIVE_FORMAT_QCOW2 is not set
-CONFIG_LIBVIRT_NVME_DRIVE_FORMAT_RAW=y
-# CONFIG_QEMU_ENABLE_NVME_ZNS is not set
-CONFIG_QEMU_NVME_ZONE_DRIVE_SIZE=102400
-CONFIG_QEMU_NVME_ZONE_ZASL=0
-CONFIG_QEMU_NVME_ZONE_SIZE="128M"
-CONFIG_QEMU_NVME_ZONE_CAPACITY="0M"
-CONFIG_QEMU_NVME_ZONE_MAX_ACTIVE=0
-CONFIG_QEMU_NVME_ZONE_MAX_OPEN=0
-CONFIG_QEMU_NVME_ZONE_PHYSICAL_BLOCK_SIZE=4096
-CONFIG_QEMU_NVME_ZONE_LOGICAL_BLOCK_SIZE=4096
-# CONFIG_QEMU_ENABLE_EXTRA_DRIVE_LARGEIO is not set
-CONFIG_QEMU_LARGEIO_DRIVE_BASE_SIZE=10240
-CONFIG_QEMU_LARGEIO_COMPAT_SIZE=512
-CONFIG_QEMU_LARGEIO_MAX_POW_LIMIT=12
-# end of Bring up methods
-
-#
-# Bring up goals
-#
-# CONFIG_KDEVOPS_TRY_REFRESH_REPOS is not set
-# CONFIG_KDEVOPS_SETUP_NFSD is not set
-# end of Bring up goals
-
-#
-# Node sysctl configuration
-#
-# CONFIG_SYSCTL_TUNING is not set
-# end of Node sysctl configuration
-
-#
-# Target workflows
-#
-CONFIG_WORKFLOWS=y
-
-#
-# Shared workflow configuration
-#
-
-#
-# Shared workflow data partition
-#
-CONFIG_WORKFLOW_DATA_DEVICE="/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_kdevops0"
-CONFIG_WORKFLOW_DATA_PATH="/data"
-CONFIG_WORKFLOW_INFER_USER_AND_GROUP=y
-# CONFIG_WORKFLOW_DATA_FSTYPE_XFS is not set
-# CONFIG_WORKFLOW_DATA_FSTYPE_EXT4 is not set
-CONFIG_WORKFLOW_DATA_FSTYPE_BTRFS=y
-CONFIG_WORKFLOW_DATA_FSTYPE="btrfs"
-CONFIG_WORKFLOW_DATA_LABEL="data"
-# end of Shared workflow data partition
-
-# CONFIG_WORKFLOW_MAKE_CMD_OVERRIDE is not set
-CONFIG_WORKFLOW_KDEVOPS_GIT="https://github.com/linux-kdevops/kdevops.git"
-CONFIG_WORKFLOW_KDEVOPS_GIT_DATA="{{data_path}}/kdevops"
-CONFIG_WORKFLOW_KDEVOPS_DIR="{{data_path}}/kdevops"
-# end of Shared workflow configuration
-
-# CONFIG_WORKFLOW_LINUX_DISTRO is not set
-CONFIG_WORKFLOW_LINUX_CUSTOM=y
-
-#
-# Get and install Linux from git
-#
-CONFIG_BOOTLINUX=y
-CONFIG_BOOTLINUX_9P=y
-
-#
-# Modify default 9p configuration
-#
-CONFIG_BOOTLINUX_9P_HOST_PATH="/home/dagmcr/d/kdevops/linux"
-CONFIG_BOOTLINUX_9P_MSIZE=131072
-CONFIG_BOOTLINUX_9P_FSDEV="kdevops_9p_fsdev"
-CONFIG_BOOTLINUX_9P_SECURITY_MODEL="none"
-CONFIG_BOOTLINUX_9P_DRIVER="virtio-9p-pci"
-CONFIG_BOOTLINUX_9P_MOUNT_TAG="kdevops_9p_bootlinux"
-# end of Modify default 9p configuration
-
-# CONFIG_BOOTLINUX_STABLE is not set
-CONFIG_BOOTLINUX_DEV=y
-CONFIG_BOOTLINUX_TREE_NEXT=y
-# CONFIG_BOOTLINUX_TREE_BTRFS_DEVEL is not set
-# CONFIG_BOOTLINUX_TREE_MCGROF_NEXT is not set
-CONFIG_BOOTLINUX_TREE_NAME="linux-next"
-CONFIG_BOOTLINUX_TREE="/mirror/linux-next.git"
-CONFIG_BOOTLINUX_TREE_REF="next-20230426"
-CONFIG_BOOTLINUX_TREE_LOCALVERSION=""
-# CONFIG_BOOTLINUX_SHALLOW_CLONE is not set
-# end of Get and install Linux from git
-
-CONFIG_WORKFLOWS_TESTS=y
-# CONFIG_WORKFLOWS_TESTS_DEMOS is not set
-CONFIG_WORKFLOWS_LINUX_TESTS=y
-CONFIG_WORKFLOWS_DEDICATED_WORKFLOW=y
-CONFIG_KDEVOPS_WORKFLOW_DEDICATE_FSTESTS=y
-# CONFIG_KDEVOPS_WORKFLOW_DEDICATE_BLKTESTS is not set
-# CONFIG_KDEVOPS_WORKFLOW_DEDICATE_CXL is not set
-# CONFIG_KDEVOPS_WORKFLOW_DEDICATE_PYNFS is not set
-# CONFIG_KDEVOPS_WORKFLOW_DEDICATE_SELFTESTS is not set
-CONFIG_KDEVOPS_WORKFLOW_ENABLE_FSTESTS=y
-
-#
-# Configure and run fstests
-#
-CONFIG_HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG=y
-CONFIG_HAVE_DISTRO_PREFERS_FSTESTS_WATCHDOG_KILL=y
-CONFIG_FSTESTS_XFS=y
-# CONFIG_FSTESTS_BTRFS is not set
-# CONFIG_FSTESTS_EXT4 is not set
-CONFIG_FSTESTS_FSTYP="xfs"
-CONFIG_FSTESTS_WATCHDOG=y
-CONFIG_FSTESTS_WATCHDOG_CHECK_TIME=5
-CONFIG_FSTESTS_WATCHDOG_MAX_NEW_TEST_TIME=60
-CONFIG_FSTESTS_WATCHDOG_HUNG_MULTIPLIER_LONG_TESTS=10
-CONFIG_FSTESTS_WATCHDOG_HUNG_FAST_TEST_MAX_TIME=5
-CONFIG_FSTESTS_WATCHDOG_KILL_TASKS_ON_HANG=y
-# CONFIG_FSTESTS_WATCHDOG_RESET_HUNG_SYSTEMS is not set
-
-#
-# Configure how to test XFS
-#
-CONFIG_HAVE_DISTRO_XFS_PREFERS_MANUAL=y
-CONFIG_HAVE_DISTRO_XFS_SUPPORTS_CRC=y
-CONFIG_HAVE_DISTRO_XFS_SUPPORTS_REFLINKS=y
-CONFIG_HAVE_DISTRO_XFS_SUPPORTS_BIGBLOCKS=y
-CONFIG_HAVE_DISTRO_XFS_SUPPORTS_EXTERNAL_LOG=y
-CONFIG_FSTESTS_XFS_MANUAL_COVERAGE=y
-CONFIG_FSTESTS_XFS_SECTION_CRC=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_ENABLED=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_512=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_1K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_2K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_4K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_8K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_16K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_32K=y
-CONFIG_FSTESTS_XFS_SECTION_NOCRC_64K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_ENABLED=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_1024=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_2K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_4K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_8K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_16K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_32K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_64K=y
-CONFIG_FSTESTS_XFS_SECTION_REFLINK_NORMAPBT=y
-CONFIG_FSTESTS_XFS_SECTION_EXTERNAL_LOGS=y
-CONFIG_FSTESTS_XFS_SECTION_LOGDEV=y
-CONFIG_FSTESTS_XFS_SECTION_RTDEV=y
-CONFIG_FSTESTS_XFS_SECTION_RTLOGDEV=y
-# end of Configure how to test XFS
-
-CONFIG_FSTESTS_GIT="https://github.com/linux-kdevops/fstests.git"
-CONFIG_FSTESTS_DATA="{{data_path}}/fstests"
-CONFIG_FSTESTS_DATA_TARGET="/var/lib/xfstests"
-CONFIG_FSTESTS_TESTDEV_SPARSEFILE_GENERATION=y
-CONFIG_FSTESTS_SPARSE_DEV="/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_kdevops1"
-# CONFIG_FSTESTS_SPARSE_XFS is not set
-CONFIG_FSTESTS_SPARSE_BTRFS=y
-# CONFIG_FSTESTS_SPARSE_EXT4 is not set
-CONFIG_FSTESTS_SPARSE_FSTYPE="btrfs"
-CONFIG_FSTESTS_SPARSE_LABEL="sparsefiles"
-CONFIG_FSTESTS_SPARSE_FILE_PATH="/media/sparsefiles"
-CONFIG_FSTESTS_SPARSE_FILE_SIZE="20G"
-CONFIG_FSTESTS_SPARSE_FILENAME_PREFIX="sparse-disk"
-CONFIG_FSTESTS_TEST_DEV="/dev/loop16"
-CONFIG_FSTESTS_TEST_LOGDEV="/dev/loop13"
-CONFIG_FSTESTS_TEST_LOGDEV_MKFS_OPTS="-lsize=1g"
-CONFIG_FSTESTS_TEST_DIR="/media/test"
-CONFIG_FSTESTS_SCRATCH_DEV_POOL="/dev/loop5 /dev/loop6 /dev/loop7 /dev/loop8 /dev/loop9 /dev/loop10 /dev/loop11 /dev/loop12"
-CONFIG_FSTESTS_SCRATCH_MNT="/media/scratch"
-CONFIG_FSTESTS_LOGWRITES_DEV="/dev/loop15"
-CONFIG_FSTESTS_SCRATCH_LOGDEV="/dev/loop15"
-CONFIG_FSTESTS_TEST_RTDEV="/dev/loop13"
-CONFIG_FSTESTS_SCRATCH_RTDEV="/dev/loop14"
-CONFIG_FSTESTS_TEST_RTLOGDEV_="/dev/loop12"
-CONFIG_FSTESTS_SCRATCH_DEV_POOL_RTLOGDEV="/dev/loop5 /dev/loop6 /dev/loop7 /dev/loop8 /dev/loop9 /dev/loop10 /dev/loop11"
-CONFIG_FSTESTS_SETUP_SYSTEM=y
-CONFIG_FSTESTS_RUN_TESTS=y
-CONFIG_FSTESTS_RUN_AUTO_GROUP_TESTS=y
-CONFIG_FSTESTS_RUN_CUSTOM_GROUP_TESTS="auto"
-# CONFIG_FSTESTS_ENABLE_RUN_CUSTOM_TESTS is not set
-CONFIG_FSTESTS_RUN_LARGE_DISK_TESTS=y
-# end of Configure and run fstests
-
-CONFIG_KDEVOPS_WORKFLOW_GIT_CLONES_KDEVOPS_GIT=y
-# end of Target workflows
-
-#
-# Kdevops configuration
-#
-CONFIG_HAVE_CUSTOM_DISTRO_HOST_PREFIX=y
-CONFIG_HAVE_DISTRO_PREFERS_CUSTOM_HOST_PREFIX=y
-CONFIG_CUSTOM_DISTRO_HOST_PREFIX="testing64"
-CONFIG_KDEVOPS_USE_DISTRO_HOSTS_PREFIX=y
-CONFIG_KDEVOPS_HOSTS_PREFIX="testing64"
-# CONFIG_KDEVOPS_BASELINE_AND_DEV is not set
-
-#
-# Ansible post-bring up provisioning configuration
-#
-CONFIG_KDEVOPS_PLAYBOOK_DIR="playbooks"
-CONFIG_KDEVOPS_ANSIBLE_PROVISION_ENABLE=y
-CONFIG_KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK="devconfig.yml"
-CONFIG_KDEVOPS_DEVCONFIG_ENABLE=y
-CONFIG_KDEVOPS_DEVCONFIG_ENABLE_CONSOLE=y
-CONFIG_KDEVOPS_DEVCONFIG_KERNEL_CONSOLE_SETTINGS="console=tty0 console=tty1 console=ttyS0,115200n8"
-CONFIG_KDEVOPS_DEVCONFIG_GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --parity=no --stop=1"
-CONFIG_KDEVOPS_GRUB_TIMEOUT=2
-CONFIG_KDEVOPS_DEVCONFIG_ENABLE_SYSTEMD_WATCHDOG=y
-CONFIG_KDEVOPS_DEVCONFIG_SYSTEMD_WATCHDOG_TIMEOUT_RUNTIME="5min"
-CONFIG_KDEVOPS_DEVCONFIG_SYSTEMD_WATCHDOG_TIMEOUT_REBOOT="10min"
-CONFIG_KDEVOPS_DEVCONFIG_SYSTEMD_WATCHDOG_TIMEOUT_KEXEC="5min"
-CONFIG_KDEVOPS_ANSIBLE_INVENTORY_FILE="hosts"
-CONFIG_KDEVOPS_PYTHON_INTERPRETER="/usr/bin/python3"
-CONFIG_KDEVOPS_PYTHON_OLD_INTERPRETER="/usr/bin/python2"
-# end of Ansible post-bring up provisioning configuration
-
-#
-# Kernel continous integration configuration
-#
-CONFIG_KERNEL_CI_DEFAULT_STEADY_STATE_GOAL=100
-CONFIG_KERNEL_CI=y
-CONFIG_KERNEL_CI_ENABLE_STEADY_STATE=y
-CONFIG_KERNEL_CI_STEADY_STATE_GOAL=100
-# CONFIG_KERNEL_CI_STEADY_STATE_INCREMENTAL is not set
-# CONFIG_KERNEL_CI_EMAIL_REPORT is not set
-# end of Kernel continous integration configuration
-# end of Kdevops configuration
diff --git a/workflows/fstests/xfs/Kconfig b/workflows/fstests/xfs/Kconfig
index 31885045..7c130345 100644
--- a/workflows/fstests/xfs/Kconfig
+++ b/workflows/fstests/xfs/Kconfig
@@ -43,7 +43,6 @@ config HAVE_MIRROR_XFSPROGS
config FSTESTS_XFS_XFSPROGS_GIT
string "The Xfsprogs git tree to clone"
default DEFAULT_XFSPROGS_URL if !HAVE_MIRROR_XFSPROGS
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/xfsprogs-dev.git) if HAVE_MIRROR_XFSPROGS && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/xfsprogs-dev.git) if HAVE_MIRROR_XFSPROGS && GUESTFS
depends on FSTESTS_XFS_BUILD_CUSTOM_XFSPROGS
help
@@ -83,7 +82,6 @@ config FSTESTS_XFSDUMP_GIT_URL
string "The xfsdump git tree to clone"
depends on FSTESTS_XFS_BUILD_XFSDUMP
default DEFAULT_XFSDUMP_URL if !HAVE_MIRROR_XFSDUMP
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/xfsdump-dev.git) if HAVE_MIRROR_XFSDUMP && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/xfsdump-dev.git) if HAVE_MIRROR_XFSDUMP && GUESTFS
help
The xfsdump git tree to clone
diff --git a/workflows/linux/Kconfig.linus b/workflows/linux/Kconfig.linus
index b673a50c..b16696a4 100644
--- a/workflows/linux/Kconfig.linus
+++ b/workflows/linux/Kconfig.linus
@@ -48,7 +48,6 @@ config BOOTLINUX_TREE_LINUS_NAME
config BOOTLINUX_TREE_LINUS_URL
string
default DEFAULT_TORVALDS_HTTPS_URL if !USE_LOCAL_LINUX_MIRROR
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/linux.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/linux.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
default "/mirror/linux.git" if USE_LIBVIRT_MIRROR && BOOTLINUX_9P
diff --git a/workflows/linux/Kconfig.mcgrof b/workflows/linux/Kconfig.mcgrof
index 811d8392..ec7ebff0 100644
--- a/workflows/linux/Kconfig.mcgrof
+++ b/workflows/linux/Kconfig.mcgrof
@@ -29,7 +29,6 @@ config BOOTLINUX_TREE_MCGROF_URL
default "/mirror/mcgrof-next.git" if BOOTLINUX_TREE_MCGROF_NEXT && USE_LIBVIRT_MIRROR && BOOTLINUX_9P
default DEFAULT_MCGROF_LINUS_GIT_URL if BOOTLINUX_TREE_MCGROF_LINUS && !USE_LOCAL_LINUX_MIRROR
default "/mirror/mcgrof-linus.git" if BOOTLINUX_TREE_MCGROF_LINUS && USE_LIBVIRT_MIRROR && BOOTLINUX_9P
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/mcgrof-linus.git) if BOOTLINUX_TREE_MCGROF_LINUS && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/mcgrof-next.git) if BOOTLINUX_TREE_MCGROF_NEXT && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
endif # BOOTLINUX_TREE_MCGROF_LINUS || BOOTLINUX_TREE_MCGROF_NEXT
diff --git a/workflows/linux/Kconfig.modules b/workflows/linux/Kconfig.modules
index 720c8db1..4dd827d2 100644
--- a/workflows/linux/Kconfig.modules
+++ b/workflows/linux/Kconfig.modules
@@ -14,7 +14,6 @@ config BOOTLINUX_TREE_MODULES_URL
string
default DEFAULT_MODULES_GIT_URL if BOOTLINUX_TREE_VFS && !USE_LOCAL_LINUX_MIRROR
default "/mirror/linux-modules.git" if BOOTLINUX_TREE_MODULES && USE_LIBVIRT_MIRROR && BOOTLINUX_9P
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/modules.git) if BOOTLINUX_TREE_MODULES && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/modules.git) if BOOTLINUX_TREE_MODULES && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
endif # BOOTLINUX_TREE_MODULES
diff --git a/workflows/linux/Kconfig.next b/workflows/linux/Kconfig.next
index abc49266..0a7ceeaf 100644
--- a/workflows/linux/Kconfig.next
+++ b/workflows/linux/Kconfig.next
@@ -10,7 +10,6 @@ config BOOTLINUX_TREE_NEXT_NAME
config BOOTLINUX_TREE_NEXT_URL
string
default DEFAULT_LINUX_NEXT_GIT_URL if !USE_LOCAL_LINUX_MIRROR
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/linux-next.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/linux-next.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
default "/mirror/linux-next.git" if USE_LIBVIRT_MIRROR && BOOTLINUX_9P
diff --git a/workflows/linux/Kconfig.stable b/workflows/linux/Kconfig.stable
index cf317b84..0ee82e96 100644
--- a/workflows/linux/Kconfig.stable
+++ b/workflows/linux/Kconfig.stable
@@ -25,7 +25,6 @@ config BOOTLINUX_TREE_STABLE_NAME
config BOOTLINUX_TREE_STABLE_URL
string
default DEFAULT_STABLE_HTTPS_URL if !USE_LOCAL_LINUX_MIRROR
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/linux-stable.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/linux-stable.git) if USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
default "/mirror/linux-stable.git" if USE_LIBVIRT_MIRROR && BOOTLINUX_9P
diff --git a/workflows/linux/Kconfig.vfs b/workflows/linux/Kconfig.vfs
index 78a41f92..5ff012b5 100644
--- a/workflows/linux/Kconfig.vfs
+++ b/workflows/linux/Kconfig.vfs
@@ -14,7 +14,6 @@ config BOOTLINUX_TREE_VFS_URL
string
default DEFAULT_VFS_GIT_URL if BOOTLINUX_TREE_VFS && !USE_LOCAL_LINUX_MIRROR
default "/mirror/vfs.git" if BOOTLINUX_TREE_VFS && USE_LIBVIRT_MIRROR && BOOTLINUX_9P
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/vfs.git) if BOOTLINUX_TREE_VFS && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/vfs.git) if BOOTLINUX_TREE_MCGROF_NEXT && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
endif # BOOTLINUX_TREE_VFS
diff --git a/workflows/linux/Kconfig.xfs b/workflows/linux/Kconfig.xfs
index 91817cf2..129d178c 100644
--- a/workflows/linux/Kconfig.xfs
+++ b/workflows/linux/Kconfig.xfs
@@ -14,7 +14,6 @@ config BOOTLINUX_TREE_XFS_URL
string
default DEFAULT_XFS_GIT_URL if BOOTLINUX_TREE_XFS && !USE_LOCAL_LINUX_MIRROR
default "/mirror/xfs-linux.git" if BOOTLINUX_TREE_XFS && USE_LIBVIRT_MIRROR && BOOTLINUX_9P
- default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_VAGRANT) /mirror/xfs-linux.git) if BOOTLINUX_TREE_XFS && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && VAGRANT
default $(shell, scripts/append-makefile-vars.sh git:// $(KDEVOPS_DEFAULT_BRIDGE_IP_GUESTFS) /mirror/xfs-linux.git) if BOOTLINUX_TREE_XFS && USE_LIBVIRT_MIRROR && !BOOTLINUX_9P && GUESTFS
endif # BOOTLINUX_TREE_XFS
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 08/33] terraform: Clean up the destroy tasks
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (6 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 07/33] Remove all remaining Vagrant references from codebase Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 09/33] Switch to the cloud.terraform.terraform module Luis Chamberlain
` (25 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Originally these tasks needed to run for each inventory host, but
as it turns out, they run once on the controller.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 4 ----
scripts/terraform.Makefile | 2 +-
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index 3cf195bd..2e8762ab 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -59,8 +59,6 @@
- ssh
- name: Remove the ephemeral ssh config file on the control host
- delegate_to: localhost
- run_once: true
ansible.builtin.file:
path: "{{ kdevops_ssh_config }}"
state: absent
@@ -68,8 +66,6 @@
- destroy
- name: Destroy terraform resources
- delegate_to: localhost
- run_once: true
community.general.terraform:
project_path: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
state: absent
diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile
index 865c84c3..91106b5b 100644
--- a/scripts/terraform.Makefile
+++ b/scripts/terraform.Makefile
@@ -117,7 +117,7 @@ status_terraform:
destroy_terraform:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
- --connection=local -i $(KDEVOPS_HOSTFILE) \
+ --connection=local --inventory localhost, \
playbooks/terraform.yml --tags destroy \
--extra-vars=@./extra_vars.yaml
$(Q)rm -f $(KDEVOPS_PROVISIONED_SSH) $(KDEVOPS_PROVISIONED_DEVCONFIG)
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 09/33] Switch to the cloud.terraform.terraform module
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (7 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 08/33] terraform: Clean up the destroy tasks Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 10/33] terraform: Make use of the new "terraform_output" module Luis Chamberlain
` (24 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
It appears that community.general.terraform is planned for
deprecation, so switch over to it's replacement.
Bonus: The replacement module has a "binary_path" parameter that
might facilitate the use of OpenTofu instead of terraform.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index 2e8762ab..dd478a04 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -1,9 +1,9 @@
---
- name: Bring up terraform resources
- community.general.terraform:
+ cloud.terraform.terraform:
+ force_init: true
project_path: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
state: present
- force_init: true
tags:
- bringup
@@ -66,9 +66,9 @@
- destroy
- name: Destroy terraform resources
- community.general.terraform:
+ cloud.terraform.terraform:
+ force_init: true
project_path: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
state: absent
- force_init: true
tags:
- destroy
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 10/33] terraform: Make use of the new "terraform_output" module
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (8 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 09/33] Switch to the cloud.terraform.terraform module Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 11/33] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
` (23 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
The cloud.terraform collection has a terraform_output module that
can replace the invocation of the terraform command. This has two
main benefits:
1. It simplifies the loop over the IP map.
2. It prepares for the possibility of using OpenTofu instead of
the terraform module.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 21 +++++++------------
.../roles/terraform/templates/ssh_config.j2 | 4 ++--
2 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index dd478a04..942efb7e 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -10,32 +10,25 @@
- name: Retrieve the controller_ip_map from terraform
delegate_to: localhost
run_once: true
- ansible.builtin.command:
- chdir: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
- cmd: "terraform output -json controller_ip_map"
+ cloud.terraform.terraform_output:
+ format: json
+ name: controller_ip_map
+ project_path: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
register: terraform_output
- changed_when: false
- tags:
- - ssh
-
-- name: Convert the retrieved controller_ip_map into a dictionary
- delegate_to: localhost
- run_once: true
- ansible.builtin.set_fact:
- controller_ip_map: "{{ terraform_output.stdout | from_json }}"
tags:
- ssh
- name: Add each target node's ssh Host entry on the control host
delegate_to: localhost
- throttle: 1
+ run_once: true
ansible.builtin.blockinfile:
block: "{{ lookup('template', 'ssh_config.j2') }}"
create: true
dest: "{{ kdevops_ssh_config }}"
insertafter: "EOF"
- marker: "# {mark} host configuration for {{ inventory_hostname }}"
+ marker: "# {mark} host configuration for {{ item.key }}"
mode: "u=rw,g=r,o=r"
+ loop: "{{ terraform_output.value | dict2items }}"
tags:
- ssh
diff --git a/playbooks/roles/terraform/templates/ssh_config.j2 b/playbooks/roles/terraform/templates/ssh_config.j2
index 3f6d6191..5e8adf02 100644
--- a/playbooks/roles/terraform/templates/ssh_config.j2
+++ b/playbooks/roles/terraform/templates/ssh_config.j2
@@ -1,5 +1,5 @@
-Host {{ inventory_hostname }} {{ controller_ip_map[inventory_hostname] }}
- HostName {{ controller_ip_map[inventory_hostname] }}
+Host {{ item.key }} {{ item.value }}
+ HostName {{ item.value }}
User {{ kdevops_terraform_ssh_config_user }}
Port 22
IdentityFile {{ kdevops_terraform_ssh_config_privkey_file }}
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 11/33] terraform: Move "wait_for_connection" out of the terraform playbook
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (9 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 10/33] terraform: Make use of the new "terraform_output" module Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 12/33] terraform: Remove "delegate_to: localhost" Luis Chamberlain
` (22 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Refactor: The "wait_for_connection" task is the only one in the
terraform playbook that targets all hosts. The other tasks are all
done on the localhost.
Subsequent patches will replace "delegate_to: localhost" with the
usual role-wide setting.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 6 ------
scripts/terraform.Makefile | 1 +
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index 942efb7e..b50b417d 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -45,12 +45,6 @@
tags:
- ssh
-- name: Wait for target nodes to become reachable
- ansible.builtin.wait_for_connection:
- timeout: 60
- tags:
- - ssh
-
- name: Remove the ephemeral ssh config file on the control host
ansible.builtin.file:
path: "{{ kdevops_ssh_config }}"
diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile
index 91106b5b..f2f6fe0a 100644
--- a/scripts/terraform.Makefile
+++ b/scripts/terraform.Makefile
@@ -110,6 +110,7 @@ $(KDEVOPS_PROVISIONED_SSH):
-i $(KDEVOPS_HOSTFILE) \
playbooks/terraform.yml --tags ssh \
--extra-vars=@./extra_vars.yaml
+ $(Q)ansible $(ANSIBLE_VERBOSE) -i hosts all -m wait_for_connection
$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
status_terraform:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 12/33] terraform: Remove "delegate_to: localhost"
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (10 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 11/33] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 13/33] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
` (21 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Refactor: All tasks in this playbook execute only on the controller.
This enables the role definition and Makefile to be simplified.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 6 ------
playbooks/terraform.yml | 3 ++-
scripts/terraform.Makefile | 6 +++---
3 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index b50b417d..b7ae0f0a 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -8,8 +8,6 @@
- bringup
- name: Retrieve the controller_ip_map from terraform
- delegate_to: localhost
- run_once: true
cloud.terraform.terraform_output:
format: json
name: controller_ip_map
@@ -19,8 +17,6 @@
- ssh
- name: Add each target node's ssh Host entry on the control host
- delegate_to: localhost
- run_once: true
ansible.builtin.blockinfile:
block: "{{ lookup('template', 'ssh_config.j2') }}"
create: true
@@ -33,8 +29,6 @@
- ssh
- name: Ensure the Include directive is present on the controller
- delegate_to: localhost
- run_once: true
ansible.builtin.blockinfile:
path: "{{ sshconfig }}"
insertbefore: BOF
diff --git a/playbooks/terraform.yml b/playbooks/terraform.yml
index 15872a61..61dc76c2 100644
--- a/playbooks/terraform.yml
+++ b/playbooks/terraform.yml
@@ -1,6 +1,7 @@
---
- name: Provision target nodes with terraform
gather_facts: false
- hosts: all
+ connection: local
+ hosts: localhost
roles:
- role: terraform
diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile
index f2f6fe0a..adfd359c 100644
--- a/scripts/terraform.Makefile
+++ b/scripts/terraform.Makefile
@@ -101,13 +101,13 @@ ANSIBLE_EXTRA_ARGS += $(TERRAFORM_EXTRA_VARS)
bringup_terraform:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
- --connection=local --inventory localhost, \
+ --inventory localhost, \
playbooks/terraform.yml --tags bringup \
--extra-vars=@./extra_vars.yaml
$(KDEVOPS_PROVISIONED_SSH):
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
- -i $(KDEVOPS_HOSTFILE) \
+ --inventory localhost, \
playbooks/terraform.yml --tags ssh \
--extra-vars=@./extra_vars.yaml
$(Q)ansible $(ANSIBLE_VERBOSE) -i hosts all -m wait_for_connection
@@ -118,7 +118,7 @@ status_terraform:
destroy_terraform:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
- --connection=local --inventory localhost, \
+ --inventory localhost, \
playbooks/terraform.yml --tags destroy \
--extra-vars=@./extra_vars.yaml
$(Q)rm -f $(KDEVOPS_PROVISIONED_SSH) $(KDEVOPS_PROVISIONED_DEVCONFIG)
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 13/33] terraform: Replace scripts/status_terraform.sh
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (11 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 12/33] terraform: Remove "delegate_to: localhost" Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 14/33] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
` (20 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Move the functionality into the terraform playbook so it can use the
cloud.terraform.terraform module.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/terraform/tasks/main.yml | 31 ++++++++++++++++++++++++
scripts/status_terraform.sh | 17 -------------
scripts/terraform.Makefile | 5 +++-
3 files changed, 35 insertions(+), 18 deletions(-)
delete mode 100755 scripts/status_terraform.sh
diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml
index b7ae0f0a..a64c93c6 100644
--- a/playbooks/roles/terraform/tasks/main.yml
+++ b/playbooks/roles/terraform/tasks/main.yml
@@ -39,6 +39,37 @@
tags:
- ssh
+- name: Report terraform status
+ tags:
+ - status
+ block:
+ - name: Retrieve the controller_ip_map from terraform
+ cloud.terraform.terraform_output:
+ format: json
+ name: controller_ip_map
+ project_path: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
+ register: terraform_output
+
+ - name: End play -- terraform state file is empty or missing
+ ansible.builtin.meta: end_play
+ when:
+ - terraform_output.warnings is defined
+
+ - name: Count active resources
+ ansible.builtin.command:
+ cmd: "terraform state list"
+ chdir: "{{ topdir_path }}/terraform/{{ kdevops_terraform_provider }}"
+ register: terraform_state
+ changed_when: false
+
+ - name: Show status
+ ansible.builtin.debug:
+ msg: "Active resources: {{ terraform_state.stdout_lines | length }}"
+
+ - name: Show controller IP map
+ ansible.builtin.debug:
+ var: terraform_output.value
+
- name: Remove the ephemeral ssh config file on the control host
ansible.builtin.file:
path: "{{ kdevops_ssh_config }}"
diff --git a/scripts/status_terraform.sh b/scripts/status_terraform.sh
deleted file mode 100755
index 9b016498..00000000
--- a/scripts/status_terraform.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: copyleft-next-0.3.1
-
-[ -z "${TOPDIR}" ] && TOPDIR='.'
-source ${TOPDIR}/.config
-source ${TOPDIR}/scripts/lib.sh
-
-cd ${TOPDIR}/terraform/$1
-terraform refresh > /dev/null
-COUNT=`terraform state list | wc -l`
-if [[ ${COUNT} -eq 1 ]]; then
- echo "There is 1 active terraform resource on '$1'."
-else
- echo "There are ${COUNT} active terraform resources on '$1'."
-fi
-terraform output controller_ip_map
-exit 0
diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile
index adfd359c..09aafdc1 100644
--- a/scripts/terraform.Makefile
+++ b/scripts/terraform.Makefile
@@ -114,7 +114,10 @@ $(KDEVOPS_PROVISIONED_SSH):
$(Q)touch $(KDEVOPS_PROVISIONED_SSH)
status_terraform:
- $(Q)scripts/status_terraform.sh $(KDEVOPS_CLOUD_PROVIDER)
+ $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
+ --inventory localhost, \
+ playbooks/terraform.yml --tags status \
+ --extra-vars=@./extra_vars.yaml
destroy_terraform:
$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 14/33] Kconfig: Convert the 9p option to a choice menu
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (12 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 13/33] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 15/33] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
` (19 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
I'm about to add a third method for building the kernel that
excludes the use of 9p. As a pre-requisite to that change, wrap the
two existing options with a choice menu, since they are exclusive
of each other.
This introduces a boolean for non-9p build configurations, to be
used in subsequent patches.
No behavior change is expected.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
workflows/linux/Kconfig | 55 +++++++++++++++++++++++++++++-----------
workflows/linux/Makefile | 1 -
2 files changed, 40 insertions(+), 16 deletions(-)
diff --git a/workflows/linux/Kconfig b/workflows/linux/Kconfig
index 183ac777..e198005c 100644
--- a/workflows/linux/Kconfig
+++ b/workflows/linux/Kconfig
@@ -31,27 +31,52 @@ config BOOTLINUX_PURE_IOMAP
bool "Use a kernel configuration which disables buffer heads"
default HAVE_SUPPORTS_PURE_IOMAP
depends on BOOTLINUX_HAS_PURE_IOMAP_CONFIG
- help
- This will let you choose use 9p to build Linux. What this does is
endif # HAVE_SUPPORTS_PURE_IOMAP
+choice
+ prompt "Kernel build location"
+ default BOOTLINUX_TARGETS
+ help
+ Choose where you want to compile the test kernel. The help
+ for the choices below explain how each alternative works.
+
+config BOOTLINUX_TARGETS
+ bool "Target nodes"
+ output yaml
+ help
+ Choosing this option clones and builds the test kernel on
+ each target node, then installs the test kernel and
+ reboots each target node. These actions are triggered by
+ using "make linux".
+
+ This choice is best when the target node configuration is
+ vastly different than the controller node's configuration.
+ It is the only choice available when the target nodes
+ reside in the cloud.
+
config BOOTLINUX_9P
- bool "Use 9p to build Linux"
+ bool "Controller node"
+ output yaml
depends on LIBVIRT && !GUESTFS_LACKS_9P
- default LIBVIRT
help
- This will let you choose use 9p to build Linux. What this does is
- use your localhost to git clone Linux under the assumption your
- host is more powerful than the guests you are going to instantiate.
- The localhost then will be used to build Linux using all threads
- possible. The installation of Linux on the guest is done only with
- the install target, the guest gets read-only access to the host's
- path where Linux is closed using 9p.
-
- You should not have to modify any default 9p settings except maybe
- where your localhost path for your git tree is. You should keep
- the other settings as-is unless you know what you are doing.
+ Choosing this option clones and builds the test kernel on
+ the Ansible controller node. Once the test kernel is
+ built, the target nodes access the controller node's build
+ directory via 9p to install the test kernel, then each
+ target node is rebooted into the new kernel. These actions
+ are triggered by using "make linux".
+
+ This is quick and efficient (since the kernel is built only
+ once, and the build has access to all compute resources on
+ the controller node). The source tree and compiled artifacts
+ are not removed when the test runners are destroyed, so
+ subsequent builds can be fast.
+
+ However, 9p is available only when using a local
+ virtualization method such as libvirt.
+
+endchoice
if BOOTLINUX_9P
diff --git a/workflows/linux/Makefile b/workflows/linux/Makefile
index f68c0905..f5bc6490 100644
--- a/workflows/linux/Makefile
+++ b/workflows/linux/Makefile
@@ -42,7 +42,6 @@ endif
LINUX_CLONE_DEFAULT_TYPE := linux-clone-clients
ifeq (y,$(CONFIG_BOOTLINUX_9P))
-BOOTLINUX_ARGS += bootlinux_9p=True
BOOTLINUX_ARGS += bootlinux_9p_host_path='$(subst ",,$(CONFIG_BOOTLINUX_9P_HOST_PATH))'
BOOTLINUX_ARGS += bootlinux_9p_msize='$(subst ",,$(CONFIG_BOOTLINUX_9P_MSIZE))'
BOOTLINUX_ARGS += bootlinux_9p_fsdev='$(subst ",,$(CONFIG_BOOTLINUX_9P_FSDEV))'
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 15/33] bootlinux: fix making 9p default if using libvirt
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (13 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 14/33] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 16/33] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
` (18 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Commit a5092b07fe ("Kconfig: Convert the 9p option to a choice menu")
enhanced the semantics to use a choice instead of just bools to
determine how we are going to build the kernel. But it ended up making
the target option to build the kernel and clone it the default even if
you are using libvirt. Fix this so that we only select the target
if we're not using libvirt. This upkeeps previous behaviour and
expectations.
Fixes: a5092b07fe ("Kconfig: Convert the 9p option to a choice menu")
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
workflows/linux/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/workflows/linux/Kconfig b/workflows/linux/Kconfig
index e198005c..27cba0a9 100644
--- a/workflows/linux/Kconfig
+++ b/workflows/linux/Kconfig
@@ -36,7 +36,8 @@ endif # HAVE_SUPPORTS_PURE_IOMAP
choice
prompt "Kernel build location"
- default BOOTLINUX_TARGETS
+ default BOOTLINUX_TARGETS if !LIBVIRT || GUESTFS_LACKS_9P
+ default BOOTLINUX_9P if LIBVIRT && !GUESTFS_LACKS_9P
help
Choose where you want to compile the test kernel. The help
for the choices below explain how each alternative works.
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 16/33] bootlinux: Relocate tasks that select a kernel .config
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (14 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 15/33] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 17/33] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
` (17 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Move the tasks that select the kernel .config to build into a
subrole. A dynamic "include_tasks" is used so that eventually these
tasks can be completely skipped when the bootlinux playbook is asked
only to install kernel packages.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/bootlinux/tasks/config.yml | 89 +++++++++++++++++++++
playbooks/roles/bootlinux/tasks/main.yml | 91 +---------------------
2 files changed, 92 insertions(+), 88 deletions(-)
create mode 100644 playbooks/roles/bootlinux/tasks/config.yml
diff --git a/playbooks/roles/bootlinux/tasks/config.yml b/playbooks/roles/bootlinux/tasks/config.yml
new file mode 100644
index 00000000..5cf03e7f
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/config.yml
@@ -0,0 +1,89 @@
+---
+- name: Check whether config-kdevops exists
+ stat:
+ path: "{{ role_path }}/templates/config-kdevops"
+ register: config_kdevops
+ delegate_to: localhost
+
+- name: Found config-kdevops, using it for template
+ set_fact:
+ linux_config: "config-kdevops"
+ when: config_kdevops.stat.exists
+
+- name: No config-kdevops, looking for {{ target_linux_config }}
+ set_fact:
+ linux_config: "{{ target_linux_config }}"
+ when: not config_kdevops.stat.exists
+
+- name: Check if specific kernel config exists for {{ target_linux_ref }}
+ stat:
+ path: "{{ role_path }}/templates/{{ target_linux_config }}"
+ register: kernel_config
+ delegate_to: localhost
+
+- name: Find all linux-next configs if a your custom config-kdevops and ref config was not found
+ find:
+ paths: "{{ role_path }}/templates"
+ patterns: "config-next*"
+ file_type: file
+ recurse: no
+ register: found_configs
+ delegate_to: localhost
+ when:
+ - not config_kdevops.stat.exists
+ - not kernel_config.stat.exists
+
+- name: Extract the date from the filenames
+ set_fact:
+ configs_with_dates: "{{ configs_with_dates | default([]) + [{'file': item.path, 'date': (item.path | regex_search('config-next-(\\d{8})')).split('-')[-1]}] }}"
+ loop: "{{ found_configs.files }}"
+ when:
+ - not config_kdevops.stat.exists
+ - not kernel_config.stat.exists
+ - item.path is search('config-next-(\\d{8})')
+ no_log: true
+ delegate_to: localhost
+
+- name: Sort configs based on date extracted from filename
+ set_fact:
+ sorted_configs: "{{ configs_with_dates | selectattr('date', 'defined') | sort(attribute='date', reverse=True) | map(attribute='file') | list }}"
+ when:
+ - not config_kdevops.stat.exists
+ - not kernel_config.stat.exists
+ - configs_with_dates | length > 0
+ delegate_to: localhost
+
+- name: Set latest linux-next config if configs are found
+ set_fact:
+ latest_linux_next_config: "{{ sorted_configs[0] }}"
+ when:
+ - not config_kdevops.stat.exists and not kernel_config.stat.exists
+ - sorted_configs | length > 0
+ delegate_to: localhost
+
+- name: Use the specific kernel config or fallback to the latest linux-next
+ set_fact:
+ linux_config: "{{ target_linux_config | default('') if kernel_config.stat.exists else (latest_linux_next_config | default('') | basename) }}"
+ when:
+ - not config_kdevops.stat.exists
+ - not kernel_config.stat.exists
+ - latest_linux_next_config is defined
+ delegate_to: localhost
+
+- name: Verify config used
+ debug:
+ msg: "Linux config used: {{ role_path }}/templates/{{ linux_config }}"
+ delegate_to: localhost
+
+- name: Verify that the Linux configuration file exists
+ stat:
+ path: "{{ role_path }}/templates/{{ linux_config }}"
+ register: config_stat
+ delegate_to: localhost
+ when: linux_config is defined
+
+- name: Fail if the configuration file does not exist
+ fail:
+ msg: "The configuration file {{ role_path }}/templates/{{ linux_config }} does not exist."
+ when: not config_stat.stat.exists
+ delegate_to: localhost
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 7671389c..9c43c1e5 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -223,94 +223,9 @@
run_once: true
delegate_to: localhost
-- name: Check whether config-kdevops exists
- stat:
- path: "{{ role_path }}/templates/config-kdevops"
- register: config_kdevops
- delegate_to: localhost
-
-- name: Found config-kdevops, using it for template
- set_fact:
- linux_config: "config-kdevops"
- when: config_kdevops.stat.exists
-
-- name: No config-kdevops, looking for {{ target_linux_config }}
- set_fact:
- linux_config: "{{ target_linux_config }}"
- when: not config_kdevops.stat.exists
-
-- name: Check if specific kernel config exists for {{ target_linux_ref }}
- stat:
- path: "{{ role_path }}/templates/{{ target_linux_config }}"
- register: kernel_config
- delegate_to: localhost
-
-- name: Find all linux-next configs if a your custom config-kdevops and ref config was not found
- find:
- paths: "{{ role_path }}/templates"
- patterns: "config-next*"
- file_type: file
- recurse: no
- register: found_configs
- delegate_to: localhost
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
-
-- name: Extract the date from the filenames
- set_fact:
- configs_with_dates: "{{ configs_with_dates | default([]) + [{'file': item.path, 'date': (item.path | regex_search('config-next-(\\d{8})')).split('-')[-1]}] }}"
- loop: "{{ found_configs.files }}"
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - item.path is search('config-next-(\\d{8})')
- no_log: true
- delegate_to: localhost
-
-- name: Sort configs based on date extracted from filename
- set_fact:
- sorted_configs: "{{ configs_with_dates | selectattr('date', 'defined') | sort(attribute='date', reverse=True) | map(attribute='file') | list }}"
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - configs_with_dates | length > 0
- delegate_to: localhost
-
-- name: Set latest linux-next config if configs are found
- set_fact:
- latest_linux_next_config: "{{ sorted_configs[0] }}"
- when:
- - not config_kdevops.stat.exists and not kernel_config.stat.exists
- - sorted_configs | length > 0
- delegate_to: localhost
-
-- name: Use the specific kernel config or fallback to the latest linux-next
- set_fact:
- linux_config: "{{ target_linux_config | default('') if kernel_config.stat.exists else (latest_linux_next_config | default('') | basename) }}"
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - latest_linux_next_config is defined
- delegate_to: localhost
-
-- name: Verify config used
- debug:
- msg: "Linux config used: {{ role_path }}/templates/{{ linux_config }}"
- delegate_to: localhost
-
-- name: Verify that the Linux configuration file exists
- stat:
- path: "{{ role_path }}/templates/{{ linux_config }}"
- register: config_stat
- delegate_to: localhost
- when: linux_config is defined
-
-- name: Fail if the configuration file does not exist
- fail:
- msg: "The configuration file {{ role_path }}/templates/{{ linux_config }} does not exist."
- when: not config_stat.stat.exists
- delegate_to: localhost
+- name: Select the .config file for building the test kernel
+ ansible.builtin.include_tasks:
+ file: "{{ role_path }}/tasks/config.yml"
- name: Copy configuration for Linux {{ target_linux_tree }} to the target nodes
template:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 17/33] bootlinux: Simplify tasks that select the kernel .config to build
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (15 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 16/33] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 18/33] bootlinux: Select the kernel .config earlier Luis Chamberlain
` (16 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Simplify/modernize the selection tasks by using convenience
functions that are built into Ansible. I'm hoping this makes the
tasks easier to read, easier to maintain, and faster.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/bootlinux/tasks/config.yml | 109 ++++++---------------
1 file changed, 29 insertions(+), 80 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/config.yml b/playbooks/roles/bootlinux/tasks/config.yml
index 5cf03e7f..c1ecbaed 100644
--- a/playbooks/roles/bootlinux/tasks/config.yml
+++ b/playbooks/roles/bootlinux/tasks/config.yml
@@ -1,89 +1,38 @@
---
-- name: Check whether config-kdevops exists
- stat:
- path: "{{ role_path }}/templates/config-kdevops"
- register: config_kdevops
- delegate_to: localhost
-
-- name: Found config-kdevops, using it for template
- set_fact:
- linux_config: "config-kdevops"
- when: config_kdevops.stat.exists
-
-- name: No config-kdevops, looking for {{ target_linux_config }}
- set_fact:
- linux_config: "{{ target_linux_config }}"
- when: not config_kdevops.stat.exists
+- name: Initialize the kernel config file names search list
+ ansible.builtin.set_fact:
+ search_list:
+ - "{{ role_path }}/templates/config-kdevops"
+ - "{{ role_path }}/templates/{{ target_linux_config }}"
-- name: Check if specific kernel config exists for {{ target_linux_ref }}
- stat:
- path: "{{ role_path }}/templates/{{ target_linux_config }}"
- register: kernel_config
+- name: Find all linux-next kernel config files
delegate_to: localhost
-
-- name: Find all linux-next configs if a your custom config-kdevops and ref config was not found
- find:
+ run_once: true
+ ansible.builtin.find:
paths: "{{ role_path }}/templates"
- patterns: "config-next*"
+ patterns: "config-next-*"
file_type: file
- recurse: no
- register: found_configs
- delegate_to: localhost
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
-
-- name: Extract the date from the filenames
- set_fact:
- configs_with_dates: "{{ configs_with_dates | default([]) + [{'file': item.path, 'date': (item.path | regex_search('config-next-(\\d{8})')).split('-')[-1]}] }}"
- loop: "{{ found_configs.files }}"
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - item.path is search('config-next-(\\d{8})')
- no_log: true
- delegate_to: localhost
-
-- name: Sort configs based on date extracted from filename
- set_fact:
- sorted_configs: "{{ configs_with_dates | selectattr('date', 'defined') | sort(attribute='date', reverse=True) | map(attribute='file') | list }}"
+ register: linux_next_configs
+
+- name: Build a list of linux-next kernel config file names
+ ansible.builtin.set_fact:
+ config_file_names: "{{ config_file_names | default([]) + [item.path] }}"
+ loop: "{{ linux_next_configs.files }}"
+ loop_control:
+ label: "Adding {{ item.path | basename }}..."
when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - configs_with_dates | length > 0
- delegate_to: localhost
+ - linux_next_configs.matched > 0
-- name: Set latest linux-next config if configs are found
- set_fact:
- latest_linux_next_config: "{{ sorted_configs[0] }}"
+- name: Append the name of the most recent linux-next kernel config to the search list
+ vars:
+ config_file_names_sorted: "{{ config_file_names | community.general.version_sort }}"
+ ansible.builtin.set_fact:
+ search_list: "{{ search_list + [config_file_names_sorted[-1]] }}"
when:
- - not config_kdevops.stat.exists and not kernel_config.stat.exists
- - sorted_configs | length > 0
- delegate_to: localhost
-
-- name: Use the specific kernel config or fallback to the latest linux-next
- set_fact:
- linux_config: "{{ target_linux_config | default('') if kernel_config.stat.exists else (latest_linux_next_config | default('') | basename) }}"
- when:
- - not config_kdevops.stat.exists
- - not kernel_config.stat.exists
- - latest_linux_next_config is defined
- delegate_to: localhost
+ - linux_next_configs.matched > 0
-- name: Verify config used
- debug:
- msg: "Linux config used: {{ role_path }}/templates/{{ linux_config }}"
- delegate_to: localhost
-
-- name: Verify that the Linux configuration file exists
- stat:
- path: "{{ role_path }}/templates/{{ linux_config }}"
- register: config_stat
- delegate_to: localhost
- when: linux_config is defined
-
-- name: Fail if the configuration file does not exist
- fail:
- msg: "The configuration file {{ role_path }}/templates/{{ linux_config }} does not exist."
- when: not config_stat.stat.exists
- delegate_to: localhost
+- name: Set the .config file for building the test kernel
+ ansible.builtin.set_fact:
+ linux_config: "{{ item | basename }}"
+ with_first_found:
+ - files: "{{ search_list }}"
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 18/33] bootlinux: Select the kernel .config earlier
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (16 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 17/33] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 19/33] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
` (15 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
The tasks that select the kernel .config are common to both building
via 9p and building on the test runners. In order to refactor the
build tasks, move the common portion (selecting the kernel .config)
earlier in the bootlinux playbook.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/bootlinux/tasks/main.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 9c43c1e5..6a0563b1 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -10,6 +10,10 @@
skip: true
tags: vars
+- name: Select the .config file for building the test kernel
+ ansible.builtin.include_tasks:
+ file: "{{ role_path }}/tasks/config.yml"
+
# Distro specific
- name: Install dependencies to build and install the Linux kernel
ansible.builtin.import_tasks:
@@ -223,10 +227,6 @@
run_once: true
delegate_to: localhost
-- name: Select the .config file for building the test kernel
- ansible.builtin.include_tasks:
- file: "{{ role_path }}/tasks/config.yml"
-
- name: Copy configuration for Linux {{ target_linux_tree }} to the target nodes
template:
src: "{{ linux_config }}"
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 19/33] bootlinux: Move 9p build tasks to a subrole
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (17 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 18/33] bootlinux: Select the kernel .config earlier Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 20/33] bootlinux: Move tasks for building on target nodes " Luis Chamberlain
` (14 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever, Luis Chamberlain
From: Chuck Lever <chuck.lever@oracle.com>
Most everything that is marked with "when: bootlinux_9p|bool" is
moved to a separate .yml file and then dynamically included when
bootlinux_9p is true. This makes it easy to identify 9p-specific
tasks and ensures they are completely disabled and skipped when
other build modes are in use.
Ensure we also have the make command installed and since we're
going to defer git clone even if 9p is enabled until later ensure
the linux directory exists before bringup.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
playbooks/roles/bootlinux/defaults/main.yml | 6 -
playbooks/roles/bootlinux/tasks/build/9p.yml | 205 ++++++++++++++++
.../install-minimal-deps/debian/main.yml | 19 ++
.../tasks/install-minimal-deps/main.yml | 15 ++
.../install-minimal-deps/redhat/main.yml | 27 +++
.../tasks/install-minimal-deps/suse/main.yml | 13 +
playbooks/roles/bootlinux/tasks/main.yml | 228 +-----------------
.../roles/guestfs/tasks/bringup/main.yml | 10 +
8 files changed, 297 insertions(+), 226 deletions(-)
create mode 100644 playbooks/roles/bootlinux/tasks/build/9p.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/debian/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/redhat/main.yml
create mode 100644 playbooks/roles/bootlinux/tasks/install-minimal-deps/suse/main.yml
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index 614f7cd8..4a1ad72e 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -41,12 +41,6 @@ uninstall_kernel_enable: False
bootlinux_b4_am_this_host: False
bootlinux_9p: False
-bootlinux_9p_host_path: "/dev/null"
-bootlinux_9p_msize: 0
-bootlinux_9p_fsdev: "ignore"
-bootlinux_9p_mount_tag: "ignore"
-bootlinux_9p_security_model: "none"
-bootlinux_9p_driver: "virtio-9p-pci"
kdevops_workflow_enable_cxl: False
diff --git a/playbooks/roles/bootlinux/tasks/build/9p.yml b/playbooks/roles/bootlinux/tasks/build/9p.yml
new file mode 100644
index 00000000..bc2a66b6
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/build/9p.yml
@@ -0,0 +1,205 @@
+---
+- name: Install dependencies to build the Linux kernel
+ delegate_to: localhost
+ run_once: true
+ ansible.builtin.import_tasks:
+ file: install-deps/main.yml
+
+- name: Install b4 on host
+ become: yes
+ become_method: sudo
+ pip:
+ name:
+ - b4
+ when:
+ - target_linux_install_b4 is defined
+ - target_linux_install_b4
+ - ansible_facts['os_family']|lower != 'debian'
+ run_once: true
+ delegate_to: localhost
+
+- name: Add safe exception for a clone
+ command: "git config --global --add safe.directory {{ target_linux_git }}"
+ tags: [ 'clone']
+ when:
+ - target_linux_git is string and target_linux_git.startswith('/')
+ run_once: true
+ delegate_to: localhost
+
+- name: Check if target directory exists when using 9p and Linux CLI was set
+ stat:
+ path: "{{ bootlinux_9p_host_path }}"
+ register: target_directory_stat
+ run_once: true
+ delegate_to: localhost
+ when:
+ - bootlinux_tree_set_by_cli|bool
+
+- name: Fail if target directory does not exist when using 9p and Linux CLI was set
+ fail:
+ msg: "The target directory {{ bootlinux_9p_host_path }} does not exist."
+ run_once: true
+ delegate_to: localhost
+ when:
+ - bootlinux_tree_set_by_cli|bool
+ - not target_directory_stat.stat.exists
+
+- name: git clone {{ target_linux_tree }} on the control node
+ git:
+ repo: "{{ target_linux_git }}"
+ dest: "{{ bootlinux_9p_host_path }}"
+ update: yes
+ depth: "{{ target_linux_shallow_depth }}"
+ version: "{{ target_linux_ref }}"
+ retries: 3
+ delay: 5
+ register: result
+ until: not result.failed
+ tags: [ 'clone']
+ when:
+ - not bootlinux_tree_set_by_cli|bool
+ run_once: true
+ delegate_to: localhost
+
+- name: Copy kernel delta if requested on the control node
+ template:
+ src: "{{ target_linux_extra_patch }}"
+ dest: "{{ bootlinux_9p_host_path }}/{{ target_linux_extra_patch }}"
+ mode: 0644
+ when:
+ - target_linux_extra_patch is defined
+ run_once: true
+ delegate_to: localhost
+
+- name: Apply kernel delta if requested on the control node
+ command: "git am {{ target_linux_extra_patch }}"
+ args:
+ chdir: "{{ bootlinux_9p_host_path }}"
+ when:
+ - target_linux_extra_patch is defined
+ run_once: true
+ delegate_to: localhost
+
+- name: Variable values
+ debug:
+ msg: "{{ target_linux_apply_patch_message_id }}"
+ when:
+ - target_linux_apply_patch_message_id is defined
+
+- name: Apply message patch set if requested on the control node
+ shell: b4 am -o - {{target_linux_apply_patch_message_id}} | git am
+ args:
+ chdir: "{{ bootlinux_9p_host_path }}"
+ when:
+ - target_linux_apply_patch_message_id is defined
+ - target_linux_apply_patch_message_id | length > 0
+ - bootlinux_b4_am_this_host|bool
+ run_once: true
+ delegate_to: localhost
+
+- name: Copy configuration for Linux {{ target_linux_tree }} on the control node
+ template:
+ src: "{{ linux_config }}"
+ dest: "{{ bootlinux_9p_host_path }}/.config"
+ mode: 0644
+ run_once: true
+ delegate_to: localhost
+
+- name: Set kernel localversion if requested on the control node
+ shell: "echo {{ target_linux_localversion }} > {{ bootlinux_9p_host_path }}/localversion"
+ when:
+ - target_linux_localversion is defined and target_linux_localversion != ""
+ run_once: true
+ delegate_to: localhost
+
+- name: Configure Linux {{ target_linux_tree }} on the control node
+ shell: |
+ set -o pipefail
+ yes "" | make oldconfig
+ register: configure_done
+ changed_when: configure_done.rc == 0 or configure_done.rc == 141
+ failed_when: configure_done.rc != 0 and configure_done.rc != 141
+ args:
+ chdir: "{{ bootlinux_9p_host_path }}"
+ executable: /bin/bash
+ run_once: true
+ delegate_to: localhost
+
+- name: Get nproc on the control node
+ command: "{{ num_jobs }}"
+ tags: [ 'build-linux', 'cxl-build' ]
+ register: nproc_9p
+ run_once: true
+ delegate_to: localhost
+
+- name: Get kernelversion
+ make:
+ chdir: "{{ bootlinux_9p_host_path }}"
+ target: kernelversion
+ register: target_linux_kernelversion
+ tags: [ 'build-linux' ]
+ when:
+ - target_linux_kernelrelease | length > 0
+ run_once: true
+ delegate_to: localhost
+
+- name: Generate user kernelrelease {{ target_linux_kernelversion.stdout }}-{{ target_linux_kernelrelease }}
+ set_fact:
+ target_user_kernelrelease: "{{ target_linux_kernelversion.stdout }}-{{ target_linux_kernelrelease }}"
+ tags: [ 'build-linux' ]
+ when:
+ - target_linux_kernelrelease | length > 0
+ run_once: true
+ delegate_to: localhost
+
+- name: Build {{ target_linux_tree }} {{ target_user_kernelrelease }} on the control node using {{ nproc_9p.stdout }} threads
+ make:
+ jobs: "{{ nproc_9p.stdout }}"
+ chdir: "{{ bootlinux_9p_host_path }}"
+ params:
+ KERNELRELEASE={{ target_user_kernelrelease }}
+ tags: [ 'build-linux' ]
+ when:
+ - target_linux_kernelrelease | length > 0
+ run_once: true
+ delegate_to: localhost
+
+- name: Build {{ target_linux_tree }} {{ target_user_kernelrelease }} on the control node using {{ nproc_9p.stdout }} threads
+ make:
+ jobs: "{{ nproc_9p.stdout }}"
+ chdir: "{{ bootlinux_9p_host_path }}"
+ tags: [ 'build-linux' ]
+ when:
+ - target_linux_kernelrelease | length == 0
+ run_once: true
+ delegate_to: localhost
+
+- name: Build {{ target_linux_tree }} cxl_test on the control node using {{ nproc_9p.stdout }} threads
+ make:
+ jobs: "{{ nproc_9p.stdout }}"
+ chdir: "{{ bootlinux_9p_host_path }}"
+ params:
+ M: "tools/testing/cxl"
+ tags: [ 'build-linux', 'cxl-build' ]
+ when:
+ - bootlinux_cxl_test|bool
+ run_once: true
+ delegate_to: localhost
+
+- name: See if snake-oil cert file is present on host
+ stat:
+ path: "{{ bootlinux_9p_host_path }}/certs/signing_key.pem"
+ register: snaik_oil_file_9p
+ tags: [ 'build-linux' ]
+ run_once: true
+ delegate_to: localhost
+
+- name: Ensure we allow world to read the snake oil in case of NFS or 9p read only usage
+ file:
+ path: "{{ bootlinux_9p_host_path }}/certs/signing_key.pem"
+ mode: "0755"
+ tags: [ 'build-linux' ]
+ when:
+ - snaik_oil_file_9p.stat.exists
+ run_once: true
+ delegate_to: localhost
diff --git a/playbooks/roles/bootlinux/tasks/install-minimal-deps/debian/main.yml b/playbooks/roles/bootlinux/tasks/install-minimal-deps/debian/main.yml
new file mode 100644
index 00000000..9fd6834f
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/install-minimal-deps/debian/main.yml
@@ -0,0 +1,19 @@
+---
+# Install minimal dependencies needed for kernel installation on Debian
+# This is used when bootlinux_9p is enabled and the build happens on the host
+
+- name: Update apt cache
+ become: yes
+ become_method: sudo
+ apt:
+ update_cache: yes
+
+- name: Install minimal build tools for kernel installation
+ become: yes
+ become_method: sudo
+ apt:
+ name:
+ - make
+ - gcc
+ - kmod
+ state: present
\ No newline at end of file
diff --git a/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml b/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
new file mode 100644
index 00000000..d1e9f675
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/install-minimal-deps/main.yml
@@ -0,0 +1,15 @@
+---
+- name: Debian-specific minimal setup
+ ansible.builtin.import_tasks: debian/main.yml
+ when:
+ - ansible_os_family == "Debian"
+
+- name: SuSE-specific minimal setup
+ ansible.builtin.import_tasks: suse/main.yml
+ when:
+ - ansible_os_family == "Suse"
+
+- name: Red Hat-specific minimal setup
+ ansible.builtin.import_tasks: redhat/main.yml
+ when:
+ - ansible_os_family == "RedHat"
\ No newline at end of file
diff --git a/playbooks/roles/bootlinux/tasks/install-minimal-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-minimal-deps/redhat/main.yml
new file mode 100644
index 00000000..c5cd6fbf
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/install-minimal-deps/redhat/main.yml
@@ -0,0 +1,27 @@
+---
+# Install minimal dependencies needed for kernel installation on Red Hat
+# This is used when bootlinux_9p is enabled and the build happens on the host
+
+- name: Install minimal build tools for kernel installation
+ become: yes
+ become_method: sudo
+ yum:
+ name:
+ - make
+ - gcc
+ - kmod
+ state: present
+ when:
+ - ansible_facts['distribution_major_version']|int < 8
+
+- name: Install minimal build tools for kernel installation (dnf)
+ become: yes
+ become_method: sudo
+ dnf:
+ name:
+ - make
+ - gcc
+ - kmod
+ state: present
+ when:
+ - ansible_facts['distribution_major_version']|int >= 8
\ No newline at end of file
diff --git a/playbooks/roles/bootlinux/tasks/install-minimal-deps/suse/main.yml b/playbooks/roles/bootlinux/tasks/install-minimal-deps/suse/main.yml
new file mode 100644
index 00000000..a17768f9
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/install-minimal-deps/suse/main.yml
@@ -0,0 +1,13 @@
+---
+# Install minimal dependencies needed for kernel installation on SUSE
+# This is used when bootlinux_9p is enabled and the build happens on the host
+
+- name: Install minimal build tools for kernel installation
+ become: yes
+ become_method: sudo
+ zypper:
+ name:
+ - make
+ - gcc
+ - kmod-compat
+ state: present
\ No newline at end of file
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 6a0563b1..e908f313 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -19,13 +19,13 @@
ansible.builtin.import_tasks:
file: install-deps/main.yml
-- name: Install dependencies to build the Linux kernel
- delegate_to: localhost
- run_once: true
+# When using 9P builds, we still need make on the guest for modules_install
+- name: Install essential build tools for 9P builds
ansible.builtin.import_tasks:
- file: install-deps/main.yml
+ file: install-minimal-deps/main.yml
when:
- bootlinux_9p|bool
+ - not workflow_linux_packaged|bool
# We do this regardless of what distro you use
- name: Install b4
@@ -39,20 +39,6 @@
- target_linux_install_b4
- ansible_facts['os_family']|lower != 'debian'
-- name: Install b4 on host
- become: yes
- become_method: sudo
- pip:
- name:
- - b4
- when:
- - target_linux_install_b4 is defined
- - target_linux_install_b4
- - bootlinux_9p|bool
- - ansible_facts['os_family']|lower != 'debian'
- run_once: true
- delegate_to: localhost
-
- name: Set bootlinux_b4_am_this_host as a fact for dev hosts only
set_fact:
bootlinux_b4_am_this_host: "{{ ansible_hostname | regex_search('^.*-dev$') is not none }}"
@@ -68,9 +54,7 @@
- include_role:
name: create_data_partition
-# Distro agnostic stuff to build and boot Linux goes below
-
-- name: Mount bootlinux 9p and add to fstab if it does not exist
+- name: Mount bootlinux 9p on each target node
become: yes
become_flags: 'su - -c'
become_method: sudo
@@ -84,34 +68,11 @@
when:
- bootlinux_9p|bool
-- name: Add safe exception for a clone
- command: "git config --global --add safe.directory {{ target_linux_git }}"
- tags: [ 'clone']
- when:
- - bootlinux_9p|bool
- - target_linux_git is string and target_linux_git.startswith('/')
- run_once: true
- delegate_to: localhost
-
-- name: Check if target directory exists when using 9p and Linux CLI was set
- stat:
- path: "{{ bootlinux_9p_host_path }}"
- register: target_directory_stat
- run_once: true
- delegate_to: localhost
- when:
- - bootlinux_9p|bool
- - bootlinux_tree_set_by_cli|bool
-
-- name: Fail if target directory does not exist when using 9p and Linux CLI was set
- fail:
- msg: "The target directory {{ bootlinux_9p_host_path }} does not exist."
- run_once: true
- delegate_to: localhost
+- name: Build the Linux kernel on the controller host
+ ansible.builtin.include_tasks:
+ file: "{{ role_path }}/tasks/build/9p.yml"
when:
- bootlinux_9p|bool
- - bootlinux_tree_set_by_cli|bool
- - not target_directory_stat.stat.exists
- name: git clone {{ target_linux_tree }} on the target nodes
git:
@@ -128,24 +89,6 @@
when:
- not bootlinux_9p|bool
-- name: git clone {{ target_linux_tree }} on the control node
- git:
- repo: "{{ target_linux_git }}"
- dest: "{{ bootlinux_9p_host_path }}"
- update: yes
- depth: "{{ target_linux_shallow_depth }}"
- version: "{{ target_linux_ref }}"
- retries: 3
- delay: 5
- register: result
- until: not result.failed
- tags: [ 'clone']
- when:
- - bootlinux_9p|bool
- - not bootlinux_tree_set_by_cli|bool
- run_once: true
- delegate_to: localhost
-
- name: Copy kernel delta if requested on the target nodes
template:
src: "{{ target_linux_extra_patch }}"
@@ -157,17 +100,6 @@
- not bootlinux_9p|bool
- target_linux_extra_patch is defined
-- name: Copy kernel delta if requested on the control node
- template:
- src: "{{ target_linux_extra_patch }}"
- dest: "{{ bootlinux_9p_host_path }}/{{ target_linux_extra_patch }}"
- mode: 0644
- when:
- - bootlinux_9p|bool
- - target_linux_extra_patch is defined
- run_once: true
- delegate_to: localhost
-
- name: Apply kernel delta if requested on the target nodes
command: "git am {{ target_linux_extra_patch }}"
args:
@@ -176,16 +108,6 @@
- not bootlinux_9p|bool
- target_linux_extra_patch is defined
-- name: Apply kernel delta if requested on the control node
- command: "git am {{ target_linux_extra_patch }}"
- args:
- chdir: "{{ bootlinux_9p_host_path }}"
- when:
- - bootlinux_9p|bool
- - target_linux_extra_patch is defined
- run_once: true
- delegate_to: localhost
-
- name: Set git user name and email if needed
shell: |
if ! $(git config --get user.email) ; then
@@ -215,18 +137,6 @@
- target_linux_apply_patch_message_id | length > 0
- bootlinux_b4_am_this_host|bool
-- name: Apply message patch set if requested on the control node
- shell: b4 am -o - {{target_linux_apply_patch_message_id}} | git am
- args:
- chdir: "{{ bootlinux_9p_host_path }}"
- when:
- - bootlinux_9p|bool
- - target_linux_apply_patch_message_id is defined
- - target_linux_apply_patch_message_id | length > 0
- - bootlinux_b4_am_this_host|bool
- run_once: true
- delegate_to: localhost
-
- name: Copy configuration for Linux {{ target_linux_tree }} to the target nodes
template:
src: "{{ linux_config }}"
@@ -237,30 +147,12 @@
when:
- not bootlinux_9p|bool
-- name: Copy configuration for Linux {{ target_linux_tree }} on the control node
- template:
- src: "{{ linux_config }}"
- dest: "{{ bootlinux_9p_host_path }}/.config"
- mode: 0644
- when:
- - bootlinux_9p|bool
- run_once: true
- delegate_to: localhost
-
- name: Set kernel localversion if requested on the target nodes
shell: "echo {{ target_linux_localversion }} > {{ target_linux_dir_path }}/localversion"
when:
- not bootlinux_9p|bool
- target_linux_localversion is defined and target_linux_localversion != ""
-- name: Set kernel localversion if requested on the control node
- shell: "echo {{ target_linux_localversion }} > {{ bootlinux_9p_host_path }}/localversion"
- when:
- - bootlinux_9p|bool
- - target_linux_localversion is defined and target_linux_localversion != ""
- run_once: true
- delegate_to: localhost
-
- name: Configure Linux {{ target_linux_tree }} on the target nodes
shell: |
set -o pipefail
@@ -274,21 +166,6 @@
when:
- not bootlinux_9p|bool
-- name: Configure Linux {{ target_linux_tree }} on the control node
- shell: |
- set -o pipefail
- yes "" | make oldconfig
- register: configure_done
- changed_when: configure_done.rc == 0 or configure_done.rc == 141
- failed_when: configure_done.rc != 0 and configure_done.rc != 141
- args:
- chdir: "{{ bootlinux_9p_host_path }}"
- executable: /bin/bash
- when:
- - bootlinux_9p|bool
- run_once: true
- delegate_to: localhost
-
- name: Build {{ target_linux_tree }} on the target nodes
command: "{{ target_linux_make_cmd }}"
register: build
@@ -327,95 +204,6 @@
- not bootlinux_9p|bool
- snaik_oil_file.stat.exists
-- name: Get nproc on the control node
- command: "{{ num_jobs }}"
- tags: [ 'build-linux', 'cxl-build' ]
- register: nproc_9p
- when:
- - bootlinux_9p|bool
- run_once: true
- delegate_to: localhost
-
-- name: Get kernelversion
- make:
- chdir: "{{ bootlinux_9p_host_path }}"
- target: kernelversion
- register: target_linux_kernelversion
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- - target_linux_kernelrelease | length > 0
- run_once: true
- delegate_to: localhost
-
-- name: Generate user kernelrelease {{ target_linux_kernelversion.stdout }}-{{ target_linux_kernelrelease }}
- set_fact:
- target_user_kernelrelease: "{{ target_linux_kernelversion.stdout }}-{{ target_linux_kernelrelease }}"
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- - target_linux_kernelrelease | length > 0
- run_once: true
- delegate_to: localhost
-
-- name: Build {{ target_linux_tree }} {{ target_user_kernelrelease }} on the control node using {{ nproc_9p.stdout }} threads
- make:
- jobs: "{{ nproc_9p.stdout }}"
- chdir: "{{ bootlinux_9p_host_path }}"
- params:
- KERNELRELEASE={{ target_user_kernelrelease }}
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- - target_linux_kernelrelease | length > 0
- run_once: true
- delegate_to: localhost
-
-- name: Build {{ target_linux_tree }} {{ target_user_kernelrelease }} on the control node using {{ nproc_9p.stdout }} threads
- make:
- jobs: "{{ nproc_9p.stdout }}"
- chdir: "{{ bootlinux_9p_host_path }}"
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- - target_linux_kernelrelease | length == 0
- run_once: true
- delegate_to: localhost
-
-- name: Build {{ target_linux_tree }} cxl_test on the control node using {{ nproc_9p.stdout }} threads
- make:
- jobs: "{{ nproc_9p.stdout }}"
- chdir: "{{ bootlinux_9p_host_path }}"
- params:
- M: "tools/testing/cxl"
- tags: [ 'build-linux', 'cxl-build' ]
- when:
- - bootlinux_9p|bool
- - bootlinux_cxl_test|bool
- run_once: true
- delegate_to: localhost
-
-- name: See if snake-oil cert file is present on host
- stat:
- path: "{{ bootlinux_9p_host_path }}/certs/signing_key.pem"
- register: snaik_oil_file_9p
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- run_once: true
- delegate_to: localhost
-
-- name: Ensure we allow world to read the snake oil in case of NFS or 9p read only usage
- file:
- path: "{{ bootlinux_9p_host_path }}/certs/signing_key.pem"
- mode: "0755"
- tags: [ 'build-linux' ]
- when:
- - bootlinux_9p|bool
- - snaik_oil_file_9p.stat.exists
- run_once: true
- delegate_to: localhost
-
- name: Run uname before
command: "uname -r"
register: uname_cmd_before
diff --git a/playbooks/roles/guestfs/tasks/bringup/main.yml b/playbooks/roles/guestfs/tasks/bringup/main.yml
index 6d819006..af95c5db 100644
--- a/playbooks/roles/guestfs/tasks/bringup/main.yml
+++ b/playbooks/roles/guestfs/tasks/bringup/main.yml
@@ -127,6 +127,16 @@
when:
- passthrough_devices.matched > 0
+- name: Ensure 9P host directory exists before bringing nodes on libvirt
+ file:
+ path: "{{ bootlinux_9p_host_path }}"
+ state: directory
+ mode: '0755'
+ run_once: true
+ delegate_to: localhost
+ when:
+ - bootlinux_9p|bool
+
- name: Boot each target node
community.libvirt.virt:
name: "{{ inventory_hostname }}"
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 20/33] bootlinux: Move tasks for building on target nodes to a subrole
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (18 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 19/33] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 21/33] bootlinux: Clean up a grub set-up task Luis Chamberlain
` (13 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Most everything that is marked with "when: not bootlinux_9p|bool" is
moved to a separate .yml file and then dynamically included when
bootlinux_targets is true. This makes it easy to identify tasks that
are specific to building on the target nodes and ensures those tasks
are completely disabled and skipped when other build modes are in
use.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../roles/bootlinux/tasks/build/targets.yml | 125 +++++++++++++++++
playbooks/roles/bootlinux/tasks/main.yml | 132 +-----------------
2 files changed, 129 insertions(+), 128 deletions(-)
create mode 100644 playbooks/roles/bootlinux/tasks/build/targets.yml
diff --git a/playbooks/roles/bootlinux/tasks/build/targets.yml b/playbooks/roles/bootlinux/tasks/build/targets.yml
new file mode 100644
index 00000000..36339876
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/build/targets.yml
@@ -0,0 +1,125 @@
+---
+- name: Install b4
+ become: yes
+ become_method: sudo
+ pip:
+ name:
+ - b4
+ when:
+ - target_linux_install_b4 is defined
+ - target_linux_install_b4
+ - ansible_facts['os_family']|lower != 'debian'
+
+- name: git clone {{ target_linux_tree }} on the target nodes
+ git:
+ repo: "{{ target_linux_git }}"
+ dest: "{{ target_linux_dir_path }}"
+ update: yes
+ depth: "{{ target_linux_shallow_depth }}"
+ version: "{{ target_linux_ref }}"
+ retries: 3
+ delay: 5
+ register: result
+ until: not result.failed
+ tags: [ 'clone']
+
+- name: Copy kernel delta if requested on the target nodes
+ template:
+ src: "{{ target_linux_extra_patch }}"
+ dest: "{{ target_linux_dir_path }}/{{ target_linux_extra_patch }}"
+ owner: "{{ data_user }}"
+ group: "{{ data_group }}"
+ mode: 0644
+ when:
+ - target_linux_extra_patch is defined
+
+- name: Apply kernel delta if requested on the target nodes
+ command: "git am {{ target_linux_extra_patch }}"
+ args:
+ chdir: "{{ target_linux_dir_path }}"
+ when:
+ - target_linux_extra_patch is defined
+
+- name: Set git user name and email if needed
+ shell: |
+ if ! $(git config --get user.email) ; then
+ git config --global user.email user@example.com
+ fi
+ if ! $(git config --get user.name) ; then
+ git config --global user.name user
+ fi
+ when:
+ - target_linux_apply_patch_message_id is defined
+ - target_linux_apply_patch_message_id | length > 0
+ - bootlinux_b4_am_this_host|bool
+
+- name: Variable values
+ debug:
+ msg: "{{ target_linux_apply_patch_message_id }}"
+ when:
+ - target_linux_apply_patch_message_id is defined
+
+- name: Apply message patch set if requested on the target nodes
+ shell: b4 am -o - {{target_linux_apply_patch_message_id}} | git am
+ args:
+ chdir: "{{ target_linux_dir_path }}"
+ when:
+ - target_linux_apply_patch_message_id is defined
+ - target_linux_apply_patch_message_id | length > 0
+ - bootlinux_b4_am_this_host|bool
+
+- name: Copy configuration for Linux {{ target_linux_tree }} to the target nodes
+ template:
+ src: "{{ linux_config }}"
+ dest: "{{ target_linux_dir_path }}/.config"
+ owner: "{{ data_user }}"
+ group: "{{ data_group }}"
+ mode: 0644
+
+- name: Set kernel localversion if requested on the target nodes
+ shell: "echo {{ target_linux_localversion }} > {{ target_linux_dir_path }}/localversion"
+ when:
+ - target_linux_localversion is defined and target_linux_localversion != ""
+
+- name: Configure Linux {{ target_linux_tree }} on the target nodes
+ shell: |
+ set -o pipefail
+ yes "" | make oldconfig
+ register: configure_done
+ changed_when: configure_done.rc == 0 or configure_done.rc == 141
+ failed_when: configure_done.rc != 0 and configure_done.rc != 141
+ args:
+ chdir: "{{ target_linux_dir_path }}"
+ executable: /bin/bash
+
+- name: Build {{ target_linux_tree }} on the target nodes
+ command: "{{ target_linux_make_cmd }}"
+ register: build
+ changed_when: "build.rc == 0"
+ args:
+ chdir: "{{ target_linux_dir_path }}"
+ tags: [ 'build-linux' ]
+
+- name: Build {{ target_linux_tree }} cxl_test on the target nodes
+ command: "{{ target_linux_make_cmd }} M=tools/testing/cxl"
+ register: build_cxl_test
+ changed_when: "build_cxl_test.rc == 0"
+ args:
+ chdir: "{{ target_linux_dir_path }}"
+ tags: [ 'build-linux', 'cxl-build' ]
+ when:
+ - bootlinux_cxl_test|bool
+
+- name: See if snake-oil cert file is present on client
+ stat:
+ path: "{{ target_linux_dir_path }}/certs/signing_key.pem"
+ register: snaik_oil_file
+ tags: [ 'build-linux' ]
+
+- name: Ensure we allow world to read the snake oil in case of NFS or 9p read only usage
+ file:
+ path: "{{ target_linux_dir_path }}/certs/signing_key.pem"
+ mode: "0755"
+ tags: [ 'build-linux' ]
+ when:
+ - snaik_oil_file.stat.exists
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index e908f313..62a081a9 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -74,135 +74,11 @@
when:
- bootlinux_9p|bool
-- name: git clone {{ target_linux_tree }} on the target nodes
- git:
- repo: "{{ target_linux_git }}"
- dest: "{{ target_linux_dir_path }}"
- update: yes
- depth: "{{ target_linux_shallow_depth }}"
- version: "{{ target_linux_ref }}"
- retries: 3
- delay: 5
- register: result
- until: not result.failed
- tags: [ 'clone']
- when:
- - not bootlinux_9p|bool
-
-- name: Copy kernel delta if requested on the target nodes
- template:
- src: "{{ target_linux_extra_patch }}"
- dest: "{{ target_linux_dir_path }}/{{ target_linux_extra_patch }}"
- owner: "{{ data_user }}"
- group: "{{ data_group }}"
- mode: 0644
- when:
- - not bootlinux_9p|bool
- - target_linux_extra_patch is defined
-
-- name: Apply kernel delta if requested on the target nodes
- command: "git am {{ target_linux_extra_patch }}"
- args:
- chdir: "{{ target_linux_dir_path }}"
- when:
- - not bootlinux_9p|bool
- - target_linux_extra_patch is defined
-
-- name: Set git user name and email if needed
- shell: |
- if ! $(git config --get user.email) ; then
- git config --global user.email user@example.com
- fi
- if ! $(git config --get user.name) ; then
- git config --global user.name user
- fi
- when:
- - target_linux_apply_patch_message_id is defined
- - target_linux_apply_patch_message_id | length > 0
- - bootlinux_b4_am_this_host|bool
-
-- name: Variable values
- debug:
- msg: "{{ target_linux_apply_patch_message_id }}"
- when:
- - target_linux_apply_patch_message_id is defined
-
-- name: Apply message patch set if requested on the target nodes
- shell: b4 am -o - {{target_linux_apply_patch_message_id}} | git am
- args:
- chdir: "{{ target_linux_dir_path }}"
- when:
- - not bootlinux_9p|bool
- - target_linux_apply_patch_message_id is defined
- - target_linux_apply_patch_message_id | length > 0
- - bootlinux_b4_am_this_host|bool
-
-- name: Copy configuration for Linux {{ target_linux_tree }} to the target nodes
- template:
- src: "{{ linux_config }}"
- dest: "{{ target_linux_dir_path }}/.config"
- owner: "{{ data_user }}"
- group: "{{ data_group }}"
- mode: 0644
- when:
- - not bootlinux_9p|bool
-
-- name: Set kernel localversion if requested on the target nodes
- shell: "echo {{ target_linux_localversion }} > {{ target_linux_dir_path }}/localversion"
- when:
- - not bootlinux_9p|bool
- - target_linux_localversion is defined and target_linux_localversion != ""
-
-- name: Configure Linux {{ target_linux_tree }} on the target nodes
- shell: |
- set -o pipefail
- yes "" | make oldconfig
- register: configure_done
- changed_when: configure_done.rc == 0 or configure_done.rc == 141
- failed_when: configure_done.rc != 0 and configure_done.rc != 141
- args:
- chdir: "{{ target_linux_dir_path }}"
- executable: /bin/bash
- when:
- - not bootlinux_9p|bool
-
-- name: Build {{ target_linux_tree }} on the target nodes
- command: "{{ target_linux_make_cmd }}"
- register: build
- changed_when: "build.rc == 0"
- args:
- chdir: "{{ target_linux_dir_path }}"
- tags: [ 'build-linux' ]
- when:
- - not bootlinux_9p|bool
-
-- name: Build {{ target_linux_tree }} cxl_test on the target nodes
- command: "{{ target_linux_make_cmd }} M=tools/testing/cxl"
- register: build_cxl_test
- changed_when: "build_cxl_test.rc == 0"
- args:
- chdir: "{{ target_linux_dir_path }}"
- tags: [ 'build-linux', 'cxl-build' ]
- when:
- - not bootlinux_9p|bool
- - bootlinux_cxl_test|bool
-
-- name: See if snake-oil cert file is present on client
- stat:
- path: "{{ target_linux_dir_path }}/certs/signing_key.pem"
- register: snaik_oil_file
- tags: [ 'build-linux' ]
- when:
- - not bootlinux_9p|bool
-
-- name: Ensure we allow world to read the snake oil in case of NFS or 9p read only usage
- file:
- path: "{{ target_linux_dir_path }}/certs/signing_key.pem"
- mode: "0755"
- tags: [ 'build-linux' ]
+- name: Build the Linux kernel on the target nodes
+ ansible.builtin.include_tasks:
+ file: "{{ role_path }}/tasks/build/targets.yml"
when:
- - not bootlinux_9p|bool
- - snaik_oil_file.stat.exists
+ - bootlinux_targets|bool
- name: Run uname before
command: "uname -r"
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 21/33] bootlinux: Clean up a grub set-up task
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (19 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 20/33] bootlinux: Move tasks for building on target nodes " Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 22/33] bootlinux: Harden update-grub/install.yml Luis Chamberlain
` (12 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
The "target_kernel" variable seems to be unused, so remove it.
Address several ansible-lint complaints:
- command-instead-of-shell
- fqcn[action-core]: Use FQCN for builtin module actions (shell).
- jinja[spacing]: Jinja2 spacing could be improved
- name[template]: Jinja templates should only be at the end of 'name'
- no-changed-when
- schema[tasks]: 'become_method' must be one of the currently available values
- yaml[line-length]: Line too long (176 > 160 characters)
- yaml[truthy]: Truthy value should be one of [false, true]
- yaml[brackets]: Too many spaces inside brackets
- fqcn[action-core]: Use FQCN for builtin module actions (set_fact).
Note: The preferred way to select a shell script and run it on a
managed system is to use the template module to copy the selected
script to each target host, and then use the Ansible scripts module
to run it. That could be for another day.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../bootlinux/tasks/update-grub/install.yml | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index 907f0a18..8402c09b 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -131,16 +131,19 @@
# is either you do the work to enhance the heuristic or live happy with the
# assumption that grub2's default of picking the latest kernel is the best
# option.
-- name: Try to find your target kernel's GRUB boot entry number now that the menu is flattened for {{ target_linux_ref }} using inferred KERNELRELEASE {{ kernelrelease.stdout}}
- become: yes
+- name: Determine the target kernel's GRUB boot entry number
+ # noqa: command-instead-of-shell
+ tags:
+ - saved
+ become: true
become_flags: 'su - -c'
- become_method: sudo
- shell: " {{ determine_default_kernel_id }} "
- vars:
- target_kernel: "{{ target_linux_ref | replace('v', '') }}"
+ become_method: ansible.builtin.sudo
+ ansible.builtin.shell:
+ cmd: "{{ determine_default_kernel_id }}"
register: grub_boot_number_cmd
- tags: [ 'saved' ]
- when: kernel_release_file.stat.exists
+ changed_when: false
+ when:
+ - kernel_release_file.stat.exists
- name: Obtain command to set default kernel to boot
set_fact:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 22/33] bootlinux: Harden update-grub/install.yml
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (20 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 21/33] bootlinux: Clean up a grub set-up task Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 23/33] Add a guest/instance for building the test kernel Luis Chamberlain
` (11 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever, Luis Chamberlain
From: Chuck Lever <chuck.lever@oracle.com>
After the kernel_release_file variable is set, ensure that
subsequent tasks check whether the release file exists so
they don't crap out.
Address some ansible-lint complaints:
- fqcn[action-core]: Use FQCN for builtin module actions (set_fact).
- fqcn[action-core]: Use FQCN for builtin module actions (stat).
- name[template]: Jinja templates should only be at the end of 'name'
- command-instead-of-shell: Use shell only when shell functionality is required.
- fqcn[action-core]: Use FQCN for builtin module actions (shell).
- no-changed-when: Commands should not change things if nothing needs doing.
- fqcn[action-core]: Use FQCN for builtin module actions (set_fact).
- fqcn[action-core]: Use FQCN for builtin module actions (set_fact).
To address "command-instead-of-shell", replace
shell: cat {{ kernelrelease_file }}"
with the Ansible slurp module to pull the kernel release name
directly into a simple string variable.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
.../bootlinux/tasks/update-grub/install.yml | 83 ++++++++++++++-----
1 file changed, 64 insertions(+), 19 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index 8402c09b..a10064ee 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -93,39 +93,76 @@
tags: [ 'uninstall-linux', 'manual-update-grub' ]
import_tasks: update-grub/main.yml
-- name: Set file used to extract KERNELRELEASE variable
- set_fact:
+- name: Set the pathname used to extract the kernel release
+ tags:
+ - vars
+ ansible.builtin.set_fact:
kernelrelease_file: "{{ target_linux_dir_path }}/include/config/kernel.release"
- tags: vars
-- name: Check if {{ kernelrelease_file }} exists
- stat:
+- name: Stat {{ kernelrelease_file }}
+ tags:
+ - vars
+ ansible.builtin.stat:
+ get_checksum: false
+ get_mime: false
path: "{{ kernelrelease_file }}"
register: kernel_release_file
- tags: vars
-- name: Get Linux build KERNELRELEASE varible which is set in include/config/kernel.release
- shell: cat {{ kernelrelease_file }}
- register: kernelrelease
- when: kernel_release_file.stat.exists
+- name: Slurp {{ kernelrelease_file }}
+ tags:
+ - vars
+ ansible.builtin.slurp:
+ src: "{{ kernelrelease_file }}"
+ register: slurped_kernel_release
+ when:
+ - kernel_release_file.stat.exists
+
+- name: Set default kernelrelease if not determined
+ ansible.builtin.set_fact:
+ kernelrelease: "unknown"
+ when:
+ - kernelrelease is not defined
-- name: Construct command line to determine default kernel ID
- set_fact:
+- name: Get the kernel release of the kernel to be installed
+ tags:
+ - vars
+ ansible.builtin.set_fact:
+ kernelrelease: "{{ slurped_kernel_release.content | b64decode | trim }}"
+ when:
+ - kernel_release_file.stat.exists
+
+- name: Construct the command line to determine the default boot entry
+ tags:
+ - saved
+ ansible.builtin.set_fact:
determine_default_kernel_id: >-
awk -F\' '/menuentry / {print $2}'
/boot/grub/grub.cfg | awk '{print NR-1" ... "$0}' |
- grep {{ kernelrelease.stdout }} | head -1 | awk '{print $1}'
+ grep {{ kernelrelease }} | head -1 | awk '{print $1}'
when:
- ansible_facts['os_family']|lower != 'redhat' or ansible_facts['distribution_major_version'] | int < 8
+ - kernel_release_file is defined
+ - kernel_release_file.stat is defined
+ - kernel_release_file.stat.exists
+ - kernelrelease is defined
+ - kernelrelease != "unknown"
+ - ansible_os_family != "RedHat" or ansible_distribution_major_version | int < 8
-- name: Construct command line to determine default kernel ID for RHEL >= 8
- set_fact:
+- name: Construct the command line to determine default boot entry for RHEL >= 8
+ tags:
+ - saved
+ ansible.builtin.set_fact:
determine_default_kernel_id: >-
for f in $(ls -1 /boot/loader/entries/*.conf); do
cat $f;
- done | grep title | awk '{ gsub("title ", "", $0); print }' | grep '{{ kernelrelease.stdout }}';
+ done | grep title | awk '{ gsub("title ", "", $0); print }' | grep '{{ kernelrelease }}';
when:
- ansible_facts['os_family']|lower == 'redhat' and ansible_facts['distribution_major_version'] | int >= 8
+ - kernel_release_file is defined
+ - kernel_release_file.stat is defined
+ - kernel_release_file.stat.exists
+ - kernelrelease is defined
+ - kernelrelease != "unknown"
+ - ansible_os_family == "RedHat"
+ - ansible_distribution_major_version | int >= 8
# If this fails then grub-set-default won't be run, and the assumption here
# is either you do the work to enhance the heuristic or live happy with the
@@ -143,6 +180,8 @@
register: grub_boot_number_cmd
changed_when: false
when:
+ - kernel_release_file is defined
+ - kernel_release_file.stat is defined
- kernel_release_file.stat.exists
- name: Obtain command to set default kernel to boot
@@ -163,10 +202,13 @@
become_method: sudo
command: "{{ grub_set_default_boot_kernel }} \"{{ target_boot_entry }}\""
vars:
- target_boot_entry: "{{ grub_boot_number_cmd.stdout_lines.0 }}"
+ target_boot_entry: "{{ grub_boot_number_cmd.stdout_lines.0 if (grub_boot_number_cmd is defined and grub_boot_number_cmd.stdout_lines is defined) else '' }}"
tags: [ 'saved' ]
when:
+ - grub_boot_number_cmd is defined
+ - grub_boot_number_cmd.rc is defined
- grub_boot_number_cmd.rc == 0
+ - grub_boot_number_cmd.stdout is defined
- grub_boot_number_cmd.stdout != ""
- name: Itemize kernel and GRUB entry we just selected
@@ -177,6 +219,9 @@
target_boot_entry: "{{ grub_boot_number_cmd.stdout_lines.0 }}"
tags: [ 'saved' ]
when:
+ - grub_boot_number_cmd is defined
+ - grub_boot_number_cmd.rc is defined
- grub_boot_number_cmd.rc == 0
+ - grub_boot_number_cmd.stdout is defined
- grub_boot_number_cmd.stdout != ""
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 23/33] Add a guest/instance for building the test kernel
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (21 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 22/33] bootlinux: Harden update-grub/install.yml Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 24/33] bootlinux: Add a new builder choice Luis Chamberlain
` (10 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Provision a separate guest/instance for the purpose of building the
Linux kernel under test. This builder guest is not used yet.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/gen_hosts/defaults/main.yml | 2 ++
playbooks/roles/gen_hosts/tasks/main.yml | 12 ++++++++++
.../roles/gen_hosts/templates/builder.j2 | 13 +++++++++++
playbooks/roles/gen_nodes/defaults/main.yml | 3 +++
playbooks/roles/gen_nodes/tasks/main.yml | 22 +++++++++++++++++++
workflows/linux/Kconfig | 14 ++++++++++++
workflows/linux/Makefile | 4 ++++
7 files changed, 70 insertions(+)
create mode 100644 playbooks/roles/gen_hosts/templates/builder.j2
diff --git a/playbooks/roles/gen_hosts/defaults/main.yml b/playbooks/roles/gen_hosts/defaults/main.yml
index 1cf906d3..d9479552 100644
--- a/playbooks/roles/gen_hosts/defaults/main.yml
+++ b/playbooks/roles/gen_hosts/defaults/main.yml
@@ -41,3 +41,5 @@ kdevops_loopback_nfs_enable: False
kdevops_smbd_enable: False
kdevops_krb5_enable: False
kdevops_enable_iscsi: false
+
+bootlinux_builder: false
diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml
index 58ebd1d4..70d543ad 100644
--- a/playbooks/roles/gen_hosts/tasks/main.yml
+++ b/playbooks/roles/gen_hosts/tasks/main.yml
@@ -56,6 +56,18 @@
when:
- is_fstests
+- name: Generate the Ansible hosts file for a Linux kernel build
+ tags: [ 'hosts' ]
+ template:
+ src: "{{ kdevops_hosts_template }}"
+ dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+ force: yes
+ trim_blocks: True
+ lstrip_blocks: True
+ when:
+ - bootlinux_builder
+ - ansible_hosts_template.stat.exists
+
- name: Generate the Ansible hosts file
tags: [ 'hosts' ]
template:
diff --git a/playbooks/roles/gen_hosts/templates/builder.j2 b/playbooks/roles/gen_hosts/templates/builder.j2
new file mode 100644
index 00000000..0c9ba1e8
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/builder.j2
@@ -0,0 +1,13 @@
+[all]
+{{ kdevops_hosts_prefix }}-builder
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{{ kdevops_hosts_prefix }}-builder
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[dev]
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_nodes/defaults/main.yml b/playbooks/roles/gen_nodes/defaults/main.yml
index 3368cf61..6aed5303 100644
--- a/playbooks/roles/gen_nodes/defaults/main.yml
+++ b/playbooks/roles/gen_nodes/defaults/main.yml
@@ -86,6 +86,7 @@ kdevops_workflows_dedicated_workflow: False
kdevops_workflow_enable_fstests: False
kdevops_workflow_enable_blktests: False
+builder_nodes: []
iscsi_nodes: []
is_fstests: False
@@ -101,6 +102,8 @@ bootlinux_9p_mount_tag: "ignore"
bootlinux_9p_security_model: "none"
bootlinux_9p_driver: "virtio-9p-pci"
+bootlinux_builder: false
+
guestfs_requires_uefi: False
kdevops_workflow_enable_sysbench: False
diff --git a/playbooks/roles/gen_nodes/tasks/main.yml b/playbooks/roles/gen_nodes/tasks/main.yml
index ebaba927..ae017ee8 100644
--- a/playbooks/roles/gen_nodes/tasks/main.yml
+++ b/playbooks/roles/gen_nodes/tasks/main.yml
@@ -43,6 +43,14 @@
when:
- kdevops_baseline_and_dev
+- name: Set builder nodes array
+ tags: vars
+ set_fact:
+ builder_nodes:
+ - "{{ kdevops_host_prefix + '-builder' }}"
+ when:
+ - bootlinux_builder
+
- name: Set iscsi_nodes list
ansible.builtin.set_fact:
iscsi_nodes: "{{ [kdevops_host_prefix + '-iscsi'] }}"
@@ -138,6 +146,20 @@
- not kdevops_workflows_dedicated_workflow
- ansible_nodes_template.stat.exists
+- name: Generate the builder kdevops nodes file using {{ kdevops_nodes_template }} as jinja2 source template
+ tags: [ 'nodes' ]
+ vars:
+ node_template: "{{ kdevops_nodes_template | basename }}"
+ all_generic_nodes: "{{ builder_nodes }}"
+ nodes: "{{ all_generic_nodes }}"
+ template:
+ src: "{{ node_template }}"
+ dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
+ force: yes
+ when:
+ - bootlinux_builder
+ - ansible_nodes_template.stat.exists
+
- name: Generate the pynfs kdevops nodes file using {{ kdevops_nodes_template }} as jinja2 source template
tags: [ 'nodes' ]
vars:
diff --git a/workflows/linux/Kconfig b/workflows/linux/Kconfig
index 27cba0a9..31f57017 100644
--- a/workflows/linux/Kconfig
+++ b/workflows/linux/Kconfig
@@ -77,6 +77,20 @@ config BOOTLINUX_9P
However, 9p is available only when using a local
virtualization method such as libvirt.
+config BOOTLINUX_BUILDER
+ bool "Separate kernel builder"
+ output yaml
+ help
+ Enabling this option brings up a separate guest/instance
+ for building the Linux kernel to test. The new kernel is
+ packaged appropriately for installation on other systems,
+ but is not installed. Once the kernel is built, the kernel
+ packages are saved on the controller host and the builder
+ node can be destroyed.
+
+ This choice is best when the test runners are resource-
+ limited or vastly different than the controller host.
+
endchoice
if BOOTLINUX_9P
diff --git a/workflows/linux/Makefile b/workflows/linux/Makefile
index f5bc6490..01e3d3e4 100644
--- a/workflows/linux/Makefile
+++ b/workflows/linux/Makefile
@@ -13,6 +13,10 @@ ifeq (y,$(CONFIG_BOOTLINUX_PURE_IOMAP))
TREE_CONFIG:=config-$(TREE_REF)-pure-iomap
endif
+ifeq (y,$(CONFIG_BOOTLINUX_BUILDER))
+KDEVOPS_HOSTS_TEMPLATE=builder.j2
+endif
+
# Describes the Linux clone
BOOTLINUX_ARGS += target_linux_git=$(TREE_URL)
# ifeq (y,$(CONFIG_BOOTLINUX_TREE_CUSTOM_NAME))
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 24/33] bootlinux: Add a new builder choice
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (22 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 23/33] Add a guest/instance for building the test kernel Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 25/33] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
` (9 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Currently, for cloud configurations or when 9p is disabled, kdevops
builds the test kernel on each test runner. This is inefficient,
and gets worse as the test matrix for a single kernel version scales
out.
Instead we want to build the test kernel once and make those build
artifacts available for test runners to install. This would be
similar to what KOTD does now, except it does not require setting up
a separate yum repo.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/bootlinux/defaults/main.yml | 2 +
.../roles/bootlinux/tasks/build/builder.yml | 228 ++++++++++++++++++
.../tasks/install-deps/redhat/main.yml | 18 ++
playbooks/roles/bootlinux/tasks/main.yml | 6 +
4 files changed, 254 insertions(+)
create mode 100644 playbooks/roles/bootlinux/tasks/build/builder.yml
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index 4a1ad72e..50ce96bf 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -46,3 +46,5 @@ kdevops_workflow_enable_cxl: False
bootlinux_cxl_test: False
bootlinux_tree_set_by_cli: False
+
+bootlinux_artifacts_dir: "{{ topdir_path }}/workflows/linux/artifacts"
diff --git a/playbooks/roles/bootlinux/tasks/build/builder.yml b/playbooks/roles/bootlinux/tasks/build/builder.yml
new file mode 100644
index 00000000..c8363b8e
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/build/builder.yml
@@ -0,0 +1,228 @@
+---
+- name: Install b4
+ become: true
+ become_method: ansible.builtin.sudo
+ ansible.builtin.pip:
+ name:
+ - b4
+ when:
+ - target_linux_install_b4 is defined
+ - target_linux_install_b4
+ - ansible_os_family == "Debian"
+
+- name: Clone {{ target_linux_tree }}
+ ansible.builtin.git:
+ repo: "{{ target_linux_git }}"
+ dest: "{{ target_linux_dir_path }}"
+ update: true
+ depth: "{{ target_linux_shallow_depth }}"
+ version: "{{ target_linux_ref }}"
+ register: result
+ retries: 3
+ delay: 5
+ until: result is succeeded
+
+- name: Copy the kernel delta to the builder
+ ansible.builtin.template:
+ src: "{{ target_linux_extra_patch }}"
+ dest: "{{ target_linux_dir_path }}/{{ target_linux_extra_patch }}"
+ owner: "{{ data_user }}"
+ group: "{{ data_group }}"
+ mode: "u=rw,g=r,o=r"
+ when:
+ - target_linux_extra_patch is defined
+
+- name: Apply the kernel delta on the builder
+ # noqa: command-instead-of-module
+ ansible.builtin.command:
+ cmd: "git am {{ target_linux_extra_patch }}"
+ chdir: "{{ target_linux_dir_path }}"
+ register: git_am
+ changed_when: not git_am.failed
+ when:
+ - target_linux_extra_patch is defined
+
+- name: Check git user name and email configuration
+ when:
+ - target_linux_apply_patch_message_id is defined
+ - target_linux_apply_patch_message_id | length > 0
+ - bootlinux_b4_am_this_host|bool
+ block:
+ - name: Get the user's git config info
+ community.general.git_config_info:
+ scope: global
+ register: git_user_info
+
+ - name: Set dummy git user email address
+ community.general.git_config:
+ name: user.email
+ scope: global
+ value: "user@example.com"
+ when:
+ - '"user.email" not in git_user_info.config_values'
+
+ - name: Set dummy git user name
+ community.general.git_config:
+ name: user.name
+ scope: global
+ value: "Kdevops User"
+ when:
+ - '"user.name" not in git_user_info.config_values'
+
+- name: Show the message_id
+ ansible.builtin.debug:
+ msg: "{{ target_linux_apply_patch_message_id }}"
+ when:
+ - target_linux_apply_patch_message_id is defined
+
+- name: Apply a message patch set
+ ansible.builtin.shell:
+ chdir: "{{ target_linux_dir_path }}"
+ cmd: |
+ set -o pipefail
+ b4 am -o - {{ target_linux_apply_patch_message_id }} | git am
+ register: b4_am
+ changed_when: not b4_am.failed
+ when:
+ - target_linux_apply_patch_message_id is defined
+ - target_linux_apply_patch_message_id | length > 0
+ - bootlinux_b4_am_this_host|bool
+
+- name: Copy the configuration for kernel {{ target_linux_tree }}
+ ansible.builtin.template:
+ src: "{{ role_path }}/templates/{{ linux_config }}"
+ dest: "{{ target_linux_dir_path }}/.config"
+ owner: "{{ data_user }}"
+ group: "{{ data_group }}"
+ mode: "u=rw,g=r,o=r"
+
+- name: Set the kernel localversion
+ ansible.builtin.lineinfile:
+ path: "{{ target_linux_dir_path }}/localversion"
+ line: "{{ target_linux_localversion }}"
+ mode: "u=rw,g=r,o=r"
+ create: true
+ when:
+ - target_linux_localversion is defined
+ - target_linux_localversion != ""
+
+- name: Configure kernel {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ target: "olddefconfig"
+
+- name: Build {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ target: "all"
+
+- name: Remove the old artifacts directory on the control host
+ delegate_to: localhost
+ ansible.builtin.file:
+ path: "{{ bootlinux_artifacts_dir }}"
+ state: absent
+
+- name: Ensure an empty artifacts directory exists on the control host
+ delegate_to: localhost
+ run_once: true
+ ansible.builtin.file:
+ path: "{{ bootlinux_artifacts_dir }}"
+ state: directory
+ mode: "u=rwx,g=rx,o=rx"
+
+- name: Build kernel .deb packages
+ when:
+ - ansible_os_family == "Debian"
+ block:
+ - name: Make the bindeb-pkg target
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ target: "bindeb-pkg"
+
+ - name: Find the build artifacts
+ ansible.builtin.find:
+ paths: "{{ artifact_paths }}"
+ patterns: "*.deb"
+ file_type: file
+ recurse: true
+ register: found_debs
+
+ - name: Fetch the build artifacts to the control host
+ ansible.builtin.fetch:
+ src: "{{ item.path }}"
+ dest: "{{ bootlinux_artifacts_dir }}/"
+ flat: true
+ loop: "{{ found_debs.files }}"
+ loop_control:
+ label: "Fetching {{ item.path | basename }} ..."
+
+- name: Build kernel .rpm packages
+ when:
+ - ansible_os_family != "Debian"
+ block:
+ - name: Build the list of artifacts directories on the builder
+ ansible.builtin.set_fact:
+ artifact_paths:
+ - "{{ target_linux_dir_path }}/rpmbuild/RPMS"
+ - "{{ ansible_env.HOME }}/rpmbuild/RPMS"
+
+ - name: Wipe the artifact directories on the builder
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: absent
+ loop: "{{ artifact_paths }}"
+ loop_control:
+ label: "Deleting {{ item }} ..."
+
+ - name: Create empty artifact directories on the builder
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: directory
+ mode: "u=rwx,g=rx,o=rx"
+ loop: "{{ artifact_paths }}"
+ loop_control:
+ label: "Creating {{ item }} ..."
+
+ - name: Make the binrpm-pkg target
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ target: "binrpm-pkg"
+ params:
+ RPMOPTS: '--without devel'
+
+ - name: Find the build artifacts
+ ansible.builtin.find:
+ paths: "{{ artifact_paths }}"
+ patterns: "*.rpm"
+ file_type: file
+ recurse: true
+ register: found_rpms
+
+ - name: Fetch the build artifacts to the control host
+ ansible.builtin.fetch:
+ src: "{{ item.path }}"
+ dest: "{{ bootlinux_artifacts_dir }}/"
+ flat: true
+ loop: "{{ found_rpms.files }}"
+ loop_control:
+ label: "Fetching {{ item.path | basename }} ..."
+
+- name: Extract the release information of the built kernel
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ target: "kernelrelease"
+ register: kernelrelease
+
+- name: Store the kernel release information with the build artifacts
+ delegate_to: localhost
+ ansible.builtin.lineinfile:
+ create: true
+ line: "{{ kernelrelease.stdout }}"
+ mode: "u=rw,g=r,o=r"
+ path: "{{ bootlinux_artifacts_dir }}/kernel.release"
+
+- name: Skip the kernel install steps
+ ansible.builtin.meta: end_play
diff --git a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
index 7849f6f3..0f966d67 100644
--- a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
@@ -68,6 +68,24 @@
- btrfs-progs
when: ansible_distribution == 'Fedora'
+- name: Install rpmbuild
+ become: true
+ become_method: ansible.builtin.sudo
+ ansible.builtin.dnf:
+ name:
+ - elfutils-devel
+ - perl-core
+ - rpm-build
+ - rsync
+ state: present
+ update_cache: true
+ retries: 3
+ delay: 5
+ register: rpmbuild_result
+ until: rpmbuild_result is succeeded
+ when:
+ - bootlinux_builder|bool
+
- name: Remove packages that mess with initramfs
become: yes
become_method: sudo
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 62a081a9..57564399 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -80,6 +80,12 @@
when:
- bootlinux_targets|bool
+- name: Build kernel on the builder node
+ ansible.builtin.include_tasks:
+ file: "{{ role_path }}/tasks/build/builder.yml"
+ when:
+ - bootlinux_builder|bool
+
- name: Run uname before
command: "uname -r"
register: uname_cmd_before
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 25/33] workflows: Add a kconfig setting for installing kernels via package
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (23 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 24/33] bootlinux: Add a new builder choice Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 26/33] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
` (8 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
When the "Target Linux kernel to use" is set to "Upstream Linux or
custom kernel", the bootlinux role is enabled in order to download,
build and install the kernel to be tested.
When installing the kernel from .rpm or .deb packages, however, the
download and build phases have already been done, so it doesn't make
sense to add an option under the "Get and install Linux from git"
menu to make that happen.
Instead, add an option directly to the "Target Linux kernel to use"
menu that will enable the ability to install the test kernel from
packages.
For the moment, this option does nothing.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
kconfigs/workflows/Kconfig | 18 ++++++++++++++++++
playbooks/roles/bootlinux/defaults/main.yml | 2 ++
scripts/ci.Makefile | 8 ++++++++
3 files changed, 28 insertions(+)
diff --git a/kconfigs/workflows/Kconfig b/kconfigs/workflows/Kconfig
index a1d2c331..b1b8a48b 100644
--- a/kconfigs/workflows/Kconfig
+++ b/kconfigs/workflows/Kconfig
@@ -37,6 +37,18 @@ config WORKFLOW_LINUX_CUSTOM
linux, linux-stable, linux-next, or a custom kernel you want to
build and install enable this.
+config WORKFLOW_LINUX_PACKAGED
+ bool "Install pre-built kernel package"
+ output yaml
+ help
+ Choose this option to install a pre-built kernel package on each
+ target node.
+
+ By default, the kernel packages reside in
+ workflows/linux/artifacts. Later we can introduce a Kconfig
+ option that lets kdevops pull the packages from other
+ locations.
+
endchoice
if WORKFLOW_LINUX_CUSTOM
@@ -54,6 +66,12 @@ source "workflows/linux/Kconfig"
endmenu
endif # WORKFLOW_LINUX_CUSTOM
+if WORKFLOW_LINUX_PACKAGED
+config BOOTLINUX
+ bool
+ default y
+endif # WORKFLOW_LINUX_PACKAGED
+
config WORKFLOWS_TESTS
bool "Enable selection of test workflows"
default n
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index 50ce96bf..5b03f0c6 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -41,6 +41,8 @@ uninstall_kernel_enable: False
bootlinux_b4_am_this_host: False
bootlinux_9p: False
+bootlinux_targets: false
+bootlinux_builder: false
kdevops_workflow_enable_cxl: False
diff --git a/scripts/ci.Makefile b/scripts/ci.Makefile
index 0d82fa92..1c47c618 100644
--- a/scripts/ci.Makefile
+++ b/scripts/ci.Makefile
@@ -5,6 +5,8 @@
CI_WORKFLOW ?=
ifeq (y,$(CONFIG_BOOTLINUX))
+ifneq (y,$(CONFIG_WORKFLOW_LINUX_PACKAGED))
+
ifeq ($(strip $(CI_WORKFLOW)),)
CI_WORKFLOW_BASENAME := $(shell basename $(CONFIG_BOOTLINUX_TREE) | sed 's/\.git$$//')
else
@@ -81,6 +83,12 @@ ci-test:
ci-build-test:
endif # We have ci build tests entries
+else # CONFIG_WORKFLOW_LINUX_PACKAGED
+ci-results:
+ci-test:
+ci-build-test:
+endif # CONFIG_WORKFLOW_LINUX_PACKAGED
+
else # CONFIG_BOOTLINUX
ci-results:
ci-test:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 26/33] bootlinux: Enclose tasks to find kernel release name in a block:
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (24 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 25/33] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 27/33] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
` (7 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
This set of tasks is done when installing a new kernel from a source
tree. I'm about to add a similar set of tasks that will handle the
"install from a pre-built package" case.
Refactor these tasks so they can be switched on and off as a group.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../bootlinux/tasks/update-grub/install.yml | 42 ++++++++++---------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index a10064ee..350090a1 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -93,29 +93,33 @@
tags: [ 'uninstall-linux', 'manual-update-grub' ]
import_tasks: update-grub/main.yml
-- name: Set the pathname used to extract the kernel release
+- name: Get the name of the kernel release to install (source tree)
tags:
- vars
- ansible.builtin.set_fact:
- kernelrelease_file: "{{ target_linux_dir_path }}/include/config/kernel.release"
+ block:
+ - name: Set the pathname used to extract the kernel release
+ ansible.builtin.set_fact:
+ kernelrelease_file: "{{ target_linux_dir_path }}/include/config/kernel.release"
-- name: Stat {{ kernelrelease_file }}
- tags:
- - vars
- ansible.builtin.stat:
- get_checksum: false
- get_mime: false
- path: "{{ kernelrelease_file }}"
- register: kernel_release_file
+ - name: Stat {{ kernelrelease_file }}
+ ansible.builtin.stat:
+ get_checksum: false
+ get_mime: false
+ path: "{{ kernelrelease_file }}"
+ register: kernel_release_file
-- name: Slurp {{ kernelrelease_file }}
- tags:
- - vars
- ansible.builtin.slurp:
- src: "{{ kernelrelease_file }}"
- register: slurped_kernel_release
- when:
- - kernel_release_file.stat.exists
+ - name: Slurp {{ kernelrelease_file }}
+ ansible.builtin.slurp:
+ src: "{{ kernelrelease_file }}"
+ register: slurped_kernel_release
+ when:
+ - kernel_release_file.stat.exists
+
+ - name: Get the kernel release of the kernel to be installed
+ ansible.builtin.set_fact:
+ kernelrelease: "{{ slurped_kernel_release.content | b64decode | trim }}"
+ when:
+ - kernel_release_file.stat.exists
- name: Set default kernelrelease if not determined
ansible.builtin.set_fact:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 27/33] bootlinux: Pick up kernel release info for pre-built packages
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (25 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 26/33] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 28/33] bootlinux: Install pre-built kernels from packages Luis Chamberlain
` (6 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../bootlinux/tasks/update-grub/install.yml | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/playbooks/roles/bootlinux/tasks/update-grub/install.yml b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
index 350090a1..f765bc20 100644
--- a/playbooks/roles/bootlinux/tasks/update-grub/install.yml
+++ b/playbooks/roles/bootlinux/tasks/update-grub/install.yml
@@ -96,6 +96,8 @@
- name: Get the name of the kernel release to install (source tree)
tags:
- vars
+ when:
+ - not workflow_linux_packaged|bool
block:
- name: Set the pathname used to extract the kernel release
ansible.builtin.set_fact:
@@ -127,13 +129,25 @@
when:
- kernelrelease is not defined
-- name: Get the kernel release of the kernel to be installed
- tags:
- - vars
- ansible.builtin.set_fact:
- kernelrelease: "{{ slurped_kernel_release.content | b64decode | trim }}"
+- name: Get the name of the kernel release to install (package)
when:
- - kernel_release_file.stat.exists
+ - workflow_linux_packaged|bool
+ block:
+ - name: Set the pathname used to extract the kernel release
+ ansible.builtin.set_fact:
+ kernelrelease_file: "{{ bootlinux_artifacts_dir }}/kernel.release"
+
+ - name: Stat {{ kernelrelease_file }}
+ delegate_to: localhost
+ ansible.builtin.stat:
+ path: "{{ kernelrelease_file }}"
+ register: kernel_release_file
+
+ - name: Get the kernel release of packaged kernel to be installed
+ ansible.builtin.set_fact:
+ kernelrelease: "{{ lookup('ansible.builtin.file', kernelrelease_file) | trim }}"
+ when:
+ - kernel_release_file.stat.exists
- name: Construct the command line to determine the default boot entry
tags:
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 28/33] bootlinux: Install pre-built kernels from packages
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (26 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 27/33] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 29/33] bootlinux: Add an option to build with clang instead of gcc Luis Chamberlain
` (5 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Add the tasks needed to install a kernel on a test host from a
pre-built package (either .deb or .rpm). These are run when the
new WORKFLOW_LINUX_PACKAGED Kconfig option is selected.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
playbooks/roles/bootlinux/defaults/main.yml | 2 +
.../bootlinux/tasks/install/packages.yml | 41 +++++++++++++++++++
playbooks/roles/bootlinux/tasks/main.yml | 22 +++++++++-
3 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 playbooks/roles/bootlinux/tasks/install/packages.yml
diff --git a/playbooks/roles/bootlinux/defaults/main.yml b/playbooks/roles/bootlinux/defaults/main.yml
index 5b03f0c6..fc6bfec0 100644
--- a/playbooks/roles/bootlinux/defaults/main.yml
+++ b/playbooks/roles/bootlinux/defaults/main.yml
@@ -50,3 +50,5 @@ bootlinux_cxl_test: False
bootlinux_tree_set_by_cli: False
bootlinux_artifacts_dir: "{{ topdir_path }}/workflows/linux/artifacts"
+kernel_packages: []
+workflow_linux_packaged: false
diff --git a/playbooks/roles/bootlinux/tasks/install/packages.yml b/playbooks/roles/bootlinux/tasks/install/packages.yml
new file mode 100644
index 00000000..34365293
--- /dev/null
+++ b/playbooks/roles/bootlinux/tasks/install/packages.yml
@@ -0,0 +1,41 @@
+---
+- name: Install the built kernel RPMs on the target nodes
+ when:
+ - ansible_os_family != "Debian"
+ block:
+ - name: Find the kernel build artifacts on the control host
+ delegate_to: localhost
+ ansible.builtin.find:
+ paths: "{{ bootlinux_artifacts_dir }}"
+ patterns: "*.rpm"
+ file_type: file
+ recurse: true
+ register: found_rpms
+
+ - name: Upload the kernel build artifacts to the target nodes
+ ansible.builtin.copy:
+ src: "{{ item.path }}"
+ dest: "/tmp"
+ mode: "u=rw,g=r,o=r"
+ loop: "{{ found_rpms.files }}"
+ loop_control:
+ label: "Uploading {{ item.path | basename }} ..."
+
+ - name: Add the core kernel package
+ ansible.builtin.set_fact:
+ kernel_packages: "{{ kernel_packages + ['/tmp/' + item.path | basename ] }}"
+ when:
+ - "'devel' not in item.path"
+ - "'headers' not in item.path"
+ loop: "{{ found_rpms.files }}"
+ loop_control:
+ label: "Adding {{ item.path | basename }} ..."
+
+ - name: Install the selected kernel build artifacts on the target nodes
+ become: true
+ become_method: ansible.builtin.sudo
+ ansible.builtin.command:
+ cmd: "rpm -i --force {{ item }}"
+ loop: "{{ kernel_packages }}"
+ loop_control:
+ label: "Installing {{ item }}"
diff --git a/playbooks/roles/bootlinux/tasks/main.yml b/playbooks/roles/bootlinux/tasks/main.yml
index 57564399..acf77086 100644
--- a/playbooks/roles/bootlinux/tasks/main.yml
+++ b/playbooks/roles/bootlinux/tasks/main.yml
@@ -13,11 +13,16 @@
- name: Select the .config file for building the test kernel
ansible.builtin.include_tasks:
file: "{{ role_path }}/tasks/config.yml"
+ when:
+ - not workflow_linux_packaged|bool
# Distro specific
- name: Install dependencies to build and install the Linux kernel
ansible.builtin.import_tasks:
file: install-deps/main.yml
+ when:
+ - not bootlinux_9p|bool
+ - not workflow_linux_packaged|bool
# When using 9P builds, we still need make on the guest for modules_install
- name: Install essential build tools for 9P builds
@@ -38,21 +43,27 @@
- target_linux_install_b4 is defined
- target_linux_install_b4
- ansible_facts['os_family']|lower != 'debian'
+ - not workflow_linux_packaged|bool
- name: Set bootlinux_b4_am_this_host as a fact for dev hosts only
set_fact:
bootlinux_b4_am_this_host: "{{ ansible_hostname | regex_search('^.*-dev$') is not none }}"
when:
- kdevops_baseline_and_dev|bool
+ - not workflow_linux_packaged|bool
- name: Enable b4 am all hosts if not deploying dev and baseline nodes
set_fact:
bootlinux_b4_am_this_host: True
when:
- not kdevops_baseline_and_dev|bool
+ - not workflow_linux_packaged|bool
-- include_role:
+- name: Create data partition
+ ansible.builtin.include_role:
name: create_data_partition
+ when:
+ - not workflow_linux_packaged|bool
- name: Mount bootlinux 9p on each target node
become: yes
@@ -180,6 +191,12 @@
tags: [ 'saved' ]
when: ansible_facts['os_family']|lower == 'redhat'
+- name: Install packages on each target node
+ ansible.builtin.import_tasks:
+ file: "{{ role_path }}/tasks/install/packages.yml"
+ when:
+ - workflow_linux_packaged|bool
+
- name: Install {{ target_linux_tree }} on the target nodes
become: yes
become_flags: 'su - -c'
@@ -190,6 +207,8 @@
args:
chdir: "{{ target_linux_dir_path }}"
tags: [ 'install-linux' ]
+ when:
+ - not workflow_linux_packaged|bool
- name: Install {{ target_linux_tree }} cxl_test on the target nodes
become: yes
@@ -203,6 +222,7 @@
tags: [ 'install-linux', 'cxl-install' ]
when:
- kdevops_workflow_enable_cxl|bool
+ - not workflow_linux_packaged|bool
- name: Set the default kernel if necessary
tags: [ 'saved' ]
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 29/33] bootlinux: Add an option to build with clang instead of gcc
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (27 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 28/33] bootlinux: Install pre-built kernels from packages Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 30/33] Makefile: add make style for style checking Luis Chamberlain
` (4 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Chuck Lever
From: Chuck Lever <chuck.lever@oracle.com>
Currently, gcc does not implement a Rust front-end. As the kernel
acquires Rust source code, the clang tool chain must be used to
build it.
To enable building test kernels with clang instead of gcc, add a
kdevops Kconfig option to install dependences and set the build
options to use clang.
See: Documentation/kbuild/llvm.rst
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../roles/bootlinux/tasks/build/builder.yml | 36 +++++++++++++++++++
.../tasks/install-deps/redhat/main.yml | 16 +++++++++
workflows/linux/Kconfig | 20 +++++++++++
3 files changed, 72 insertions(+)
diff --git a/playbooks/roles/bootlinux/tasks/build/builder.yml b/playbooks/roles/bootlinux/tasks/build/builder.yml
index c8363b8e..c4c4b950 100644
--- a/playbooks/roles/bootlinux/tasks/build/builder.yml
+++ b/playbooks/roles/bootlinux/tasks/build/builder.yml
@@ -110,12 +110,35 @@
community.general.make:
chdir: "{{ target_linux_dir_path }}"
target: "olddefconfig"
+ when:
+ - bootlinux_compiler_gcc|bool
- name: Build {{ target_linux_tree }}
community.general.make:
chdir: "{{ target_linux_dir_path }}"
jobs: "{{ ansible_processor_nproc }}"
target: "all"
+ when:
+ - bootlinux_compiler_gcc|bool
+
+- name: Configure kernel {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ params:
+ LLVM: 1
+ target: "olddefconfig"
+ when:
+ - bootlinux_compiler_clang|bool
+
+- name: Build {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ params:
+ LLVM: 1
+ target: "all"
+ when:
+ - bootlinux_compiler_clang|bool
- name: Remove the old artifacts directory on the control host
delegate_to: localhost
@@ -192,6 +215,19 @@
target: "binrpm-pkg"
params:
RPMOPTS: '--without devel'
+ when:
+ - bootlinux_compiler_gcc|bool
+
+ - name: Make the binrpm-pkg target
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ target: "binrpm-pkg"
+ params:
+ RPMOPTS: '--without devel'
+ LLVM: 1
+ when:
+ - bootlinux_compiler_clang|bool
- name: Find the build artifacts
ansible.builtin.find:
diff --git a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
index 0f966d67..dc4a5433 100644
--- a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
@@ -68,6 +68,22 @@
- btrfs-progs
when: ansible_distribution == 'Fedora'
+- name: Install clang
+ become: true
+ ansible.builtin.dnf:
+ name:
+ - clang
+ - lld
+ - llvm
+ state: present
+ update_cache: true
+ retries: 3
+ delay: 5
+ register: clang_result
+ until: clang_result is succeeded
+ when:
+ - bootlinux_compiler_clang|bool
+
- name: Install rpmbuild
become: true
become_method: ansible.builtin.sudo
diff --git a/workflows/linux/Kconfig b/workflows/linux/Kconfig
index 31f57017..06742f3e 100644
--- a/workflows/linux/Kconfig
+++ b/workflows/linux/Kconfig
@@ -151,6 +151,26 @@ endmenu
endif # BOOTLINUX_9P
+choice
+ prompt "Compiler to use to build the kernel"
+ default BOOTLINUX_COMPILER_GCC
+ help
+ Choose which toolchain to use to build the kernel.
+
+config BOOTLINUX_COMPILER_GCC
+ bool "gcc"
+ output yaml
+ help
+ Use the gcc compiler toolchain to build the Linux kernel.
+
+config BOOTLINUX_COMPILER_CLANG
+ bool "clang"
+ output yaml
+ help
+ Use the clang compiler toolchain to build the Linux kernel.
+
+endchoice
+
choice
prompt "Type of development version of Linux to use"
default BOOTLINUX_LINUS if !BOOTLINUX_TREE_SET_BY_CLI && !BOOTLINUX_TREE_REF_SET_BY_CLI
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 30/33] Makefile: add make style for style checking
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (28 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 29/33] bootlinux: Add an option to build with clang instead of gcc Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 31/33] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
` (3 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Add a 'make style' which helps humans and bots follow some sensible
coding conventions.
- Add scripts/detect_whitespace_issues.py check for white space eye sores
- Add scripts/check_commit_format.py to validate Generated-by and the
Signed-off-by spacing
- Add scripts/fix_whitespace_issues.py to help with stupid spacing
eyesores
- Update CLAUDE.md to ensure it runs 'make style'
Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
CLAUDE.md | 61 +++++++++++++
Makefile | 5 +
kdevops-ci | 1 +
scripts/check_commit_format.py | 85 +++++++++++++++++
scripts/detect_whitespace_issues.py | 109 ++++++++++++++++++++++
scripts/fix_whitespace_issues.py | 137 ++++++++++++++++++++++++++++
6 files changed, 398 insertions(+)
create mode 160000 kdevops-ci
create mode 100755 scripts/check_commit_format.py
create mode 100755 scripts/detect_whitespace_issues.py
create mode 100755 scripts/fix_whitespace_issues.py
diff --git a/CLAUDE.md b/CLAUDE.md
index 8bee7c08..ea7c0fff 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -89,6 +89,7 @@ make help # Show available targets
make V=1 [target] # Verbose build output
make AV=1-6 [target] # Ansible verbose output (levels 0-6)
make dynconfig # Generate dynamic configuration
+make style # Check for whitespace issues - ALWAYS run before completing work
make mrproper # Clean everything and restart from scratch
```
@@ -211,6 +212,66 @@ Developer Certificate or Origin.
Use this tag for code generated by Claude code AI. Put this before the
Signed-off-by tag.
+**CRITICAL FORMATTING RULE**: When using "Generated-by: Claude AI", it MUST be
+immediately followed by the "Signed-off-by:" tag with NO empty lines between them.
+These two lines must be consecutive.
+
+Correct format:
+```
+Subject line
+
+Detailed description of changes...
+
+Generated-by: Claude AI
+Signed-off-by: Your Name <email@example.com>
+```
+
+**WRONG** - Do NOT add empty lines between Generated-by and Signed-off-by:
+```
+Generated-by: Claude AI
+
+Signed-off-by: Your Name <email@example.com>
+```
+
+**WRONG** - Do NOT add extra empty lines:
+```
+Generated-by: Claude AI
+
+
+Signed-off-by: Your Name <email@example.com>
+```
+
+## Code Quality Requirements
+
+**IMPORTANT**: Before completing any work, you MUST run `make style` to check for
+both whitespace issues and commit message formatting. This ensures code consistency
+and prevents formatting issues from being introduced into the codebase.
+
+The style checker will identify:
+- Trailing whitespace
+- Mixed tabs and spaces
+- Files without newlines at EOF
+- Other whitespace-related issues
+- Incorrect commit message formatting (Generated-by/Signed-off-by spacing)
+
+Fix all reported issues before submitting your work. The `make style` command
+checks both file whitespace and the most recent commit message format.
+
+### Automatic Whitespace Fixing
+
+For convenience, you can automatically fix whitespace issues using:
+```bash
+python3 scripts/fix_whitespace_issues.py # Fix all modified files
+python3 scripts/fix_whitespace_issues.py file1 file2 # Fix specific files
+```
+
+The fixer script will:
+- Remove trailing whitespace from lines
+- Add missing newlines at end of files
+- Reduce excessive blank lines to maximum 2 consecutive
+
+Always run `make style` after using the fixer to verify all issues are resolved.
+
## Prompt Examples
Refer to PROMPTS.md for example set of prompts used to generate code on
diff --git a/Makefile b/Makefile
index 38f7c5a2..ae976865 100644
--- a/Makefile
+++ b/Makefile
@@ -238,6 +238,11 @@ include scripts/ci.Makefile
include scripts/archive.Makefile
include scripts/defconfig.Makefile
+PHONY += style
+style:
+ $(Q)python3 scripts/detect_whitespace_issues.py
+ $(Q)python3 scripts/check_commit_format.py
+
PHONY += clean
clean:
$(Q)$(MAKE) -f scripts/build.Makefile $@
diff --git a/kdevops-ci b/kdevops-ci
new file mode 160000
index 00000000..81206075
--- /dev/null
+++ b/kdevops-ci
@@ -0,0 +1 @@
+Subproject commit 812060752af00e601add5716c3180fbb21c41784
diff --git a/scripts/check_commit_format.py b/scripts/check_commit_format.py
new file mode 100755
index 00000000..f72f9d1a
--- /dev/null
+++ b/scripts/check_commit_format.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+"""
+Commit Message Format Checker for kdevops
+
+This script checks the most recent commit message for proper formatting:
+- If "Generated-by: Claude AI" is present, it must be immediately followed by
+ "Signed-off-by:" with no blank lines in between
+"""
+
+import subprocess
+import sys
+import re
+
+def get_latest_commit_message():
+ """Get the latest commit message"""
+ try:
+ result = subprocess.run(['git', 'log', '-1', '--pretty=format:%B'],
+ capture_output=True, text=True, check=True)
+ return result.stdout
+ except subprocess.CalledProcessError:
+ print("Error: Failed to get commit message")
+ return None
+ except FileNotFoundError:
+ print("Error: git command not found")
+ return None
+
+def check_commit_format(commit_msg):
+ """Check commit message formatting"""
+ issues = []
+ if not commit_msg:
+ return ["No commit message found"]
+ lines = commit_msg.strip().split('\n')
+ # Find Generated-by line
+ generated_by_idx = None
+ signed_off_by_idx = None
+ for i, line in enumerate(lines):
+ if line.startswith('Generated-by: Claude AI'):
+ generated_by_idx = i
+ elif line.startswith('Signed-off-by:'):
+ signed_off_by_idx = i
+ # If Generated-by is present, check formatting
+ if generated_by_idx is not None:
+ if signed_off_by_idx is None:
+ issues.append("Generated-by: Claude AI found but no Signed-off-by tag present")
+ else:
+ # Check if Generated-by is immediately followed by Signed-off-by (no lines in between)
+ if signed_off_by_idx != generated_by_idx + 1:
+ lines_between = signed_off_by_idx - generated_by_idx - 1
+ if lines_between > 0:
+ issues.append(f"Generated-by: Claude AI must be immediately followed by Signed-off-by (found {lines_between} lines between them)")
+ for i in range(generated_by_idx + 1, signed_off_by_idx):
+ if lines[i].strip():
+ issues.append(f" - Non-empty line at {i+1}: '{lines[i]}'")
+ else:
+ issues.append(f" - Empty line at {i+1}")
+ return issues
+
+def main():
+ """Main function to check commit message format"""
+ commit_msg = get_latest_commit_message()
+ if commit_msg is None:
+ return 1
+ issues = check_commit_format(commit_msg)
+ if issues:
+ print("❌ Commit message formatting issues found:")
+ for issue in issues:
+ print(f" ⚠️ {issue}")
+ print("\nLatest commit message:")
+ print("=" * 50)
+ print(commit_msg)
+ print("=" * 50)
+ print("\nCorrect format when using Generated-by:")
+ print("Subject line")
+ print("")
+ print("Detailed description...")
+ print("")
+ print("Generated-by: Claude AI")
+ print("Signed-off-by: Your Name <email@example.com>")
+ return 1
+ else:
+ print("✅ Commit message formatting is correct!")
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/scripts/detect_whitespace_issues.py b/scripts/detect_whitespace_issues.py
new file mode 100755
index 00000000..165a33e2
--- /dev/null
+++ b/scripts/detect_whitespace_issues.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python3
+"""
+Whitespace Issue Detector for kdevops
+
+This script detects common whitespace issues that Claude AI tends to introduce:
+- Trailing whitespace at end of lines
+- Missing newline at end of file
+- Excessive blank lines
+"""
+
+import os
+import sys
+from pathlib import Path
+
+def check_file_whitespace(file_path):
+ """Check a single file for whitespace issues"""
+ issues = []
+
+ try:
+ with open(file_path, 'rb') as f:
+ content = f.read()
+
+ # Skip binary files
+ if b'\0' in content:
+ return issues
+
+ lines = content.decode('utf-8', errors='ignore').splitlines(keepends=True)
+
+ # Check trailing whitespace
+ for line_num, line in enumerate(lines, 1):
+ if line.rstrip('\n\r').endswith(' ') or line.rstrip('\n\r').endswith('\t'):
+ issues.append(f"Line {line_num}: Trailing whitespace")
+
+ # Check missing newline at end of file
+ if content and not content.endswith(b'\n'):
+ issues.append("Missing newline at end of file")
+
+ # Check for excessive blank lines (more than 2 consecutive)
+ blank_count = 0
+ for line_num, line in enumerate(lines, 1):
+ if line.strip() == '':
+ blank_count += 1
+ else:
+ if blank_count > 2:
+ issues.append(f"Line {line_num - blank_count}: {blank_count} consecutive blank lines")
+ blank_count = 0
+
+ except Exception as e:
+ issues.append(f"Error reading file: {e}")
+
+ return issues
+
+def main():
+ """Main function to scan for whitespace issues"""
+ if len(sys.argv) > 1:
+ paths = sys.argv[1:]
+ else:
+ # Default to git tracked files with modifications
+ import subprocess
+ try:
+ result = subprocess.run(['git', 'diff', '--name-only'],
+ capture_output=True, text=True, check=True)
+ paths = result.stdout.strip().split('\n') if result.stdout.strip() else []
+ if not paths:
+ print("No modified files found in git")
+ return
+ except subprocess.CalledProcessError:
+ print("Error: Not in a git repository or git command failed")
+ return
+ except FileNotFoundError:
+ print("Error: git command not found")
+ return
+
+ total_issues = 0
+ files_with_issues = 0
+
+ for path_str in paths:
+ path = Path(path_str)
+ if not path.exists():
+ print(f"Warning: {path} does not exist")
+ continue
+
+ if path.is_file():
+ # Skip certain file types
+ if path.suffix in ['.pyc', '.so', '.o', '.bin', '.jpg', '.png', '.gif']:
+ continue
+
+ issues = check_file_whitespace(path)
+ if issues:
+ files_with_issues += 1
+ total_issues += len(issues)
+ print(f"\n{path}:")
+ for issue in issues:
+ print(f" ⚠️ {issue}")
+
+ print(f"\nSummary: {total_issues} whitespace issues found in {files_with_issues} files")
+
+ if total_issues > 0:
+ print("\nTo fix these issues:")
+ print("- Remove trailing spaces/tabs from lines")
+ print("- Add newline at end of files")
+ print("- Reduce excessive blank lines to 1-2 maximum")
+ return 1
+ else:
+ print("✅ No whitespace issues found!")
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/scripts/fix_whitespace_issues.py b/scripts/fix_whitespace_issues.py
new file mode 100755
index 00000000..3e69ea50
--- /dev/null
+++ b/scripts/fix_whitespace_issues.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python3
+"""
+Whitespace Issue Fixer for kdevops
+
+This script fixes common whitespace issues that Claude AI tends to introduce:
+- Trailing whitespace at end of lines
+- Missing newline at end of file
+- Excessive blank lines (reduces to maximum 2 consecutive)
+"""
+
+import os
+import sys
+from pathlib import Path
+
+def fix_file_whitespace(file_path):
+ """Fix whitespace issues in a single file"""
+ issues_fixed = []
+
+ try:
+ with open(file_path, 'rb') as f:
+ content = f.read()
+
+ # Skip binary files
+ if b'\0' in content:
+ return issues_fixed
+
+ original_content = content.decode('utf-8', errors='ignore')
+ lines = original_content.splitlines(keepends=True)
+ modified = False
+
+ # Fix trailing whitespace
+ new_lines = []
+ for line_num, line in enumerate(lines, 1):
+ original_line = line
+ # Remove trailing whitespace but preserve line endings
+ if line.endswith('\r\n'):
+ cleaned_line = line.rstrip(' \t\r\n') + '\r\n'
+ elif line.endswith('\n'):
+ cleaned_line = line.rstrip(' \t\n') + '\n'
+ else:
+ cleaned_line = line.rstrip(' \t')
+
+ if original_line != cleaned_line:
+ issues_fixed.append(f"Line {line_num}: Removed trailing whitespace")
+ modified = True
+
+ new_lines.append(cleaned_line)
+
+ # Fix excessive blank lines (reduce to maximum 2 consecutive)
+ final_lines = []
+ blank_count = 0
+ i = 0
+ while i < len(new_lines):
+ line = new_lines[i]
+ if line.strip() == '':
+ blank_count += 1
+ if blank_count <= 2:
+ final_lines.append(line)
+ else:
+ issues_fixed.append(f"Line {i+1}: Removed excessive blank line")
+ modified = True
+ else:
+ blank_count = 0
+ final_lines.append(line)
+ i += 1
+
+ # Fix missing newline at end of file
+ new_content = ''.join(final_lines)
+ if new_content and not new_content.endswith('\n'):
+ new_content += '\n'
+ issues_fixed.append("Added missing newline at end of file")
+ modified = True
+
+ # Write back if modified
+ if modified:
+ with open(file_path, 'w', encoding='utf-8') as f:
+ f.write(new_content)
+
+ except Exception as e:
+ issues_fixed.append(f"Error processing file: {e}")
+
+ return issues_fixed
+
+def main():
+ """Main function to fix whitespace issues"""
+ if len(sys.argv) > 1:
+ paths = sys.argv[1:]
+ else:
+ # Default to git tracked files with modifications
+ import subprocess
+ try:
+ result = subprocess.run(['git', 'diff', '--name-only'],
+ capture_output=True, text=True, check=True)
+ paths = result.stdout.strip().split('\n') if result.stdout.strip() else []
+ if not paths:
+ print("No modified files found in git")
+ return 0
+ except subprocess.CalledProcessError:
+ print("Error: Not in a git repository or git command failed")
+ return 1
+ except FileNotFoundError:
+ print("Error: git command not found")
+ return 1
+
+ total_fixes = 0
+ files_fixed = 0
+
+ for path_str in paths:
+ path = Path(path_str)
+ if not path.exists():
+ print(f"Warning: {path} does not exist")
+ continue
+
+ if path.is_file():
+ # Skip certain file types
+ if path.suffix in ['.pyc', '.so', '.o', '.bin', '.jpg', '.png', '.gif']:
+ continue
+
+ fixes = fix_file_whitespace(path)
+ if fixes:
+ files_fixed += 1
+ total_fixes += len(fixes)
+ print(f"\n{path}:")
+ for fix in fixes:
+ print(f" ✅ {fix}")
+
+ print(f"\nSummary: {total_fixes} whitespace issues fixed in {files_fixed} files")
+
+ if total_fixes > 0:
+ print("✅ Whitespace issues have been automatically fixed!")
+ return 0
+ else:
+ print("✅ No whitespace issues found to fix!")
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 31/33] CLAUDE.md: new workflow guide for hosts and nodes
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (29 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 30/33] Makefile: add make style for style checking Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 32/33] CLAUDE.md: add don't BS rules Luis Chamberlain
` (2 subsequent siblings)
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Extend CLAUDE.md with a slew of guidelines for the gen_host and gen_nodes
playbook as well as tons of other tips to work around complex ansible
issues which are not easy to infer.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
CLAUDE.md | 628 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 628 insertions(+)
diff --git a/CLAUDE.md b/CLAUDE.md
index ea7c0fff..7764bc67 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -160,6 +160,131 @@ make mrproper # Clean everything and restart from scratch
4. **Baseline Management**: Comprehensive tracking of known failures and regressions
5. **Template Generation**: Dynamic file generation based on configuration
+## Adding New Workflows
+
+When adding a new workflow to kdevops, you must add node generation rules to both
+`playbooks/roles/gen_nodes/tasks/main.yml` and `playbooks/roles/gen_hosts/tasks/main.yml`
+to avoid the failure "dedicated workflow has no rules for node configuration".
+
+### Required Additions
+
+For each new workflow, add the following sections to both playbooks:
+
+#### gen_nodes playbook
+Add node generation rules with appropriate conditional logic based on whether the
+workflow uses individual test configuration flags (like mmtests) or choice-based
+configuration (like fio-tests):
+
+```yaml
+# For workflows with individual test flags (like mmtests)
+- name: Infer enabled WORKFLOW test section types
+ set_fact:
+ workflow_enabled_test_types: >-
+ {{
+ [kdevops_host_prefix + '-']
+ | product(
+ lookup('file', topdir_path + '/.config')
+ | regex_findall('^CONFIG_WORKFLOW_ENABLE_(.*)=y$', multiline=True)
+ | map('lower')
+ | list
+ )
+ | map('join')
+ | list
+ }}
+ when:
+ - kdevops_workflows_dedicated_workflow
+ - kdevops_workflow_enable_WORKFLOW
+ - ansible_nodes_template.stat.exists
+ - not kdevops_baseline_and_dev
+
+# For workflows with choice-based configuration (like fio-tests)
+- name: Generate the WORKFLOW kdevops nodes file using {{ kdevops_nodes_template }} as jinja2 source template
+ tags: [ 'hosts' ]
+ vars:
+ node_template: "{{ kdevops_nodes_template | basename }}"
+ nodes: "{{ [kdevops_host_prefix + '-WORKFLOW'] }}"
+ all_generic_nodes: "{{ [kdevops_host_prefix + '-WORKFLOW'] }}"
+ template:
+ src: "{{ node_template }}"
+ dest: "{{ topdir_path }}/{{ kdevops_nodes }}"
+ force: yes
+ when:
+ - kdevops_workflows_dedicated_workflow
+ - kdevops_workflow_enable_WORKFLOW
+ - ansible_nodes_template.stat.exists
+```
+
+#### gen_hosts playbook
+Add host file generation task for the workflow:
+
+```yaml
+- name: Generate the Ansible hosts file for a dedicated WORKFLOW setup
+ tags: [ 'hosts' ]
+ template:
+ src: "{{ kdevops_hosts_template }}"
+ dest: "{{ topdir_path }}/{{ kdevops_hosts }}"
+ force: yes
+ trim_blocks: True
+ lstrip_blocks: True
+ when:
+ - kdevops_workflows_dedicated_workflow
+ - kdevops_workflow_enable_WORKFLOW
+ - ansible_hosts_template.stat.exists
+```
+
+#### Update the generic hosts template
+Add support for your workflow in the generic hosts template at
+`playbooks/roles/gen_hosts/templates/hosts.j2`. Find the dedicated workflow
+section and add your workflow's conditional logic:
+
+```jinja2
+{% if kdevops_workflows_dedicated_workflow %}
+{% if kdevops_workflow_enable_WORKFLOW %}
+[all]
+{{ kdevops_host_prefix }}-WORKFLOW
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-WORKFLOW-dev
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{{ kdevops_host_prefix }}-WORKFLOW
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{{ kdevops_host_prefix }}-WORKFLOW-dev
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[WORKFLOW]
+{{ kdevops_host_prefix }}-WORKFLOW
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-WORKFLOW-dev
+{% endif %}
+
+[WORKFLOW:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+{% else %}
+```
+
+### Examples
+
+Refer to the existing mmtests implementation for workflows with multiple individual
+test configuration flags, or the fio-tests implementation for workflows with
+choice-based configuration patterns.
+
+**Important**: All workflows use the same generic hosts template in
+`playbooks/roles/gen_hosts/templates/hosts.j2`. Do NOT create workflow-specific
+template files. Instead, extend the generic template with conditional logic
+for your workflow.
+
## Quick Setup Examples
### XFS Filesystem Testing
@@ -272,6 +397,509 @@ The fixer script will:
Always run `make style` after using the fixer to verify all issues are resolved.
+## Complex System Interactions
+
+kdevops integrates multiple subsystems (Ansible, Kconfig, Git, Make) that often
+interact in non-obvious ways. Understanding these interactions is crucial for
+effective debugging and development.
+
+### Ansible Architecture Patterns
+
+#### Host vs Control Node Execution
+kdevops uses several Ansible execution patterns that affect variable scope:
+
+- **Control Host Execution**: `run_once: true, delegate_to: localhost`
+ - Executes once on the control host, not on target nodes
+ - Per-node variables may not be available in localhost context
+ - Common in 9P filesystem builds where single build is shared to all guests
+ - Use `hostvars[groups['group_name'][0]]['variable_name']` to access node-specific vars
+
+- **Variable Resolution Issues**:
+ - Variables set per-node (like A/B testing configs) aren't automatically available on localhost
+ - Need explicit variable resolution for cross-context access
+ - Git repository state must be managed carefully when switching between refs
+
+#### A/B Testing Variable Management
+```yaml
+# Detect dev nodes by hostname pattern
+- name: Determine if this is a dev node for A/B testing
+ set_fact:
+ bootlinux_is_dev_node: "{{ ansible_hostname | regex_search('^.*-dev$') is not none }}"
+
+# Resolve active parameters for 9P builds
+- name: Determine active kernel parameters for A/B testing with 9P
+ set_fact:
+ active_linux_ref: "{{ hostvars[groups['dev'][0]]['target_linux_ref'] if 'dev' in group_names else target_linux_ref }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+### Kconfig Dynamic Configuration Patterns
+
+#### Shell Command Integration
+```kconfig
+config BOOTLINUX_DEV_TREE_REF
+ string "Development kernel reference"
+ default $(shell, scripts/infer_last_stable_kernel.sh)
+ help
+ The default is automatically inferred as the most recent stable
+ kernel version from the git repository.
+```
+
+**Best Practices**:
+- Always provide fallback values in scripts
+- Place scripts in `scripts/` directory
+- Use conditional defaults: `default VALUE if CONDITION`
+- Test scripts work in different environments
+
+#### Dependencies and Conflicts
+```kconfig
+config BOOTLINUX_SHALLOW_CLONE
+ bool "Shallow git clone"
+ default y if !KDEVOPS_BASELINE_AND_DEV
+ depends on !BOOTLINUX_AB_DIFFERENT_REF
+ help
+ This option is automatically disabled when using A/B testing with
+ different kernel references, as shallow clones may not contain all
+ the required refs for checkout.
+```
+
+**Key Patterns**:
+- `depends on !CONFIG_OPTION` - Prevent incompatible combinations
+- `default y if !OTHER_CONFIG` - Conditional defaults
+- Document why restrictions exist in help text
+
+### Git Repository Management
+
+#### Shallow Clone Limitations
+- **Problem**: A/B testing with different refs requires full git history
+- **Solution**: Make shallow clones depend on `!BOOTLINUX_AB_DIFFERENT_REF`
+- **Detection**: Use `git --git-dir=/path/to/mirror.git` for mirror access
+
+#### Version Detection Scripts
+```bash
+# Get latest stable kernel version, excluding release candidates
+LAST_STABLE=$(git --git-dir="$GIT_TREE" tag --list 'v6.*' | \
+ grep -v -- '-rc' | \
+ sort -V | \
+ tail -1)
+```
+
+**Patterns**:
+- Use `sort -V` for proper semantic version ordering
+- Filter out pre-release versions with `grep -v -- '-rc'`
+- Always provide fallback values
+- Handle missing git repositories gracefully
+
+### Systematic Debugging Methodology
+
+#### Configuration Tracing
+1. **Check actual values**: Look at `extra_vars.yaml` for resolved variables
+2. **Trace execution context**: Identify if code runs on localhost vs target nodes
+3. **Verify prerequisites**: Ensure git refs exist before checkout attempts
+4. **Follow variable inheritance**: Understand Ansible variable precedence
+
+#### A/B Testing Debug Steps
+```bash
+# Check current configuration
+grep "BOOTLINUX.*REF" .config
+grep "bootlinux.*tree.*ref" extra_vars.yaml
+
+# Verify git repository state
+git branch -v
+git describe --tags --always
+
+# Test kernel version detection
+scripts/infer_last_stable_kernel.sh
+
+# Check available refs in mirror
+git --git-dir=/mirror/linux.git tag --list 'v6.*' | sort -V | tail -10
+```
+
+#### Common Root Causes
+- **Variable scope mismatches**: Per-node vars not available on localhost
+- **Git ref unavailability**: Shallow clones missing required refs
+- **Execution context confusion**: Code expecting node context running on localhost
+- **Configuration interdependencies**: Features conflicting in unexpected ways
+
+### Feature Integration Patterns
+
+#### When Features Conflict
+1. **Identify early**: Use Kconfig dependencies to prevent invalid combinations
+2. **Provide alternatives**: Suggest compatible configurations
+3. **Clear messaging**: Explain why restrictions exist
+4. **Graceful degradation**: Disable conflicting features automatically
+
+Example: Shallow clones + A/B different refs
+- **Problem**: Shallow clone may not have required git refs
+- **Solution**: `depends on !BOOTLINUX_AB_DIFFERENT_REF`
+- **User experience**: Feature automatically disabled with explanation
+
+#### Smart Defaults Philosophy
+- **Infer from system state**: Use dynamic detection where possible
+- **Show off capabilities**: Make examples compelling and useful
+- **Balance automation with control**: Provide overrides for advanced users
+- **Fail gracefully**: Always have sensible fallbacks
+
+### AI Assistant Development Guidelines
+
+#### Investigation Sequence
+1. **Understand the problem**: What's not working as expected?
+2. **Trace execution path**: Follow code from config → ansible → execution
+3. **Identify context and scope**: Where does code run? What variables are available?
+4. **Find intersection points**: Issues often emerge where subsystems meet
+5. **Design holistic solutions**: Fix root cause, enhance the feature
+6. **Validate across use cases**: Test both specific case and general functionality
+
+#### Common Anti-Patterns to Avoid
+- Band-aid fixes that ignore root cause
+- Breaking existing functionality while fixing edge cases
+- Ignoring variable scope and execution context
+- Missing cross-feature impact analysis
+- Not considering user experience implications
+
+#### Quality Gates
+- Always run `make style` before completion
+- Test both the specific case and general functionality
+- Consider impact on existing users and configurations
+- Document new patterns for future reference
+- Verify changes work across different execution contexts
+
+### Examples from Practice
+
+#### A/B Kernel Testing Issue
+**Symptoms**: `bootlinux_dev_tree_kernelrelease` not being used in dev builds
+
+**Root Cause Analysis**:
+- 9P builds execute `run_once: true, delegate_to: localhost`
+- Per-node A/B variables not available in localhost context
+- Git checkout failed due to shallow clone missing refs
+
+**Solution Components**:
+1. Variable resolution: `hostvars[groups['dev'][0]]['target_linux_ref']`
+2. Git ref management: Force checkout correct ref before build
+3. Configuration fix: Disable shallow clones for A/B different refs
+4. Smart defaults: Auto-detect latest stable kernel version
+
+**Key Insight**: Complex issues often involve multiple subsystem interactions
+rather than bugs in individual components.
+
+## Per-Node Variable Management and Scope Issues
+
+One of the most common and subtle sources of bugs in kdevops is per-node variable
+scope issues, particularly when combining Ansible's execution contexts with
+complex features like A/B testing and 9P builds.
+
+### Understanding Ansible Execution Contexts
+
+kdevops uses multiple Ansible execution patterns that affect variable visibility:
+
+#### 1. Normal Node Execution
+```yaml
+- name: Set per-node variable
+ set_fact:
+ my_node_var: "{{ some_value }}"
+ # Runs on each target node, variable is per-node
+```
+
+#### 2. Control Host Execution (run_once + delegate_to: localhost)
+```yaml
+- name: Process shared data
+ set_fact:
+ shared_var: "{{ processed_value }}"
+ run_once: true
+ delegate_to: localhost
+ # Runs once on control host, not on target nodes
+```
+
+#### 3. Mixed Context Operations
+```yaml
+- name: Access per-node data from control host
+ set_fact:
+ aggregated_data: "{{ hostvars[groups['target'][0]]['node_var'] }}"
+ run_once: true
+ delegate_to: localhost
+ # Attempts to access per-node variable from control context
+```
+
+### Common Variable Scope Problems
+
+#### Problem 1: Per-Node Variables Not Available on localhost
+
+**Symptom**: Variables set on target nodes are undefined when accessed from
+localhost tasks.
+
+**Example**:
+```yaml
+# This sets target_linux_ref ONLY on nodes matching the condition
+- name: Set development kernel parameters for dev nodes
+ set_fact:
+ target_linux_ref: "{{ bootlinux_dev_tree_ref }}"
+ when:
+ - kdevops_baseline_and_dev|bool
+ - bootlinux_ab_different_ref|bool
+ - bootlinux_is_dev_node|default(false)|bool
+
+# This tries to access per-node variable from localhost - MAY FAIL
+- name: Use dev node's kernel ref for 9P build
+ set_fact:
+ active_ref: "{{ hostvars[groups['dev'][0]]['target_linux_ref'] }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+**Root Cause**: The first task only runs on dev nodes and sets a per-node
+variable. The second task runs on localhost but may not have access to the
+per-node variable if there are timing or context issues.
+
+#### Problem 2: Host Scope Limiting with HOSTS Parameter
+
+**Symptom**: When using `make target HOSTS=specific-host`, variables set on
+other hosts become inaccessible.
+
+**Example**:
+```bash
+# This limits the playbook scope to only the dev node
+make linux HOSTS=demo-fio-tests-dev
+```
+
+If your playbook tries to access variables from baseline nodes or uses
+`hostvars[groups['baseline'][0]]`, these may fail because the baseline
+nodes are not in the current run scope.
+
+#### Problem 3: Race Conditions in Variable Resolution
+
+**Symptom**: Variables appear to be set inconsistently or use wrong values.
+
+**Root Cause**: Tasks with `run_once: true` may execute before per-node
+tasks complete, leading to variable access before they're properly set.
+
+### Best Practices for Variable Management
+
+#### 1. Prefer Global Variables for Cross-Context Access
+
+**Bad**:
+```yaml
+# Set per-node, access from localhost - fragile
+- name: Set node-specific value
+ set_fact:
+ node_value: "{{ some_computation }}"
+
+- name: Use in shared context
+ command: "process {{ hostvars[groups['target'][0]]['node_value'] }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+**Good**:
+```yaml
+# Use global variable that's accessible everywhere
+- name: Use global configuration
+ command: "process {{ global_config_value }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+#### 2. Explicit Variable Resolution with Fallbacks
+
+**Recommended Pattern**:
+```yaml
+- name: Resolve variable with robust fallback
+ set_fact:
+ active_value: >-
+ {{
+ hostvars[groups['dev'][0]]['target_value']
+ if (groups['dev'] | length > 0 and
+ hostvars[groups['dev'][0]]['target_value'] is defined)
+ else fallback_global_value
+ }}
+ run_once: true
+ delegate_to: localhost
+```
+
+#### 3. Validate Variable Availability
+
+**Add Validation Tasks**:
+```yaml
+- name: Validate required variables are available
+ fail:
+ msg: "Required variable {{ item }} not found in dev node context"
+ when: hostvars[groups['dev'][0]][item] is not defined
+ loop:
+ - target_linux_ref
+ - target_linux_config
+ run_once: true
+ delegate_to: localhost
+```
+
+#### 4. Use Consistent Variable Naming
+
+**Pattern**: Use prefixes to indicate variable scope:
+- `global_*` - Available everywhere
+- `node_*` - Per-node variables
+- `active_*` - Resolved variables for shared operations
+
+### Debugging Variable Scope Issues
+
+#### 1. Add Debug Tasks
+
+```yaml
+- name: Debug variable availability
+ debug:
+ msg: |
+ Groups: {{ groups }}
+ Dev group: {{ groups['dev'] | default([]) }}
+ Hostvars keys: {{ hostvars.keys() | list }}
+ Target var: {{ hostvars[groups['dev'][0]]['target_var'] | default('UNDEFINED') }}
+ run_once: true
+ delegate_to: localhost
+```
+
+#### 2. Check Execution Context
+
+```yaml
+- name: Show execution context
+ debug:
+ msg: |
+ Running on: {{ inventory_hostname }}
+ Delegate to: {{ ansible_delegated_vars | default('none') }}
+ Group names: {{ group_names }}
+ tags: debug
+```
+
+#### 3. Use Ansible Verbose Mode
+
+```bash
+# Run with verbose output to see variable resolution
+make target AV=3 # Ansible verbose level 3
+```
+
+### A/B Testing Variable Resolution Example
+
+The A/B testing feature demonstrates proper variable resolution:
+
+```yaml
+# Step 1: Set per-node variables (runs on dev nodes only)
+- name: Set development kernel parameters for dev nodes
+ set_fact:
+ target_linux_ref: "{{ bootlinux_dev_tree_ref }}"
+ when:
+ - kdevops_baseline_and_dev|bool
+ - bootlinux_ab_different_ref|bool
+ - bootlinux_is_dev_node|default(false)|bool
+
+# Step 2: Resolve for shared operations (robust fallback)
+- name: Determine active kernel parameters for A/B testing with 9P
+ set_fact:
+ active_linux_ref: "{{ bootlinux_dev_tree_ref }}"
+ # Direct use of global var instead of fragile hostvars access
+ when:
+ - kdevops_baseline_and_dev|bool
+ - bootlinux_ab_different_ref|bool
+ - bootlinux_9p|bool
+ run_once: true
+ delegate_to: localhost
+
+# Step 3: Use resolved variable
+- name: Checkout correct git ref for A/B testing with 9P
+ git:
+ version: "{{ active_linux_ref | default(target_linux_ref) }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+### Testing Variable Resolution
+
+When developing features that involve per-node variables:
+
+1. **Test with different HOSTS parameters**:
+ ```bash
+ make target HOSTS=demo-fio-tests # baseline only
+ make target HOSTS=demo-fio-tests-dev # dev only
+ make target # both nodes
+ ```
+
+2. **Test with different configurations**:
+ - A/B testing enabled/disabled
+ - Different node configurations
+ - Varying group memberships
+
+3. **Validate variable values**:
+ ```bash
+ # Check resolved variables
+ grep "active_.*:" extra_vars.yaml
+
+ # Verify node-specific settings
+ make target AV=2 | grep -A5 -B5 "Set.*fact"
+ ```
+
+### Common Patterns to Avoid
+
+#### Anti-Pattern 1: Assuming Variable Availability
+```yaml
+# DON'T: Assume hostvars access will work
+- name: Use dev node variable
+ command: "build {{ hostvars[groups['dev'][0]]['target_ref'] }}"
+```
+
+#### Anti-Pattern 2: Complex Conditional Logic in Variable Access
+```yaml
+# DON'T: Bury complex logic in variable expressions
+- name: Set complex variable
+ set_fact:
+ value: "{{ 'dev' in group_names | ternary(dev_value, baseline_value) if condition else other_value }}"
+```
+
+#### Anti-Pattern 3: Side Effects in Variable Resolution
+```yaml
+# DON'T: Modify state during variable resolution
+- name: Set variable with side effects
+ set_fact:
+ computed_value: "{{ some_value }}"
+ changed_when: true # Misleading change indication
+```
+
+### Recommended Patterns
+
+#### Pattern 1: Explicit Variable Resolution Phase
+```yaml
+# Phase 1: Collect per-node data
+- name: Collect node-specific configurations
+ set_fact:
+ node_config: "{{ local_config }}"
+
+# Phase 2: Resolve for shared operations
+- name: Resolve shared configuration
+ set_fact:
+ shared_config: "{{ resolved_value }}"
+ run_once: true
+ delegate_to: localhost
+
+# Phase 3: Execute with resolved config
+- name: Execute shared operation
+ command: "process {{ shared_config }}"
+ run_once: true
+ delegate_to: localhost
+```
+
+#### Pattern 2: Configuration-Driven Variable Resolution
+```yaml
+# Use configuration variables that are globally accessible
+- name: Resolve kernel reference
+ set_fact:
+ active_kernel_ref: >-
+ {{
+ bootlinux_dev_tree_ref
+ if (kdevops_baseline_and_dev|bool and bootlinux_ab_different_ref|bool)
+ else target_linux_ref
+ }}
+ run_once: true
+ delegate_to: localhost
+```
+
+This approach avoids the fragile `hostvars` access pattern and relies on
+configuration variables that are available in all execution contexts.
+
## Prompt Examples
Refer to PROMPTS.md for example set of prompts used to generate code on
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 32/33] CLAUDE.md: add don't BS rules
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (30 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 31/33] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 33/33] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names Luis Chamberlain
2025-07-29 20:07 ` [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
Add prominent section explicitly forbidding AI assistance from
generating, synthesizing, mocking, or fabricating any test results of
any kind. This rule was added after catching AI attempting to create
synthetic performance data when encountering issues with VM provisioning
instead of properly debugging and running actual tests on real systems.
kdevops is a real Linux kernel testing framework where all results must
come from actual execution on real Device Under Test (DUT) systems.
Fake results undermine the entire purpose and could affect important
development decisions.
Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
CLAUDE.md | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/CLAUDE.md b/CLAUDE.md
index 7764bc67..c52774b5 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -13,6 +13,37 @@ and complex testing laboratories for kernel subsystems.
**Main Repository**: https://github.com/linux-kdevops/kdevops
**License**: copyleft-next-0.3.1
+## ⚠️ CRITICAL RULE: NEVER FAKE TEST RESULTS
+
+**ABSOLUTELY NEVER generate, synthesize, mock, or fake test results of any kind.**
+
+kdevops is a professional testing framework used for Linux kernel development and
+performance analysis. All test results MUST come from actual execution on real
+Device Under Test (DUT) systems.
+
+### What this means:
+- **NEVER** create synthetic performance data or benchmark results
+- **NEVER** generate mock IOPS, bandwidth, latency, or throughput numbers
+- **NEVER** create fake JSON test output or fabricated metrics
+- **ALWAYS** run actual tests on real VMs, bare metal, or cloud instances
+- **ALWAYS** collect real data from actual fio, fstests, blktests execution
+- **ALWAYS** verify that test systems are running and accessible before analysis
+
+### Valid approaches:
+- ✅ Execute real tests: `ansible -i hosts all -m shell -a "fio --output-format=json ..."`
+- ✅ Collect actual JSON output from running VMs
+- ✅ Parse and analyze real performance data from live systems
+- ✅ Generate graphs and reports from actual test execution results
+
+### Forbidden approaches:
+- ❌ Creating synthetic performance numbers for demonstrations
+- ❌ Generating mock test results for visualization examples
+- ❌ Fabricating benchmark data to show workflows
+- ❌ Using placeholder values like "let's assume 50K IOPS"
+
+**Violation of this rule undermines the entire purpose of the kdevops testing framework
+and produces misleading results that could affect important development decisions.**
+
## Core Architecture
### Build System
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 33/33] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (31 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 32/33] CLAUDE.md: add don't BS rules Luis Chamberlain
@ 2025-07-28 1:14 ` Luis Chamberlain
2025-07-29 20:07 ` [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-28 1:14 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops; +Cc: Luis Chamberlain
The variable fs_config_path is not defined when we don't enable
fstests and so we'll get a warning about it not being defined.
Fix this by not using it on task names.
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
playbooks/roles/gen_hosts/tasks/main.yml | 4 ++--
playbooks/roles/gen_nodes/tasks/main.yml | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml
index 70d543ad..a60da620 100644
--- a/playbooks/roles/gen_hosts/tasks/main.yml
+++ b/playbooks/roles/gen_hosts/tasks/main.yml
@@ -49,12 +49,12 @@
- ansible_hosts_template.stat.exists
tags: vars
-- name: Verify fstest config file file exists {{ fs_config_path }}
+- name: Verify fstest config file exists
stat:
path: "{{ fs_config_path }}"
register: fstests_config_file_reg
when:
- - is_fstests
+ - is_fstests|bool
- name: Generate the Ansible hosts file for a Linux kernel build
tags: [ 'hosts' ]
diff --git a/playbooks/roles/gen_nodes/tasks/main.yml b/playbooks/roles/gen_nodes/tasks/main.yml
index ae017ee8..4192ae89 100644
--- a/playbooks/roles/gen_nodes/tasks/main.yml
+++ b/playbooks/roles/gen_nodes/tasks/main.yml
@@ -109,7 +109,7 @@
- ansible_nodes_template.stat.exists
tags: vars
-- name: Verify fstest config file file exists {{ fs_config_path }}
+- name: Verify fstest config file exists
stat:
path: "{{ fs_config_path }}"
register: fstests_config_file_reg
--
2.47.2
^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/33] remove vagrant and bootlinux shape up
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
` (32 preceding siblings ...)
2025-07-28 1:14 ` [PATCH v2 33/33] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names Luis Chamberlain
@ 2025-07-29 20:07 ` Luis Chamberlain
33 siblings, 0 replies; 35+ messages in thread
From: Luis Chamberlain @ 2025-07-29 20:07 UTC (permalink / raw)
To: Chuck Lever, Daniel Gomez, kdevops
On Sun, Jul 27, 2025 at 06:14:00PM -0700, Luis Chamberlain wrote:
> On this v2 I just dropped the accidental patches which Chuck asked for
> and merged the fixes onto his patches. That's it.
I've rebased and pushed.
Luis
^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2025-07-29 20:07 UTC | newest]
Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 02/33] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 03/33] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 04/33] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 05/33] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 06/33] docs: remove Vagrant-specific documentation files Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 07/33] Remove all remaining Vagrant references from codebase Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 08/33] terraform: Clean up the destroy tasks Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 09/33] Switch to the cloud.terraform.terraform module Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 10/33] terraform: Make use of the new "terraform_output" module Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 11/33] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 12/33] terraform: Remove "delegate_to: localhost" Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 13/33] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 14/33] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 15/33] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 16/33] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 17/33] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 18/33] bootlinux: Select the kernel .config earlier Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 19/33] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 20/33] bootlinux: Move tasks for building on target nodes " Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 21/33] bootlinux: Clean up a grub set-up task Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 22/33] bootlinux: Harden update-grub/install.yml Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 23/33] Add a guest/instance for building the test kernel Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 24/33] bootlinux: Add a new builder choice Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 25/33] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 26/33] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 27/33] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 28/33] bootlinux: Install pre-built kernels from packages Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 29/33] bootlinux: Add an option to build with clang instead of gcc Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 30/33] Makefile: add make style for style checking Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 31/33] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 32/33] CLAUDE.md: add don't BS rules Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 33/33] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names Luis Chamberlain
2025-07-29 20:07 ` [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox