diff --git a/builtin/providers/vsphere/resource_vsphere_virtual_machine.go b/builtin/providers/vsphere/resource_vsphere_virtual_machine.go index a946517d7f..444e10877e 100644 --- a/builtin/providers/vsphere/resource_vsphere_virtual_machine.go +++ b/builtin/providers/vsphere/resource_vsphere_virtual_machine.go @@ -789,7 +789,6 @@ func resourceVSphereVirtualMachineCreate(d *schema.ResourceData, meta interface{ if diskSet, ok := vL.(*schema.Set); ok { disks := []hardDisk{} - hasBootableDisk := false for _, value := range diskSet.List() { disk := value.(map[string]interface{}) newDisk := hardDisk{} @@ -799,10 +798,10 @@ func resourceVSphereVirtualMachineCreate(d *schema.ResourceData, meta interface{ return fmt.Errorf("Cannot specify name of a template") } vm.template = v - if hasBootableDisk { + if vm.hasBootableVmdk { return fmt.Errorf("[ERROR] Only one bootable disk or template may be given") } - hasBootableDisk = true + vm.hasBootableVmdk = true } if v, ok := disk["type"].(string); ok && v != "" { @@ -846,9 +845,11 @@ func resourceVSphereVirtualMachineCreate(d *schema.ResourceData, meta interface{ return fmt.Errorf("Cannot specify name of a vmdk") } if vBootable, ok := disk["bootable"].(bool); ok { - hasBootableDisk = true + if vBootable && vm.hasBootableVmdk { + return fmt.Errorf("[ERROR] Only one bootable disk or template may be given") + } newDisk.bootable = vBootable - vm.hasBootableVmdk = vBootable + vm.hasBootableVmdk = vm.hasBootableVmdk || vBootable } newDisk.vmdkPath = vVmdk } diff --git a/builtin/providers/vsphere/resource_vsphere_virtual_machine_test.go b/builtin/providers/vsphere/resource_vsphere_virtual_machine_test.go index 3c063d0063..56f2db226b 100644 --- a/builtin/providers/vsphere/resource_vsphere_virtual_machine_test.go +++ b/builtin/providers/vsphere/resource_vsphere_virtual_machine_test.go @@ -606,7 +606,12 @@ resource "vsphere_virtual_machine" "with_existing_vmdk" { disk { %s vmdk = "%s" - bootable = true + bootable = true + } + disk { + size = 1 + iops = 500 + name = "one" } } ` @@ -635,7 +640,7 @@ func TestAccVSphereVirtualMachine_createWithExistingVmdk(t *testing.T) { Config: config, Check: resource.ComposeTestCheckFunc( TestFuncData{vm: vm, label: data.label, vmName: "vsphere_virtual_machine.with_existing_vmdk", - vmResource: "terraform-test-with-existing-vmdk"}.testCheckFuncBasic(), + vmResource: "terraform-test-with-existing-vmdk", numDisks: "2"}.testCheckFuncBasic(), //resource.TestCheckResourceAttr( // "vsphere_virtual_machine.with_existing_vmdk", "disk.2393891804.vmdk", vmdk_path), //resource.TestCheckResourceAttr( @@ -766,7 +771,7 @@ resource "vsphere_virtual_machine" "ipv4ipv6" { disk { size = 1 iops = 500 - name = "one" + name = "one" } } `