From 66b871ab9b565c3d678d4513d7cd52e9adfe9122 Mon Sep 17 00:00:00 2001 From: rainzm Date: Thu, 3 Mar 2022 16:42:51 +0800 Subject: [PATCH] fix(region,devtool): get ssh port from 'servers//sshport' api --- cmd/climc/shell/compute/servers.go | 2 ++ pkg/apis/compute/guest_sshable.go | 6 +++++- pkg/compute/models/guest_sshable.go | 15 ++++++++++----- pkg/devtool/utils/ssh.go | 28 +++++++++++++++++++++++++--- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/cmd/climc/shell/compute/servers.go b/cmd/climc/shell/compute/servers.go index b29ee4aa34..ea09d626f2 100644 --- a/cmd/climc/shell/compute/servers.go +++ b/cmd/climc/shell/compute/servers.go @@ -101,6 +101,8 @@ func init() { cmd.Get("make-sshable-cmd", new(options.ServerIdOptions)) cmd.Get("change-owner-candidate-domains", new(options.ServerChangeOwnerCandidateDomainsOptions)) cmd.Get("change-owner-candidate-domains", new(options.ServerChangeOwnerCandidateDomainsOptions)) + cmd.Get("sshport", new(options.ServerIdOptions)) + cmd.GetProperty(&options.ServerStatusStatisticsOptions{}) type ServerTaskShowOptions struct { diff --git a/pkg/apis/compute/guest_sshable.go b/pkg/apis/compute/guest_sshable.go index 1796d4c68b..96124894fd 100644 --- a/pkg/apis/compute/guest_sshable.go +++ b/pkg/apis/compute/guest_sshable.go @@ -66,6 +66,10 @@ type GuestMakeSshableCmdOutput struct { ShellCmd string } -type GuestSetSshPortInput struct { +type GuestSetSshportInput struct { + Port int +} + +type GuestSshportOutput struct { Port int } diff --git a/pkg/compute/models/guest_sshable.go b/pkg/compute/models/guest_sshable.go index 5ee933102d..b354738725 100644 --- a/pkg/compute/models/guest_sshable.go +++ b/pkg/compute/models/guest_sshable.go @@ -595,13 +595,18 @@ func (guest *SGuest) SetSshPort(ctx context.Context, userCred mcclient.TokenCred return guest.SetMetadata(ctx, compute_api.SSH_PORT, port, userCred) } -func (guest *SGuest) AllowPerformSetSshport(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { - return guest.IsOwner(userCred) || db.IsAdminAllowPerform(userCred, guest, "set-sshport") -} - -func (guest *SGuest) PerformSetSshPort(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input compute_api.GuestSetSshPortInput) (jsonutils.JSONObject, error) { +func (guest *SGuest) PerformSetSshport(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input compute_api.GuestSetSshportInput) (jsonutils.JSONObject, error) { if input.Port < 0 { return nil, httperrors.NewInputParameterError("invalid port") } return nil, guest.SetSshPort(ctx, userCred, input.Port) } + +func (guest *SGuest) GetDetailsSshport( + ctx context.Context, + userCred mcclient.TokenCredential, + query jsonutils.JSONObject, +) (compute_api.GuestSshportOutput, error) { + port := guest.GetSshPort(userCred) + return compute_api.GuestSshportOutput{Port: port}, nil +} diff --git a/pkg/devtool/utils/ssh.go b/pkg/devtool/utils/ssh.go index b9079cf896..fb3c5c04bd 100644 --- a/pkg/devtool/utils/ssh.go +++ b/pkg/devtool/utils/ssh.go @@ -92,18 +92,23 @@ func checkSshableForYunionCloud(session *mcclient.ClientSession, serverDetail *c } ips := strings.Split(serverDetail.IPs, ",") ip := strings.TrimSpace(ips[0]) + port, err := getServerSshport(session, serverDetail.Id) + if err != nil { + err = errors.Wrapf(err, "unable to get ssh port of server %s", serverDetail.Id) + return + } if serverDetail.Hypervisor == comapi.HYPERVISOR_BAREMETAL || serverDetail.VpcId == "" || serverDetail.VpcId == comapi.DEFAULT_VPC_ID { sshable = SSHable{ Ok: true, User: "cloudroot", Host: ip, - Port: 22, + Port: port, } return } lfParams := jsonutils.NewDict() lfParams.Set("proto", jsonutils.NewString("tcp")) - lfParams.Set("port", jsonutils.NewInt(22)) + lfParams.Set("port", jsonutils.NewInt(int64(port))) lfParams.Set("addr", jsonutils.NewString(ip)) data, err := modules.Servers.PerformAction(session, serverDetail.Id, "list-forward", lfParams) if err != nil { @@ -212,10 +217,15 @@ func CheckSSHable(session *mcclient.ClientSession, serverId string) (sshable SSH if len(sshable.ProxyEndpointId) == 0 { return } else { + var sshport int + sshport, err = getServerSshport(session, serverDetail.Id) + if err != nil { + err = errors.Wrapf(err, "unable to get sshport of server %s", serverDetail.Id) + } // create local forward createP := jsonutils.NewDict() createP.Set("type", jsonutils.NewString(cloudproxy_api.FORWARD_TYPE_LOCAL)) - createP.Set("remote_port", jsonutils.NewInt(22)) + createP.Set("remote_port", jsonutils.NewInt(int64(sshport))) createP.Set("server_id", jsonutils.NewString(serverDetail.Id)) var forward jsonutils.JSONObject @@ -273,6 +283,18 @@ func GetCleanFunc(session *mcclient.ClientSession, hypervisor, serverId, host, f } } +func getServerSshport(session *mcclient.ClientSession, serverId string) (int, error) { + data, err := modules.Servers.GetSpecific(session, serverId, "sshport", nil) + if err != nil { + return 0, err + } + port, _ := data.Int("port") + if port == 0 { + port = 22 + } + return int(port), nil +} + func clearLocalForward(s *mcclient.ClientSession, forwardId string) error { if len(forwardId) == 0 { return nil