From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18E851A314B for ; Mon, 10 Mar 2025 14:18:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741616299; cv=none; b=UyWHarw2HA013jXyOsf6tx5Rb4s69ZI04QKRwfkXuSd9q6HJIOtrQxl4VRBR8LC5vmNW91Fog4Qm4Hmxd5KBFxh8+WQOmCv7gU7tuowFt+FGOZJ/gQebnCkG8k2zZophWhdM4tGn7YT2Tzn1c8JvnBC6lGXKDq0cfjwZHS/Z9vY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741616299; c=relaxed/simple; bh=bdqposJhgX+E3EOwYknSSs15LLnCQjKe8iWyyDKyWPM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kjFu6WA1uYi4fm5uSJ76fM9OWq40t5uPLoJCOvBZls4+RUVSvr4Db0M1MsUnDQx2/lizxR4iOqg4f2fU8QNixxM6zpMpin9FERVGNeBSWc8ITmrJkxU2488m46EBGmPwMQfTheiLJjEnwkooUtF8CmFaY8lBkvOAbOkzMajFk+o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dKn+ye0+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dKn+ye0+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15587C4CEEF; Mon, 10 Mar 2025 14:18:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741616298; bh=bdqposJhgX+E3EOwYknSSs15LLnCQjKe8iWyyDKyWPM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dKn+ye0+M8a0sWzLuXWiBa9ZYgyoQYVfRcNv2uL6Bxhjb8xtW5vg+o4Bd8+MjMZ3X JQOafXU5XaTKGO9iVWyhJKHU9evdqcG+A8iIKHywb65QbO+XGyIdCKRh08EXDhl867 evkxFjKAaMsw3gUbIL/rNayoYJxXXZRt/pUSLzkNnuKcZ8NgrDB2lwlYoLaUBADn6Q gXHDCbDdcOXYFrS4HnWWWy1uXjNIpvxqGwMpgtnAnry/Nqkk2+2W4Qe+kgVtO/jDcl pFqZsEIMFJyAo/ylXf9m476Rwkg1BQVgW7w8+AIC1A88icu4jCm5lBH7spxUlcgesb QQd1UIz56+0EA== From: cel@kernel.org To: Luis Chamberlain , Chandan Babu R , Jeff Layton Cc: , Chuck Lever Subject: [PATCH v1 03/13] terraform/Azure: Create a set of multiple generic block devices Date: Mon, 10 Mar 2025 10:18:03 -0400 Message-ID: <20250310141813.969325-4-cel@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250310141813.969325-1-cel@kernel.org> References: <20250310141813.969325-1-cel@kernel.org> Precedence: bulk X-Mailing-List: kdevops@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Chuck Lever When provisioning on Azure, terraform creates one block device for the /data file system, and one for unnamed device. This is unlike other provisioning methods (guestfs and AWS being the primary examples) which instead create a set of generic block devices and then set up the sparse files or /data file system on one of those. Luis has agreed to changing Azure to work like the other terraform providers and guestfs. Signed-off-by: Chuck Lever --- .../templates/azure/terraform.tfvars.j2 | 3 + terraform/azure/Kconfig | 151 +++++++++++++++++- terraform/azure/main.tf | 46 ++---- terraform/azure/managed_disks/main.tf | 20 +++ terraform/azure/managed_disks/vars.tf | 29 ++++ terraform/azure/vars.tf | 12 ++ 6 files changed, 224 insertions(+), 37 deletions(-) create mode 100644 terraform/azure/managed_disks/main.tf create mode 100644 terraform/azure/managed_disks/vars.tf diff --git a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 index 37db35d2cbed..117c9b7c49e5 100644 --- a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 +++ b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 @@ -11,6 +11,9 @@ image_offer = "{{ terraform_azure_image_offer }}" image_sku = "{{ terraform_azure_image_sku }}" image_version = "{{ terraform_azure_image_version }}" +managed_disks_per_instance = {{ terraform_azure_managed_disks_per_instance }} +managed_disks_size = {{ terraform_azure_managed_disks_size }} + ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}" ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}" ssh_config = "{{ sshconfig }}" diff --git a/terraform/azure/Kconfig b/terraform/azure/Kconfig index 0c5a0df9fbc5..18062ddf7cb2 100644 --- a/terraform/azure/Kconfig +++ b/terraform/azure/Kconfig @@ -155,7 +155,156 @@ config TERRAFORM_AZURE_APPLICATION_ID help The application ID to use. +choice + prompt "Count of extra managed disks" + default TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4 + help + The count of managed disks attached to each target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_2 + bool "2" + help + Provision 2 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_3 + bool "3" + help + Provision 3 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4 + bool "4" + help + Provision 4 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_5 + bool "5" + help + Provision 5 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_6 + bool "6" + help + Provision 6 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_7 + bool "7" + help + Provision 7 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_8 + bool "8" + help + Provision 8 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_9 + bool "9" + help + Provision 9 extra managed disks per target node. + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_10 + bool "10" + help + Provision 10 extra managed disks per target node. + +endchoice + +config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE + int + output yaml + 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 + default 5 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_5 + default 6 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_6 + default 7 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_7 + default 8 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_8 + default 9 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_9 + default 10 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_10 + +choice + prompt "Volume size for each additional volume" + default TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G + help + This option selects the size (in gibibytes) of managed + disks create for the target nodes. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4G + bool "4G" + help + Managed disks are 4 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_8G + bool "8G" + help + Managed disks are 8 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_16G + bool "16G" + help + Managed disks are 16 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_32G + bool "32G" + help + Managed disks are 32 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G + bool "64G" + help + Managed disks are 64 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_128G + bool "128G" + help + Managed disks are 128 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_256G + bool "256G" + help + Managed disks are 256 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_512G + bool "512G" + help + Managed disks are 512 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_1024G + bool "1024G" + help + Managed disks are 1024 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_2048G + bool "2048G" + help + Managed disks are 2048 GiB in size. + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4096G + bool "4096G" + help + Managed disks are 4096 GiB in size. + +endchoice + +config TERRAFORM_AZURE_MANAGED_DISKS_SIZE + int + output yaml + default 4 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4G + default 8 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_8G + default 16 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_16G + default 32 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_32G + default 64 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G + default 128 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_128G + default 256 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_256G + default 512 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_512G + default 1024 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_1024G + default 2048 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_2048G + default 4096 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4096G + config TERRAFORM_AZURE_DATA_VOLUME_DEVICE_FILE_NAME - string "/dev/sdc" + string "Device name for the /data file system" + default "/dev/sdc" + help + This option sets the name of the block device on each target + node that is to be used for the /data file system. endif # TERRAFORM_AZURE diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf index d2e90ff7f7f0..9b7b9228eb0e 100644 --- a/terraform/azure/main.tf +++ b/terraform/azure/main.tf @@ -10,7 +10,7 @@ resource "azurerm_resource_group" "kdevops_group" { } locals { - kdevops_private_net = format("%s/%d", var.private_net_prefix, var.private_net_mask) + kdevops_private_net = format("%s/%d", var.private_net_prefix, var.private_net_mask) } resource "azurerm_virtual_network" "kdevops_network" { @@ -168,40 +168,14 @@ resource "azurerm_linux_virtual_machine" "kdevops_vm" { } } -resource "azurerm_managed_disk" "kdevops_data_disk" { - count = local.kdevops_num_boxes - name = format("kdevops-data-disk-%02d", count.index + 1) - location = var.resource_location - resource_group_name = azurerm_resource_group.kdevops_group.name - create_option = "Empty" - storage_account_type = "Premium_LRS" - disk_size_gb = 100 -} +module "managed_disks" { + count = local.kdevops_num_boxes + source = "./managed_disks" -resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_data_disk" { - count = local.kdevops_num_boxes - managed_disk_id = azurerm_managed_disk.kdevops_data_disk[count.index].id - virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index) - caching = "None" - write_accelerator_enabled = false - lun = 0 -} - -resource "azurerm_managed_disk" "kdevops_scratch_disk" { - count = local.kdevops_num_boxes - name = format("kdevops-scratch-disk-%02d", count.index + 1) - location = var.resource_location - resource_group_name = azurerm_resource_group.kdevops_group.name - create_option = "Empty" - storage_account_type = "Premium_LRS" - disk_size_gb = 100 -} - -resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_scratch_disk" { - count = local.kdevops_num_boxes - managed_disk_id = azurerm_managed_disk.kdevops_scratch_disk[count.index].id - virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index) - caching = "None" - write_accelerator_enabled = false - lun = 1 + md_disk_size = var.managed_disks_size + md_disk_count = var.managed_disks_per_instance + md_location = var.resource_location + md_resource_group_name = azurerm_resource_group.kdevops_group.name + md_virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index) + md_virtual_machine_name = element(azurerm_linux_virtual_machine.kdevops_vm.*.name, count.index) } diff --git a/terraform/azure/managed_disks/main.tf b/terraform/azure/managed_disks/main.tf new file mode 100644 index 000000000000..503c782662fc --- /dev/null +++ b/terraform/azure/managed_disks/main.tf @@ -0,0 +1,20 @@ +resource "azurerm_managed_disk" "kdevops_managed_disk" { + count = var.md_disk_count + + name = format("kdevops_%s_disk%02d", var.md_virtual_machine_name, count.index + 1) + location = var.md_location + resource_group_name = var.md_resource_group_name + create_option = "Empty" + storage_account_type = "Premium_LRS" + disk_size_gb = var.md_disk_size +} + +resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_disk_attachment" { + count = var.md_disk_count + + managed_disk_id = azurerm_managed_disk.kdevops_managed_disk[count.index].id + virtual_machine_id = var.md_virtual_machine_id + caching = "None" + write_accelerator_enabled = false + lun = count.index +} diff --git a/terraform/azure/managed_disks/vars.tf b/terraform/azure/managed_disks/vars.tf new file mode 100644 index 000000000000..568df7c6fc41 --- /dev/null +++ b/terraform/azure/managed_disks/vars.tf @@ -0,0 +1,29 @@ +variable "md_disk_count" { + type = number + description = "Count of managed disks to attach to the virtual machine" +} + +variable "md_disk_size" { + type = number + description = "Size of each managed disk, in gibibytes" +} + +variable "md_location" { + type = string + description = "Azure resource location" +} + +variable "md_resource_group_name" { + type = string + description = "Azure resource group name" +} + +variable "md_virtual_machine_id" { + type = string + description = "Azure ID of the virtual machine to attach the disks to" +} + +variable "md_virtual_machine_name" { + type = string + description = "Name of the virtual machine to attach the disks to" +} diff --git a/terraform/azure/vars.tf b/terraform/azure/vars.tf index 3981ccb01faf..bf20adf813e0 100644 --- a/terraform/azure/vars.tf +++ b/terraform/azure/vars.tf @@ -59,3 +59,15 @@ variable "image_version" { description = "Storage image version" default = "latest" } + +variable "managed_disks_per_instance" { + description = "Count of managed disks per VM instance" + type = number + default = 0 +} + +variable "managed_disks_size" { + description = "Size of each managed disk, in gibibytes" + type = number + default = 0 +} -- 2.48.1