diff --git a/fwprovider/provider.go b/fwprovider/provider.go index 06e8a906..3f7a6d91 100644 --- a/fwprovider/provider.go +++ b/fwprovider/provider.go @@ -407,13 +407,34 @@ func (r *apiResolver) Resolve(ctx context.Context, nodeName string) (ssh.Proxmox nodeAddress := "" + // try IPv4 address on the interface with IPv4 gateway for _, d := range networkDevices { - if d.Address != nil { + if d.Gateway != nil && d.Address != nil { nodeAddress = *d.Address break } } + if nodeAddress == "" { + // fallback 1: try IPv6 address on the interface with IPv6 gateway + for _, d := range networkDevices { + if d.Gateway6 != nil && d.Address6 != nil { + nodeAddress = *d.Address6 + break + } + } + } + + if nodeAddress == "" { + // fallback 2: use first interface with any IPv4 address + for _, d := range networkDevices { + if d.Address != nil { + nodeAddress = *d.Address + break + } + } + } + if nodeAddress == "" { return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName) } diff --git a/proxmoxtf/provider/provider.go b/proxmoxtf/provider/provider.go index 3fa5800d..fe4f1c21 100644 --- a/proxmoxtf/provider/provider.go +++ b/proxmoxtf/provider/provider.go @@ -181,13 +181,34 @@ func (r *apiResolver) Resolve(ctx context.Context, nodeName string) (ssh.Proxmox nodeAddress := "" + // try IPv4 address on the interface with IPv4 gateway for _, d := range networkDevices { - if d.Address != nil { + if d.Gateway != nil && d.Address != nil { nodeAddress = *d.Address break } } + if nodeAddress == "" { + // fallback 1: try IPv6 address on the interface with IPv6 gateway + for _, d := range networkDevices { + if d.Gateway6 != nil && d.Address6 != nil { + nodeAddress = *d.Address6 + break + } + } + } + + if nodeAddress == "" { + // fallback 2: use first interface with any IPv4 address + for _, d := range networkDevices { + if d.Address != nil { + nodeAddress = *d.Address + break + } + } + } + if nodeAddress == "" { return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName) }