From: cel@kernel.org
To: Luis Chamberlain <mcgrof@kernel.org>,
Chandan Babu R <chandanbabu@kernel.org>,
Jeff Layton <jlayton@kernel.org>
Cc: <kdevops@lists.linux.dev>, Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH v1 03/13] terraform/Azure: Create a set of multiple generic block devices
Date: Mon, 10 Mar 2025 10:18:03 -0400 [thread overview]
Message-ID: <20250310141813.969325-4-cel@kernel.org> (raw)
In-Reply-To: <20250310141813.969325-1-cel@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
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 <chuck.lever@oracle.com>
---
.../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
next prev parent reply other threads:[~2025-03-10 14:18 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-10 14:18 [PATCH v1 00/13] Block device provisioning for storage nodes cel
2025-03-10 14:18 ` [PATCH v1 01/13] terraform/AWS: Upgrade the EBS volume type to "gp3" cel
2025-03-10 14:18 ` [PATCH v1 02/13] terraform/Azure: Remove managed_disk_type selection cel
2025-03-10 14:18 ` cel [this message]
2025-03-10 14:18 ` [PATCH v1 04/13] terraform/OCI: Create a set of multiple generic block devices cel
2025-03-13 5:56 ` Chandan Babu R
2025-03-10 14:18 ` [PATCH v1 05/13] guestfs: Set storage options consistently cel
2025-03-10 14:18 ` [PATCH v1 06/13] playbooks: Add a role to create an LVM volume group cel
2025-03-10 14:18 ` [PATCH v1 07/13] volume_group: Detect the /data partition directly cel
2025-03-10 14:18 ` [PATCH v1 08/13] volume_group: Prepare to support cloud providers cel
2025-03-10 14:18 ` [PATCH v1 09/13] volume_group: Create volume group on terraform/AWS nodes cel
2025-03-10 14:18 ` [PATCH v1 10/13] volume_group: Create a volume group on Azure nodes cel
2025-03-10 14:18 ` [PATCH v1 11/13] volume_group: Create a volume group on GCE nodes cel
2025-03-10 14:18 ` [PATCH v1 12/13] volume_group: Create a volume group on OCI nodes cel
2025-03-13 6:29 ` Chandan Babu R
2025-03-10 14:18 ` [PATCH v1 13/13] volume_group: Create a volume group on OpenStack public clouds cel
2025-03-11 3:29 ` [PATCH v1 00/13] Block device provisioning for storage nodes Luis Chamberlain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250310141813.969325-4-cel@kernel.org \
--to=cel@kernel.org \
--cc=chandanbabu@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=jlayton@kernel.org \
--cc=kdevops@lists.linux.dev \
--cc=mcgrof@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox