0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-02 03:22:59 +00:00

Additional logic while waiting for QEMU agent to publish the network interfaces

This commit is contained in:
Dan Petersen 2020-03-14 17:40:59 +01:00
parent 4aa1de656a
commit cfe0831b1c
2 changed files with 17 additions and 4 deletions

View File

@ -139,7 +139,7 @@ func (c *VirtualEnvironmentClient) UpdateVMAsync(nodeName string, vmID int, d *V
}
// WaitForNetworkInterfacesFromVMAgent waits for a virtual machine's QEMU agent to publish the network interfaces.
func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(nodeName string, vmID int, timeout int, delay int) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) {
func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(nodeName string, vmID int, timeout int, delay int, waitForIP bool) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) {
timeDelay := int64(delay)
timeMax := float64(timeout)
timeStart := time.Now()
@ -149,8 +149,21 @@ func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(nodeName
if int64(timeElapsed.Seconds())%timeDelay == 0 {
data, err := c.GetVMNetworkInterfacesFromAgent(nodeName, vmID)
if err == nil && data != nil {
return data, err
if err == nil && data != nil && data.Result != nil {
missingIP := false
if waitForIP {
for _, nic := range *data.Result {
if nic.IPAddresses == nil {
missingIP = true
break
}
}
}
if !missingIP {
return data, err
}
}
time.Sleep(1 * time.Second)

View File

@ -2722,7 +2722,7 @@ func resourceVirtualEnvironmentVMReadNetworkValues(d *schema.ResourceData, m int
if vmConfig.Agent != nil && vmConfig.Agent.Enabled != nil && *vmConfig.Agent.Enabled {
macAddresses := []interface{}{}
networkInterfaces, err := veClient.WaitForNetworkInterfacesFromVMAgent(nodeName, vmID, 1800, 5)
networkInterfaces, err := veClient.WaitForNetworkInterfacesFromVMAgent(nodeName, vmID, 900, 5, true)
if err == nil && networkInterfaces.Result != nil {
ipv4Addresses = make([]interface{}, len(*networkInterfaces.Result))