Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vmss - support specifying ultra_ssd_disk_iops_read_write and ultra_ssd_disk_mbps_read_write for PremiumV2_LRS #21530

Merged
merged 2 commits into from
May 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,28 @@ func TestAccLinuxVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremiumV2
})
}

func TestAccLinuxVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_virtual_machine_scale_set", "test")
r := LinuxVirtualMachineScaleSetResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data, 3001, 126),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("admin_password"),
{
Config: r.disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data, 3002, 127),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("admin_password"),
})
}

func TestAccLinuxVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremiumZRS(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_linux_virtual_machine_scale_set", "test")
r := LinuxVirtualMachineScaleSetResource{}
Expand Down Expand Up @@ -817,6 +839,60 @@ resource "azurerm_linux_virtual_machine_scale_set" "test" {
`, r.template(data), data.RandomInteger)
}

func (r LinuxVirtualMachineScaleSetResource) disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data acceptance.TestData, iops int, mbps int) string {
// Limited regional availability for `PremiumV2_LRS`
// `PremiumV2_LRS` disks can only be can only be attached to zonal VMs currently
data.Locations.Primary = "westeurope"
return fmt.Sprintf(`
%s

resource "azurerm_linux_virtual_machine_scale_set" "test" {
name = "acctestvmss-%d"
resource_group_name = azurerm_resource_group.test.name
location = azurerm_resource_group.test.location
sku = "Standard_F2s_v2"
instances = 1
admin_username = "adminuser"
admin_password = "P@ssword1234!"
zones = ["1"]

disable_password_authentication = false

source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}

os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}

data_disk {
storage_account_type = "PremiumV2_LRS"
caching = "None"
disk_size_gb = 10
lun = 10
ultra_ssd_disk_iops_read_write = %d
ultra_ssd_disk_mbps_read_write = %d
}

network_interface {
name = "example"
primary = true

ip_configuration {
name = "internal"
primary = true
subnet_id = azurerm_subnet.test.id
}
}
}
`, r.template(data), data.RandomInteger, iops, mbps)
}

func (r LinuxVirtualMachineScaleSetResource) disksDataDiskStorageAccountTypeUltraSSDLRS(data acceptance.TestData) string {
return fmt.Sprintf(`
%s
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,16 +549,21 @@ func OrchestratedVirtualMachineScaleSetDataDiskSchema() *pluginsdk.Schema {
Optional: true,
Default: false,
},

// TODO rename `ultra_ssd_disk_iops_read_write` to `disk_iops_read_write` in 4.0
"ultra_ssd_disk_iops_read_write": {
Type: pluginsdk.TypeInt,
Optional: true,
Computed: true,
Type: pluginsdk.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(1),
Computed: true,
},

