From 68c3e7461e1a6f81fcd7054a645717fc5c427eba Mon Sep 17 00:00:00 2001 From: raojinlin Date: Fri, 12 Jul 2024 14:09:08 +0800 Subject: [PATCH] hotfix: get cvm instance public-ip error --- plugins/cvm.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/cvm.go b/plugins/cvm.go index ce9c4ff..4b95c45 100644 --- a/plugins/cvm.go +++ b/plugins/cvm.go @@ -2,6 +2,7 @@ package plugins import ( "fmt" + "log/slog" "github.com/raojinlin/hostnav" "github.com/raojinlin/hostnav/pkg/terminal" @@ -83,15 +84,24 @@ func (p *CVMPlugin) List(options *ListOptions) ([]terminal.Host, error) { var result []terminal.Host for _, instance := range instances { + useLocalIP := p.Option.ConnectionOptions.UseLocalIP + publicIp := "" + if len(instance.PublicIpAddresses) > 0 { + publicIp = *instance.PublicIpAddresses[0] + } else { + slog.Warn("instance", *instance.InstanceName, "has no public IP address, falling back to private IP") + useLocalIP = true + } + result = append(result, terminal.Host{ Type: terminal.TerminalTypeHost, SSHInfo: terminal.SSHInfo{ Name: fmt.Sprintf("%s(%s): %s", p.Name(), *instance.Placement.Zone, *instance.InstanceName), - PublicIP: *instance.PublicIpAddresses[0], + PublicIP: publicIp, Port: 22, User: "root", LocalIP: *instance.PrivateIpAddresses[0], - UseLocalIP: p.Option.ConnectionOptions.UseLocalIP, + UseLocalIP: useLocalIP, }, }) }