Skip to content

Commit

Permalink
fix: avoid sending empty bootConfig object in request
Browse files Browse the repository at this point in the history
  • Loading branch information
marinsalinas committed Oct 26, 2020
1 parent 24519ed commit 7797b5c
Showing 1 changed file with 50 additions and 32 deletions.
82 changes: 50 additions & 32 deletions nutanix/resource_nutanix_virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -874,7 +874,7 @@ func resourceNutanixVirtualMachineCreate(d *schema.ResourceData, meta interface{
}

if _, errWaitTask := stateConf.WaitForState(); errWaitTask != nil {
return fmt.Errorf("error waiting for vm (%s) to create: %s", d.Id(), errWaitTask)
return fmt.Errorf("error waiting for vm (%s) to create: %s", uuid, errWaitTask)
}

//Wait for IP available
Expand Down Expand Up @@ -1085,7 +1085,6 @@ func resourceNutanixVirtualMachineUpdate(d *schema.ResourceData, meta interface{
spec := &v3.VM{}
guest := &v3.GuestCustomization{}
guestTool := &v3.GuestToolsSpec{}
boot := &v3.VMBootConfig{}
pw := &v3.VMPowerStateMechanism{}

response, err := conn.V3.GetVM(d.Id())
Expand All @@ -1095,7 +1094,6 @@ func resourceNutanixVirtualMachineUpdate(d *schema.ResourceData, meta interface{
preFillGTUpdateRequest(guestTool, response)
preFillGUpdateRequest(guest, response)
preFillPWUpdateRequest(pw, response)
boot = res.BootConfig

if err != nil {
if strings.Contains(fmt.Sprint(err), "ENTITY_NOT_FOUND") {
Expand Down Expand Up @@ -1299,36 +1297,8 @@ func resourceNutanixVirtualMachineUpdate(d *schema.ResourceData, meta interface{
hotPlugChange = false
}

if d.HasChange("boot_device_order_list") {
_, n := d.GetChange("boot_device_order_list")
boot.BootDeviceOrderList = expandStringList(n.([]interface{}))
hotPlugChange = false
}

bd := &v3.VMBootDevice{}
dska := &v3.DiskAddress{}
if d.HasChange("boot_device_disk_address") {
_, n := d.GetChange("boot_device_disk_address")
dai := n.(map[string]interface{})
dska = &v3.DiskAddress{
DeviceIndex: validateMapIntValue(dai, "device_index"),
AdapterType: validateMapStringValue(dai, "adapter_type"),
}
hotPlugChange = false
}
if d.HasChange("boot_device_mac_address") {
_, n := d.GetChange("boot_device_mac_address")
bd.MacAddress = utils.StringPtr(n.(string))
hotPlugChange = false
}
boot.BootDevice = bd

if dska.AdapterType == nil && dska.DeviceIndex == nil && bd.MacAddress == nil {
boot.BootDevice = nil
}

res.PowerStateMechanism = pw
res.BootConfig = boot
res.BootConfig, hotPlugChange = bootConfigHasChange(res.BootConfig, d)

if !reflect.DeepEqual(*guestTool, (v3.GuestToolsSpec{})) {
res.GuestTools = guestTool
Expand Down Expand Up @@ -1382,6 +1352,49 @@ func resourceNutanixVirtualMachineUpdate(d *schema.ResourceData, meta interface{
return resourceNutanixVirtualMachineRead(d, meta)
}

func bootConfigHasChange(boot *v3.VMBootConfig, d *schema.ResourceData) (*v3.VMBootConfig, bool) {
hotPlugChange := false

if boot == nil {
boot = &v3.VMBootConfig{}
}

if d.HasChange("boot_device_order_list") {
_, n := d.GetChange("boot_device_order_list")
boot.BootDeviceOrderList = expandStringList(n.([]interface{}))
hotPlugChange = false
}

bd := &v3.VMBootDevice{}
dska := &v3.DiskAddress{}

if d.HasChange("boot_device_disk_address") {
_, n := d.GetChange("boot_device_disk_address")
dai := n.(map[string]interface{})
dska = &v3.DiskAddress{
DeviceIndex: validateMapIntValue(dai, "device_index"),
AdapterType: validateMapStringValue(dai, "adapter_type"),
}
hotPlugChange = false
}
if d.HasChange("boot_device_mac_address") {
_, n := d.GetChange("boot_device_mac_address")
bd.MacAddress = utils.StringPtr(n.(string))
hotPlugChange = false
}
boot.BootDevice = bd

if dska.AdapterType == nil && dska.DeviceIndex == nil && bd.MacAddress == nil {
boot.BootDevice = nil
}

if reflect.DeepEqual(*boot, v3.VMBootConfig{}) {
return nil, hotPlugChange
}

return boot, hotPlugChange
}

func changePowerState(conn *v3.Client, id string, powerState string) error {
request := &v3.VMIntentInput{}
metadata := &v3.Metadata{}
Expand Down Expand Up @@ -1662,6 +1675,11 @@ func getVMResources(d *schema.ResourceData, vm *v3.VMResources) error {

vm.DiskList = vmDiskList

//check if BootConfig was set
if reflect.DeepEqual(*vm.BootConfig, v3.VMBootConfig{}) {
vm.BootConfig = nil
}

return nil
}

Expand Down

0 comments on commit 7797b5c

Please sign in to comment.