From 58bd128c63504c0e9daa0504cbc00f2bf7ab7e29 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 26 Jul 2025 15:24:05 -0400 Subject: [PATCH 01/36] scripts: Update gen_ssh_key.sh Drop the -b option. We're stuck with RSA because some cloud providers require it, but ssh-keygen's default bit length for RSA keys is 3072, which is better than the value specified here. Leaving off -b means when ssh-keygen increases its default, kdevops will get that change without human intervention. I'm also adding a -C option here because I got really confused when I looked at the terraform state imported back from the provider. The public ssh key comment was "cel@ ... ". I thought that this was my personal public key. It's is not my public key, thankfully. Rather the comment chosen by ssh-keygen happens to be the same as the one in my personal public key. So let's pick a more distinct eye-catcher to avoid future myocardial infarction. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- scripts/gen_ssh_key.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gen_ssh_key.sh b/scripts/gen_ssh_key.sh index 72bdb2269..4f656fe35 100755 --- a/scripts/gen_ssh_key.sh +++ b/scripts/gen_ssh_key.sh @@ -5,4 +5,4 @@ source ${TOPDIR}/.config source ${TOPDIR}/scripts/lib.sh echo "Creating $KDEVOPS_SSH_PRIVKEY" -ssh-keygen -b 2048 -t rsa -f $KDEVOPS_SSH_PRIVKEY -q -N "" +ssh-keygen -t rsa -C generated-by-kdevops -f $KDEVOPS_SSH_PRIVKEY -q -N "" From 727e5b3d2da322d2a17153e0012e644837c64419 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 25 Jul 2025 14:23:00 -0400 Subject: [PATCH 02/36] terraform/azure: Fix count of managed disks The Kconfig choice menu allows the selection of a single disk, but there was no default setting for that, causing the gen_tfvars playbook to fail with: ansible.errors.AnsibleUndefinedVariable: 'terraform_azure_managed_disks_per_instance' is undefined. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/azure/kconfigs/Kconfig.storage | 1 + 1 file changed, 1 insertion(+) diff --git a/terraform/azure/kconfigs/Kconfig.storage b/terraform/azure/kconfigs/Kconfig.storage index 5bfe1441c..d4885163a 100644 --- a/terraform/azure/kconfigs/Kconfig.storage +++ b/terraform/azure/kconfigs/Kconfig.storage @@ -64,6 +64,7 @@ endchoice config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE int output yaml + default 1 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_1 default 2 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_2 default 3 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_3 default 4 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4 From c8f0da2fcf29f1e3fee3b9fa463fa6256694c06e Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 26 Jul 2025 20:13:57 -0400 Subject: [PATCH 03/36] terraform/azure: Remove tags from terraform configuration Clean up: as far as I can tell these are unused anywhere. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/azure/main.tf | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf index 2df0dc609..e1d99cecf 100644 --- a/terraform/azure/main.tf +++ b/terraform/azure/main.tf @@ -3,10 +3,6 @@ resource "azurerm_resource_group" "kdevops_group" { name = "kdevops_resource_group" location = var.azure_location - - tags = { - environment = "kdevops tests" - } } locals { @@ -18,10 +14,6 @@ resource "azurerm_virtual_network" "kdevops_network" { address_space = [local.kdevops_private_net] location = var.azure_location resource_group_name = azurerm_resource_group.kdevops_group.name - - tags = { - environment = "kdevops tests" - } } resource "azurerm_subnet" "kdevops_subnet" { @@ -37,10 +29,6 @@ resource "azurerm_public_ip" "kdevops_publicip" { location = var.azure_location resource_group_name = azurerm_resource_group.kdevops_group.name allocation_method = "Static" - - tags = { - environment = "kdevops tests" - } } resource "azurerm_network_security_group" "kdevops_sg" { @@ -59,10 +47,6 @@ resource "azurerm_network_security_group" "kdevops_sg" { source_address_prefix = "*" destination_address_prefix = "*" } - - tags = { - environment = "kdevops tests" - } } resource "azurerm_network_interface_security_group_association" "kdevops_sg_assoc" { @@ -83,10 +67,6 @@ resource "azurerm_network_interface" "kdevops_nic" { private_ip_address_allocation = "Dynamic" public_ip_address_id = element(azurerm_public_ip.kdevops_publicip.*.id, count.index) } - - tags = { - environment = "kdevops tests" - } } resource "azurerm_linux_virtual_machine" "kdevops_vm" { @@ -132,10 +112,6 @@ resource "azurerm_linux_virtual_machine" "kdevops_vm" { username = var.ssh_config_user public_key = var.ssh_config_pubkey_file != "" ? file(var.ssh_config_pubkey_file) : "" } - - tags = { - environment = "kdevops tests" - } } module "kdevops_managed_disks" { From b169913e672e526898286654bc99d89dc56d210f Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 25 Jul 2025 18:08:09 -0400 Subject: [PATCH 04/36] terraform/azure: Enable network acceleration This option appears to be on by default when creating VM machines via the Azure console. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/azure/main.tf | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf index e1d99cecf..c178c34d0 100644 --- a/terraform/azure/main.tf +++ b/terraform/azure/main.tf @@ -56,10 +56,11 @@ resource "azurerm_network_interface_security_group_association" "kdevops_sg_asso } resource "azurerm_network_interface" "kdevops_nic" { - count = local.kdevops_num_boxes - name = format("kdevops_nic_%02d", count.index + 1) - location = var.azure_location - resource_group_name = azurerm_resource_group.kdevops_group.name + count = local.kdevops_num_boxes + accelerated_networking_enabled = true + name = format("kdevops_nic_%02d", count.index + 1) + location = var.azure_location + resource_group_name = azurerm_resource_group.kdevops_group.name ip_configuration { name = "kdevops_nic_configuration" From 9fca95330d93d9181a9de55fc65206bd11b0db66 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Wed, 30 Jul 2025 20:29:41 -0400 Subject: [PATCH 05/36] terraform/azure: Make the resource group name a variable Resource groups appear to be global. To run more than one instance of kdevops in Azure at the same time, each instance needs a unique resource group. Hoist the resource group name into Kconfig so that it can be set to a unique value. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- .../templates/azure/terraform.tfvars.j2 | 1 + terraform/azure/kconfigs/Kconfig.location | 16 ++++++++++++++++ terraform/azure/main.tf | 2 +- terraform/azure/vars.tf | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 index 8be48e800..7ce0f6170 100644 --- a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 +++ b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 @@ -1,4 +1,5 @@ azure_subscription_id = "{{ terraform_azure_subscription_id }}" +azure_resource_group_name = "{{ terraform_azure_resource_group_name }}" azure_location = "{{ terraform_azure_location }}" azure_vmsize = "{{ terraform_azure_vm_size }}" azure_image_publisher = "{{ terraform_azure_image_publisher }}" diff --git a/terraform/azure/kconfigs/Kconfig.location b/terraform/azure/kconfigs/Kconfig.location index a7e8bae37..2cc0e419d 100644 --- a/terraform/azure/kconfigs/Kconfig.location +++ b/terraform/azure/kconfigs/Kconfig.location @@ -134,3 +134,19 @@ config TERRAFORM_AZURE_LOCATION default "westus2" if TERRAFORM_AZURE_REGION_WESTUS2 default "westus3" if TERRAFORM_AZURE_REGION_WESTUS3 default "westcentralus" if TERRAFORM_AZURE_REGION_WESTCENTRALUS + +config TERRAFORM_AZURE_RESOURCE_GROUP_NAME + string "Azure resource group name" + output yaml + default "kdevops_resource_group" + help + An Azure resource group is a container that holds related + resources so they can be managed as a single unit. These + resources share the same life cycle and are deployed, + updated, and deleted together. Resource groups are global + to your subscription. + + To run concurrent kdevops jobs in Azure, each run must + have a unique resouce group name. + + https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/overview#resource-groups diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf index c178c34d0..8dcead78b 100644 --- a/terraform/azure/main.tf +++ b/terraform/azure/main.tf @@ -1,7 +1,7 @@ # Azure terraform provider main resource "azurerm_resource_group" "kdevops_group" { - name = "kdevops_resource_group" + name = var.azure_resource_group_name location = var.azure_location } diff --git a/terraform/azure/vars.tf b/terraform/azure/vars.tf index 2d0685790..dd3c20ed0 100644 --- a/terraform/azure/vars.tf +++ b/terraform/azure/vars.tf @@ -33,6 +33,11 @@ variable "azure_managed_disks_tier" { type = string } +variable "azure_resource_group_name" { + description = "Name of the set of resources for this run" + type = string +} + variable "azure_subscription_id" { description = "Your Azure subscription ID" type = string From 7a1b84172aecedb8275779a22f8468d27b5d409e Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 12 Aug 2025 20:06:48 -0400 Subject: [PATCH 06/36] terraform/azure: Remove the provider version constraint The most recent version 3 release of hashicorp/azurerm was 3.117.1, released on February 28, 2025. Version 3 is no longer getting fixes. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/azure/provider.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/azure/provider.tf b/terraform/azure/provider.tf index 97baad424..4b6380bbc 100644 --- a/terraform/azure/provider.tf +++ b/terraform/azure/provider.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "~>3" + version = "> 4" } } } From a7aad220b8a17c6405bde631372a06ff3193cfc3 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sun, 17 Aug 2025 13:26:47 -0400 Subject: [PATCH 07/36] terraform/azure: Update the RHEL publishers Make the most recent RHEL 9 update (update 6, announced two months ago) the default selection. Since update 10 has been available for more than a year, add a RHEL 8.10 menu choice. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/azure/kconfigs/publishers/Kconfig.rhel | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/terraform/azure/kconfigs/publishers/Kconfig.rhel b/terraform/azure/kconfigs/publishers/Kconfig.rhel index 16ec92903..3a6a7d9a1 100644 --- a/terraform/azure/kconfigs/publishers/Kconfig.rhel +++ b/terraform/azure/kconfigs/publishers/Kconfig.rhel @@ -4,7 +4,7 @@ if TARGET_ARCH_X86_64 choice prompt "Red Hat Enterprise Linux release" - default TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_5 + default TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_6 help This option specifies which of a publisher's offers to use when creating kdevops compute instances. @@ -21,6 +21,12 @@ config TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_9 This option sets the OS image to Red Hat Enterprise Linux release 8 update 9. +config TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_10 + bool "RHEL 8.10 x64" + help + This option sets the OS image to Red Hat Enterprise Linux + release 8 update 10. + config TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_5 bool "RHEL 9.5 x64" help @@ -40,6 +46,7 @@ config TERRAFORM_AZURE_IMAGE_OFFER output yaml default "RHEL" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_7_9 default "RHEL" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_9 + default "RHEL" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_10 default "RHEL" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_5 default "RHEL" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_6 @@ -48,6 +55,7 @@ config TERRAFORM_AZURE_IMAGE_SKU output yaml default "7_9" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_7_9 default "8_9" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_9 + default "8_10" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_8_10 default "9_5" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_5 default "9_6" if TERRAFORM_AZURE_IMAGE_LINUX_RHEL_9_6 From 6a45ad0db13ca291a14b922184230778ede746da Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 8 Aug 2025 22:03:17 -0400 Subject: [PATCH 08/36] terraform/oci: Work around oracle/oci provider bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First, I was getting module.volumes[0].oci_core_volume.kdevops_volume_extra[0]: Creating... ╷ │ Error: 400-CannotParseRequest, Incorrectly formatted request. Please refer to our documentation for help. No idea why, though maybe this is the first time I've tried using us-east1 when my home region is us-central. Nothing I tried changed this result, and there's no obvious problem with the way that the oci_core_volume resource is specified, which hasn't changed in many months. All documentation I consulted stated that because the root module explicitly specifies exactly one provider, child modules are supposed to inherit that provider. But that isn't happening here: $ terraform providers Providers required by configuration: . ├── provider[registry.terraform.io/oracle/oci] ~> 6.0 └── module.volumes └── provider[registry.terraform.io/hashicorp/oci] And looks like it's a bug that was never fixed: https://github.com/oracle/terraform-provider-oci/issues/1608 The only workaround I understood was to switch the root module back to using the hashicorp/oci provider so that the root and "volumes" module use the same provider. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/oci/provider.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/terraform/oci/provider.tf b/terraform/oci/provider.tf index 08d0d2c52..610d20595 100644 --- a/terraform/oci/provider.tf +++ b/terraform/oci/provider.tf @@ -2,8 +2,8 @@ terraform { required_version = ">= 0.12.6" required_providers { oci = { - source = "oracle/oci" - version = "~> 6" + source = "hashicorp/oci" + version = "> 7" } } } From 19134f0f849cc0c92917f4ec1d893156473b31e6 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 8 Aug 2025 22:12:58 -0400 Subject: [PATCH 09/36] terraform/oci: Add Kconfig choices for disk performance provisioning Add the vpus_per_gb argument when provisioning disk drives to control how much performance is available. This is similar to the performance settings available for other providers. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- .../templates/oci/terraform.tfvars.j2 | 1 + terraform/oci/kconfigs/Kconfig.storage | 132 ++++++++++++++++++ terraform/oci/main.tf | 1 + terraform/oci/vars.tf | 5 + terraform/oci/volumes/main.tf | 12 +- terraform/oci/volumes/vars.tf | 5 + 6 files changed, 151 insertions(+), 5 deletions(-) diff --git a/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2 index 9c32ea588..0839bfacf 100644 --- a/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2 +++ b/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2 @@ -18,6 +18,7 @@ oci_subnet_ocid = "{{ terraform_oci_subnet_ocid }}" {% endif %} oci_volumes_per_instance = {{ terraform_oci_volumes_per_instance }} oci_volumes_size = {{ terraform_oci_volumes_size }} +oci_vpus_per_gb = {{ terraform_oci_vpus_per_gb }} oci_data_volume_device_file_name = "{{ terraform_oci_data_volume_device_file_name }}" oci_sparse_volume_device_file_name = "{{ terraform_oci_sparse_volume_device_file_name }}" diff --git a/terraform/oci/kconfigs/Kconfig.storage b/terraform/oci/kconfigs/Kconfig.storage index ed872a268..15a2a05bb 100644 --- a/terraform/oci/kconfigs/Kconfig.storage +++ b/terraform/oci/kconfigs/Kconfig.storage @@ -122,6 +122,138 @@ config TERRAFORM_OCI_VOLUMES_SIZE default 4096 if TERRAFORM_OCI_VOLUMES_SIZE_4096G default 8192 if TERRAFORM_OCI_VOLUMES_SIZE_8192G +choice + prompt "Volume Performance Units for each additional volume" + default TERRAFORM_OCI_VPUS_PER_GB_10 + help + Higher VPUs per GB increases maximum IOPS and throughput, + but costs more. For more information, see: + + https://docs.oracle.com/en-us/iaas/Content/Block/Concepts/blockvolumeperformance.htm#vpus + +config TERRAFORM_OCI_VPUS_PER_GB_0 + bool "0 VPUs" + help + Lowest cost. + + 2 IOPS/GB, 3,000 IOPS maximum/volume. + 480 MBPS maximum/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_10 + bool "10 VPUs" + help + Balanced performance. + + 60 IOPS/GB, 25,000 IOPS maximum/volume. + 480 MBPS maximum/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_20 + bool "20 VPUs" + help + Higher performance. + + 75 IOPS/GB, 50,000 IOPS maximum/volume. + 680 MBPS maximum/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_30 + bool "30 VPUs" + help + Ultra high performance. + + 90 IOPS/GB, 75,000 IOPS maximum/volume. + 880 MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_40 + bool "40 VPUs" + help + Ultra high performance. + + 105 IOPS/GB, 100,000 IOPS maximum/volume. + 1,080 MBPS maximum/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_50 + bool "50 VPUs" + help + Ultra high performance. + + 120 IOPS/GB, 125,000 IOPS maximum/volume. + 1,280 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_60 + bool "60 VPUs" + help + Ultra high performance. + + 135 IOPS/GB, 150,000 IOPS maximum/volume. + 1,480 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_70 + bool "70 VPUs" + help + Ultra high performance. + + 150 IOPS/GB, 175,000 IOPS maximum/volume. + 1,680 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_80 + bool "80 VPUs" + help + Ultra high performance. + + 165 IOPS/GB, 200,000 IOPS maximum/volume. + 1,880 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_90 + bool "90 VPUs" + help + Ultra high performance. + + 180 IOPS/GB, 225,000 IOPS maximum/volume. + 2,080 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_100 + bool "100 VPUs" + help + Ultra high performance. + + 195 IOPS/GB, 250,000 IOPS maximum/volume. + 2,280 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_110 + bool "110 VPUs" + help + Ultra high performance. + + 210 IOPS/GB, 275,000 IOPS maximum/volume. + 2,480 max MBPS/volume. + +config TERRAFORM_OCI_VPUS_PER_GB_120 + bool "120 VPUs" + help + Ultra high performance. + + 225 IOPS/GB, 300,000 IOPS maximum/volume. + 2,680 max MBPS/volume. + +endchoice + +config TERRAFORM_OCI_VPUS_PER_GB + int + output yaml + default 0 if TERRAFORM_OCI_VPUS_PER_GB_0 + default 10 if TERRAFORM_OCI_VPUS_PER_GB_10 + default 20 if TERRAFORM_OCI_VPUS_PER_GB_20 + default 30 if TERRAFORM_OCI_VPUS_PER_GB_30 + default 40 if TERRAFORM_OCI_VPUS_PER_GB_40 + default 50 if TERRAFORM_OCI_VPUS_PER_GB_50 + default 60 if TERRAFORM_OCI_VPUS_PER_GB_60 + default 70 if TERRAFORM_OCI_VPUS_PER_GB_70 + default 80 if TERRAFORM_OCI_VPUS_PER_GB_80 + default 90 if TERRAFORM_OCI_VPUS_PER_GB_90 + default 100 if TERRAFORM_OCI_VPUS_PER_GB_100 + default 110 if TERRAFORM_OCI_VPUS_PER_GB_110 + default 120 if TERRAFORM_OCI_VPUS_PER_GB_120 + config TERRAFORM_OCI_DATA_VOLUME_DEVICE_FILE_NAME string "Data volume's device file name" output yaml diff --git a/terraform/oci/main.tf b/terraform/oci/main.tf index d231f2225..1d2d0f82e 100644 --- a/terraform/oci/main.tf +++ b/terraform/oci/main.tf @@ -50,6 +50,7 @@ module "volumes" { vol_instance_name = element(var.kdevops_nodes, count.index) vol_volume_count = var.oci_volumes_per_instance vol_volume_size = var.oci_volumes_size + vol_vpus_per_gb = var.oci_vpus_per_gb } resource "oci_core_vcn" "kdevops_vcn" { diff --git a/terraform/oci/vars.tf b/terraform/oci/vars.tf index c116829fb..401341feb 100644 --- a/terraform/oci/vars.tf +++ b/terraform/oci/vars.tf @@ -98,3 +98,8 @@ variable "oci_volumes_size" { description = "The size of additional block volumes, in gibibytes" type = number } + +variable "oci_vpus_per_gb" { + description = "Volume performance units" + type = number +} diff --git a/terraform/oci/volumes/main.tf b/terraform/oci/volumes/main.tf index 56b9a4760..7483ff728 100644 --- a/terraform/oci/volumes/main.tf +++ b/terraform/oci/volumes/main.tf @@ -1,9 +1,11 @@ resource "oci_core_volume" "kdevops_volume_extra" { - count = var.vol_volume_count - availability_domain = var.vol_availability_domain - display_name = format("kdevops_%s_volume%02d", var.vol_instance_name, count.index + 1) - compartment_id = var.vol_compartment_ocid - size_in_gbs = var.vol_volume_size + count = var.vol_volume_count + availability_domain = var.vol_availability_domain + compartment_id = var.vol_compartment_ocid + display_name = format("kdevops_%s_vol%02d", var.vol_instance_name, count.index + 1) + is_auto_tune_enabled = false + size_in_gbs = var.vol_volume_size + vpus_per_gb = var.vol_vpus_per_gb } locals { diff --git a/terraform/oci/volumes/vars.tf b/terraform/oci/volumes/vars.tf index 57c5e2bf6..ee702c2d7 100644 --- a/terraform/oci/volumes/vars.tf +++ b/terraform/oci/volumes/vars.tf @@ -27,3 +27,8 @@ variable "vol_volume_size" { description = "Size of each volume, in gibibytes" type = number } + +variable "vol_vpus_per_gb" { + description = "Volume performance units" + type = number +} From 421019834013fc7a7c79905778de428e59cf0d88 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 8 Aug 2025 22:09:42 -0400 Subject: [PATCH 10/36] terraform/oci: Enable preemptible compute instances Enabling instance preemption allows the provider to destroy the instance if it needs the resources. The benefit is a 50% reduction in price. Typically, there's nothing on these instances that can't be re-cloned or reproduced. This should really be a Kconfig setting. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/oci/main.tf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/terraform/oci/main.tf b/terraform/oci/main.tf index 1d2d0f82e..45a4b4bc0 100644 --- a/terraform/oci/main.tf +++ b/terraform/oci/main.tf @@ -37,6 +37,13 @@ resource "oci_core_instance" "kdevops_instance" { ssh_authorized_keys = file(var.ssh_config_pubkey_file) } + preemptible_instance_config { + preemption_action { + type = "TERMINATE" + preserve_boot_volume = false + } + } + preserve_boot_volume = false } From bdc5b1fa79e7cf724c04a684c2085b8c180db0a4 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 5 Aug 2025 11:50:27 -0400 Subject: [PATCH 11/36] terraform/aws: Fix zone selection for us_west1 The us_west1 region was missing its zone selection menu. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/aws/kconfigs/Kconfig.location | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/terraform/aws/kconfigs/Kconfig.location b/terraform/aws/kconfigs/Kconfig.location index b457166e0..e5dacb9dd 100644 --- a/terraform/aws/kconfigs/Kconfig.location +++ b/terraform/aws/kconfigs/Kconfig.location @@ -573,11 +573,11 @@ endchoice endif # TERRAFORM_AWS_REGION_US_EAST_2 -if TERRAFORM_AWS_REGION_US_WEST_2 +if TERRAFORM_AWS_REGION_US_WEST_1 choice prompt "AWS availability zone" - default TERRAFORM_AWS_AV_ZONE_US_WEST_2B + default TERRAFORM_AWS_AV_ZONE_US_WEST_1B help This option sets the AWS availablity zone to the specified value. If you wish to expand on this list send a patch after reading this @@ -591,6 +591,23 @@ config TERRAFORM_AWS_AV_ZONE_US_WEST_1B help This option selects the us-west-1b availability zone. +endchoice + +endif # TERRAFORM_AWS_REGION_US_WEST_1 + +if TERRAFORM_AWS_REGION_US_WEST_2 + +choice + prompt "AWS availability zone" + default TERRAFORM_AWS_AV_ZONE_US_WEST_2B + help + This option sets the AWS availablity zone to the specified value. + If you wish to expand on this list send a patch after reading this + list: + + https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html + https://gist.github.com/neilstuartcraig/0ccefcf0887f29b7f240 + config TERRAFORM_AWS_AV_ZONE_US_WEST_2B bool "us-west-2b" help From 9f08836d1f0e5a28bb631c03e0fd5abaf01cf00b Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 18 Aug 2025 10:59:19 -0400 Subject: [PATCH 12/36] Revert "terraform/aws: Add Oracle Linux AMI selections" The Oracle Linux AMIs are only for-pay marketplace options, not created by Amazon itself. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/aws/kconfigs/Kconfig.compute | 4 -- terraform/aws/kconfigs/distros/Kconfig.oracle | 48 ------------------- 2 files changed, 52 deletions(-) delete mode 100644 terraform/aws/kconfigs/distros/Kconfig.oracle diff --git a/terraform/aws/kconfigs/Kconfig.compute b/terraform/aws/kconfigs/Kconfig.compute index bae0ea1c9..4b9c6efb6 100644 --- a/terraform/aws/kconfigs/Kconfig.compute +++ b/terraform/aws/kconfigs/Kconfig.compute @@ -99,9 +99,6 @@ config TERRAFORM_AWS_DISTRO_DEBIAN config TERRAFORM_AWS_DISTRO_FEDORA bool "Fedora Core" -config TERRAFORM_AWS_DISTRO_OL - bool "Oracle Linux" - config TERRAFORM_AWS_DISTRO_RHEL bool "Red Hat Enterprise Linux" @@ -116,7 +113,6 @@ endchoice source "terraform/aws/kconfigs/distros/Kconfig.amazon" source "terraform/aws/kconfigs/distros/Kconfig.debian" source "terraform/aws/kconfigs/distros/Kconfig.fedora" -source "terraform/aws/kconfigs/distros/Kconfig.oracle" source "terraform/aws/kconfigs/distros/Kconfig.rhel" source "terraform/aws/kconfigs/distros/Kconfig.sles" source "terraform/aws/kconfigs/distros/Kconfig.custom" diff --git a/terraform/aws/kconfigs/distros/Kconfig.oracle b/terraform/aws/kconfigs/distros/Kconfig.oracle deleted file mode 100644 index fd4166c45..000000000 --- a/terraform/aws/kconfigs/distros/Kconfig.oracle +++ /dev/null @@ -1,48 +0,0 @@ -if TERRAFORM_AWS_DISTRO_OL - -config TERRAFORM_AWS_AMI_OWNER - string - output yaml - default "amazon" - -if TARGET_ARCH_X86_64 - -choice - prompt "Oracle Linux release" - default TERRAFORM_AWS_OL9_X86_64 - -config TERRAFORM_AWS_OL8_X86_64 - bool "Oracle Linux 8 (x86)" - -config TERRAFORM_AWS_OL9_X86_64 - bool "Oracle Linux 9 (x86)" - -endchoice - -config TERRAFORM_AWS_NS - string - output yaml - default "Oracle-Linux-8.*x86_64-*" if TERRAFORM_AWS_OL8_X86_64 - default "Oracle-Linux-9.*x86_64-*" if TERRAFORM_AWS_OL9_X86_64 - -endif # TARGET_ARCH_X86_64 - -if TARGET_ARCH_ARM64 - -choice - prompt "Oracle Linux release" - default TERRAFORM_AWS_OL9_ARM64 - -config TERRAFORM_AWS_OL9_ARM64 - bool "Oracle Linux 9 (arm64)" - -endchoice - -config TERRAFORM_AWS_NS - string - output yaml - default "Oracle-Linux-9.*arm64-*" if TERRAFORM_AWS_OL9_ARM64 - -endif # TARGET_ARCH_ARM64 - -endif # TERRAFORM_AWS_DISTRO_OL From 345f222ff4d989f5b777e67b4ccefbfb607a290c Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 18 Aug 2025 21:25:26 -0400 Subject: [PATCH 13/36] terraform/aws: Remove unused terraform tags Clean up. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/aws/main.tf | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/terraform/aws/main.tf b/terraform/aws/main.tf index 8b343484f..82a936c77 100644 --- a/terraform/aws/main.tf +++ b/terraform/aws/main.tf @@ -15,9 +15,6 @@ resource "aws_vpc" "kdevops_vpc" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true - tags = { - Name = "kdevops" - } } resource "aws_subnet" "kdevops_subnet" { @@ -132,10 +129,6 @@ resource "aws_instance" "kdevops_instance" { data.template_cloudinit_config.kdevops_config.*.rendered, count.index, ) - - tags = { - Name = element(var.kdevops_nodes, count.index), - } } module "kdevops_ebs_volumes" { @@ -158,9 +151,6 @@ resource "aws_eip" "kdevops_eip" { resource "aws_internet_gateway" "kdevops_gw" { vpc_id = aws_vpc.kdevops_vpc.id - tags = { - Name = "kdevops-gw" - } } resource "aws_route_table" "kdevops_rt" { @@ -169,9 +159,6 @@ resource "aws_route_table" "kdevops_rt" { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.kdevops_gw.id } - tags = { - Name = "kdevops_rt" - } } resource "aws_route_table_association" "kdevops_rt_assoc" { From 26452451d24a4ed64066ee79cddc167207c7b184 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 18 Aug 2025 11:55:19 -0400 Subject: [PATCH 14/36] terraform/GCE: Fix the default disk throughput values Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/gce/kconfigs/Kconfig.storage | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/terraform/gce/kconfigs/Kconfig.storage b/terraform/gce/kconfigs/Kconfig.storage index a71a5d627..717f50dfe 100644 --- a/terraform/gce/kconfigs/Kconfig.storage +++ b/terraform/gce/kconfigs/Kconfig.storage @@ -195,14 +195,14 @@ config TERRAFORM_GCE_DISK_IOPS int "Provisioned IOPS for each attached disk" output yaml range 125 120000 - default 240 + default 3000 depends on TERRAFORM_GCE_DISK_NEEDS_IOPS config TERRAFORM_GCE_DISK_THROUGHPUT int "Provisioned throughput for each attached disk" output yaml - range 125 600 - default 240 + range 125 2400 + default 300 depends on TERRAFORM_GCE_DISK_NEEDS_THROUGHPUT config TERRAFORM_GCE_DATA_VOLUME_DEVICE_FILE_NAME From b2e009f765df0cd4ee4a97d9e8002989d775f376 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 19 Aug 2025 11:51:27 -0400 Subject: [PATCH 15/36] terraform/gce: Remove unused tags Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/gce/main.tf | 2 -- 1 file changed, 2 deletions(-) diff --git a/terraform/gce/main.tf b/terraform/gce/main.tf index 0e8120686..816f43098 100644 --- a/terraform/gce/main.tf +++ b/terraform/gce/main.tf @@ -9,8 +9,6 @@ resource "google_compute_instance" "kdevops_instance" { machine_type = var.gce_machine_type zone = var.gce_zone - tags = ["kdevops"] - boot_disk { initialize_params { image = data.google_compute_image.kdevops_image.self_link From 06ef40f1403ea027b20baccc5d42da804f6fb6ef Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 25 Aug 2025 21:20:08 -0400 Subject: [PATCH 16/36] terraform/gce: Remove support for Fedora Unlike the other Linux distributions, Fedora requires some cloud-init magic to set up the log-in user. I don't feel like digging into that right now, and no one is demanding that kdevops support Fedora on GCE at the moment. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/gce/kconfigs/Kconfig.compute | 4 - terraform/gce/kconfigs/images/Kconfig.fedora | 95 -------------------- 2 files changed, 99 deletions(-) delete mode 100644 terraform/gce/kconfigs/images/Kconfig.fedora diff --git a/terraform/gce/kconfigs/Kconfig.compute b/terraform/gce/kconfigs/Kconfig.compute index e647c9bb2..0d3ae98e5 100644 --- a/terraform/gce/kconfigs/Kconfig.compute +++ b/terraform/gce/kconfigs/Kconfig.compute @@ -77,9 +77,6 @@ config TERRAFORM_GCE_DISTRO_CENTOS config TERRAFORM_GCE_DISTRO_DEBIAN bool "Debian" -config TERRAFORM_GCE_DISTRO_FEDORA - bool "Fedora" - config TERRAFORM_GCE_DISTRO_OL bool "Oracle Linux" @@ -99,7 +96,6 @@ endchoice source "terraform/gce/kconfigs/images/Kconfig.centos" source "terraform/gce/kconfigs/images/Kconfig.debian" -source "terraform/gce/kconfigs/images/Kconfig.fedora" source "terraform/gce/kconfigs/images/Kconfig.oracle" source "terraform/gce/kconfigs/images/Kconfig.opensuse" source "terraform/gce/kconfigs/images/Kconfig.rhel" diff --git a/terraform/gce/kconfigs/images/Kconfig.fedora b/terraform/gce/kconfigs/images/Kconfig.fedora deleted file mode 100644 index 90999617f..000000000 --- a/terraform/gce/kconfigs/images/Kconfig.fedora +++ /dev/null @@ -1,95 +0,0 @@ -if TERRAFORM_GCE_DISTRO_FEDORA - -config TERRAFORM_GCE_IMAGE_PROJECT - string - output yaml - default "fedora-coreos-cloud" - -config TERRAFORM_GCE_IMAGE_SIZE - int - output yaml - default 10 - -if TARGET_ARCH_X86_64 - -choice - prompt "Fedora stream to use" - default TERRAFORM_GCE_IMAGE_FEDORA_STABLE_X86_64 - -config TERRAFORM_GCE_IMAGE_FEDORA_STABLE_X86_64 - bool "stable (x86)" - help - The stable stream is the most reliable stream offered with - changes only reaching that stream after spending a period - of time in the testing stream. - -config TERRAFORM_GCE_IMAGE_FEDORA_TESTING_X86_64 - bool "testing (x86)" - help - The testing stream represents what is coming in the next - stable release. Content in this stream is updated - regularly and offers our community an opportunity to catch - breaking changes before they hit the stable stream. - -config TERRAFORM_GCE_IMAGE_FEDORA_NEXT_X86_64 - bool "next (x86)" - help - The next stream represents the future. It will often be - used to experiment with new features and also test out - rebases of our platform on top of the next major version - of Fedora. The content in the next stream will also - eventually filter down into testing and on to stable. - -endchoice - -config TERRAFORM_GCE_IMAGE_FAMILY - string - output yaml - default "fedora-coreos-stable" if TERRAFORM_GCE_IMAGE_FEDORA_STABLE_X86_64 - default "fedora-coreos-testing" if TERRAFORM_GCE_IMAGE_FEDORA_TESTING_X86_64 - default "fedora-coreos-next" if TERRAFORM_GCE_IMAGE_FEDORA_NEXT_X86_64 - -endif # TARGET_ARCH_X86_64 - -if TARGET_ARCH_ARM64 - -choice - prompt "Fedora stream to use" - default TERRAFORM_GCE_IMAGE_FEDORA_STABLE_ARM64 - -config TERRAFORM_GCE_IMAGE_FEDORA_STABLE_ARM64 - bool "stable (arm64)" - help - The stable stream is the most reliable stream offered with - changes only reaching that stream after spending a period - of time in the testing stream. - -config TERRAFORM_GCE_IMAGE_FEDORA_TESTING_ARM64 - bool "testing (arm64)" - help - The testing stream represents what is coming in the next - stable release. Content in this stream is updated - regularly and offers our community an opportunity to catch - breaking changes before they hit the stable stream. - -config TERRAFORM_GCE_IMAGE_FEDORA_NEXT_ARM64 - bool "next (arm64)" - help - The next stream represents the future. It will often be - used to experiment with new features and also test out - rebases of our platform on top of the next major version - of Fedora. The content in the next stream will also - eventually filter down into testing and on to stable. - -endchoice - -config TERRAFORM_GCE_IMAGE_FAMILY - string - output yaml - default "fedora-coreos-stable-arm64" if TERRAFORM_GCE_IMAGE_FEDORA_STABLE_ARM64 - default "fedora-coreos-testing-arm64" if TERRAFORM_GCE_IMAGE_FEDORA_TESTING_ARM64 - default "fedora-coreos-next-arm64" if TERRAFORM_GCE_IMAGE_FEDORA_NEXT_ARM64 - -endif # TARGET_ARCH_ARM64 - -endif # TERRAFORM_GCE_DISTRO_FEDORA From 5b9d6744ebb29573d95e39b8f11a833144a02885 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 26 Aug 2025 18:12:32 -0400 Subject: [PATCH 17/36] terraform/gce: Update existing machine types and introduce new ones Add a spectrum of cost and performance choices, plus a new GPU platform. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/gce/kconfigs/Kconfig.compute | 8 +++ .../gce/kconfigs/machines/Kconfig.a2-standard | 56 ++++++++++++++++++ .../gce/kconfigs/machines/Kconfig.c3-standard | 41 +++++++++++++ .../kconfigs/machines/Kconfig.c3d-standard | 46 +++++++++++++++ .../gce/kconfigs/machines/Kconfig.c4-standard | 23 +++++--- .../kconfigs/machines/Kconfig.c4a-standard | 57 ++++++++++++++++++ .../kconfigs/machines/Kconfig.c4d-standard | 51 ++++++++++++++++ .../gce/kconfigs/machines/Kconfig.e2-highcpu | 58 +++++++++++++++++++ .../gce/kconfigs/machines/Kconfig.e2-standard | 58 +++++++++++++++++++ .../gce/kconfigs/machines/Kconfig.n1-highcpu | 55 ++++++++++++++++++ .../gce/kconfigs/machines/Kconfig.n1-standard | 26 +++++---- .../gce/kconfigs/machines/Kconfig.n2-highcpu | 16 +++-- .../gce/kconfigs/machines/Kconfig.n2-standard | 16 +++-- .../gce/kconfigs/machines/Kconfig.n2d-highcpu | 15 +++-- .../kconfigs/machines/Kconfig.n2d-standard | 17 +++--- .../gce/kconfigs/machines/Kconfig.n4-highcpu | 16 +++-- .../gce/kconfigs/machines/Kconfig.n4-standard | 16 +++-- 17 files changed, 503 insertions(+), 72 deletions(-) create mode 100644 terraform/gce/kconfigs/machines/Kconfig.a2-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.c3-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.c3d-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.c4a-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.c4d-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.e2-highcpu create mode 100644 terraform/gce/kconfigs/machines/Kconfig.e2-standard create mode 100644 terraform/gce/kconfigs/machines/Kconfig.n1-highcpu diff --git a/terraform/gce/kconfigs/Kconfig.compute b/terraform/gce/kconfigs/Kconfig.compute index 0d3ae98e5..b0c999293 100644 --- a/terraform/gce/kconfigs/Kconfig.compute +++ b/terraform/gce/kconfigs/Kconfig.compute @@ -55,14 +55,22 @@ config TERRAFORM_GCE_MACHINE_FAMILY_C4_STANDARD endchoice +source "terraform/gce/kconfigs/machines/Kconfig.e2-highcpu" +source "terraform/gce/kconfigs/machines/Kconfig.e2-standard" source "terraform/gce/kconfigs/machines/Kconfig.n1-standard" +source "terraform/gce/kconfigs/machines/Kconfig.n1-highcpu" source "terraform/gce/kconfigs/machines/Kconfig.n2-standard" source "terraform/gce/kconfigs/machines/Kconfig.n2-highcpu" source "terraform/gce/kconfigs/machines/Kconfig.n2d-standard" source "terraform/gce/kconfigs/machines/Kconfig.n2d-highcpu" source "terraform/gce/kconfigs/machines/Kconfig.n4-standard" source "terraform/gce/kconfigs/machines/Kconfig.n4-highcpu" +source "terraform/gce/kconfigs/machines/Kconfig.c3-standard" +source "terraform/gce/kconfigs/machines/Kconfig.c3d-standard" source "terraform/gce/kconfigs/machines/Kconfig.c4-standard" +source "terraform/gce/kconfigs/machines/Kconfig.c4a-standard" +source "terraform/gce/kconfigs/machines/Kconfig.c4d-standard" +source "terraform/gce/kconfigs/machines/Kconfig.a2-standard" choice prompt "OS Distributor" diff --git a/terraform/gce/kconfigs/machines/Kconfig.a2-standard b/terraform/gce/kconfigs/machines/Kconfig.a2-standard new file mode 100644 index 000000000..5e54db36b --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.a2-standard @@ -0,0 +1,56 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_A2_HIGHGPU + +choice + prompt "GCE Machine Type" + default TERRAFORM_GCE_MACHINE_A2_HIGHGPU_1G + help + A2 High GPU machine types have a fixed number of A100 + 40GB GPUs. + +config TERRAFORM_GCE_MACHINE_A2_HIGHGPU_1G + bool "a2-highgpu-1g" + help + 12 vCPUs, 85GB of memory, and 1 GPU with 40GB of GPU + memory. + +config TERRAFORM_GCE_MACHINE_A2_HIGHGPU_2G + bool "a2-highgpu-2g" + help + 24 vCPUs, 170GB of memory, and 2 GPUs with 80GB of GPU + memory. + +config TERRAFORM_GCE_MACHINE_A2_HIGHGPU_4G + bool "a2-highgpu-4g" + help + 48 vCPUs, 340GB of memory, and 4 GPUs with 160GB of GPU + memory. + +config TERRAFORM_GCE_MACHINE_A2_HIGHGPU_8G + bool "a2-highgpu-8g" + help + 96 vCPUs, 680GB of memory, and 8 GPUs with 320GB of GPU + memory. + +config TERRAFORM_GCE_MACHINE_A2_HIGHGPU_16G + bool "a2-highgpu-16g" + help + 96 vCPUs, 1360GB of memory, and 16 GPUs with 640GB of GPU + memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "a2-highgpu-1g" if TERRAFORM_GCE_MACHINE_A2_HIGHGPU_1G + default "a2-highgpu-2g" if TERRAFORM_GCE_MACHINE_A2_HIGHGPU_2G + default "a2-highgpu-4g" if TERRAFORM_GCE_MACHINE_A2_HIGHGPU_4G + default "a2-highgpu-8g" if TERRAFORM_GCE_MACHINE_A2_HIGHGPU_8G + default "a2-highgpu-16g" if TERRAFORM_GCE_MACHINE_A2_HIGHGPU_16G + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "pd-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_A2_HIGHGPU diff --git a/terraform/gce/kconfigs/machines/Kconfig.c3-standard b/terraform/gce/kconfigs/machines/Kconfig.c3-standard new file mode 100644 index 000000000..183ac315c --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.c3-standard @@ -0,0 +1,41 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_C3_STANDARD + +choice + prompt "GCE Machine Type" + default TERRAFORM_GCE_MACHINE_C3_STANDARD_4 + help + C3 VMs are powered by the 4th generation Intel Xeon + Scalable processors (code-named Sapphire Rapids), DDR5 + memory, and Titanium, enabling higher levels of networking + performance, isolation and security. + +config TERRAFORM_GCE_MACHINE_C3_STANDARD_4 + bool "c3-standard-4" + help + 4 vCPUs (2 cores) and 16GB of memory. + +config TERRAFORM_GCE_MACHINE_C3_STANDARD_8 + bool "c3-standard-8" + help + 8 vCPUs (4 cores) and 32GB of memory. + +config TERRAFORM_GCE_MACHINE_C3_STANDARD_22 + bool "c3-standard-22" + help + 22 vCPUs (11 cores) and 88GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "c3-standard-4" if TERRAFORM_GCE_MACHINE_C3_STANDARD_4 + default "c3-standard-8" if TERRAFORM_GCE_MACHINE_C3_STANDARD_8 + default "c3-standard-22" if TERRAFORM_GCE_MACHINE_C3_STANDARD_22 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "hyperdisk-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_C3_STANDARD diff --git a/terraform/gce/kconfigs/machines/Kconfig.c3d-standard b/terraform/gce/kconfigs/machines/Kconfig.c3d-standard new file mode 100644 index 000000000..4af821e5a --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.c3d-standard @@ -0,0 +1,46 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_C3D_STANDARD + +choice + prompt "GCE Machine Type" + default TERRAFORM_GCE_MACHINE_C3D_STANDARD_4 + help + C3D VMs are powered by the 4th-gen AMD EPYC (Genoa) + processor. C3D uses Titanium, enabling higher levels + of networking performance, isolation and security. + +config TERRAFORM_GCE_MACHINE_C3D_STANDARD_4 + bool "c3d-standard-4" + help + 4 vCPUs (2 cores) and 16GB of memory. + +config TERRAFORM_GCE_MACHINE_C3D_STANDARD_8 + bool "c3d-standard-8" + help + 8 vCPUs (4 cores) and 32GB of memory. + +config TERRAFORM_GCE_MACHINE_C3D_STANDARD_16 + bool "c3d-standard-16" + help + 16 vCPUs (8 cores) and 64GB of memory. + +config TERRAFORM_GCE_MACHINE_C3D_STANDARD_30 + bool "c3d-standard-30" + help + 30 vCPUs (15 cores) and 120GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "c3d-standard-4" if TERRAFORM_GCE_MACHINE_C3D_STANDARD_4 + default "c3d-standard-8" if TERRAFORM_GCE_MACHINE_C3D_STANDARD_8 + default "c3d-standard-16" if TERRAFORM_GCE_MACHINE_C3D_STANDARD_16 + default "c3d-standard-30" if TERRAFORM_GCE_MACHINE_C3D_STANDARD_30 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "hyperdisk-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_C3D_STANDARD diff --git a/terraform/gce/kconfigs/machines/Kconfig.c4-standard b/terraform/gce/kconfigs/machines/Kconfig.c4-standard index 75c2eed2d..3ec7f4ec1 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.c4-standard +++ b/terraform/gce/kconfigs/machines/Kconfig.c4-standard @@ -4,35 +4,39 @@ choice prompt "GCE Machine Type" default TERRAFORM_GCE_MACHINE_C4_STANDARD_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + C4 VMs are powered by 6th generation (code-named Granite + Rapids) or 5th generation (code-named Emerald Rapids) + Intel Xeon Scalable processors and Titanium. config TERRAFORM_GCE_MACHINE_C4_STANDARD_2 bool "c4-standard-2" help - 2 vCPU (1 core) and 7GB of memory. + 2 vCPUs (1 core) and 7GB of memory. config TERRAFORM_GCE_MACHINE_C4_STANDARD_4 bool "c4-standard-4" help - 4 vCPU (2 core) and 15GB of memory. + 4 vCPUs (2 core) and 15GB of memory. config TERRAFORM_GCE_MACHINE_C4_STANDARD_8 bool "c4-standard-8" help - 8 vCPU (4 cores) and 30GB of memory. + 8 vCPUs (4 cores) and 30GB of memory. config TERRAFORM_GCE_MACHINE_C4_STANDARD_16 bool "c4-standard-16" help - 16 vCPU (8 cores) and 60GB of memory. + 16 vCPUs (8 cores) and 60GB of memory. config TERRAFORM_GCE_MACHINE_C4_STANDARD_24 bool "c4-standard-24" help - 24 vCPU (12 cores) and 90GB of memory. + 24 vCPUs (12 cores) and 90GB of memory. + +config TERRAFORM_GCE_MACHINE_C4_STANDARD_32 + bool "c4-standard-32" + help + 32 vCPUs (16 cores) and 120 of memory. endchoice @@ -44,6 +48,7 @@ config TERRAFORM_GCE_MACHINE_TYPE default "c4-standard-8" if TERRAFORM_GCE_MACHINE_C4_STANDARD_8 default "c4-standard-16" if TERRAFORM_GCE_MACHINE_C4_STANDARD_16 default "c4-standard-24" if TERRAFORM_GCE_MACHINE_C4_STANDARD_24 + default "c4-standard-32" if TERRAFORM_GCE_MACHINE_C4_STANDARD_32 config TERRAFORM_GCE_IMAGE_TYPE string diff --git a/terraform/gce/kconfigs/machines/Kconfig.c4a-standard b/terraform/gce/kconfigs/machines/Kconfig.c4a-standard new file mode 100644 index 000000000..3a486fe4a --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.c4a-standard @@ -0,0 +1,57 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_C4A_STANDARD + +choice + prompt "GCE Machine Type" + default TERRAFORM_GCE_MACHINE_C4A_STANDARD_4 + help + C4A VMs are powered by Google's first Arm-based Axion™ + processor, DDR5 memory, and local Titanium SSDs. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_1 + bool "c4a-standard-1" + help + 1 vCPU and 4GB of memory. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_2 + bool "c4a-standard-2" + help + 2 vCPUs and 8GB of memory. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_4 + bool "c4a-standard-4" + help + 4 vCPUs and 16GB of memory. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_8 + bool "c4a-standard-8" + help + 8 vCPUs and 32GB of memory. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_16 + bool "c4a-standard-16" + help + 16 vCPUs and 64GB of memory. + +config TERRAFORM_GCE_MACHINE_C4A_STANDARD_32 + bool "c4a-standard-32" + help + 32 vCPUs and 128GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "c4a-standard-1" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_1 + default "c4a-standard-2" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_2 + default "c4a-standard-4" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_4 + default "c4a-standard-8" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_8 + default "c4a-standard-16" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_16 + default "c4a-standard-32" if TERRAFORM_GCE_MACHINE_C4A_STANDARD_32 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "hyperdisk-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_C4A_STANDARD diff --git a/terraform/gce/kconfigs/machines/Kconfig.c4d-standard b/terraform/gce/kconfigs/machines/Kconfig.c4d-standard new file mode 100644 index 000000000..6d7b4bb96 --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.c4d-standard @@ -0,0 +1,51 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_C4D_STANDARD + +choice + prompt "GCE Machine Type" + default TERRAFORM_GCE_MACHINE_C4D_STANDARD_4 + help + C4D VMs are powered by the fifth generation AMD EPYC Turin + processor and Titanium. + +config TERRAFORM_GCE_MACHINE_C4D_STANDARD_2 + bool "c4d-standard-2" + help + 2 vCPUs (1 core) and 7GB of memory. + +config TERRAFORM_GCE_MACHINE_C4D_STANDARD_4 + bool "c4d-standard-4" + help + 4 vCPUs (2 core) and 15GB of memory. + +config TERRAFORM_GCE_MACHINE_C4D_STANDARD_8 + bool "c4d-standard-8" + help + 8 vCPUs (4 cores) and 31GB of memory. + +config TERRAFORM_GCE_MACHINE_C4D_STANDARD_16 + bool "c4d-standard-16" + help + 16 vCPUs (8 cores) and 62GB of memory. + +config TERRAFORM_GCE_MACHINE_C4D_STANDARD_24 + bool "c4d-standard-24" + help + 32 vCPUs (16 cores) and 124GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "c4d-standard-2" if TERRAFORM_GCE_MACHINE_C4D_STANDARD_2 + default "c4d-standard-4" if TERRAFORM_GCE_MACHINE_C4D_STANDARD_4 + default "c4d-standard-8" if TERRAFORM_GCE_MACHINE_C4D_STANDARD_8 + default "c4d-standard-16" if TERRAFORM_GCE_MACHINE_C4D_STANDARD_16 + default "c4d-standard-32" if TERRAFORM_GCE_MACHINE_C4D_STANDARD_32 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "hyperdisk-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_C4D_STANDARD diff --git a/terraform/gce/kconfigs/machines/Kconfig.e2-highcpu b/terraform/gce/kconfigs/machines/Kconfig.e2-highcpu new file mode 100644 index 000000000..eb401451b --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.e2-highcpu @@ -0,0 +1,58 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_E2_HIGHCPU + +choice + prompt "GCE Machine type" + default TERRAFORM_GCE_MACHINE_E2_HIGHCPU_8 + help + The E2 machine series offers both Intel and AMD EPYC + processors, selected for you at the time of VM creation. + Machine types in this series are available in all regions + and zones and support a virtio memory balloon device. + +config TERRAFORM_GCE_MACHINE_E2_HIGHCPU_2 + bool "e2-highcpu-2" + depends on TARGET_ARCH_X86_64 + help + 2 vCPUs (1 core) and 2GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_HIGHCPU_4 + bool "e2-highcpu-4" + depends on TARGET_ARCH_X86_64 + help + 4 vCPUs (2 cores) and 4GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_HIGHCPU_8 + bool "e2-highcpu-8" + depends on TARGET_ARCH_X86_64 + help + 8 vCPUs (4 cores) and 8GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_HIGHCPU_16 + bool "e2-highcpu-16" + depends on TARGET_ARCH_X86_64 + help + 16 vCPUs (8 cores) and 16GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_HIGHCPU_32 + bool "e2-highcpu-32" + depends on TARGET_ARCH_X86_64 + help + 32 vCPUs (16 cores) and 32GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "e2-highcpu-2" if TERRAFORM_GCE_MACHINE_E2_HIGHCPU_2 + default "e2-highcpu-4" if TERRAFORM_GCE_MACHINE_E2_HIGHCPU_4 + default "e2-highcpu-8" if TERRAFORM_GCE_MACHINE_E2_HIGHCPU_8 + default "e2-highcpu-16" if TERRAFORM_GCE_MACHINE_E2_HIGHCPU_16 + default "e2-highcpu-32" if TERRAFORM_GCE_MACHINE_E2_HIGHCPU_32 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "pd-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_E2_HIGHCPU diff --git a/terraform/gce/kconfigs/machines/Kconfig.e2-standard b/terraform/gce/kconfigs/machines/Kconfig.e2-standard new file mode 100644 index 000000000..26180f841 --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.e2-standard @@ -0,0 +1,58 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_E2_STANDARD + +choice + prompt "GCE Machine type" + default TERRAFORM_GCE_MACHINE_E2_STANDARD_8 + help + The E2 machine series offers both Intel and AMD EPYC + processors, selected for you at the time of VM creation. + Machine types in this series are available in all regions + and zones and support a virtio memory balloon device. + +config TERRAFORM_GCE_MACHINE_E2_STANDARD_2 + bool "e2-standard-2" + depends on TARGET_ARCH_X86_64 + help + 2 vCPUs (1 core) and 8GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_STANDARD_4 + bool "e2-standard-4" + depends on TARGET_ARCH_X86_64 + help + 4 vCPUs (2 cores) and 16GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_STANDARD_8 + bool "e2-standard-8" + depends on TARGET_ARCH_X86_64 + help + 8 vCPUs (4 cores) and 32GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_STANDARD_16 + bool "e2-standard-16" + depends on TARGET_ARCH_X86_64 + help + 16 vCPUs (8 cores) and 64GB of memory. + +config TERRAFORM_GCE_MACHINE_E2_STANDARD_32 + bool "e2-standard-32" + depends on TARGET_ARCH_X86_64 + help + 32 vCPUs (16 cores) and 128GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "e2-standard-2" if TERRAFORM_GCE_MACHINE_E2_STANDARD_2 + default "e2-standard-4" if TERRAFORM_GCE_MACHINE_E2_STANDARD_4 + default "e2-standard-8" if TERRAFORM_GCE_MACHINE_E2_STANDARD_8 + default "e2-standard-16" if TERRAFORM_GCE_MACHINE_E2_STANDARD_16 + default "e2-standard-32" if TERRAFORM_GCE_MACHINE_E2_STANDARD_32 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "pd-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_E2_STANDARD diff --git a/terraform/gce/kconfigs/machines/Kconfig.n1-highcpu b/terraform/gce/kconfigs/machines/Kconfig.n1-highcpu new file mode 100644 index 000000000..7684b2961 --- /dev/null +++ b/terraform/gce/kconfigs/machines/Kconfig.n1-highcpu @@ -0,0 +1,55 @@ +if TERRAFORM_GCE_MACHINE_FAMILY_N1_HIGHCPU + +choice + prompt "GCE Machine type" + default TERRAFORM_GCE_MACHINE_N1_HIGHCPU_8 + help + The N1 machine series is Compute Engine's first generation + general-purpose machine series available on Intel Skylake, + Broadwell, Haswell, Sandy Bridge, and Ivy Bridge CPU + platforms. + +config TERRAFORM_GCE_MACHINE_N1_HIGHCPU_2 + bool "n1-highcpu-2" + help + 2 vCPUs (1 core) and 1.8GB of memory. + +config TERRAFORM_GCE_MACHINE_N1_HIGHCPU_4 + bool "n1-highcpu-4" + help + 4 vCPUs (2 cores) and 3.6GB of memory. + +config TERRAFORM_GCE_MACHINE_N1_HIGHCPU_8 + bool "n1-highcpu-8" + help + 8 vCPUs (4 cores) and 7.2GB of memory. + +config TERRAFORM_GCE_MACHINE_N1_HIGHCPU_16 + bool "n1-highcpu-16" + depends on TARGET_ARCH_X86_64 + help + 16 vCPUs (8 cores) and 14.4GB of memory. + +config TERRAFORM_GCE_MACHINE_N1_HIGHCPU_32 + bool "n1-highcpu-32" + depends on TARGET_ARCH_X86_64 + help + 32 vCPUs (16 cores) and 28.8GB of memory. + +endchoice + +config TERRAFORM_GCE_MACHINE_TYPE + string + output yaml + default "n1-highcpu-2" if TERRAFORM_GCE_MACHINE_N1_HIGHCPU_2 + default "n1-highcpu-4" if TERRAFORM_GCE_MACHINE_N1_HIGHCPU_4 + default "n1-highcpu-8" if TERRAFORM_GCE_MACHINE_N1_HIGHCPU_8 + default "n1-highcpu-16" if TERRAFORM_GCE_MACHINE_N1_HIGHCPU_16 + default "n1-highcpu-32" if TERRAFORM_GCE_MACHINE_N1_HIGHCPU_32 + +config TERRAFORM_GCE_IMAGE_TYPE + string + output yaml + default "pd-balanced" + +endif # TERRAFORM_GCE_MACHINE_FAMILY_N1_HIGHCPU diff --git a/terraform/gce/kconfigs/machines/Kconfig.n1-standard b/terraform/gce/kconfigs/machines/Kconfig.n1-standard index 65dbd6728..7201231c7 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n1-standard +++ b/terraform/gce/kconfigs/machines/Kconfig.n1-standard @@ -4,12 +4,10 @@ choice prompt "GCE Machine type" default TERRAFORM_GCE_MACHINE_N1_STANDARD_8 help - This option sets the GCE machine type. For other machine types, - refer to this page: - - https://cloud.google.com/compute/docs/machine-types - - Documentation: https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance#machine_type + The N1 machine series is Compute Engine's first generation + general-purpose machine series available on Intel Skylake, + Broadwell, Haswell, Sandy Bridge, and Ivy Bridge CPU + platforms. config TERRAFORM_GCE_MACHINE_N1_STANDARD_1 bool "n1-standard-1" @@ -19,23 +17,30 @@ config TERRAFORM_GCE_MACHINE_N1_STANDARD_1 config TERRAFORM_GCE_MACHINE_N1_STANDARD_2 bool "n1-standard-2" help - 2 vCPU (1 core) and 7.5GB of memory. + 2 vCPUs (1 core) and 7.5GB of memory. config TERRAFORM_GCE_MACHINE_N1_STANDARD_4 bool "n1-standard-4" help - 4 vCPU (2 cores) and 15GB of memory. + 4 vCPUs (2 cores) and 15GB of memory. config TERRAFORM_GCE_MACHINE_N1_STANDARD_8 bool "n1-standard-8" help - 8 vCPU (4 cores) and 30GB of memory. + 8 vCPUs (4 cores) and 30GB of memory. config TERRAFORM_GCE_MACHINE_N1_STANDARD_16 bool "n1-standard-16" depends on TARGET_ARCH_X86_64 help - 16 vCPU (8 cores) and 60GB of memory. + 16 vCPUs (8 cores) and 60GB of memory. + +config TERRAFORM_GCE_MACHINE_N1_STANDARD_32 + bool "n1-standard-32" + depends on TARGET_ARCH_X86_64 + help + 32 vCPUs (16 cores) and 120GB of memory. + endchoice config TERRAFORM_GCE_MACHINE_TYPE @@ -46,6 +51,7 @@ config TERRAFORM_GCE_MACHINE_TYPE default "n1-standard-4" if TERRAFORM_GCE_MACHINE_N1_STANDARD_4 default "n1-standard-8" if TERRAFORM_GCE_MACHINE_N1_STANDARD_8 default "n1-standard-16" if TERRAFORM_GCE_MACHINE_N1_STANDARD_16 + default "n1-standard-32" if TERRAFORM_GCE_MACHINE_N1_STANDARD_32 config TERRAFORM_GCE_IMAGE_TYPE string diff --git a/terraform/gce/kconfigs/machines/Kconfig.n2-highcpu b/terraform/gce/kconfigs/machines/Kconfig.n2-highcpu index 8aa6893c7..83823753d 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n2-highcpu +++ b/terraform/gce/kconfigs/machines/Kconfig.n2-highcpu @@ -4,40 +4,38 @@ choice prompt "GCE Machine type" default TERRAFORM_GCE_MACHINE_N2_HIGHCPU_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + The N2 machine series can run on either Intel Cascade Lake + (on smaller configurations) or Intel Ice Lake. config TERRAFORM_GCE_MACHINE_N2_HIGHCPU_2 bool "n2-highcpu-2" depends on TARGET_ARCH_X86_64 help - 2 vCPU (1 core) and 2GB of memory. + 2 vCPUs (1 core) and 2GB of memory. config TERRAFORM_GCE_MACHINE_N2_HIGHCPU_4 bool "n2-highcpu-4" depends on TARGET_ARCH_X86_64 help - 4 vCPU (2 core) and 4GB of memory. + 4 vCPUs (2 cores) and 4GB of memory. config TERRAFORM_GCE_MACHINE_N2_HIGHCPU_8 bool "n2-highcpu-8" depends on TARGET_ARCH_X86_64 help - 8 vCPU (4 cores) and 8GB of memory. + 8 vCPUs (4 cores) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N2_HIGHCPU_16 bool "n2-highcpu-16" depends on TARGET_ARCH_X86_64 help - 16 vCPU (8 cores) and 16GB of memory. + 16 vCPUs (8 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N2_HIGHCPU_32 bool "n2-highcpu-32" depends on TARGET_ARCH_X86_64 help - 32 vCPU (16 cores) and 32GB of memory. + 32 vCPUs (16 cores) and 32GB of memory. endchoice diff --git a/terraform/gce/kconfigs/machines/Kconfig.n2-standard b/terraform/gce/kconfigs/machines/Kconfig.n2-standard index b7b2d68fa..a485a754a 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n2-standard +++ b/terraform/gce/kconfigs/machines/Kconfig.n2-standard @@ -4,40 +4,38 @@ choice prompt "GCE Machine type" default TERRAFORM_GCE_MACHINE_N2_STANDARD_8 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + The N2 machine series can run on either Intel Cascade Lake + (on smaller configurations) or Intel Ice Lake. config TERRAFORM_GCE_MACHINE_N2_STANDARD_2 bool "n2-standard-2" depends on TARGET_ARCH_X86_64 help - 2 vCPU (1 core) and 8GB of memory. + 2 vCPUs (1 core) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N2_STANDARD_4 bool "n2-standard-4" depends on TARGET_ARCH_X86_64 help - 4 vCPU (2 core) and 16GB of memory. + 4 vCPUs (2 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N2_STANDARD_8 bool "n2-standard-8" depends on TARGET_ARCH_X86_64 help - 8 vCPU (4 cores) and 32GB of memory. + 8 vCPUs (4 cores) and 32GB of memory. config TERRAFORM_GCE_MACHINE_N2_STANDARD_16 bool "n2-standard-16" depends on TARGET_ARCH_X86_64 help - 16 vCPU (8 cores) and 64GB of memory. + 16 vCPUs (8 cores) and 64GB of memory. config TERRAFORM_GCE_MACHINE_N2_STANDARD_32 bool "n2-standard-32" depends on TARGET_ARCH_X86_64 help - 32 vCPU (16 cores) and 128GB of memory. + 32 vCPUs (16 cores) and 128GB of memory. endchoice diff --git a/terraform/gce/kconfigs/machines/Kconfig.n2d-highcpu b/terraform/gce/kconfigs/machines/Kconfig.n2d-highcpu index 305034941..e3cf9c6e5 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n2d-highcpu +++ b/terraform/gce/kconfigs/machines/Kconfig.n2d-highcpu @@ -4,10 +4,9 @@ choice prompt "GCE Machine type" default TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + The N2D machine series can run on either AMD EPYC Milan or + AMD EPYC Rome processors. The third generation AMD EPYC + Milan processor is available only in specific regions and zones. config TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_2 bool "n2d-highcpu-2" @@ -19,25 +18,25 @@ config TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_4 bool "n2d-highcpu-4" depends on TARGET_ARCH_X86_64 help - 4 vCPU (2 core) and 4GB of memory. + 4 vCPUs (2 cores) and 4GB of memory. config TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_8 bool "n2d-highcpu-8" depends on TARGET_ARCH_X86_64 help - 8 vCPU (4 cores) and 8GB of memory. + 8 vCPUs (4 cores) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_16 bool "n2d-highcpu-16" depends on TARGET_ARCH_X86_64 help - 16 vCPU (8 cores) and 16GB of memory. + 16 vCPUs (8 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N2D_HIGHCPU_32 bool "n2d-highcpu-32" depends on TARGET_ARCH_X86_64 help - 32 vCPU (16 cores) and 32GB of memory. + 32 vCPUs (16 cores) and 32GB of memory. endchoice diff --git a/terraform/gce/kconfigs/machines/Kconfig.n2d-standard b/terraform/gce/kconfigs/machines/Kconfig.n2d-standard index 08744d396..4f86e0b7d 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n2d-standard +++ b/terraform/gce/kconfigs/machines/Kconfig.n2d-standard @@ -4,40 +4,39 @@ choice prompt "GCE Machine type" default TERRAFORM_GCE_MACHINE_N2D_STANDARD_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + The N2D machine series can run on either AMD EPYC Milan or + AMD EPYC Rome processors. The third generation AMD EPYC + Milan processor is available only in specific regions and zones. config TERRAFORM_GCE_MACHINE_N2D_STANDARD_2 bool "n2d-standard-2" depends on TARGET_ARCH_X86_64 help - 2 vCPU (1 core) and 8GB of memory. + 2 vCPUs (1 core) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N2D_STANDARD_4 bool "n2d-standard-4" depends on TARGET_ARCH_X86_64 help - 4 vCPU (2 core) and 16GB of memory. + 4 vCPUs (2 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N2D_STANDARD_8 bool "n2d-standard-8" depends on TARGET_ARCH_X86_64 help - 8 vCPU (4 cores) and 32GB of memory. + 8 vCPUs (4 cores) and 32GB of memory. config TERRAFORM_GCE_MACHINE_N2D_STANDARD_16 bool "n2d-standard-16" depends on TARGET_ARCH_X86_64 help - 16 vCPU (8 cores) and 64GB of memory. + 16 vCPUs (8 cores) and 64GB of memory. config TERRAFORM_GCE_MACHINE_N2D_STANDARD_32 bool "n2d-standard-32" depends on TARGET_ARCH_X86_64 help - 32 vCPU (16 cores) and 128GB of memory. + 32 vCPUs (16 cores) and 128GB of memory. endchoice diff --git a/terraform/gce/kconfigs/machines/Kconfig.n4-highcpu b/terraform/gce/kconfigs/machines/Kconfig.n4-highcpu index 9f871940a..880a386ea 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n4-highcpu +++ b/terraform/gce/kconfigs/machines/Kconfig.n4-highcpu @@ -4,35 +4,33 @@ choice prompt "GCE Machine Type" default TERRAFORM_GCE_MACHINE_N4_HIGHCPU_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + N4 VMs are powered by the 5th generation Intel Xeon Scalable + processors (code-named Emerald Rapids) and Titanium. config TERRAFORM_GCE_MACHINE_N4_HIGHCPU_2 bool "n4-highcpu-2" help - 2 vCPU (1 core) and 4GB of memory. + 2 vCPUs (1 core) and 4GB of memory. config TERRAFORM_GCE_MACHINE_N4_HIGHCPU_4 bool "n4-highcpu-4" help - 4 vCPU (2 core) and 8GB of memory. + 4 vCPUs (2 cores) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N4_HIGHCPU_8 bool "n4-highcpu-8" help - 8 vCPU (4 cores) and 16GB of memory. + 8 vCPUs (4 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N4_HIGHCPU_16 bool "n4-highcpu-16" help - 16 vCPU (8 cores) and 32GB of memory. + 16 vCPUs (8 cores) and 32GB of memory. config TERRAFORM_GCE_MACHINE_N4_HIGHCPU_32 bool "n4-highcpu-32" help - 32 vCPU (16 cores) and 64GB of memory. + 32 vCPUs (16 cores) and 64GB of memory. endchoice diff --git a/terraform/gce/kconfigs/machines/Kconfig.n4-standard b/terraform/gce/kconfigs/machines/Kconfig.n4-standard index d1d1202cb..807f8638e 100644 --- a/terraform/gce/kconfigs/machines/Kconfig.n4-standard +++ b/terraform/gce/kconfigs/machines/Kconfig.n4-standard @@ -4,35 +4,33 @@ choice prompt "GCE Machine Type" default TERRAFORM_GCE_MACHINE_N4_STANDARD_4 help - This option sets the GCE machine type. For other machine - types, refer to this page: - - https://cloud.google.com/compute/docs/machine-types + N4 VMs are powered by the 5th generation Intel Xeon Scalable + processors (code-named Emerald Rapids) and Titanium. config TERRAFORM_GCE_MACHINE_N4_STANDARD_2 bool "n4-standard-2" help - 2 vCPU (1 core) and 8GB of memory. + 2 vCPUs (1 core) and 8GB of memory. config TERRAFORM_GCE_MACHINE_N4_STANDARD_4 bool "n4-standard-4" help - 4 vCPU (2 core) and 16GB of memory. + 4 vCPUs (2 cores) and 16GB of memory. config TERRAFORM_GCE_MACHINE_N4_STANDARD_8 bool "n4-standard-8" help - 8 vCPU (4 cores) and 32GB of memory. + 8 vCPUs (4 cores) and 32GB of memory. config TERRAFORM_GCE_MACHINE_N4_STANDARD_16 bool "n4-standard-16" help - 16 vCPU (8 cores) and 64GB of memory. + 16 vCPUs (8 cores) and 64GB of memory. config TERRAFORM_GCE_MACHINE_N4_STANDARD_32 bool "n4-standard-32" help - 32 vCPU (16 cores) and 128GB of memory. + 32 vCPUs (16 cores) and 128GB of memory. endchoice From d9bc0ebd97df0d1b40302254a8ed645c876e088c Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 16 Aug 2025 14:48:34 -0400 Subject: [PATCH 18/36] terraform: Create the user's .ssh/config if it does not already exist While setting up some new test runners, I encountered this failure: TASK [terraform : Ensure the Include directive is present on the controller] *** task path: /usr/local/home/queue-5-4/worker/queue-5-4-kernel/build/playbooks/roles/terraform/tasks/main.yml:31 fatal: [localhost]: FAILED! => { "changed": false, "rc": 257 } MSG: Path /usr/local/home/queue-5-4/.ssh/config does not exist ! Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/terraform/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/playbooks/roles/terraform/tasks/main.yml b/playbooks/roles/terraform/tasks/main.yml index 91c424c4a..dabc9384e 100644 --- a/playbooks/roles/terraform/tasks/main.yml +++ b/playbooks/roles/terraform/tasks/main.yml @@ -118,6 +118,7 @@ path: "{{ sshconfig }}" insertbefore: BOF append_newline: true + create: true marker: "# {mark} Managed by kdevops" mode: "u=rw,g=r,o=r" block: "Include {{ kdevops_ssh_config_prefix }}*" From 165827e7a018e5149e63cb7e18f5e4bbcec09f8f Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Wed, 20 Aug 2025 14:50:28 -0400 Subject: [PATCH 19/36] pynfs: Don't install xdrlib3 on older RHEL When running the pynfs workflow on RHEL 8: > :stderr: Could not find a version that satisfies the requirement > xdrlib3 (from versions: ) > No matching distribution found for xdrlib3 RHEL 8 sports a version of Python that neither requires or supports the use of "pip install xdrlib3". Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml b/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml index 5139825ea..6046c84ac 100644 --- a/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml +++ b/playbooks/roles/pynfs/tasks/install-deps/redhat/main.yml @@ -27,3 +27,5 @@ - name: Install xdrlib3 ansible.builtin.pip: name: xdrlib3 + when: + - ansible_distribution == "Fedora" or ansible_distribution_major_version | int > 8 From d4e0dfd156827be993dd8e7ffba1b744a6f1863d Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 26 Aug 2025 18:15:21 -0400 Subject: [PATCH 20/36] guestfs: Update the guestfs playbook description Match the description for the terraform playbook Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/guestfs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playbooks/guestfs.yml b/playbooks/guestfs.yml index 784775cdb..62334463f 100644 --- a/playbooks/guestfs.yml +++ b/playbooks/guestfs.yml @@ -1,5 +1,5 @@ --- -- name: Provision target nodes with libvirt/guestfs +- name: Manage infrastructure lifecycle and SSH access with libvirt/guestfs gather_facts: true connection: local hosts: all From 13a25c048525fb047dfeaa5fc98deefb805c4276 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 26 Aug 2025 18:17:16 -0400 Subject: [PATCH 21/36] gen_hosts: Add 'localhost' to the [all] group Commit 58a0745e8fa2 ("Add a guest/instance for building the test kernel") was applied just after commit 1cf0800c9ffc ("gen_hosts: templates: include localhost in the all group"). The former should have been updated to include localhost in its [all] group. Without 'localhost', trying to provision the kernel builder node fails. Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/gen_hosts/templates/builder.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/playbooks/roles/gen_hosts/templates/builder.j2 b/playbooks/roles/gen_hosts/templates/builder.j2 index 0c9ba1e8e..eb8c73640 100644 --- a/playbooks/roles/gen_hosts/templates/builder.j2 +++ b/playbooks/roles/gen_hosts/templates/builder.j2 @@ -1,4 +1,5 @@ [all] +localhost ansible_connection=local {{ kdevops_hosts_prefix }}-builder [all:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" From daaa9d0b02953b09c93e3a92f618fcd95c617099 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 26 Aug 2025 16:11:32 -0400 Subject: [PATCH 22/36] guestfs: Don't run the 'destroy' tags on the controller "make destroy" was skipping some important file removals, and removing other files that do not exist. Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- scripts/guestfs.Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile index f6c350a43..953c61493 100644 --- a/scripts/guestfs.Makefile +++ b/scripts/guestfs.Makefile @@ -96,6 +96,7 @@ PHONY += status_guestfs destroy_guestfs: $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ + --limit 'baseline:dev:service' \ playbooks/guestfs.yml \ --extra-vars=@./extra_vars.yaml \ --tags destroy From 6bb3bfb2c25758ad772db90821a748add83d4ce0 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 26 Aug 2025 21:09:05 -0400 Subject: [PATCH 23/36] base_image: Skip "locales-all" package installation This is handled later by the devconfig playbook, and only when a distribution needs it. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/base_image/templates/virt-builder.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playbooks/roles/base_image/templates/virt-builder.j2 b/playbooks/roles/base_image/templates/virt-builder.j2 index 7df422940..138d06eed 100644 --- a/playbooks/roles/base_image/templates/virt-builder.j2 +++ b/playbooks/roles/base_image/templates/virt-builder.j2 @@ -11,7 +11,7 @@ mkdir {{ target_dir }} copy-in {{ guestfs_distro_source_and_dest_file }}:{{ target_dir }} {% endif %} -install sudo,qemu-guest-agent,python3,bash,locales-all +install sudo,qemu-guest-agent,python3,bash run-command useradd {{ kdevops_uid }} -s /bin/bash -m kdevops append-line /etc/sudoers.d/kdevops:kdevops ALL=(ALL) NOPASSWD: ALL edit /etc/default/grub:s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0"/ From 89e207bdbd8da1355ba7429b8c96f5e1effa1bad Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 2 Aug 2025 20:07:47 -0400 Subject: [PATCH 24/36] update_etc_hosts: ipaddr ansible.netcommon.ipaddr is deprecated. See: https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/ipaddr_filter.html Ensure the update_etc_hosts playbook uses the ansible.utils.ipaddr plugin instead. Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/update_etc_hosts/tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playbooks/roles/update_etc_hosts/tasks/main.yml b/playbooks/roles/update_etc_hosts/tasks/main.yml index dc40ededd..17c85dc53 100644 --- a/playbooks/roles/update_etc_hosts/tasks/main.yml +++ b/playbooks/roles/update_etc_hosts/tasks/main.yml @@ -51,8 +51,8 @@ become_method: sudo ansible.builtin.lineinfile: dest: /etc/hosts - regexp: ".*{{ item }}$" - line: "{{ hostvars[item].ansible_all_ipv4_addresses | ipaddr(private_network) | first }} {{ item }}" + regexp: '.*{{ item }}$' + line: "{{ hostvars[item].ansible_all_ipv4_addresses | ansible.utils.ipaddr(private_network) | first }} {{ item }}" state: present with_items: "{{ ueh_hosts }}" when: From a0000be0155af6474f6ba0d7cfb3c919c664dbf3 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 15 Aug 2025 20:47:34 -0400 Subject: [PATCH 25/36] Add an Ansible requirements.yml file Commit b90d89d27659 ("Switch to the cloud.terraform.terraform module") introduced the use of the cloud.terraform module, and commit 7ccb64834eeb ("guestfs: Replace scripts/destroy_guestfs.sh with an Ansible playbook") introduced the use of the community.libvirt module. It would be friendly if kdevops could pull in the Ansible modules it needs transparently. The requirements.yml file is a manifest of Ansible collections that the project needs to run. Installation of these collections is made automatic by adding: ansible-galaxy install -r requirements.yml to the "make ansible_cfg" step. This mechanism can keep cached versions of collections up to date, and can also constrain a cached collection to a specific version, if that's needed. The initial file contains requirements I could find easily, and should be updated over time as new collection dependencies are introduced. See also: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- requirements.yml | 8 ++++++++ scripts/ansible.Makefile | 5 +++++ 2 files changed, 13 insertions(+) create mode 100644 requirements.yml diff --git a/requirements.yml b/requirements.yml new file mode 100644 index 000000000..a22691d3f --- /dev/null +++ b/requirements.yml @@ -0,0 +1,8 @@ +--- +collections: + - name: ansible.posix + - name: ansible.utils + - name: cloud.terraform + - name: community.docker + - name: community.general + - name: community.libvirt diff --git a/scripts/ansible.Makefile b/scripts/ansible.Makefile index b0d2a8c12..0ce8168fb 100644 --- a/scripts/ansible.Makefile +++ b/scripts/ansible.Makefile @@ -2,3 +2,8 @@ AV ?= 0 export ANSIBLE_VERBOSE := $(shell scripts/validate_av.py --av "$(AV)") + +ansible-requirements: + $(Q)ansible-galaxy install -r requirements.yml +PHONY += ansible-requirements +DEFAULT_DEPS += ansible-requirements From 693c3fe9058fd114cc49015a0b58816f91267c34 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 22 Aug 2025 19:49:55 -0400 Subject: [PATCH 26/36] terraform/oci: Clean up the route table resource Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- terraform/oci/main.tf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/terraform/oci/main.tf b/terraform/oci/main.tf index 45a4b4bc0..15660aa02 100644 --- a/terraform/oci/main.tf +++ b/terraform/oci/main.tf @@ -103,10 +103,12 @@ resource "oci_core_route_table" "kdevops_route_table" { compartment_id = data.oci_identity_compartments.kdevops_compartment.compartments[0].id display_name = "kdevops route table" vcn_id = one(oci_core_vcn.kdevops_vcn[*].id) + route_rules { destination = "0.0.0.0/0" destination_type = "CIDR_BLOCK" network_entity_id = one(oci_core_internet_gateway.kdevops_internet_gateway[*].id) + route_type = "STATIC" } } From 4221ad032976fd12f3b32c7d049dd88bd1d1626f Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Wed, 27 Aug 2025 17:08:37 -0400 Subject: [PATCH 27/36] guestfs: Correct the spelling of "drives" Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/gen_nodes/templates/drives.j2 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/playbooks/roles/gen_nodes/templates/drives.j2 b/playbooks/roles/gen_nodes/templates/drives.j2 index 1241b88a9..472b4b270 100644 --- a/playbooks/roles/gen_nodes/templates/drives.j2 +++ b/playbooks/roles/gen_nodes/templates/drives.j2 @@ -8,7 +8,7 @@ the drives can vary by type, so we have one macro by type of drive. libvirt_extra_drive_format, libvirt_extra_storage_aio_mode, libvirt_extra_storage_aio_cache_mode) -%} - + {% for n in range(0,num_drives) %} @@ -26,7 +26,7 @@ the drives can vary by type, so we have one macro by type of drive. libvirt_extra_storage_aio_cache_mode, libvirt_extra_storage_virtio_logical_block_size, libvirt_extra_storage_virtio_physical_block_size) -%} - + {% for n in range(0,num_drives) %} @@ -46,7 +46,7 @@ the drives can vary by type, so we have one macro by type of drive. libvirt_extra_drive_format, libvirt_extra_storage_aio_mode, libvirt_extra_storage_aio_cache_mode) -%} - + {% for n in range(0,num_drives) %} @@ -103,7 +103,7 @@ the drives can vary by type, so we have one macro by type of drive. libvirt_extra_storage_aio_mode, libvirt_extra_storage_aio_cache_mode, libvirt_extra_storage_nvme_logical_block_size) -%} - + {% for n in range(0,num_drives) %} From 4ba44d1947917b9a1302bb95ed6d44d8389fcdfc Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Wed, 27 Aug 2025 15:23:31 -0400 Subject: [PATCH 28/36] guestfs: Configure how many extra drives to provision Some workflows create several guests but use only one or two extra storage drives per guest. Enable configurations that reduce the amount of storage allocated per guest to conserve local persistent storage space on the host. Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- kconfigs/Kconfig.libvirt | 45 +++++++++++++++++++ .../roles/gen_nodes/templates/gen_drives.j2 | 8 ++-- .../roles/guestfs/tasks/bringup/main.yml | 2 +- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/kconfigs/Kconfig.libvirt b/kconfigs/Kconfig.libvirt index 7fe231668..961276ccc 100644 --- a/kconfigs/Kconfig.libvirt +++ b/kconfigs/Kconfig.libvirt @@ -556,6 +556,51 @@ config LIBVIRT_HOST_PASSTHROUGH --pre 'make -s mrproper defconfig' \ \-- make -s -j$(nproc) bzImage +choice + prompt "Libvirt extra storage drive count" + default LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_4 + help + This option selects the number of extra storage drives to + provision for each libvirt guest. Reduce this number to + conserve local host storage capacity, if your workflows do + not use all the extra drives. + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_0 + bool "0" + help + Provision no extra storage drives per guest. + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_1 + bool "1" + help + Provision one extra storage drive per guest. + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_2 + bool "2" + help + Provision two extra storage drives per guest. + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_3 + bool "3" + help + Provision three extra storage drives per guest. + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_4 + bool "4" + help + Provision four extra storages drive per guest. + +endchoice + +config LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT + int + output yaml + default 0 if LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_0 + default 1 if LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_1 + default 2 if LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_2 + default 3 if LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_3 + default 4 if LIBVIRT_EXTRA_STORAGE_DRIVE_COUNT_4 + choice prompt "Libvirt extra storage driver to use" default LIBVIRT_EXTRA_STORAGE_DRIVE_VIRTIO diff --git a/playbooks/roles/gen_nodes/templates/gen_drives.j2 b/playbooks/roles/gen_nodes/templates/gen_drives.j2 index 2de13da4a..1040c0e19 100644 --- a/playbooks/roles/gen_nodes/templates/gen_drives.j2 +++ b/playbooks/roles/gen_nodes/templates/gen_drives.j2 @@ -1,6 +1,6 @@ {% import './templates/drives.j2' as drives %} {% if libvirt_extra_storage_drive_ide %} -{{ drives.gen_drive_ide(4, +{{ drives.gen_drive_ide(libvirt_extra_storage_drive_count, kdevops_storage_pool_path, hostname, libvirt_extra_drive_format, @@ -18,7 +18,7 @@ libvirt_extra_storage_aio_cache_mode, kdevops_storage_pool_path) }} {% else %} -{{ drives.gen_drive_virtio(4, +{{ drives.gen_drive_virtio(libvirt_extra_storage_drive_count, kdevops_storage_pool_path, hostname, libvirt_extra_drive_format, @@ -28,7 +28,7 @@ libvirt_extra_storage_virtio_physical_block_size) }} {% endif %} {% elif libvirt_extra_storage_drive_scsi %} -{{ drives.gen_drive_scsi(4, +{{ drives.gen_drive_scsi(libvirt_extra_storage_drive_count, kdevops_storage_pool_path, hostname, libvirt_extra_drive_format, @@ -46,7 +46,7 @@ libvirt_extra_storage_aio_cache_mode, kdevops_storage_pool_path) }} {% else %} -{{ drives.gen_drive_nvme(4, +{{ drives.gen_drive_nvme(libvirt_extra_storage_drive_count, kdevops_storage_pool_path, hostname, libvirt_extra_drive_format, diff --git a/playbooks/roles/guestfs/tasks/bringup/main.yml b/playbooks/roles/guestfs/tasks/bringup/main.yml index bd9f52603..3fd677ff4 100644 --- a/playbooks/roles/guestfs/tasks/bringup/main.yml +++ b/playbooks/roles/guestfs/tasks/bringup/main.yml @@ -102,7 +102,7 @@ path: "{{ storagedir }}/{{ inventory_hostname }}/extra{{ item }}.{{ libvirt_extra_drive_format }}" ansible.builtin.include_tasks: file: "{{ role_path }}/tasks/bringup/extra-disks.yml" - loop: "{{ range(0, 4) | list }}" + loop: "{{ range(0, libvirt_extra_storage_drive_count) | list }}" when: - not libvirt_enable_largeio|bool From 32c3afaa26279411e04007699218bf65eab2f5c7 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Sat, 30 Aug 2025 11:41:24 -0400 Subject: [PATCH 29/36] ltp: Replace /opt with a symlink to data partition The size of some cloud OS images is too small for the ltp installation (eg, the RHEL 8 OS image on Azure is about 10GB). This causes the ltp workflow to fail 100% of the time during the test build step. A simple solution is to replace /opt with a symlink to /data/opt, as kdevops can make /data large enough to hold the ltp install. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/roles/ltp/tasks/main.yml | 43 +++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/playbooks/roles/ltp/tasks/main.yml b/playbooks/roles/ltp/tasks/main.yml index 830ec3051..1b966771f 100644 --- a/playbooks/roles/ltp/tasks/main.yml +++ b/playbooks/roles/ltp/tasks/main.yml @@ -162,15 +162,52 @@ target: all jobs: "{{ ansible_processor_nproc }}" -- name: Ensure /opt has correct permissions - tags: ["ltp"] +- name: Set the pathname of the install directory + tags: ["build", "ltp"] + ansible.builtin.set_fact: + ltp_install_dir: "{{ data_path }}/opt" + +- name: Remove existing ltp install directory + tags: ["build", "ltp"] + become: true + become_flags: "su - -c" + become_method: ansible.builtin.sudo + ansible.builtin.file: + path: "{{ ltp_install_dir }}" + state: absent + +- name: Create a fresh ltp install directory + tags: ["build", "ltp"] become: true become_flags: "su - -c" become_method: ansible.builtin.sudo ansible.builtin.file: + path: "{{ ltp_install_dir }}" + owner: "root" + group: "root" + mode: "u=rwx,g=rwx,o=rwxt" state: directory + +- name: Remove /opt + tags: ["build", "ltp"] + become: true + become_flags: "su - -c" + become_method: ansible.builtin.sudo + ansible.builtin.file: path: "/opt" - mode: "u=rwx,g=rwx,o=rwxt" + state: absent + +- name: Replace /opt with a symlink + tags: ["build", "ltp"] + become: true + become_flags: "su - -c" + become_method: ansible.builtin.sudo + ansible.builtin.file: + src: "{{ ltp_install_dir }}" + dest: "/opt" + owner: "root" + group: "root" + state: link - name: Install ltp on the test systems tags: ["ltp"] From 097820f44fb676f0e21334cfd62761e0c2492767 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 29 Aug 2025 17:14:54 -0400 Subject: [PATCH 30/36] terraform: Squelch Ansible complaints about missing inventory file During "make", I see this warning twice when preparing a terraform- based kdevops run: [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' The install_terraform and gen_tfvars playbooks both run before the inventory file is created. AIUI they have to be invoked with an explicit inventory on the command line. Fixes: 0987c30034c9 ("Makefile: use inventory from ansible.cfg") Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- Makefile.kdevops | 1 + playbooks/gen_tfvars.yml | 1 + playbooks/install_terraform.yml | 1 + scripts/terraform.Makefile | 1 + 4 files changed, 4 insertions(+) diff --git a/Makefile.kdevops b/Makefile.kdevops index 9c6109f3a..fd03b392f 100644 --- a/Makefile.kdevops +++ b/Makefile.kdevops @@ -9,6 +9,7 @@ PHONY := kdevops_all kdevops_terraform_deps: $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ + --inventory localhost, \ $(KDEVOPS_PLAYBOOKS_DIR)/install_terraform.yml PHONY += kdevops_terraform_deps diff --git a/playbooks/gen_tfvars.yml b/playbooks/gen_tfvars.yml index 9d75c8681..11437fa25 100644 --- a/playbooks/gen_tfvars.yml +++ b/playbooks/gen_tfvars.yml @@ -1,5 +1,6 @@ --- - name: Generate Terraform variables file (terraform/terraform.tfvars) + connection: local hosts: localhost roles: - role: gen_tfvars diff --git a/playbooks/install_terraform.yml b/playbooks/install_terraform.yml index 5a5fa724a..3342d32a6 100644 --- a/playbooks/install_terraform.yml +++ b/playbooks/install_terraform.yml @@ -1,5 +1,6 @@ --- - name: Install Terraform + connection: local hosts: localhost roles: - role: install_terraform diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile index d1411a186..305b287a5 100644 --- a/scripts/terraform.Makefile +++ b/scripts/terraform.Makefile @@ -232,5 +232,6 @@ destroy_terraform_base: $(KDEVOPS_TFVARS): $(KDEVOPS_TFVARS_TEMPLATE) .config $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ + --inventory localhost, \ $(KDEVOPS_PLAYBOOKS_DIR)/gen_tfvars.yml \ --extra-vars=@./extra_vars.yaml From c70db102d8d6285e7363dd028f0c59a759516494 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 29 Aug 2025 16:48:09 -0400 Subject: [PATCH 31/36] terraform: Skip localhost when waiting for targets to reboot Eliminate this warning: [WARNING]: Reset is not implemented for this connection Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- scripts/terraform.Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/terraform.Makefile b/scripts/terraform.Makefile index 305b287a5..4d738c821 100644 --- a/scripts/terraform.Makefile +++ b/scripts/terraform.Makefile @@ -212,7 +212,9 @@ $(KDEVOPS_PROVISIONED_SSH): --inventory localhost, \ playbooks/terraform.yml --tags ssh \ --extra-vars=@./extra_vars.yaml - $(Q)ansible $(ANSIBLE_VERBOSE) -i hosts all -m wait_for_connection + $(Q)ansible $(ANSIBLE_VERBOSE) \ + -i hosts baseline:dev:service \ + -m wait_for_connection $(Q)touch $(KDEVOPS_PROVISIONED_SSH) status_terraform: From 94d0e3157a0170f014c822d064b75fc34f42bb97 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Tue, 2 Sep 2025 20:16:58 -0400 Subject: [PATCH 32/36] devconfig: include the "service" group in the playbooks hosts list Since commit 1cf0800c9ffc ("gen_hosts: templates: include localhost in the all group"), the devconfig playbook is no longer updating the nfsd service host. 1. Actually all the service hosts need to be updated by devconfig, so ensure devconfig runs against the service group. 2. Since devconfig can run against most workflows, add blank [service] groups to any inventory template that doesn't already have it. Fixes: 1cf0800c9ffc ("gen_hosts: templates: include localhost in the all group") Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- playbooks/devconfig.yml | 2 +- playbooks/roles/gen_hosts/templates/blktests.j2 | 3 +++ playbooks/roles/gen_hosts/templates/builder.j2 | 4 ++++ playbooks/roles/gen_hosts/templates/cxl.j2 | 3 +++ playbooks/roles/gen_hosts/templates/ltp.j2 | 4 ++++ playbooks/roles/gen_hosts/templates/mmtests.j2 | 3 +++ playbooks/roles/gen_hosts/templates/selftests.j2 | 3 +++ playbooks/roles/gen_hosts/templates/sysbench.j2 | 3 +++ scripts/devconfig.Makefile | 2 -- scripts/firstconfig.Makefile | 1 - scripts/provision.Makefile | 1 - 11 files changed, 24 insertions(+), 5 deletions(-) diff --git a/playbooks/devconfig.yml b/playbooks/devconfig.yml index cebaa87a7..f0ca7d767 100644 --- a/playbooks/devconfig.yml +++ b/playbooks/devconfig.yml @@ -1,6 +1,6 @@ --- - name: Configure developer environment on target systems - hosts: baseline:dev + hosts: baseline:dev:service gather_facts: false roles: - role: devconfig diff --git a/playbooks/roles/gen_hosts/templates/blktests.j2 b/playbooks/roles/gen_hosts/templates/blktests.j2 index 5bf50acbd..6aa434c33 100644 --- a/playbooks/roles/gen_hosts/templates/blktests.j2 +++ b/playbooks/roles/gen_hosts/templates/blktests.j2 @@ -22,3 +22,6 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/builder.j2 b/playbooks/roles/gen_hosts/templates/builder.j2 index eb8c73640..164201dc5 100644 --- a/playbooks/roles/gen_hosts/templates/builder.j2 +++ b/playbooks/roles/gen_hosts/templates/builder.j2 @@ -12,3 +12,7 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" [dev] [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" + +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/cxl.j2 b/playbooks/roles/gen_hosts/templates/cxl.j2 index 64bec4561..cab7da246 100644 --- a/playbooks/roles/gen_hosts/templates/cxl.j2 +++ b/playbooks/roles/gen_hosts/templates/cxl.j2 @@ -16,3 +16,6 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/ltp.j2 b/playbooks/roles/gen_hosts/templates/ltp.j2 index 828fd6362..6946b3f35 100644 --- a/playbooks/roles/gen_hosts/templates/ltp.j2 +++ b/playbooks/roles/gen_hosts/templates/ltp.j2 @@ -24,3 +24,7 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" + +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/mmtests.j2 b/playbooks/roles/gen_hosts/templates/mmtests.j2 index 1252fe876..8df4a3c31 100644 --- a/playbooks/roles/gen_hosts/templates/mmtests.j2 +++ b/playbooks/roles/gen_hosts/templates/mmtests.j2 @@ -31,3 +31,6 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endfor %} [mmtests:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/selftests.j2 b/playbooks/roles/gen_hosts/templates/selftests.j2 index e505bbf19..af0d6b341 100644 --- a/playbooks/roles/gen_hosts/templates/selftests.j2 +++ b/playbooks/roles/gen_hosts/templates/selftests.j2 @@ -22,3 +22,6 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_hosts/templates/sysbench.j2 b/playbooks/roles/gen_hosts/templates/sysbench.j2 index 107eebc5f..e30773c1b 100644 --- a/playbooks/roles/gen_hosts/templates/sysbench.j2 +++ b/playbooks/roles/gen_hosts/templates/sysbench.j2 @@ -22,3 +22,6 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" +[service] +[service:vars] +ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/scripts/devconfig.Makefile b/scripts/devconfig.Makefile index 146c70f78..db68dd183 100644 --- a/scripts/devconfig.Makefile +++ b/scripts/devconfig.Makefile @@ -57,7 +57,6 @@ extend-extra-args-devconfig: PHONY += devconfig devconfig: $(KDEVOPS_NODES) $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ - --limit 'baseline:dev:nfsd' \ $(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \ --extra-vars="$(BOOTLINUX_ARGS)" \ --extra-vars '{ kdevops_cli_install: True }' \ @@ -72,7 +71,6 @@ ifeq (y,$(CONFIG_SYSCTL_TUNING)) PHONY += sysctl-tunings sysctl-tunings: $(KDEVOPS_NODES) $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ - --limit 'baseline:dev:nfsd' \ $(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml \ --extra-vars="$(BOOTLINUX_ARGS)" $(LIMIT_HOSTS) --tags vars,sysctl diff --git a/scripts/firstconfig.Makefile b/scripts/firstconfig.Makefile index 9f8a63a8f..4904afcc7 100644 --- a/scripts/firstconfig.Makefile +++ b/scripts/firstconfig.Makefile @@ -2,7 +2,6 @@ firstconfig: $(Q)ansible-playbook $(ANSIBLE_VERBOSE) \ - --limit 'baseline:dev' \ --extra-vars '{ kdevops_cli_install: True }' \ --tags vars_simple,firstconfig \ $(KDEVOPS_PLAYBOOKS_DIR)/devconfig.yml diff --git a/scripts/provision.Makefile b/scripts/provision.Makefile index f04264f6b..b13d31e80 100644 --- a/scripts/provision.Makefile +++ b/scripts/provision.Makefile @@ -70,7 +70,6 @@ KDEVOPS_MRPROPER += $(KDEVOPS_PROVISIONED_DEVCONFIG) $(KDEVOPS_PROVISIONED_DEVCONFIG): $(Q)if [[ "$(CONFIG_KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK)" != "" ]]; then \ ansible-playbook $(ANSIBLE_VERBOSE) \ - --limit 'baseline:dev' \ $(KDEVOPS_PLAYBOOKS_DIR)/$(KDEVOPS_ANSIBLE_PROVISION_PLAYBOOK) ;\ fi $(Q)touch $(KDEVOPS_PROVISIONED_DEVCONFIG) From 70311837eff2ab48af3905c85b77f89e58306928 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Fri, 29 Aug 2025 14:24:55 -0400 Subject: [PATCH 33/36] Makefile: Remove CONFIG_TOPDIR_PATH_HAS_SHA256SUM Clean up: Sufficient time has passed that this compatibility setting is no longer necessary. Suggested-by: Luis Chamberlain Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- Kconfig | 5 ----- scripts/ssh.Makefile | 7 +------ scripts/update_ssh_config_guestfs.py | 11 +++-------- 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/Kconfig b/Kconfig index 3f2bc8cf0..54921617b 100644 --- a/Kconfig +++ b/Kconfig @@ -10,11 +10,6 @@ config TOPDIR_PATH output yaml default $(shell, echo $TOPDIR_PATH) -config TOPDIR_PATH_HAS_SHA256SUM - bool - output yaml - default y - config TOPDIR_PATH_SHA256SUM string output yaml diff --git a/scripts/ssh.Makefile b/scripts/ssh.Makefile index d18a03e09..68c6dcdd4 100644 --- a/scripts/ssh.Makefile +++ b/scripts/ssh.Makefile @@ -10,12 +10,7 @@ ifeq (y,$(CONFIG_KDEVOPS_SSH_CONFIG_UPDATE)) SSH_CONFIG_FILE:=$(subst ",,$(CONFIG_KDEVOPS_SSH_CONFIG)) ANSIBLE_EXTRA_ARGS += sshconfig=$(shell realpath $(SSH_CONFIG_FILE)) -ifeq (y,$(CONFIG_TOPDIR_PATH_HAS_SHA256SUM)) -SSH_CONFIG_SUFFIX:=$(CONFIG_TOPDIR_PATH_SHA256SUM) -else -SSH_CONFIG_SUFFIX:=$(CONFIG_KDEVOPS_HOST_PREFIX) -endif -ANSIBLE_EXTRA_ARGS += kdevops_ssh_config=$(shell scripts/append-makefile-vars.sh $(CONFIG_KDEVOPS_SSH_CONFIG_PREFIX) $(SSH_CONFIG_SUFFIX)) +ANSIBLE_EXTRA_ARGS += kdevops_ssh_config=$(shell scripts/append-makefile-vars.sh $(CONFIG_KDEVOPS_SSH_CONFIG_PREFIX) $(CONFIG_TOPDIR_PATH_SHA256SUM)) endif # CONFIG_KDEVOPS_SSH_CONFIG_UPDATE diff --git a/scripts/update_ssh_config_guestfs.py b/scripts/update_ssh_config_guestfs.py index 8b212a9c1..143ff4fc2 100755 --- a/scripts/update_ssh_config_guestfs.py +++ b/scripts/update_ssh_config_guestfs.py @@ -85,14 +85,9 @@ def main(): with open(f'{topdir}/{extra_vars["kdevops_nodes"]}') as stream: nodes = yaml.safe_load(stream) - if extra_vars.get("topdir_path_has_sha256sum", False): - ssh_config = ( - f'{Path.home()}/.ssh/config_kdevops_{extra_vars["topdir_path_sha256sum"]}' - ) - else: - ssh_config = ( - f'{Path.home()}/.ssh/config_kdevops_{extra_vars["kdevops_host_prefix"]}' - ) + ssh_config = ( + f'{Path.home()}/.ssh/config_kdevops_{extra_vars["topdir_path_sha256sum"]}' + ) # make a stanza for each node sshconf = open(ssh_config, "w") From 5fc9004d4c3fc65f3ab733ac8eaf8a9ea4239583 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 28 Aug 2025 11:18:18 -0400 Subject: [PATCH 34/36] Makefile: Set TOPDIR_PATH and generate its sha256sum at run time Commit 42d27579a9d0 ("guestfs: enhance ssh config choice") added a uniquifier to the name of the ssh config to avoid multiple kdevops runs clobbering each other's ssh config entries. It uses the TOPDIR pathname set in the current .config to benefit from the nice convenience of generating an Ansible extra_var using "output yaml". Commit 42d27579a9d0 ("guestfs: enhance ssh config choice") broke the ability to share a .config with other users because CONFIG_TOPDIR_PATH contains a fixed string pointing to the home directory where the .config was created. The TOPDIR and its checksum need to be generated not by "make menuconfig" but rather by "make" in order that .config files (as saved in defconfigs/) can be truly portable. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- Kconfig | 10 ---------- Makefile | 2 ++ scripts/gen-hosts.Makefile | 1 + scripts/ssh.Makefile | 2 +- 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/Kconfig b/Kconfig index 54921617b..948befbce 100644 --- a/Kconfig +++ b/Kconfig @@ -5,16 +5,6 @@ mainmenu "$(PROJECT) $(PROJECTRELEASE)" -config TOPDIR_PATH - string - output yaml - default $(shell, echo $TOPDIR_PATH) - -config TOPDIR_PATH_SHA256SUM - string - output yaml - default $(shell, ./scripts/compute_sha256sum.sh $(TOPDIR_PATH)) - config HAVE_KDEVOPS_CUSTOM_DEFAULTS bool default n diff --git a/Makefile b/Makefile index ad744613b..26c76548c 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ export KDEVOPS_NODES := export PYTHONUNBUFFERED=1 export TOPDIR=./ export TOPDIR_PATH = $(shell readlink -f $(TOPDIR)) +export TOPDIR_PATH_SHA256SUM = $(shell ./scripts/compute_sha256sum.sh $(TOPDIR_PATH)) # Export CLI override variables for Kconfig to detect them # Note: We accept DECLARE_HOSTS but export as DECLARED_HOSTS for consistency @@ -89,6 +90,7 @@ INCLUDES = -I include/ CFLAGS += $(INCLUDES) ANSIBLE_EXTRA_ARGS += kdevops_version='$(PROJECTRELEASE)' +ANSIBLE_EXTRA_ARGS += topdir_path_sha256sum='$(TOPDIR_PATH_SHA256SUM)' export KDEVOPS_HOSTS_TEMPLATE := hosts.j2 diff --git a/scripts/gen-hosts.Makefile b/scripts/gen-hosts.Makefile index 0d1e0cd77..c809b1da1 100644 --- a/scripts/gen-hosts.Makefile +++ b/scripts/gen-hosts.Makefile @@ -3,6 +3,7 @@ KDEVOPS_PLAYBOOKS_DIR_FULL_PATH=$(TOPDIR_PATH)/$(KDEVOPS_PLAYBOOKS_DIR) KDEVOPS_HOSTS_TEMPLATE_DIR=$(KDEVOPS_PLAYBOOKS_DIR_FULL_PATH)/roles/gen_hosts/templates +GENHOSTS_EXTRA_ARGS += topdir_path='$(TOPDIR_PATH)' GENHOSTS_EXTRA_ARGS += kdevops_playbooks_dir='$(KDEVOPS_PLAYBOOKS_DIR)' # Relative path so that ansible can work with it diff --git a/scripts/ssh.Makefile b/scripts/ssh.Makefile index 68c6dcdd4..82e9a8dd3 100644 --- a/scripts/ssh.Makefile +++ b/scripts/ssh.Makefile @@ -10,7 +10,7 @@ ifeq (y,$(CONFIG_KDEVOPS_SSH_CONFIG_UPDATE)) SSH_CONFIG_FILE:=$(subst ",,$(CONFIG_KDEVOPS_SSH_CONFIG)) ANSIBLE_EXTRA_ARGS += sshconfig=$(shell realpath $(SSH_CONFIG_FILE)) -ANSIBLE_EXTRA_ARGS += kdevops_ssh_config=$(shell scripts/append-makefile-vars.sh $(CONFIG_KDEVOPS_SSH_CONFIG_PREFIX) $(CONFIG_TOPDIR_PATH_SHA256SUM)) +ANSIBLE_EXTRA_ARGS += kdevops_ssh_config=$(shell scripts/append-makefile-vars.sh $(CONFIG_KDEVOPS_SSH_CONFIG_PREFIX) $(TOPDIR_PATH_SHA256SUM)) endif # CONFIG_KDEVOPS_SSH_CONFIG_UPDATE From 796a8f2981466cf113eb474cc7a3ba42e5f14a99 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 28 Aug 2025 12:21:22 -0400 Subject: [PATCH 35/36] ansible.cfg: generate an ansible.cfg file in TOPDIR I need an ansible.cfg that is generated by the Kconfig menu, but whose pathname is selected dynamically based on where kdevops is being run rather than having that path baked into the .config. Reviewed-by: Luis Chamberlain Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- Makefile | 8 ++++++++ kconfigs/Kconfig.ansible_cfg | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Makefile b/Makefile index 26c76548c..0c5ba4b9f 100644 --- a/Makefile +++ b/Makefile @@ -33,10 +33,15 @@ KDEVOPS_NODES_ROLE_TEMPLATE_DIR := $(KDEVOPS_PLAYBOOKS_DIR)/roles/gen_nodes/tem export KDEVOPS_NODES_TEMPLATE := export KDEVOPS_MRPROPER := +ifeq (y,$(CONFIG_ANSIBLE_CFG_FILE_CUSTOM)) ifneq ($(strip $(CONFIG_ANSIBLE_CFG_FILE)),) ANSIBLE_CFG_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_FILE) | tr --delete '"') export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE) endif +else +ANSIBLE_CFG_FILE := $(TOPDIR_PATH)/ansible.cfg +export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE) +endif ANSIBLE_INVENTORY_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_INVENTORY) | tr --delete '"') KDEVOPS_INSTALL_TARGETS := @@ -91,6 +96,9 @@ CFLAGS += $(INCLUDES) ANSIBLE_EXTRA_ARGS += kdevops_version='$(PROJECTRELEASE)' ANSIBLE_EXTRA_ARGS += topdir_path_sha256sum='$(TOPDIR_PATH_SHA256SUM)' +ifneq (y,$(CONFIG_ANSIBLE_CFG_FILE_CUSTOM)) +ANSIBLE_EXTRA_ARGS += ansible_cfg_file='$(ANSIBLE_CFG_FILE)' +endif export KDEVOPS_HOSTS_TEMPLATE := hosts.j2 diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg index dbd189f5d..8b32d4986 100644 --- a/kconfigs/Kconfig.ansible_cfg +++ b/kconfigs/Kconfig.ansible_cfg @@ -18,6 +18,16 @@ config ANSIBLE_CFG_INVENTORY_SET_BY_CLI bool default $(shell, scripts/check-cli-set-var.sh KDEVOPS_HOSTS) +config ANSIBLE_CFG_FILE_CUSTOM + bool "Set a custom location for the ansible.cfg file" + help + When this option is set to N, kdevops creates an ansible.cfg + in a sensible default location, using the settings defined + in this Kconfig menu. If it is set to Y, you can set the + path and filename of the Ansible configuration file. + +if ANSIBLE_CFG_FILE_CUSTOM + config ANSIBLE_CFG_FILE string "Ansible configuration file" output yaml @@ -41,6 +51,8 @@ config ANSIBLE_CFG_FILE For more details, refer to the Ansible documentation: https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file +endif # ANSIBLE_CFG_FILE_CUSTOM + menu "Ansible Callback Plugin Configuration" choice prompt "Ansible Callback Plugin" From dc032f9407ed72bdfa405ec3558a0e7f0c943a65 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 28 Aug 2025 16:30:09 -0400 Subject: [PATCH 36/36] inventory: generate the inventory pathname dynamically My CI workflows need the inventory location to be determined at run time, not set by the kdevops .config file, so the .configs can be portable amongst test runners and test branches. Reviewed-by: Luis Chamberlain Reviewed-by: Daniel Gomez Tested-by: Daniel Gomez Signed-off-by: Chuck Lever --- Makefile | 8 ++++++++ kconfigs/Kconfig.ansible_cfg | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Makefile b/Makefile index 0c5ba4b9f..0cc454294 100644 --- a/Makefile +++ b/Makefile @@ -42,7 +42,12 @@ else ANSIBLE_CFG_FILE := $(TOPDIR_PATH)/ansible.cfg export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE) endif + +ifeq (y,$(CONFIG_ANSIBLE_CFG_INVENTORY_CUSTOM)) ANSIBLE_INVENTORY_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_INVENTORY) | tr --delete '"') +else +ANSIBLE_INVENTORY_FILE := $(TOPDIR_PATH)/hosts +endif KDEVOPS_INSTALL_TARGETS := @@ -99,6 +104,9 @@ ANSIBLE_EXTRA_ARGS += topdir_path_sha256sum='$(TOPDIR_PATH_SHA256SUM)' ifneq (y,$(CONFIG_ANSIBLE_CFG_FILE_CUSTOM)) ANSIBLE_EXTRA_ARGS += ansible_cfg_file='$(ANSIBLE_CFG_FILE)' endif +ifneq (y,$(CONFIG_ANSIBLE_CFG_INVENTORY_CUSTOM)) +ANSIBLE_EXTRA_ARGS += ansible_cfg_inventory='$(ANSIBLE_INVENTORY_FILE)' +endif export KDEVOPS_HOSTS_TEMPLATE := hosts.j2 diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg index 8b32d4986..a5812995c 100644 --- a/kconfigs/Kconfig.ansible_cfg +++ b/kconfigs/Kconfig.ansible_cfg @@ -263,6 +263,16 @@ config ANSIBLE_CFG_TASK_DEBUGGER https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_debugger.html#id10 +config ANSIBLE_CFG_INVENTORY_CUSTOM + bool "Set a custom location for the Ansible inventory" + help + When this option is set to N, kdevops creates its + inventory file in a sensible default location. If it is + set to Y, you can set the path and filename of the Ansible + inventory. + +if ANSIBLE_CFG_INVENTORY_CUSTOM + config ANSIBLE_CFG_INVENTORY string "Ansible inventory sources" output yaml @@ -282,6 +292,8 @@ config ANSIBLE_CFG_INVENTORY For more details, refer to the Ansible documentation: https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-host-list +endif # ANSIBLE_CFG_INVENTORY_CUSTOM + if DISTRO_OPENSUSE config ANSIBLE_CFG_RECONNECTION_RETRIES