diff --git a/internal/web/actions/default/clusters/cluster/createNode.go b/internal/web/actions/default/clusters/cluster/createNode.go index ebe84ed9..d8773a2b 100644 --- a/internal/web/actions/default/clusters/cluster/createNode.go +++ b/internal/web/actions/default/clusters/cluster/createNode.go @@ -219,6 +219,7 @@ func (this *CreateNodeAction) RunPost(params struct { "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "username": grantResp.NodeGrant.Username, } } } diff --git a/internal/web/actions/default/clusters/cluster/node/detail.go b/internal/web/actions/default/clusters/cluster/node/detail.go index 8dc78dcd..858c1ad1 100644 --- a/internal/web/actions/default/clusters/cluster/node/detail.go +++ b/internal/web/actions/default/clusters/cluster/node/detail.go @@ -165,6 +165,7 @@ func (this *DetailAction) RunGet(params struct { "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "username": grantResp.NodeGrant.Username, } } } diff --git a/internal/web/actions/default/clusters/cluster/node/update.go b/internal/web/actions/default/clusters/cluster/node/update.go index 093608de..dc9e3f7b 100644 --- a/internal/web/actions/default/clusters/cluster/node/update.go +++ b/internal/web/actions/default/clusters/cluster/node/update.go @@ -150,6 +150,7 @@ func (this *UpdateAction) RunGet(params struct { "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "username": grantResp.NodeGrant.Username, } } } diff --git a/internal/web/actions/default/clusters/cluster/updateNodeSSH.go b/internal/web/actions/default/clusters/cluster/updateNodeSSH.go index ecc0061b..8537dfd0 100644 --- a/internal/web/actions/default/clusters/cluster/updateNodeSSH.go +++ b/internal/web/actions/default/clusters/cluster/updateNodeSSH.go @@ -36,6 +36,11 @@ func (this *UpdateNodeSSHAction) RunGet(params struct { "id": node.Id, "name": node.Name, } + if nodeResp.Node.NodeCluster != nil { + this.Data["clusterId"] = nodeResp.Node.NodeCluster.Id + } else { + this.Data["clusterId"] = 0 + } // SSH loginParams := maps.Map{ diff --git a/internal/web/actions/default/clusters/grants/selectPopup.go b/internal/web/actions/default/clusters/grants/selectPopup.go index a7950b7c..71ae96d7 100644 --- a/internal/web/actions/default/clusters/grants/selectPopup.go +++ b/internal/web/actions/default/clusters/grants/selectPopup.go @@ -16,7 +16,10 @@ func (this *SelectPopupAction) Init() { this.Nav("", "", "") } -func (this *SelectPopupAction) RunGet(params struct{}) { +func (this *SelectPopupAction) RunGet(params struct { + NodeClusterId int64 + NsClusterId int64 +}) { // 所有的认证 grantsResp, err := this.RPC().NodeGrantRPC().FindAllEnabledNodeGrants(this.AdminContext(), &pb.FindAllEnabledNodeGrantsRequest{}) if err != nil { @@ -37,6 +40,28 @@ func (this *SelectPopupAction) RunGet(params struct{}) { } this.Data["grants"] = grantMaps + // 推荐的认证 + suggestGrantsResp, err := this.RPC().NodeGrantRPC().FindSuggestNodeGrants(this.AdminContext(), &pb.FindSuggestNodeGrantsRequest{ + NodeClusterId: params.NodeClusterId, + NsClusterId: params.NsClusterId, + }) + if err != nil { + this.ErrorPage(err) + return + } + var suggestGrantMaps = []maps.Map{} + for _, grant := range suggestGrantsResp.NodeGrants { + suggestGrantMaps = append(suggestGrantMaps, maps.Map{ + "id": grant.Id, + "name": grant.Name, + "method": grant.Method, + "methodName": grantutils.FindGrantMethodName(grant.Method), + "username": grant.Username, + "description": grant.Description, + }) + } + this.Data["suggestGrants"] = suggestGrantMaps + this.Show() } diff --git a/internal/web/actions/default/ns/clusters/cluster/node/index.go b/internal/web/actions/default/ns/clusters/cluster/node/index.go index fce62036..632a719a 100644 --- a/internal/web/actions/default/ns/clusters/cluster/node/index.go +++ b/internal/web/actions/default/ns/clusters/cluster/node/index.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/utils/numberutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/grants/grantutils" "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" @@ -102,6 +103,46 @@ func (this *IndexAction) RunGet(params struct { this.Data["newVersion"] = "" } + // 登录信息 + var loginMap maps.Map = nil + if node.NodeLogin != nil { + loginParams := maps.Map{} + if len(node.NodeLogin.Params) > 0 { + err = json.Unmarshal(node.NodeLogin.Params, &loginParams) + if err != nil { + this.ErrorPage(err) + return + } + } + + grantMap := maps.Map{} + grantId := loginParams.GetInt64("grantId") + if grantId > 0 { + grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: grantId}) + if err != nil { + this.ErrorPage(err) + return + } + if grantResp.NodeGrant != nil { + grantMap = maps.Map{ + "id": grantResp.NodeGrant.Id, + "name": grantResp.NodeGrant.Name, + "method": grantResp.NodeGrant.Method, + "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "username": grantResp.NodeGrant.Username, + } + } + } + + loginMap = maps.Map{ + "id": node.NodeLogin.Id, + "name": node.NodeLogin.Name, + "type": node.NodeLogin.Type, + "params": loginParams, + "grant": grantMap, + } + } + this.Data["node"] = maps.Map{ "id": node.Id, "name": node.Name, @@ -131,6 +172,8 @@ func (this *IndexAction) RunGet(params struct { "cacheTotalDiskSize": numberutils.FormatBytes(status.CacheTotalDiskSize), "cacheTotalMemorySize": numberutils.FormatBytes(status.CacheTotalMemorySize), }, + + "login": loginMap, } this.Show() diff --git a/internal/web/actions/default/ns/clusters/cluster/node/update.go b/internal/web/actions/default/ns/clusters/cluster/node/update.go index 47b111c7..1a3a6a47 100644 --- a/internal/web/actions/default/ns/clusters/cluster/node/update.go +++ b/internal/web/actions/default/ns/clusters/cluster/node/update.go @@ -90,6 +90,7 @@ func (this *UpdateAction) RunGet(params struct { "name": grantResp.NodeGrant.Name, "method": grantResp.NodeGrant.Method, "methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method), + "username": grantResp.NodeGrant.Username, } } } diff --git a/internal/web/actions/default/ns/clusters/cluster/updateNodeSSH.go b/internal/web/actions/default/ns/clusters/cluster/updateNodeSSH.go index 976f6e3d..2c0416be 100644 --- a/internal/web/actions/default/ns/clusters/cluster/updateNodeSSH.go +++ b/internal/web/actions/default/ns/clusters/cluster/updateNodeSSH.go @@ -37,6 +37,12 @@ func (this *UpdateNodeSSHAction) RunGet(params struct { "name": node.Name, } + if nodeResp.NsNode.NsCluster != nil { + this.Data["clusterId"] = nodeResp.NsNode.NsCluster.Id + } else { + this.Data["clusterId"] = 0 + } + // SSH loginParams := maps.Map{ "host": "", diff --git a/web/public/js/components/grant/grant-selector.js b/web/public/js/components/grant/grant-selector.js index 746483da..7f22d703 100644 --- a/web/public/js/components/grant/grant-selector.js +++ b/web/public/js/components/grant/grant-selector.js @@ -1,23 +1,26 @@ Vue.component("grant-selector", { - props: ["vGrant"], + props: ["v-grant", "v-node-cluster-id", "v-ns-cluster-id"], data: function () { return { grantId: (this.vGrant == null) ? 0 : this.vGrant.id, - grant: this.vGrant + grant: this.vGrant, + nodeClusterId: (this.vNodeClusterId != null) ? this.vNodeClusterId : 0, + nsClusterId: (this.vNsClusterId != null) ? this.vNsClusterId : 0 } }, methods: { // 选择授权 select: function () { let that = this; - teaweb.popup("/clusters/grants/selectPopup", { + teaweb.popup("/clusters/grants/selectPopup?nodeClusterId=" + this.nodeClusterId + "&nsClusterId=" + this.nsClusterId, { callback: (resp) => { that.grantId = resp.data.grant.id; if (that.grantId > 0) { that.grant = resp.data.grant; } that.notifyUpdate() - } + }, + height: "26em" }) }, @@ -64,7 +67,7 @@ Vue.component("grant-selector", { }, template: `
|
- 暂时还没有可用的认证。
- {{grant.name}} ({{grant.methodName}})({{grant.username}})
- 请点击选中某个认证。 - |
-
请点击使用某个认证。
diff --git a/web/views/@default/clusters/grants/selectPopup.less b/web/views/@default/clusters/grants/selectPopup.less new file mode 100644 index 00000000..60ccd07e --- /dev/null +++ b/web/views/@default/clusters/grants/selectPopup.less @@ -0,0 +1,33 @@ +.grants-box { + margin-top: 1em; +} + +.grant-box { + float: left; + width: 12em; + height: 4.5em; + overflow-x: hidden; + overflow-y: auto; + margin-right: 0.5em; + border: 1px #ccc solid; + margin-bottom: 0.5em; + padding: 0.5em 0.3em; + text-align: left; + cursor: pointer; + + .small { + font-size: 0.8em; + } + + div.method { + margin-top: 0.3em; + + .small { + font-size: 0.8em; + } + } +} + +.grant-box::-webkit-scrollbar { + width: 4px; +} \ No newline at end of file diff --git a/web/views/@default/ns/clusters/cluster/node/index.html b/web/views/@default/ns/clusters/cluster/node/index.html index 9f9118af..8dee5855 100644 --- a/web/views/@default/ns/clusters/cluster/node/index.html +++ b/web/views/@default/ns/clusters/cluster/node/index.html @@ -29,6 +29,46 @@