mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-08-23 20:08:34 +00:00
fix(provider): do not blindly use first IP for SSH (#704)
For SSH access, try in order: - IPv4 address of the interface with IPv4 Gateway (if there is one) - IPv6 address of the interface with IPv6 Gateway (if there is one) - fallback to the first interface with IPv4 address Signed-off-by: Oto Petřík <oto.petrik@gmail.com> Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
d2b8ce1a7d
commit
a586d0381e
@ -407,12 +407,33 @@ func (r *apiResolver) Resolve(ctx context.Context, nodeName string) (ssh.Proxmox
|
|||||||
|
|
||||||
nodeAddress := ""
|
nodeAddress := ""
|
||||||
|
|
||||||
|
// try IPv4 address on the interface with IPv4 gateway
|
||||||
|
for _, d := range networkDevices {
|
||||||
|
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 {
|
for _, d := range networkDevices {
|
||||||
if d.Address != nil {
|
if d.Address != nil {
|
||||||
nodeAddress = *d.Address
|
nodeAddress = *d.Address
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if nodeAddress == "" {
|
if nodeAddress == "" {
|
||||||
return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName)
|
return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName)
|
||||||
|
@ -181,12 +181,33 @@ func (r *apiResolver) Resolve(ctx context.Context, nodeName string) (ssh.Proxmox
|
|||||||
|
|
||||||
nodeAddress := ""
|
nodeAddress := ""
|
||||||
|
|
||||||
|
// try IPv4 address on the interface with IPv4 gateway
|
||||||
|
for _, d := range networkDevices {
|
||||||
|
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 {
|
for _, d := range networkDevices {
|
||||||
if d.Address != nil {
|
if d.Address != nil {
|
||||||
nodeAddress = *d.Address
|
nodeAddress = *d.Address
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if nodeAddress == "" {
|
if nodeAddress == "" {
|
||||||
return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName)
|
return ssh.ProxmoxNode{}, fmt.Errorf("failed to determine the IP address of node \"%s\"", nc.NodeName)
|
||||||
|
Loading…
Reference in New Issue
Block a user