provider/azurerm: set ForceNew for storage image and OS disk of virtual_machine (#10340)
TF_ACC=1 go test ./builtin/providers/azurerm -v -run "TestAccAzureRMVirtualMachine_change" -timeout 120m === RUN TestAccAzureRMVirtualMachine_changeStorageImageReference --- PASS: TestAccAzureRMVirtualMachine_changeStorageImageReference (937.49s) === RUN TestAccAzureRMVirtualMachine_changeOSDiskVhdUri --- PASS: TestAccAzureRMVirtualMachine_changeOSDiskVhdUri (1187.81s) PASS ok github.com/hashicorp/terraform/builtin/providers/azurerm 2125.317s
This commit is contained in:
parent
b9f273c7ca
commit
20efd54995
|
@ -94,28 +94,33 @@ func resourceArmVirtualMachine() *schema.Resource {
|
||||||
Type: schema.TypeSet,
|
Type: schema.TypeSet,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
ForceNew: true,
|
||||||
MaxItems: 1,
|
MaxItems: 1,
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"publisher": {
|
"publisher": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"offer": {
|
"offer": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"sku": {
|
"sku": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"version": {
|
"version": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -141,6 +146,7 @@ func resourceArmVirtualMachine() *schema.Resource {
|
||||||
"vhd_uri": {
|
"vhd_uri": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
"image_uri": {
|
"image_uri": {
|
||||||
|
|
|
@ -332,6 +332,66 @@ func TestAccAzureRMVirtualMachine_ChangeAvailbilitySet(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccAzureRMVirtualMachine_changeStorageImageReference(t *testing.T) {
|
||||||
|
var afterCreate, afterUpdate compute.VirtualMachine
|
||||||
|
|
||||||
|
ri := acctest.RandInt()
|
||||||
|
preConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachineStorageImageBefore, ri, ri, ri, ri, ri, ri, ri)
|
||||||
|
postConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachineStorageImageAfter, ri, ri, ri, ri, ri, ri, ri)
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: preConfig,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &afterCreate),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
|
||||||
|
resource.TestStep{
|
||||||
|
Config: postConfig,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &afterUpdate),
|
||||||
|
testAccCheckVirtualMachineRecreated(
|
||||||
|
t, &afterCreate, &afterUpdate),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAccAzureRMVirtualMachine_changeOSDiskVhdUri(t *testing.T) {
|
||||||
|
var afterCreate, afterUpdate compute.VirtualMachine
|
||||||
|
|
||||||
|
ri := acctest.RandInt()
|
||||||
|
preConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachine, ri, ri, ri, ri, ri, ri, ri)
|
||||||
|
postConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachineWithOSDiskVhdUriChanged, ri, ri, ri, ri, ri, ri, ri)
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: preConfig,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &afterCreate),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
|
||||||
|
resource.TestStep{
|
||||||
|
Config: postConfig,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &afterUpdate),
|
||||||
|
testAccCheckVirtualMachineRecreated(
|
||||||
|
t, &afterCreate, &afterUpdate),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
|
@ -1726,3 +1786,272 @@ var testAccAzureRMVirtualMachine_updateMachineName = `
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
var testAccAzureRMVirtualMachine_basicLinuxMachineStorageImageBefore = `
|
||||||
|
resource "azurerm_resource_group" "test" {
|
||||||
|
name = "acctestRG-%d"
|
||||||
|
location = "West US"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_network" "test" {
|
||||||
|
name = "acctvn-%d"
|
||||||
|
address_space = ["10.0.0.0/16"]
|
||||||
|
location = "West US"
|
||||||
|
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"
|
||||||
|
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_storage_account" "test" {
|
||||||
|
name = "accsa%d"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
location = "westus"
|
||||||
|
account_type = "Standard_LRS"
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "staging"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_storage_container" "test" {
|
||||||
|
name = "vhds"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
storage_account_name = "${azurerm_storage_account.test.name}"
|
||||||
|
container_access_type = "private"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_machine" "test" {
|
||||||
|
name = "acctvm-%d"
|
||||||
|
location = "West US"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
network_interface_ids = ["${azurerm_network_interface.test.id}"]
|
||||||
|
vm_size = "Standard_A0"
|
||||||
|
delete_os_disk_on_termination = true
|
||||||
|
|
||||||
|
storage_image_reference {
|
||||||
|
publisher = "Canonical"
|
||||||
|
offer = "UbuntuServer"
|
||||||
|
sku = "14.04.2-LTS"
|
||||||
|
version = "latest"
|
||||||
|
}
|
||||||
|
|
||||||
|
storage_os_disk {
|
||||||
|
name = "myosdisk1"
|
||||||
|
vhd_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
|
||||||
|
caching = "ReadWrite"
|
||||||
|
create_option = "FromImage"
|
||||||
|
disk_size_gb = "45"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile {
|
||||||
|
computer_name = "hostname%d"
|
||||||
|
admin_username = "testadmin"
|
||||||
|
admin_password = "Password1234!"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile_linux_config {
|
||||||
|
disable_password_authentication = false
|
||||||
|
}
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "Production"
|
||||||
|
cost-center = "Ops"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
var testAccAzureRMVirtualMachine_basicLinuxMachineStorageImageAfter = `
|
||||||
|
resource "azurerm_resource_group" "test" {
|
||||||
|
name = "acctestRG-%d"
|
||||||
|
location = "West US"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_network" "test" {
|
||||||
|
name = "acctvn-%d"
|
||||||
|
address_space = ["10.0.0.0/16"]
|
||||||
|
location = "West US"
|
||||||
|
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"
|
||||||
|
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_storage_account" "test" {
|
||||||
|
name = "accsa%d"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
location = "westus"
|
||||||
|
account_type = "Standard_LRS"
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "staging"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_storage_container" "test" {
|
||||||
|
name = "vhds"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
storage_account_name = "${azurerm_storage_account.test.name}"
|
||||||
|
container_access_type = "private"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_machine" "test" {
|
||||||
|
name = "acctvm-%d"
|
||||||
|
location = "West US"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
network_interface_ids = ["${azurerm_network_interface.test.id}"]
|
||||||
|
vm_size = "Standard_A0"
|
||||||
|
delete_os_disk_on_termination = true
|
||||||
|
|
||||||
|
storage_image_reference {
|
||||||
|
publisher = "CoreOS"
|
||||||
|
offer = "CoreOS"
|
||||||
|
sku = "Stable"
|
||||||
|
version = "latest"
|
||||||
|
}
|
||||||
|
|
||||||
|
storage_os_disk {
|
||||||
|
name = "myosdisk1"
|
||||||
|
vhd_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
|
||||||
|
caching = "ReadWrite"
|
||||||
|
create_option = "FromImage"
|
||||||
|
disk_size_gb = "45"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile {
|
||||||
|
computer_name = "hostname%d"
|
||||||
|
admin_username = "testadmin"
|
||||||
|
admin_password = "Password1234!"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile_linux_config {
|
||||||
|
disable_password_authentication = false
|
||||||
|
}
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "Production"
|
||||||
|
cost-center = "Ops"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
var testAccAzureRMVirtualMachine_basicLinuxMachineWithOSDiskVhdUriChanged = `
|
||||||
|
resource "azurerm_resource_group" "test" {
|
||||||
|
name = "acctestRG-%d"
|
||||||
|
location = "West US"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_network" "test" {
|
||||||
|
name = "acctvn-%d"
|
||||||
|
address_space = ["10.0.0.0/16"]
|
||||||
|
location = "West US"
|
||||||
|
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"
|
||||||
|
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_storage_account" "test" {
|
||||||
|
name = "accsa%d"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
location = "westus"
|
||||||
|
account_type = "Standard_LRS"
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "staging"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_storage_container" "test" {
|
||||||
|
name = "vhds"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
storage_account_name = "${azurerm_storage_account.test.name}"
|
||||||
|
container_access_type = "private"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_virtual_machine" "test" {
|
||||||
|
name = "acctvm-%d"
|
||||||
|
location = "West US"
|
||||||
|
resource_group_name = "${azurerm_resource_group.test.name}"
|
||||||
|
network_interface_ids = ["${azurerm_network_interface.test.id}"]
|
||||||
|
vm_size = "Standard_A0"
|
||||||
|
|
||||||
|
storage_image_reference {
|
||||||
|
publisher = "Canonical"
|
||||||
|
offer = "UbuntuServer"
|
||||||
|
sku = "14.04.2-LTS"
|
||||||
|
version = "latest"
|
||||||
|
}
|
||||||
|
|
||||||
|
storage_os_disk {
|
||||||
|
name = "myosdisk1"
|
||||||
|
vhd_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdiskchanged2.vhd"
|
||||||
|
caching = "ReadWrite"
|
||||||
|
create_option = "FromImage"
|
||||||
|
disk_size_gb = "45"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile {
|
||||||
|
computer_name = "hostname%d"
|
||||||
|
admin_username = "testadmin"
|
||||||
|
admin_password = "Password1234!"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_profile_linux_config {
|
||||||
|
disable_password_authentication = false
|
||||||
|
}
|
||||||
|
|
||||||
|
tags {
|
||||||
|
environment = "Production"
|
||||||
|
cost-center = "Ops"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
|
@ -236,15 +236,15 @@ For more information on the different example configurations, please check out t
|
||||||
|
|
||||||
`storage_image_reference` supports the following:
|
`storage_image_reference` supports the following:
|
||||||
|
|
||||||
* `publisher` - (Required) Specifies the publisher of the image used to create the virtual machine
|
* `publisher` - (Required) Specifies the publisher of the image used to create the virtual machine. Changing this forces a new resource to be created.
|
||||||
* `offer` - (Required) Specifies the offer of the image used to create the virtual machine.
|
* `offer` - (Required) Specifies the offer of the image used to create the virtual machine. Changing this forces a new resource to be created.
|
||||||
* `sku` - (Required) Specifies the SKU of the image used to create the virtual machine.
|
* `sku` - (Required) Specifies the SKU of the image used to create the virtual machine. Changing this forces a new resource to be created.
|
||||||
* `version` - (Optional) Specifies the version of the image used to create the virtual machine.
|
* `version` - (Optional) Specifies the version of the image used to create the virtual machine. Changing this forces a new resource to be created.
|
||||||
|
|
||||||
`storage_os_disk` supports the following:
|
`storage_os_disk` supports the following:
|
||||||
|
|
||||||
* `name` - (Required) Specifies the disk name.
|
* `name` - (Required) Specifies the disk name.
|
||||||
* `vhd_uri` - (Required) Specifies the vhd uri.
|
* `vhd_uri` - (Required) Specifies the vhd uri. Changing this forces a new resource to be created.
|
||||||
* `create_option` - (Required) Specifies how the virtual machine should be created. Possible values are `attach` and `FromImage`.
|
* `create_option` - (Required) Specifies how the virtual machine should be created. Possible values are `attach` and `FromImage`.
|
||||||
* `caching` - (Optional) Specifies the caching requirements.
|
* `caching` - (Optional) Specifies the caching requirements.
|
||||||
* `image_uri` - (Optional) Specifies the image_uri in the form publisherName:offer:skus:version. `image_uri` can also specify the [VHD uri](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-cli-deploy-templates/#create-a-custom-vm-image) of a custom VM image to clone. When cloning a custom disk image the `os_type` documented below becomes required.
|
* `image_uri` - (Optional) Specifies the image_uri in the form publisherName:offer:skus:version. `image_uri` can also specify the [VHD uri](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-cli-deploy-templates/#create-a-custom-vm-image) of a custom VM image to clone. When cloning a custom disk image the `os_type` documented below becomes required.
|
||||||
|
|
Loading…
Reference in New Issue