0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 02:31:10 +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:
Oto Petřík 2023-11-10 02:19:09 +01:00 committed by GitHub
parent d2b8ce1a7d
commit a586d0381e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 2 deletions

View File

@ -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)
}

View File

@ -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)
}