diff --git a/pkg/compute/models/guest_sshable.go b/pkg/compute/models/guest_sshable.go index e97abc6a9b..40f3de55e9 100644 --- a/pkg/compute/models/guest_sshable.go +++ b/pkg/compute/models/guest_sshable.go @@ -20,6 +20,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/tristate" "yunion.io/x/sqlchemy" cloudproxy_api "yunion.io/x/onecloud/pkg/apis/cloudproxy" @@ -91,6 +92,23 @@ func (guest *SGuest) GetDetailsSshable( if err := guest.sshableTryEach(ctx, userCred, tryData); err != nil { return nil, err } + + { + sshable := false + for i := range tryData.MethodTried { + if tryData.MethodTried[i].Sshable { + sshable = true + break + } + } + if _, err := db.Update(guest, func() error { + guest.SshableLastState = tristate.NewFromBool(sshable) + return nil + }); err != nil { + log.Errorf("update guest %s(%s) sshable_last_state to %v: %v", guest.Name, guest.Id, sshable, err) + } + } + return tryData.outputJSON(), nil } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index cebbc5988b..bbe8a1ff5a 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -151,6 +151,8 @@ type SGuest struct { // 套餐名称 InstanceType string `width:"64" charset:"utf8" nullable:"true" list:"user" create:"optional"` + + SshableLastState tristate.TriState `nullable:"false" default:"false" list:"user"` } func (manager *SGuestManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool {