diff --git a/pkg/apis/webconsole/consts.go b/pkg/apis/webconsole/consts.go index 1f13b11073..0f5c4038a2 100644 --- a/pkg/apis/webconsole/consts.go +++ b/pkg/apis/webconsole/consts.go @@ -29,4 +29,5 @@ const ( VMRC = "vmrc" ZSTACK = "zstack" CTYUN = "ctyun" + HUAWEI = "huawei" ) diff --git a/pkg/compute/models/loadbalancercachedacls.go b/pkg/compute/models/loadbalancercachedacls.go index ec9b9fbdd6..d032a7366f 100644 --- a/pkg/compute/models/loadbalancercachedacls.go +++ b/pkg/compute/models/loadbalancercachedacls.go @@ -514,13 +514,14 @@ func (man *SCachedLoadbalancerAclManager) newFromCloudLoadbalancerAcl(ctx contex f := aclEntites.Fingerprint() if LoadbalancerAclManager.CountByFingerPrint(provider.ProjectId, f) == 0 { localAcl := &SLoadbalancerAcl{} + localAcl.SetModelManager(LoadbalancerAclManager, localAcl) localAcl.Name = acl.Name localAcl.Description = acl.Description localAcl.AclEntries = &aclEntites localAcl.Fingerprint = f localAcl.IsPublic = true localAcl.PublicScope = string(rbacutils.ScopeDomain) - err := LoadbalancerAclManager.TableSpec().Insert(ctx, &localAcl) + err := LoadbalancerAclManager.TableSpec().Insert(ctx, localAcl) if err != nil { return nil, errors.Wrap(err, "cachedLoadbalancerAclManager.new.InsertAcl") } diff --git a/pkg/multicloud/huawei/instance.go b/pkg/multicloud/huawei/instance.go index aa0ad21ea3..6e4fbbe6a0 100644 --- a/pkg/multicloud/huawei/instance.go +++ b/pkg/multicloud/huawei/instance.go @@ -1230,6 +1230,10 @@ func (self *SRegion) GetInstanceVNCUrl(instanceId string) (jsonutils.JSONObject, return nil, err } + if retDict, ok := ret.(*jsonutils.JSONDict); ok { + retDict.Set("protocol", jsonutils.NewString("huawei")) + } + return ret, nil } diff --git a/pkg/webconsole/handlers.go b/pkg/webconsole/handlers.go index 3cdf0d1380..de9ff40ded 100644 --- a/pkg/webconsole/handlers.go +++ b/pkg/webconsole/handlers.go @@ -204,7 +204,7 @@ func handleServerRemoteConsole(ctx context.Context, w http.ResponseWriter, r *ht return } switch info.Protocol { - case session.ALIYUN, session.QCLOUD, session.OPENSTACK, session.VMRC, session.ZSTACK, session.CTYUN: + case session.ALIYUN, session.QCLOUD, session.OPENSTACK, session.VMRC, session.ZSTACK, session.CTYUN, session.HUAWEI: responsePublicCloudConsole(ctx, info, w) case session.VNC, session.SPICE, session.WMKS: handleDataSession(ctx, info, w, url.Values{"password": {info.GetPassword()}}, true) diff --git a/pkg/webconsole/session/remote_console.go b/pkg/webconsole/session/remote_console.go index 12496b5bef..9a41038313 100644 --- a/pkg/webconsole/session/remote_console.go +++ b/pkg/webconsole/session/remote_console.go @@ -34,6 +34,7 @@ const ( VMRC = api.VMRC ZSTACK = api.ZSTACK CTYUN = api.CTYUN + HUAWEI = api.HUAWEI ) type RemoteConsoleInfo struct { @@ -121,7 +122,7 @@ func (info *RemoteConsoleInfo) GetConnectParams() (string, error) { return info.getAliyunURL() case QCLOUD: return info.getQcloudURL() - case OPENSTACK, VMRC, ZSTACK, CTYUN: + case OPENSTACK, VMRC, ZSTACK, CTYUN, HUAWEI: return info.Url, nil default: return "", fmt.Errorf("Can't convert protocol %s to connect params", info.Protocol)