Skip to content

Commit 378d8fe

Browse files
committed
terraform/Azure: Create a set of multiple generic block devices
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. Reviewed-by: Luis Chamberlain <[email protected]> Signed-off-by: Chuck Lever <[email protected]>
1 parent c81c59e commit 378d8fe

File tree

6 files changed

+224
-37
lines changed

6 files changed

+224
-37
lines changed

playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ image_offer = "{{ terraform_azure_image_offer }}"
1111
image_sku = "{{ terraform_azure_image_sku }}"
1212
image_version = "{{ terraform_azure_image_version }}"
1313

14+
managed_disks_per_instance = {{ terraform_azure_managed_disks_per_instance }}
15+
managed_disks_size = {{ terraform_azure_managed_disks_size }}
16+
1417
ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
1518
ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
1619
ssh_config = "{{ sshconfig }}"

terraform/azure/Kconfig

Lines changed: 150 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,156 @@ config TERRAFORM_AZURE_APPLICATION_ID
155155
help
156156
The application ID to use.
157157

158+
choice
159+
prompt "Count of extra managed disks"
160+
default TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4
161+
help
162+
The count of managed disks attached to each target node.
163+
164+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_2
165+
bool "2"
166+
help
167+
Provision 2 extra managed disks per target node.
168+
169+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_3
170+
bool "3"
171+
help
172+
Provision 3 extra managed disks per target node.
173+
174+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4
175+
bool "4"
176+
help
177+
Provision 4 extra managed disks per target node.
178+
179+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_5
180+
bool "5"
181+
help
182+
Provision 5 extra managed disks per target node.
183+
184+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_6
185+
bool "6"
186+
help
187+
Provision 6 extra managed disks per target node.
188+
189+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_7
190+
bool "7"
191+
help
192+
Provision 7 extra managed disks per target node.
193+
194+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_8
195+
bool "8"
196+
help
197+
Provision 8 extra managed disks per target node.
198+
199+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_9
200+
bool "9"
201+
help
202+
Provision 9 extra managed disks per target node.
203+
204+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_10
205+
bool "10"
206+
help
207+
Provision 10 extra managed disks per target node.
208+
209+
endchoice
210+
211+
config TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE
212+
int
213+
output yaml
214+
default 2 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_2
215+
default 3 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_3
216+
default 4 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_4
217+
default 5 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_5
218+
default 6 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_6
219+
default 7 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_7
220+
default 8 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_8
221+
default 9 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_9
222+
default 10 if TERRAFORM_AZURE_MANAGED_DISKS_PER_INSTANCE_10
223+
224+
choice
225+
prompt "Volume size for each additional volume"
226+
default TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G
227+
help
228+
This option selects the size (in gibibytes) of managed
229+
disks create for the target nodes.
230+
231+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4G
232+
bool "4G"
233+
help
234+
Managed disks are 4 GiB in size.
235+
236+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_8G
237+
bool "8G"
238+
help
239+
Managed disks are 8 GiB in size.
240+
241+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_16G
242+
bool "16G"
243+
help
244+
Managed disks are 16 GiB in size.
245+
246+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_32G
247+
bool "32G"
248+
help
249+
Managed disks are 32 GiB in size.
250+
251+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G
252+
bool "64G"
253+
help
254+
Managed disks are 64 GiB in size.
255+
256+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_128G
257+
bool "128G"
258+
help
259+
Managed disks are 128 GiB in size.
260+
261+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_256G
262+
bool "256G"
263+
help
264+
Managed disks are 256 GiB in size.
265+
266+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_512G
267+
bool "512G"
268+
help
269+
Managed disks are 512 GiB in size.
270+
271+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_1024G
272+
bool "1024G"
273+
help
274+
Managed disks are 1024 GiB in size.
275+
276+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_2048G
277+
bool "2048G"
278+
help
279+
Managed disks are 2048 GiB in size.
280+
281+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4096G
282+
bool "4096G"
283+
help
284+
Managed disks are 4096 GiB in size.
285+
286+
endchoice
287+
288+
config TERRAFORM_AZURE_MANAGED_DISKS_SIZE
289+
int
290+
output yaml
291+
default 4 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4G
292+
default 8 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_8G
293+
default 16 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_16G
294+
default 32 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_32G
295+
default 64 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_64G
296+
default 128 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_128G
297+
default 256 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_256G
298+
default 512 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_512G
299+
default 1024 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_1024G
300+
default 2048 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_2048G
301+
default 4096 if TERRAFORM_AZURE_MANAGED_DISKS_SIZE_4096G
302+
158303
config TERRAFORM_AZURE_DATA_VOLUME_DEVICE_FILE_NAME
159-
string "/dev/sdc"
304+
string "Device name for the /data file system"
305+
default "/dev/sdc"
306+
help
307+
This option sets the name of the block device on each target
308+
node that is to be used for the /data file system.
160309

