diff --git a/internal/web/actions/default/clusters/cluster/init.go b/internal/web/actions/default/clusters/cluster/init.go index 28e5d99d..86d6407f 100644 --- a/internal/web/actions/default/clusters/cluster/init.go +++ b/internal/web/actions/default/clusters/cluster/init.go @@ -47,6 +47,7 @@ func init() { Get("/thresholds", new(thresholds.IndexAction)). Get("/detail", new(node.DetailAction)). GetPost("/boards", new(nodeboards.IndexAction)). + GetPost("/updateDNSPopup", new(node.UpdateDNSPopupAction)). // 分组相关 Prefix("/clusters/cluster/groups"). diff --git a/internal/web/actions/default/clusters/cluster/node/updateDNSPopup.go b/internal/web/actions/default/clusters/cluster/node/updateDNSPopup.go new file mode 100644 index 00000000..0ff7e41a --- /dev/null +++ b/internal/web/actions/default/clusters/cluster/node/updateDNSPopup.go @@ -0,0 +1,115 @@ +package node + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/dns/domains/domainutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/maps" + "net" +) + +type UpdateDNSPopupAction struct { + actionutils.ParentAction +} + +func (this *UpdateDNSPopupAction) Init() { + this.Nav("", "", "") +} + +func (this *UpdateDNSPopupAction) RunGet(params struct { + ClusterId int64 + NodeId int64 +}) { + this.Data["nodeId"] = params.NodeId + + dnsInfoResp, err := this.RPC().NodeRPC().FindEnabledNodeDNS(this.AdminContext(), &pb.FindEnabledNodeDNSRequest{ + NodeId: params.NodeId, + NodeClusterId: params.ClusterId, + }) + if err != nil { + this.ErrorPage(err) + return + } + dnsInfo := dnsInfoResp.Node + if dnsInfo == nil { + this.NotFound("node", params.NodeId) + return + } + this.Data["ipAddr"] = dnsInfo.IpAddr + this.Data["routes"] = domainutils.ConvertRoutesToMaps(dnsInfo) + this.Data["domainId"] = dnsInfo.DnsDomainId + this.Data["domainName"] = dnsInfo.DnsDomainName + + // 读取所有线路 + allRouteMaps := []maps.Map{} + if dnsInfo.DnsDomainId > 0 { + routesResp, err := this.RPC().DNSDomainRPC().FindAllDNSDomainRoutes(this.AdminContext(), &pb.FindAllDNSDomainRoutesRequest{DnsDomainId: dnsInfo.DnsDomainId}) + if err != nil { + this.ErrorPage(err) + return + } + if len(routesResp.Routes) > 0 { + for _, route := range routesResp.Routes { + allRouteMaps = append(allRouteMaps, maps.Map{ + "name": route.Name, + "code": route.Code, + "domainName": dnsInfo.DnsDomainName, + "domainId": dnsInfo.DnsDomainId, + }) + } + + // 筛选 + var routes = domainutils.FilterRoutes(dnsInfo.Routes, routesResp.Routes) + dnsInfo.Routes = routes + this.Data["routes"] = domainutils.ConvertRoutesToMaps(dnsInfo) + } + } + this.Data["allRoutes"] = allRouteMaps + + this.Show() +} + +func (this *UpdateDNSPopupAction) RunPost(params struct { + NodeId int64 + IpAddr string + DomainId int64 + DnsRoutesJSON []byte + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + // 操作日志 + defer this.CreateLog(oplogs.LevelInfo, "修改节点 %d 的DNS设置", params.NodeId) + + routes := []string{} + err := json.Unmarshal(params.DnsRoutesJSON, &routes) + if err != nil { + this.ErrorPage(err) + return + } + + params.Must. + Field("ipAddr", params.IpAddr). + Require("请输入IP地址") + + if net.ParseIP(params.IpAddr) == nil { + this.FailField("ipAddr", "请输入正确的IP地址") + } + + // 执行修改 + _, err = this.RPC().NodeRPC().UpdateNodeDNS(this.AdminContext(), &pb.UpdateNodeDNSRequest{ + NodeId: params.NodeId, + IpAddr: params.IpAddr, + DnsDomainId: params.DomainId, + Routes: routes, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/clusters/cluster/nodes.go b/internal/web/actions/default/clusters/cluster/nodes.go index 4aa77425..39e37b3f 100644 --- a/internal/web/actions/default/clusters/cluster/nodes.go +++ b/internal/web/actions/default/clusters/cluster/nodes.go @@ -41,6 +41,15 @@ func (this *NodesAction) RunGet(params struct { this.Data["activeState"] = params.ActiveState this.Data["keyword"] = params.Keyword + // 集群是否已经设置了线路 + clusterDNSResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId}) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["hasClusterDNS"] = clusterDNSResp.Domain != nil + + // 数量 countAllResp, err := this.RPC().NodeRPC().CountAllEnabledNodesMatch(this.AdminContext(), &pb.CountAllEnabledNodesMatchRequest{ NodeClusterId: params.ClusterId, }) diff --git a/web/public/js/components/dns/dns-route-selector.js b/web/public/js/components/dns/dns-route-selector.js index d864b6fe..2b2376d7 100644 --- a/web/public/js/components/dns/dns-route-selector.js +++ b/web/public/js/components/dns/dns-route-selector.js @@ -94,7 +94,7 @@ Vue.component("dns-route-selector", {
- +
diff --git a/web/views/@default/@layout.html b/web/views/@default/@layout.html index 6b5d6bae..80282012 100644 --- a/web/views/@default/@layout.html +++ b/web/views/@default/@layout.html @@ -11,7 +11,6 @@ {$end} {$TEA.SEMANTIC} - {$TEA.VUE} {$echo "header"} @@ -20,6 +19,8 @@ + + diff --git a/web/views/@default/@layout_override.css b/web/views/@default/@layout_override.css index 800fae2e..341b4afa 100644 --- a/web/views/@default/@layout_override.css +++ b/web/views/@default/@layout_override.css @@ -45,4 +45,7 @@ select.dropdown { .message .icon.warning { font-size: 2em !important; } +body.swal2-shown { + overflow: auto !important; +} /*# sourceMappingURL=@layout_override.css.map */ \ No newline at end of file diff --git a/web/views/@default/@layout_override.css.map b/web/views/@default/@layout_override.css.map index fd305898..cb7bc870 100644 --- a/web/views/@default/@layout_override.css.map +++ b/web/views/@default/@layout_override.css.map @@ -1 +1 @@ -{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,oCAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,oCAAA;;AAGD,GAAG,MAAM;EACR,kCAAA;;AAGD,GAAG,MAAM,MAAM;EACd,iCAAA;;AAID,IACC;EACC,2BAAA;;AAKF,KAAK;EACJ,sBAAA;;AAGD,KAAK,KAAK;EACT,yBAAA;;AAID,KACC,GAAE;AADH,KACY,GAAE;EACZ,6BAAA;EACA,0BAAA;EACA,2BAAA;;AAJF,KAOC,GAAE;EACD,WAAA;;AARF,KAWC,GAAE;EACD,UAAA;;AAZF,KAeC,GAAE;EACD,UAAA;;AAKF,QAAQ;EACP,qBAAA;;AAID,MAAM;EACL,uBAAA;;AAID,QACC,MAAK;EACJ,yBAAA","file":"@layout_override.css"} \ No newline at end of file +{"version":3,"sources":["@layout_override.less"],"names":[],"mappings":"AACA,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,MAAM,QAAS,QAAO;EACrG,oCAAA;;AAGD,GAAG,OAAO,SAAU,MAAK,QAAS,OAAM;AAAS,GAAG,OAAO,SAAU,MAAK,QAAS,QAAO;EACzF,oCAAA;;AAGD,GAAG,MAAM;EACR,kCAAA;;AAGD,GAAG,MAAM,MAAM;EACd,iCAAA;;AAID,IACC;EACC,2BAAA;;AAKF,KAAK;EACJ,sBAAA;;AAGD,KAAK,KAAK;EACT,yBAAA;;AAID,KACC,GAAE;AADH,KACY,GAAE;EACZ,6BAAA;EACA,0BAAA;EACA,2BAAA;;AAJF,KAOC,GAAE;EACD,WAAA;;AARF,KAWC,GAAE;EACD,UAAA;;AAZF,KAeC,GAAE;EACD,UAAA;;AAKF,QAAQ;EACP,qBAAA;;AAID,MAAM;EACL,uBAAA;;AAID,QACC,MAAK;EACJ,yBAAA;;AAKF,IAAI;EACH,yBAAA","file":"@layout_override.css"} \ No newline at end of file diff --git a/web/views/@default/@layout_override.less b/web/views/@default/@layout_override.less index 295ff978..d311e3c9 100644 --- a/web/views/@default/@layout_override.less +++ b/web/views/@default/@layout_override.less @@ -67,4 +67,9 @@ select.dropdown { .icon.warning { font-size: 2em !important; } +} + +// popup +body.swal2-shown { + overflow: auto !important; } \ No newline at end of file diff --git a/web/views/@default/clusters/cluster/node/updateDNSPopup.html b/web/views/@default/clusters/cluster/node/updateDNSPopup.html new file mode 100644 index 00000000..3f41ed3b --- /dev/null +++ b/web/views/@default/clusters/cluster/node/updateDNSPopup.html @@ -0,0 +1,37 @@ +{$layout "layout_popup"} + +

修改节点DNS设置

+ +
+ + + + + + + + + + + + + + + + + +
主域名{{domainName}} +

由当前节点所属集群设置。

+
IP地址 * + +

用于域名解析的节点IP地址。

+
线路 +

没有可选的线路。

+
+ +

当前节点IP对应的线路。

+
+
+ + +
\ No newline at end of file diff --git a/web/views/@default/clusters/cluster/nodes.css b/web/views/@default/clusters/cluster/nodes.css index 7388dd91..328fd653 100644 --- a/web/views/@default/clusters/cluster/nodes.css +++ b/web/views/@default/clusters/cluster/nodes.css @@ -4,4 +4,19 @@ a .red { border-bottom: 1px #db2828 dashed; } +.routes-box a { + margin-left: 0.4em; + display: none; +} +.routes-box.show-link a { + display: inline; + font-size: 1em; +} +.routes-box:hover a { + display: inline; +} +a.small { + font-size: 0.8em; + text-align: center; +} /*# sourceMappingURL=nodes.css.map */ \ No newline at end of file diff --git a/web/views/@default/clusters/cluster/nodes.css.map b/web/views/@default/clusters/cluster/nodes.css.map index 68cc3cd6..9ae06581 100644 --- a/web/views/@default/clusters/cluster/nodes.css.map +++ b/web/views/@default/clusters/cluster/nodes.css.map @@ -1 +1 @@ -{"version":3,"sources":["nodes.less"],"names":[],"mappings":"AAAA,MAAO;EACN,oBAAA;;AAGD,CACC;EACC,iCAAA","file":"nodes.css"} \ No newline at end of file +{"version":3,"sources":["nodes.less"],"names":[],"mappings":"AAAA,MAAO;EACN,oBAAA;;AAGD,CACC;EACC,iCAAA;;AAIF,WACC;EACC,kBAAA;EACA,aAAA;;AAIF,WAAW,UACV;EACC,eAAA;EACA,cAAA;;AAIF,WAAW,MACV;EACC,eAAA;;AAIF,CAAC;EACA,gBAAA;EACA,kBAAA","file":"nodes.css"} \ No newline at end of file diff --git a/web/views/@default/clusters/cluster/nodes.html b/web/views/@default/clusters/cluster/nodes.html index 38ca6a76..cfeb4e3a 100644 --- a/web/views/@default/clusters/cluster/nodes.html +++ b/web/views/@default/clusters/cluster/nodes.html @@ -88,12 +88,18 @@
- +
{{routeName}}
+
+ [修改] +
+ + [设置] + - diff --git a/web/views/@default/clusters/cluster/nodes.js b/web/views/@default/clusters/cluster/nodes.js index 640fc18c..47b382a0 100644 --- a/web/views/@default/clusters/cluster/nodes.js +++ b/web/views/@default/clusters/cluster/nodes.js @@ -21,4 +21,17 @@ Tea.context(function () { .refresh() }) } + + this.updateNodeDNS = function (nodeId) { + let that = this + teaweb.popup("/clusters/cluster/node/updateDNSPopup?clusterId=" + this.clusterId + "&nodeId=" + nodeId, { + width: "46em", + height: "26em", + callback: function () { + teaweb.success("保存成功", function () { + teaweb.reload() + }) + } + }) + } }) \ No newline at end of file diff --git a/web/views/@default/clusters/cluster/nodes.less b/web/views/@default/clusters/cluster/nodes.less index 8f1bfd27..73e5fefc 100644 --- a/web/views/@default/clusters/cluster/nodes.less +++ b/web/views/@default/clusters/cluster/nodes.less @@ -6,4 +6,29 @@ a { .red { border-bottom: 1px #db2828 dashed; } +} + +.routes-box { + a { + margin-left: 0.4em; + display: none; + } +} + +.routes-box.show-link { + a { + display: inline; + font-size: 1em; + } +} + +.routes-box:hover { + a { + display: inline; + } +} + +a.small { + font-size: 0.8em; + text-align: center; } \ No newline at end of file