Implemented ConflictsWith for vhd_uri and managed_disk fields

This commit is contained in:
Brandon Tosch 2017-03-17 19:37:05 -07:00
parent 7703d6c595
commit 03b8f05c99
2 changed files with 222 additions and 26 deletions

View File

@ -151,12 +151,14 @@ func resourceArmVirtualMachine() *schema.Resource {
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
Computed: true, Computed: true,
ConflictsWith: []string{"storage_os_disk.vhd_uri"},
}, },
"managed_disk_type": { "managed_disk_type": {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
Computed: true, Computed: true,
ConflictsWith: []string{"storage_os_disk.vhd_uri"},
ValidateFunc: validation.StringInSlice([]string{ ValidateFunc: validation.StringInSlice([]string{
string(compute.PremiumLRS), string(compute.PremiumLRS),
string(compute.StandardLRS), string(compute.StandardLRS),
@ -215,12 +217,14 @@ func resourceArmVirtualMachine() *schema.Resource {
Optional: true, Optional: true,
ForceNew: true, ForceNew: true,
Computed: true, Computed: true,
ConflictsWith: []string{"storage_data_disk.vhd_uri"},
}, },
"managed_disk_type": { "managed_disk_type": {
Type: schema.TypeString, Type: schema.TypeString,
Optional: true, Optional: true,
Computed: true, Computed: true,
ConflictsWith: []string{"storage_data_disk.vhd_uri"},
ValidateFunc: validation.StringInSlice([]string{ ValidateFunc: validation.StringInSlice([]string{
string(compute.PremiumLRS), string(compute.PremiumLRS),
string(compute.StandardLRS), string(compute.StandardLRS),
@ -1299,12 +1303,6 @@ func expandAzureRmVirtualMachineDataDisk(d *schema.ResourceData) ([]compute.Data
data_disk.ManagedDisk = managedDisk data_disk.ManagedDisk = managedDisk
} }
if vhdURI != "" && managedDiskID != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_id` (only one or the other can be used)")
}
if vhdURI != "" && managedDiskType != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_type` (only one or the other can be used)")
}
if managedDiskID == "" && strings.EqualFold(string(data_disk.CreateOption), string(compute.Attach)) { if managedDiskID == "" && strings.EqualFold(string(data_disk.CreateOption), string(compute.Attach)) {
return nil, fmt.Errorf("[ERROR] Must specify which disk to attach") return nil, fmt.Errorf("[ERROR] Must specify which disk to attach")
} }
@ -1416,12 +1414,6 @@ func expandAzureRmVirtualMachineOsDisk(d *schema.ResourceData) (*compute.OSDisk,
osDisk.ManagedDisk = managedDisk osDisk.ManagedDisk = managedDisk
} }
if vhdURI != "" && managedDiskID != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_id` (only one or the other can be used)")
}
if vhdURI != "" && managedDiskType != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_type` (only one or the other can be used)")
}
if managedDiskID == "" && strings.EqualFold(string(osDisk.CreateOption), string(compute.Attach)) { if managedDiskID == "" && strings.EqualFold(string(osDisk.CreateOption), string(compute.Attach)) {
return nil, fmt.Errorf("[ERROR] Must specify which disk to attach") return nil, fmt.Errorf("[ERROR] Must specify which disk to attach")
} }

View File

@ -11,6 +11,8 @@ import (
"github.com/hashicorp/terraform/helper/acctest" "github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform" "github.com/hashicorp/terraform/terraform"
//"regexp"
"regexp"
) )
func TestAccAzureRMVirtualMachine_basicLinuxMachine(t *testing.T) { func TestAccAzureRMVirtualMachine_basicLinuxMachine(t *testing.T) {
@ -599,6 +601,38 @@ func TestAccAzureRMVirtualMachine_changeSSHKey(t *testing.T) {
}) })
} }
func TestAccAzureRMVirtualMachine_osDiskTypeConflict(t *testing.T) {
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMVirtualMachine_osDiskTypeConflict, ri, ri, ri, ri, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
Steps: []resource.TestStep{
{
Config: config,
ExpectError: regexp.MustCompile("conflicts with storage_os_disk.0.vhd_uri"),
},
},
})
}
func TestAccAzureRMVirtualMachine_dataDiskTypeConflict(t *testing.T) {
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMVirtualMachine_dataDiskTypeConflict, ri, ri, ri, ri, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
Steps: []resource.TestStep{
{
Config: config,
ExpectError: regexp.MustCompile("conflicts with storage_data_disk.1.vhd_uri"),
},
},
})
}
func testCheckAzureRMVirtualMachineExists(name string, vm *compute.VirtualMachine) resource.TestCheckFunc { func testCheckAzureRMVirtualMachineExists(name string, vm *compute.VirtualMachine) resource.TestCheckFunc {
return func(s *terraform.State) error { return func(s *terraform.State) error {
// Ensure we have enough information in state to look up in API // Ensure we have enough information in state to look up in API
@ -3234,3 +3268,173 @@ resource "azurerm_virtual_machine" "test" {
} }
} }
` `
var testAccAzureRMVirtualMachine_osDiskTypeConflict = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_virtual_network" "test" {
name = "acctvn-%d"
address_space = ["10.0.0.0/16"]
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
}
resource "azurerm_subnet" "test" {
name = "acctsub-%d"
resource_group_name = "${azurerm_resource_group.test.name}"
virtual_network_name = "${azurerm_virtual_network.test.name}"
address_prefix = "10.0.2.0/24"
}
resource "azurerm_network_interface" "test" {
name = "acctni-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
ip_configuration {
name = "testconfiguration1"
subnet_id = "${azurerm_subnet.test.id}"
private_ip_address_allocation = "dynamic"
}
}
resource "azurerm_virtual_machine" "test" {
name = "acctvm-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
network_interface_ids = ["${azurerm_network_interface.test.id}"]
vm_size = "Standard_D1_v2"
storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "14.04.2-LTS"
version = "latest"
}
storage_os_disk {
name = "osd-%d"
caching = "ReadWrite"
create_option = "FromImage"
disk_size_gb = "10"
managed_disk_type = "Standard_LRS"
vhd_uri = "should_cause_conflict"
}
storage_data_disk {
name = "mydatadisk1"
caching = "ReadWrite"
create_option = "Empty"
disk_size_gb = "45"
managed_disk_type = "Standard_LRS"
lun = "0"
}
os_profile {
computer_name = "hn%d"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_linux_config {
disable_password_authentication = false
}
tags {
environment = "Production"
cost-center = "Ops"
}
}
`
var testAccAzureRMVirtualMachine_dataDiskTypeConflict = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_virtual_network" "test" {
name = "acctvn-%d"
address_space = ["10.0.0.0/16"]
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
}
resource "azurerm_subnet" "test" {
name = "acctsub-%d"
resource_group_name = "${azurerm_resource_group.test.name}"
virtual_network_name = "${azurerm_virtual_network.test.name}"
address_prefix = "10.0.2.0/24"
}
resource "azurerm_network_interface" "test" {
name = "acctni-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
ip_configuration {
name = "testconfiguration1"
subnet_id = "${azurerm_subnet.test.id}"
private_ip_address_allocation = "dynamic"
}
}
resource "azurerm_virtual_machine" "test" {
name = "acctvm-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
network_interface_ids = ["${azurerm_network_interface.test.id}"]
vm_size = "Standard_D1_v2"
storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "14.04.2-LTS"
version = "latest"
}
storage_os_disk {
name = "osd-%d"
caching = "ReadWrite"
create_option = "FromImage"
disk_size_gb = "10"
managed_disk_type = "Standard_LRS"
}
storage_data_disk {
name = "mydatadisk1"
caching = "ReadWrite"
create_option = "Empty"
disk_size_gb = "45"
managed_disk_type = "Standard_LRS"
lun = "0"
}
storage_data_disk {
name = "mydatadisk1"
vhd_uri = "should_cause_conflict"
caching = "ReadWrite"
create_option = "Empty"
disk_size_gb = "45"
managed_disk_type = "Standard_LRS"
lun = "1"
}
os_profile {
computer_name = "hn%d"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_linux_config {
disable_password_authentication = false
}
tags {
environment = "Production"
cost-center = "Ops"
}
}
`