From 05cd5fa8574bd9eecc5b21079315cac1fa75f155 Mon Sep 17 00:00:00 2001 From: Bill Rich Date: Wed, 22 Aug 2018 10:20:35 -0700 Subject: [PATCH] r/virtual_machine: Add test for host relocation --- .../resource_vsphere_virtual_machine_test.go | 172 ++++++++++++++++-- 1 file changed, 152 insertions(+), 20 deletions(-) diff --git a/vsphere/resource_vsphere_virtual_machine_test.go b/vsphere/resource_vsphere_virtual_machine_test.go index a57637f97..fe1c7ac6b 100644 --- a/vsphere/resource_vsphere_virtual_machine_test.go +++ b/vsphere/resource_vsphere_virtual_machine_test.go @@ -27,9 +27,9 @@ import ( ) const ( - testAccResourceVSphereVirtualMachineDiskNameEager = "terraform-test_1.vmdk" - testAccResourceVSphereVirtualMachineDiskNameLazy = "terraform-test_2.vmdk" - testAccResourceVSphereVirtualMachineDiskNameThin = "terraform-test_3.vmdk" + testAccResourceVSphereVirtualMachineDiskNameEager = "terraform-test.vmdk" + testAccResourceVSphereVirtualMachineDiskNameLazy = "terraform-test_1.vmdk" + testAccResourceVSphereVirtualMachineDiskNameThin = "terraform-test_2.vmdk" testAccResourceVSphereVirtualMachineDiskNameExtraVmdk = "terraform-test-vm-extra-disk.vmdk" testAccResourceVSphereVirtualMachineStaticMacAddr = "06:5c:89:2b:a0:64" testAccResourceVSphereVirtualMachineAnnotation = "Managed by Terraform" @@ -1500,7 +1500,7 @@ func TestAccResourceVSphereVirtualMachine_cloneCustomizeForceNewWithDatastore(t testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckHostname("terraform-test"), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_3.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -1512,7 +1512,7 @@ func TestAccResourceVSphereVirtualMachine_cloneCustomizeForceNewWithDatastore(t testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckHostname("terraform-test-renamed"), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE2")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE2")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_3.vmdk", os.Getenv("VSPHERE_DATASTORE2")), func(s *terraform.State) error { oldID := state.RootModule().Resources["vsphere_virtual_machine.vm"].Primary.ID return testCheckResourceNotAttr("vsphere_virtual_machine.vm", "id", oldID)(s) @@ -2085,6 +2085,36 @@ func TestAccResourceVSphereVirtualMachine_windowsTemplateCustomizationEventsAndP }) } +func TestAccResourceVSphereVirtualMachine_hostCheck(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + testAccResourceVSphereVirtualMachinePreCheck(t) + }, + Providers: testAccProviders, + CheckDestroy: testAccResourceVSphereVirtualMachineCheckExists(false), + Steps: []resource.TestStep{ + { + Config: testAccResourceVSphereVirtualMachineConfigHostCheck(os.Getenv("VSPHERE_ESXI_HOST")), + Check: resource.ComposeTestCheckFunc( + testAccResourceVSphereVirtualMachineCheckExists(true), + testAccResourceVSphereVirtualMachineCheckHost(os.Getenv("VSPHERE_ESXI_HOST")), + ), + }, + { + Config: testAccResourceVSphereEmpty, + }, + { + Config: testAccResourceVSphereVirtualMachineConfigHostCheck(os.Getenv("VSPHERE_ESXI_HOST2")), + Check: resource.ComposeTestCheckFunc( + testAccResourceVSphereVirtualMachineCheckExists(true), + testAccResourceVSphereVirtualMachineCheckHost(os.Getenv("VSPHERE_ESXI_HOST2")), + ), + }, + }, + }) +} + func TestAccResourceVSphereVirtualMachine_hostVMotion(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -2180,7 +2210,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionGlobalSetting(t *testing Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2188,7 +2218,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionGlobalSetting(t *testing Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE2")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE2")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE2")), ), }, }, @@ -2209,8 +2239,8 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionSingleDisk(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_1.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2218,8 +2248,8 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionSingleDisk(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_1.vmdk", os.Getenv("VSPHERE_DATASTORE2")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE2")), ), }, }, @@ -2240,8 +2270,8 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionPinDatastore(t *testing. Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_1.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2249,8 +2279,8 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionPinDatastore(t *testing. Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE2")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE2")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_1.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE2")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, }, @@ -2271,7 +2301,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionRenamedVirtualMachine(t Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2279,7 +2309,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionRenamedVirtualMachine(t Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2287,7 +2317,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionRenamedVirtualMachine(t Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE2")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("foobar-test.vmdk", os.Getenv("VSPHERE_DATASTORE2")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("foobar-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE2")), ), }, }, @@ -2310,7 +2340,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionLinkedClones(t *testing. Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_3.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2343,7 +2373,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionBlockExternallyAttachedD Check: resource.ComposeTestCheckFunc( testAccResourceVSphereVirtualMachineCheckExists(true), testAccResourceVSphereVirtualMachineCheckVmxDatastore(os.Getenv("VSPHERE_DATASTORE")), - testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test.vmdk", os.Getenv("VSPHERE_DATASTORE")), + testAccResourceVSphereVirtualMachineCheckVmdkDatastore("terraform-test_4.vmdk", os.Getenv("VSPHERE_DATASTORE")), ), }, { @@ -2375,7 +2405,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionDatastoreCluster(t *test testAccResourceVSphereVirtualMachineDatastoreCluster, ), testAccResourceVSphereVirtualMachineCheckVmdkDatastoreCluster( - "terraform-test.vmdk", + "terraform-test_3.vmdk", testAccResourceVSphereVirtualMachineDatastoreCluster, ), ), @@ -2390,7 +2420,7 @@ func TestAccResourceVSphereVirtualMachine_storageVMotionDatastoreCluster(t *test testAccResourceVSphereVirtualMachineDatastoreClusterAlt, ), testAccResourceVSphereVirtualMachineCheckVmdkDatastoreCluster( - "terraform-test.vmdk", + "terraform-test_3.vmdk", testAccResourceVSphereVirtualMachineDatastoreClusterAlt, ), ), @@ -8564,6 +8594,108 @@ resource "vsphere_virtual_machine" "vm" { ) } +func testAccResourceVSphereVirtualMachineConfigHostCheck(host string) string { + return fmt.Sprintf(` +variable "datacenter" { + default = "%s" +} + +variable "resource_pool" { + default = "%s" +} + +variable "network_label" { + default = "%s" +} + +variable "ipv4_address" { + default = "%s" +} + +variable "ipv4_netmask" { + default = "%s" +} + +variable "ipv4_gateway" { + default = "%s" +} + +variable "dns_server" { + default = "%s" +} + +variable "datastore" { + default = "%s" +} + +variable "linked_clone" { + default = "%s" +} + +variable "host" { + default = "%s" +} + +data "vsphere_datacenter" "dc" { + name = "${var.datacenter}" +} + +data "vsphere_datastore" "datastore" { + name = "${var.datastore}" + datacenter_id = "${data.vsphere_datacenter.dc.id}" +} + +data "vsphere_resource_pool" "pool" { + name = "${var.resource_pool}" + datacenter_id = "${data.vsphere_datacenter.dc.id}" +} + +data "vsphere_host" "host" { + name = "${var.host}" + datacenter_id = "${data.vsphere_datacenter.dc.id}" +} + +data "vsphere_network" "network" { + name = "${var.network_label}" + datacenter_id = "${data.vsphere_datacenter.dc.id}" +} + +resource "vsphere_virtual_machine" "vm" { + name = "terraform-test" + resource_pool_id = "${data.vsphere_resource_pool.pool.id}" + host_system_id = "${data.vsphere_host.host.id}" + datastore_id = "${data.vsphere_datastore.datastore.id}" + + num_cpus = 2 + memory = 2048 + guest_id = "ubuntu64Guest" + wait_for_guest_net_timeout = -1 + + network_interface { + network_id = "${data.vsphere_network.network.id}" + } + + disk { + label = "disk0" + size = "1" + eagerly_scrub = false + thin_provisioned = true + } +} +`, + os.Getenv("VSPHERE_DATACENTER"), + os.Getenv("VSPHERE_RESOURCE_POOL"), + os.Getenv("VSPHERE_NETWORK_LABEL"), + os.Getenv("VSPHERE_IPV4_ADDRESS"), + os.Getenv("VSPHERE_IPV4_PREFIX"), + os.Getenv("VSPHERE_IPV4_GATEWAY"), + os.Getenv("VSPHERE_DNS"), + os.Getenv("VSPHERE_DATASTORE"), + os.Getenv("VSPHERE_USE_LINKED_CLONE"), + host, + ) +} + func testAccResourceVSphereVirtualMachineConfigHostVMotion(host string) string { return fmt.Sprintf(` variable "datacenter" {