// TODO rename `ultra_ssd_disk_mbps_read_write` to `disk_mbps_read_write` in 4.0
"ultra_ssd_disk_mbps_read_write": {
Type: pluginsdk.TypeInt,
Optional: true,
Computed: true,
Type: pluginsdk.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(1),
Computed: true,
},
},
},
Expand Down Expand Up @@ -1260,12 +1265,13 @@ func ExpandOrchestratedVirtualMachineScaleSetDataDisk(input []interface{}, ultra
for _, v := range input {
raw := v.(map[string]interface{})

storageAccountType := compute.StorageAccountTypes(raw["storage_account_type"].(string))
disk := compute.VirtualMachineScaleSetDataDisk{
Caching: compute.CachingTypes(raw["caching"].(string)),
DiskSizeGB: utils.Int32(int32(raw["disk_size_gb"].(int))),
Lun: utils.Int32(int32(raw["lun"].(int))),
ManagedDisk: &compute.VirtualMachineScaleSetManagedDiskParameters{
StorageAccountType: compute.StorageAccountTypes(raw["storage_account_type"].(string)),
StorageAccountType: storageAccountType,
},
WriteAcceleratorEnabled: utils.Bool(raw["write_accelerator_enabled"].(bool)),
CreateOption: compute.DiskCreateOptionTypes(raw["create_option"].(string)),
Expand All @@ -1278,13 +1284,12 @@ func ExpandOrchestratedVirtualMachineScaleSetDataDisk(input []interface{}, ultra
}

var iops int
if diskIops, ok := raw["disk_iops_read_write"]; ok && diskIops.(int) > 0 {
if diskIops, ok := raw["ultra_ssd_disk_iops_read_write"]; ok && diskIops.(int) > 0 {
iops = diskIops.(int)
} else if ssdIops, ok := raw["ultra_ssd_disk_iops_read_write"]; ok && ssdIops.(int) > 0 {
iops = ssdIops.(int)
}
if iops > 0 && !ultraSSDEnabled {
return nil, fmt.Errorf("disk_iops_read_write and ultra_ssd_disk_iops_read_write are only available for UltraSSD disks")

if iops > 0 && !ultraSSDEnabled && storageAccountType != compute.StorageAccountTypesPremiumV2LRS {
return nil, fmt.Errorf("`ultra_ssd_disk_iops_read_write` can only be set when `storage_account_type` is set to `PremiumV2_LRS` or `UltraSSD_LRS`")
}

// Do not set value unless value is greater than 0 - issue 15516
Expand All @@ -1293,13 +1298,12 @@ func ExpandOrchestratedVirtualMachineScaleSetDataDisk(input []interface{}, ultra
}

var mbps int
if diskMbps, ok := raw["disk_mbps_read_write"]; ok && diskMbps.(int) > 0 {
if diskMbps, ok := raw["ultra_ssd_disk_mbps_read_write"]; ok && diskMbps.(int) > 0 {
mbps = diskMbps.(int)
} else if ssdMbps, ok := raw["ultra_ssd_disk_mbps_read_write"]; ok && ssdMbps.(int) > 0 {
mbps = ssdMbps.(int)
}
if mbps > 0 && !ultraSSDEnabled {
return nil, fmt.Errorf("disk_mbps_read_write and ultra_ssd_disk_mbps_read_write are only available for UltraSSD disks")

if mbps > 0 && !ultraSSDEnabled && storageAccountType != compute.StorageAccountTypesPremiumV2LRS {
return nil, fmt.Errorf("`ultra_ssd_disk_mbps_read_write` can only be set when `storage_account_type` is set to `PremiumV2_LRS` or `UltraSSD_LRS`")
}

// Do not set value unless value is greater than 0 - issue 15516
Expand Down
35 changes: 18 additions & 17 deletions internal/services/compute/virtual_machine_scale_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -1329,16 +1329,20 @@ func VirtualMachineScaleSetDataDiskSchema() *pluginsdk.Schema {
Default: false,
},

// TODO rename `ultra_ssd_disk_iops_read_write` to `disk_iops_read_write` in 4.0
"ultra_ssd_disk_iops_read_write": {
Type: pluginsdk.TypeInt,
Optional: true,
Computed: true,
Type: pluginsdk.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(1),
Computed: true,
},

// TODO rename `ultra_ssd_disk_mbps_read_write` to `disk_mbps_read_write` in 4.0
"ultra_ssd_disk_mbps_read_write": {
Type: pluginsdk.TypeInt,
Optional: true,
Computed: true,
Type: pluginsdk.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(1),
Computed: true,
},
},
},
Expand All @@ -1351,12 +1355,13 @@ func ExpandVirtualMachineScaleSetDataDisk(input []interface{}, ultraSSDEnabled b
for _, v := range input {
raw := v.(map[string]interface{})

storageAccountType := compute.StorageAccountTypes(raw["storage_account_type"].(string))
disk := compute.VirtualMachineScaleSetDataDisk{
Caching: compute.CachingTypes(raw["caching"].(string)),
DiskSizeGB: utils.Int32(int32(raw["disk_size_gb"].(int))),
Lun: utils.Int32(int32(raw["lun"].(int))),
ManagedDisk: &compute.VirtualMachineScaleSetManagedDiskParameters{
StorageAccountType: compute.StorageAccountTypes(raw["storage_account_type"].(string)),
StorageAccountType: storageAccountType,
},
WriteAcceleratorEnabled: utils.Bool(raw["write_accelerator_enabled"].(bool)),
CreateOption: compute.DiskCreateOptionTypes(raw["create_option"].(string)),
Expand All @@ -1373,25 +1378,21 @@ func ExpandVirtualMachineScaleSetDataDisk(input []interface{}, ultraSSDEnabled b
}

var iops int
if diskIops, ok := raw["disk_iops_read_write"]; ok && diskIops.(int) > 0 {
if diskIops, ok := raw["ultra_ssd_disk_iops_read_write"]; ok && diskIops.(int) > 0 {
iops = diskIops.(int)
} else if ssdIops, ok := raw["ultra_ssd_disk_iops_read_write"]; ok && ssdIops.(int) > 0 {
iops = ssdIops.(int)
}

if iops > 0 && !ultraSSDEnabled {
return nil, fmt.Errorf("disk_iops_read_write and ultra_ssd_disk_iops_read_write are only available for UltraSSD disks")
if iops > 0 && !ultraSSDEnabled && storageAccountType != compute.StorageAccountTypesPremiumV2LRS {
return nil, fmt.Errorf("`ultra_ssd_disk_iops_read_write` can only be set when `storage_account_type` is set to `PremiumV2_LRS` or `UltraSSD_LRS`")
}

var mbps int
if diskMbps, ok := raw["disk_mbps_read_write"]; ok && diskMbps.(int) > 0 {
if diskMbps, ok := raw["ultra_ssd_disk_mbps_read_write"]; ok && diskMbps.(int) > 0 {
mbps = diskMbps.(int)
} else if ssdMbps, ok := raw["ultra_ssd_disk_mbps_read_write"]; ok && ssdMbps.(int) > 0 {
mbps = ssdMbps.(int)
}

if mbps > 0 && !ultraSSDEnabled {
return nil, fmt.Errorf("disk_mbps_read_write and ultra_ssd_disk_mbps_read_write are only available for UltraSSD disks")
if mbps > 0 && !ultraSSDEnabled && storageAccountType != compute.StorageAccountTypesPremiumV2LRS {
return nil, fmt.Errorf("`ultra_ssd_disk_mbps_read_write` can only be set when `storage_account_type` is set to `PremiumV2_LRS` or `UltraSSD_LRS`")
}

// Do not set value unless value is greater than 0 - issue 15516
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,28 @@ func TestAccWindowsVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremium
})
}

func TestAccWindowsVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_virtual_machine_scale_set", "test")
r := WindowsVirtualMachineScaleSetResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data, 3001, 126),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("admin_password"),
{
Config: r.disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data, 3002, 127),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep("admin_password"),
})
}

func TestAccWindowsVirtualMachineScaleSet_disksDataDiskStorageAccountTypePremiumZRS(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_windows_virtual_machine_scale_set", "test")
r := WindowsVirtualMachineScaleSetResource{}
Expand Down Expand Up @@ -808,6 +830,57 @@ resource "azurerm_windows_virtual_machine_scale_set" "test" {
`, r.template(data))
}

func (r WindowsVirtualMachineScaleSetResource) disksDataDiskStorageAccountTypePremiumV2LRSWithIOPSAndMBPS(data acceptance.TestData, iops int, mbps int) string {
// Limited regional availability for `PremiumV2_LRS`
data.Locations.Primary = "westeurope"
return fmt.Sprintf(`
%s

resource "azurerm_windows_virtual_machine_scale_set" "test" {
name = local.vm_name
resource_group_name = azurerm_resource_group.test.name
location = azurerm_resource_group.test.location
sku = "Standard_F2s_v2"
instances = 1
admin_username = "adminuser"
admin_password = "P@ssword1234!"
zones = ["1"]

source_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2019-Datacenter"
version = "latest"
}

os_disk {
storage_account_type = "Standard_LRS"
caching = "ReadWrite"
}

data_disk {
storage_account_type = "PremiumV2_LRS"
caching = "None"
disk_size_gb = 10
lun = 10
ultra_ssd_disk_iops_read_write = %d
ultra_ssd_disk_mbps_read_write = %d
}

network_interface {
name = "example"
primary = true

ip_configuration {
name = "internal"
primary = true
subnet_id = azurerm_subnet.test.id
}
}
}
`, r.template(data), iops, mbps)
}

func (r WindowsVirtualMachineScaleSetResource) disksDataDiskStorageAccountTypeUltraSSDLRS(data acceptance.TestData) string {
return fmt.Sprintf(`
%s
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -310,9 +310,9 @@ A `data_disk` block supports the following:

-> **NOTE:** Disk Encryption Sets are in Public Preview in a limited set of regions

* `ultra_ssd_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable for UltraSSD disks.
* `ultra_ssd_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `ultra_ssd_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable for UltraSSD disks.
* `ultra_ssd_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `write_accelerator_enabled` - (Optional) Should Write Accelerator be enabled for this Data Disk? Defaults to `false`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,9 +291,9 @@ A `data_disk` block supports the following:

* `disk_encryption_set_id` - (Optional) The ID of the Disk Encryption Set which should be used to encrypt the Data Disk. Changing this forces a new resource to be created.

* `ultra_ssd_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable for UltraSSD disks.
* `ultra_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `ultra_ssd_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable for UltraSSD disks.
* `ultra_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `write_accelerator_enabled` - (Optional) Specifies if Write Accelerator is enabled on the Data Disk. Defaults to `false`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,9 +298,9 @@ A `data_disk` block supports the following:

-> **NOTE:** Disk Encryption Sets are in Public Preview in a limited set of regions

* `ultra_ssd_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable for UltraSSD disks.
* `ultra_ssd_disk_iops_read_write` - (Optional) Specifies the Read-Write IOPS for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `ultra_ssd_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable for UltraSSD disks.
* `ultra_ssd_disk_mbps_read_write` - (Optional) Specifies the bandwidth in MB per second for this Data Disk. Only settable when `storage_account_type` is `PremiumV2_LRS` or `UltraSSD_LRS`.

* `write_accelerator_enabled` - (Optional) Should Write Accelerator be enabled for this Data Disk? Defaults to `false`.

Expand Down