Skip to content

Commit cb40bc2

Browse files
committed
fix(domain): restore error handling for network operations
Restore critical error checks for network These checks are necessary to ensure proper error propagation when network operations fail. Fixes #1091
1 parent 1cd90b7 commit cb40bc2

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

libvirt/domain.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"strconv"
1212
"strings"
1313

14-
"github.com/davecgh/go-spew/spew"
1514
libvirt "github.com/digitalocean/go-libvirt"
1615
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1716
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -194,10 +193,19 @@ func domainGetIfacesInfo(virConn *libvirt.Libvirt, domain libvirt.Domain, rd *sc
194193
var interfaces []libvirt.DomainInterface
195194
interfaces, err = virConn.DomainInterfaceAddresses(domain, addrsrc, 0)
196195
if err != nil {
197-
return interfaces, fmt.Errorf("error retrieving interface addresses: %w", err)
196+
switch virErr := err.(type) {
197+
case libvirt.Error:
198+
// Agent can be unresponsive if being installed/setup
199+
if addrsrc == uint32(libvirt.DomainInterfaceAddressesSrcLease) && virErr.Code != uint32(libvirt.ErrOperationInvalid) ||
200+
addrsrc == uint32(libvirt.DomainInterfaceAddressesSrcAgent) && virErr.Code != uint32(libvirt.ErrAgentUnresponsive) {
201+
return interfaces, fmt.Errorf("error retrieving interface addresses: %w", err)
202+
}
203+
// 如果是 ErrAgentUnresponsive,继续尝试
204+
return interfaces, nil
205+
default:
206+
return interfaces, fmt.Errorf("error retrieving interface addresses: %w", virErr)
207+
}
198208
}
199-
log.Printf("[DEBUG] Interfaces info obtained with libvirt API:\n%s\n", spew.Sdump(interfaces))
200-
201209
return interfaces, nil
202210
}
203211

0 commit comments

Comments
 (0)