161310
endif # TERRAFORM_AZURE

terraform/azure/main.tf

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ resource "azurerm_resource_group" "kdevops_group" {
1010
}
1111

1212
locals {
13-
kdevops_private_net = format("%s/%d", var.private_net_prefix, var.private_net_mask)
13+
kdevops_private_net = format("%s/%d", var.private_net_prefix, var.private_net_mask)
1414
}
1515

1616
resource "azurerm_virtual_network" "kdevops_network" {
@@ -168,40 +168,14 @@ resource "azurerm_linux_virtual_machine" "kdevops_vm" {
168168
}
169169
}
170170

171-
resource "azurerm_managed_disk" "kdevops_data_disk" {
172-
count = local.kdevops_num_boxes
173-
name = format("kdevops-data-disk-%02d", count.index + 1)
174-
location = var.resource_location
175-
resource_group_name = azurerm_resource_group.kdevops_group.name
176-
create_option = "Empty"
177-
storage_account_type = "Premium_LRS"
178-
disk_size_gb = 100
179-
}
180-
181-
resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_data_disk" {
182-
count = local.kdevops_num_boxes
183-
managed_disk_id = azurerm_managed_disk.kdevops_data_disk[count.index].id
184-
virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index)
185-
caching = "None"
186-
write_accelerator_enabled = false
187-
lun = 0
188-
}
171+
module "managed_disks" {
172+
count = local.kdevops_num_boxes
173+
source = "./managed_disks"
189174

190-
resource "azurerm_managed_disk" "kdevops_scratch_disk" {
191-
count = local.kdevops_num_boxes
192-
name = format("kdevops-scratch-disk-%02d", count.index + 1)
193-
location = var.resource_location
194-
resource_group_name = azurerm_resource_group.kdevops_group.name
195-
create_option = "Empty"
196-
storage_account_type = "Premium_LRS"
197-
disk_size_gb = 100
198-
}
199-
200-
resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_scratch_disk" {
201-
count = local.kdevops_num_boxes
202-
managed_disk_id = azurerm_managed_disk.kdevops_scratch_disk[count.index].id
203-
virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index)
204-
caching = "None"
205-
write_accelerator_enabled = false
206-
lun = 1
175+
md_disk_size = var.managed_disks_size
176+
md_disk_count = var.managed_disks_per_instance
177+
md_location = var.resource_location
178+
md_resource_group_name = azurerm_resource_group.kdevops_group.name
179+
md_virtual_machine_id = element(azurerm_linux_virtual_machine.kdevops_vm.*.id, count.index)
180+
md_virtual_machine_name = element(azurerm_linux_virtual_machine.kdevops_vm.*.name, count.index)
207181
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
resource "azurerm_managed_disk" "kdevops_managed_disk" {
2+
count = var.md_disk_count
3+
4+
name = format("kdevops_%s_disk%02d", var.md_virtual_machine_name, count.index + 1)
5+
location = var.md_location
6+
resource_group_name = var.md_resource_group_name
7+
create_option = "Empty"
8+
storage_account_type = "Premium_LRS"
9+
disk_size_gb = var.md_disk_size
10+
}
11+
12+
resource "azurerm_virtual_machine_data_disk_attachment" "kdevops_disk_attachment" {
13+
count = var.md_disk_count
14+
15+
managed_disk_id = azurerm_managed_disk.kdevops_managed_disk[count.index].id
16+
virtual_machine_id = var.md_virtual_machine_id
17+
caching = "None"
18+
write_accelerator_enabled = false
19+
lun = count.index
20+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
variable "md_disk_count" {
2+
type = number
3+
description = "Count of managed disks to attach to the virtual machine"
4+
}
5+
6+
variable "md_disk_size" {
7+
type = number
8+
description = "Size of each managed disk, in gibibytes"
9+
}
10+
11+
variable "md_location" {
12+
type = string
13+
description = "Azure resource location"
14+
}
15+
16+
variable "md_resource_group_name" {
17+
type = string
18+
description = "Azure resource group name"
19+
}
20+
21+
variable "md_virtual_machine_id" {
22+
type = string
23+
description = "Azure ID of the virtual machine to attach the disks to"
24+
}
25+
26+
variable "md_virtual_machine_name" {
27+
type = string
28+
description = "Name of the virtual machine to attach the disks to"
29+
}

terraform/azure/vars.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,15 @@ variable "image_version" {
5959
description = "Storage image version"
6060
default = "latest"
6161
}
62+
63+
variable "managed_disks_per_instance" {
64+
description = "Count of managed disks per VM instance"
65+
type = number
66+
default = 0
67+
}
68+
69+
variable "managed_disks_size" {
70+
description = "Size of each managed disk, in gibibytes"
71+
type = number
72+
default = 0
73+
}

0 commit comments

Comments
 (0)