From c83a8b93b81b1efe2abc428cfa3a441270e05f45 Mon Sep 17 00:00:00 2001 From: Yannick Struyf Date: Fri, 3 Apr 2020 01:35:24 +0200 Subject: [PATCH] added cloudinit fix --- nutanix/resource_nutanix_virtual_machine.go | 23 ++++++++++++++++++- .../resource_nutanix_virtual_machine_test.go | 19 --------------- nutanix/structure.go | 16 ++++++++----- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/nutanix/resource_nutanix_virtual_machine.go b/nutanix/resource_nutanix_virtual_machine.go index ec58c199e..04d9f5b96 100644 --- a/nutanix/resource_nutanix_virtual_machine.go +++ b/nutanix/resource_nutanix_virtual_machine.go @@ -21,6 +21,7 @@ var ( vmTimeout = 1 * time.Minute vmDelay = 3 * time.Second vmMinTimeout = 3 * time.Second + IDE = "IDE" ) func resourceNutanixVirtualMachine() *schema.Resource { @@ -1197,7 +1198,7 @@ func resourceNutanixVirtualMachineUpdate(d *schema.ResourceData, meta interface{ if err != nil { return err } - if res.DiskList, err = expandDiskList(d, false); err != nil { + if res.DiskList, err = expandDiskListUpdate(d, response); err != nil { return err } postCdromCount, err := CountDiskListCdrom(res.DiskList) @@ -1658,6 +1659,26 @@ func expandIPAddressList(ipl []interface{}) []*v3.IPAddress { return nil } +func expandDiskListUpdate(d *schema.ResourceData, vm *v3.VMIntentResponse) ([]*v3.VMDisk, error) { + var eDiskList []*v3.VMDisk + var err error + if eDiskList, err = expandDiskList(d, false); err != nil { + return eDiskList, err + } + if vm.Spec != nil && vm.Spec.Resources != nil { + for _, disk := range vm.Spec.Resources.DiskList { + if disk.DeviceProperties != nil && disk.DeviceProperties.DiskAddress != nil { + index := disk.DeviceProperties.DiskAddress.DeviceIndex + adapterType := disk.DeviceProperties.DiskAddress.AdapterType + if *index == 3 && *adapterType == IDE { + eDiskList = append(eDiskList, disk) + } + } + } + } + return eDiskList, nil +} + func expandDiskList(d *schema.ResourceData, isCreation bool) ([]*v3.VMDisk, error) { if v, ok := d.GetOk("disk_list"); ok { dsk := v.([]interface{}) diff --git a/nutanix/resource_nutanix_virtual_machine_test.go b/nutanix/resource_nutanix_virtual_machine_test.go index 36e27b136..24805991e 100644 --- a/nutanix/resource_nutanix_virtual_machine_test.go +++ b/nutanix/resource_nutanix_virtual_machine_test.go @@ -218,13 +218,6 @@ func TestAccNutanixVirtualMachine_CdromGuestCustomisationReboot(t *testing.T) { Providers: testAccProviders, CheckDestroy: testAccCheckNutanixVirtualMachineDestroy, Steps: []resource.TestStep{ - { - Config: testAccNutanixVMConfigCdromGuestCustomisationReboot(r), - Check: resource.ComposeTestCheckFunc( - testAccCheckNutanixVirtualMachineExists(resourceName), - ), - ExpectNonEmptyPlan: true, - }, { Config: testAccNutanixVMConfigCdromGuestCustomisationReboot(r), Check: resource.ComposeTestCheckFunc( @@ -249,18 +242,6 @@ func TestAccNutanixVirtualMachine_CloudInitCustomKeyValues(t *testing.T) { Providers: testAccProviders, CheckDestroy: testAccCheckNutanixVirtualMachineDestroy, Steps: []resource.TestStep{ - { - Config: testAccNutanixVMConfigCloudInitCustomKeyValues(r), - Check: resource.ComposeTestCheckFunc( - testAccCheckNutanixVirtualMachineExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "hardware_clock_timezone", "UTC"), - resource.TestCheckResourceAttr(resourceName, "power_state", "ON"), - resource.TestCheckResourceAttr(resourceName, "memory_size_mib", "186"), - resource.TestCheckResourceAttr(resourceName, "num_sockets", "1"), - resource.TestCheckResourceAttr(resourceName, "num_vcpus_per_socket", "1"), - ), - ExpectNonEmptyPlan: true, - }, { Config: testAccNutanixVMConfigCloudInitCustomKeyValues(r), Check: resource.ComposeTestCheckFunc( diff --git a/nutanix/structure.go b/nutanix/structure.go index 7926b3baa..6eea9f95a 100644 --- a/nutanix/structure.go +++ b/nutanix/structure.go @@ -105,8 +105,8 @@ func flattenNicList(nics []*v3.VMNic) []map[string]interface{} { func flattenDiskList(disks []*v3.VMDisk) []map[string]interface{} { diskList := make([]map[string]interface{}, 0) if disks != nil { - diskList = make([]map[string]interface{}, len(disks)) - for k, v := range disks { + diskList = make([]map[string]interface{}, 0) + for _, v := range disks { disk := make(map[string]interface{}) disk["uuid"] = utils.StringValue(v.UUID) @@ -117,10 +117,14 @@ func flattenDiskList(disks []*v3.VMDisk) []map[string]interface{} { if v.DeviceProperties != nil { deviceProps = make([]map[string]interface{}, 1) deviceProp := make(map[string]interface{}) - + index := fmt.Sprintf("%d", utils.Int64Value(v.DeviceProperties.DiskAddress.DeviceIndex)) + adapter := v.DeviceProperties.DiskAddress.AdapterType + if index == "3" && *adapter == IDE { + continue + } diskAddress := map[string]interface{}{ - "device_index": fmt.Sprintf("%d", utils.Int64Value(v.DeviceProperties.DiskAddress.DeviceIndex)), - "adapter_type": v.DeviceProperties.DiskAddress.AdapterType, + "device_index": index, + "adapter_type": adapter, } deviceProp["disk_address"] = diskAddress @@ -132,7 +136,7 @@ func flattenDiskList(disks []*v3.VMDisk) []map[string]interface{} { disk["data_source_reference"] = flattenReferenceValues(v.DataSourceReference) disk["volume_group_reference"] = flattenReferenceValues(v.VolumeGroupReference) - diskList[k] = disk + diskList = append(diskList, disk) } } return diskList