mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 21:50:28 +08:00 
			
		
		
		
	生成节点DNS解析时区分节点是否已安装
This commit is contained in:
		@@ -25,7 +25,7 @@ func (this *ClusterAction) RunGet(params struct {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cluster := clusterResp.NodeCluster
 | 
			
		||||
	var cluster = clusterResp.NodeCluster
 | 
			
		||||
	if cluster == nil {
 | 
			
		||||
		this.NotFound("nodeCluster", params.ClusterId)
 | 
			
		||||
		return
 | 
			
		||||
@@ -42,7 +42,7 @@ func (this *ClusterAction) RunGet(params struct {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var defaultRoute = dnsResp.DefaultRoute
 | 
			
		||||
	domainName := ""
 | 
			
		||||
	var domainName = ""
 | 
			
		||||
	var dnsMap = maps.Map{
 | 
			
		||||
		"dnsName":          dnsResp.Name,
 | 
			
		||||
		"domainId":         0,
 | 
			
		||||
@@ -70,19 +70,42 @@ func (this *ClusterAction) RunGet(params struct {
 | 
			
		||||
 | 
			
		||||
	this.Data["dnsInfo"] = dnsMap
 | 
			
		||||
 | 
			
		||||
	// 节点DNS解析记录
 | 
			
		||||
	nodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithNodeClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithNodeClusterIdRequest{NodeClusterId: params.ClusterId})
 | 
			
		||||
	// 未安装的节点
 | 
			
		||||
	notInstalledNodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithNodeClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithNodeClusterIdRequest{
 | 
			
		||||
		NodeClusterId: params.ClusterId,
 | 
			
		||||
		IsInstalled:   false,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var nodeMaps = []maps.Map{}
 | 
			
		||||
	var allNodes = notInstalledNodesResp.Nodes
 | 
			
		||||
 | 
			
		||||
	// 节点DNS解析记录
 | 
			
		||||
	nodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithNodeClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithNodeClusterIdRequest{
 | 
			
		||||
		NodeClusterId: params.ClusterId,
 | 
			
		||||
		IsInstalled:   true,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var installedNodeIdsMap = map[int64]bool{}
 | 
			
		||||
	for _, node := range nodesResp.Nodes {
 | 
			
		||||
		installedNodeIdsMap[node.Id] = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	allNodes = append(allNodes, nodesResp.Nodes...)
 | 
			
		||||
 | 
			
		||||
	var nodeMaps = []maps.Map{}
 | 
			
		||||
	for _, node := range allNodes {
 | 
			
		||||
		var isInstalled = installedNodeIdsMap[node.Id]
 | 
			
		||||
 | 
			
		||||
		if len(node.Routes) > 0 {
 | 
			
		||||
			for _, route := range node.Routes {
 | 
			
		||||
				// 检查是否已解析
 | 
			
		||||
				var isResolved = false
 | 
			
		||||
				if cluster.DnsDomainId > 0 && len(cluster.DnsName) > 0 && len(node.IpAddr) > 0 {
 | 
			
		||||
				if isInstalled && cluster.DnsDomainId > 0 && len(cluster.DnsName) > 0 && len(node.IpAddr) > 0 {
 | 
			
		||||
					var recordType = "A"
 | 
			
		||||
					if utils.IsIPv6(node.IpAddr) {
 | 
			
		||||
						recordType = "AAAA"
 | 
			
		||||
@@ -112,12 +135,13 @@ func (this *ClusterAction) RunGet(params struct {
 | 
			
		||||
					},
 | 
			
		||||
					"clusterId":   node.NodeClusterId,
 | 
			
		||||
					"isResolved":  isResolved,
 | 
			
		||||
					"isInstalled": isInstalled,
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			// 默认线路
 | 
			
		||||
			var isResolved = false
 | 
			
		||||
			if len(defaultRoute) > 0 {
 | 
			
		||||
			if isInstalled && len(defaultRoute) > 0 {
 | 
			
		||||
				var recordType = "A"
 | 
			
		||||
				if utils.IsIPv6(node.IpAddr) {
 | 
			
		||||
					recordType = "AAAA"
 | 
			
		||||
@@ -146,6 +170,7 @@ func (this *ClusterAction) RunGet(params struct {
 | 
			
		||||
				},
 | 
			
		||||
				"clusterId":   node.NodeClusterId,
 | 
			
		||||
				"isResolved":  isResolved,
 | 
			
		||||
				"isInstalled": isInstalled,
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,8 @@ func (this *NodesPopupAction) Init() {
 | 
			
		||||
func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
	DomainId int64
 | 
			
		||||
}) {
 | 
			
		||||
	this.Data["domainId"] = params.DomainId
 | 
			
		||||
 | 
			
		||||
	// 域名信息
 | 
			
		||||
	domainResp, err := this.RPC().DNSDomainRPC().FindBasicDNSDomain(this.AdminContext(), &pb.FindBasicDNSDomainRequest{
 | 
			
		||||
		DnsDomainId: params.DomainId,
 | 
			
		||||
@@ -26,7 +28,7 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	domain := domainResp.DnsDomain
 | 
			
		||||
	var domain = domainResp.DnsDomain
 | 
			
		||||
	if domain == nil {
 | 
			
		||||
		this.NotFound("dnsDomain", params.DomainId)
 | 
			
		||||
		return
 | 
			
		||||
@@ -35,7 +37,7 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
	this.Data["domain"] = domain.Name
 | 
			
		||||
 | 
			
		||||
	// 集群
 | 
			
		||||
	clusterMaps := []maps.Map{}
 | 
			
		||||
	var clusterMaps = []maps.Map{}
 | 
			
		||||
	clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClustersWithDNSDomainId(this.AdminContext(), &pb.FindAllEnabledNodeClustersWithDNSDomainIdRequest{DnsDomainId: params.DomainId})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
@@ -43,18 +45,24 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, cluster := range clustersResp.NodeClusters {
 | 
			
		||||
		// 默认值
 | 
			
		||||
		var defaultRoute = cluster.DnsDefaultRoute
 | 
			
		||||
 | 
			
		||||
		// 节点DNS解析记录
 | 
			
		||||
		nodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithNodeClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithNodeClusterIdRequest{NodeClusterId: cluster.Id})
 | 
			
		||||
		nodesResp, err := this.RPC().NodeRPC().FindAllEnabledNodesDNSWithNodeClusterId(this.AdminContext(), &pb.FindAllEnabledNodesDNSWithNodeClusterIdRequest{
 | 
			
		||||
			NodeClusterId: cluster.Id,
 | 
			
		||||
			IsInstalled:   true,
 | 
			
		||||
		})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			this.ErrorPage(err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		nodeMaps := []maps.Map{}
 | 
			
		||||
		var nodeMaps = []maps.Map{}
 | 
			
		||||
		for _, node := range nodesResp.Nodes {
 | 
			
		||||
			if len(node.Routes) > 0 {
 | 
			
		||||
				for _, route := range node.Routes {
 | 
			
		||||
					// 检查是否有域名解析记录
 | 
			
		||||
					isOk := false
 | 
			
		||||
					var isResolved = false
 | 
			
		||||
					if len(route.Name) > 0 && len(node.IpAddr) > 0 && len(cluster.DnsName) > 0 {
 | 
			
		||||
						var recordType = "A"
 | 
			
		||||
						if utils.IsIPv6(node.IpAddr) {
 | 
			
		||||
@@ -71,7 +79,7 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
							this.ErrorPage(err)
 | 
			
		||||
							return
 | 
			
		||||
						}
 | 
			
		||||
						isOk = checkResp.IsOk
 | 
			
		||||
						isResolved = checkResp.IsOk
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					nodeMaps = append(nodeMaps, maps.Map{
 | 
			
		||||
@@ -83,10 +91,30 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
							"code": route.Code,
 | 
			
		||||
						},
 | 
			
		||||
						"clusterId": node.NodeClusterId,
 | 
			
		||||
						"isOk":      isOk,
 | 
			
		||||
						"isOk":      isResolved,
 | 
			
		||||
					})
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				// 默认线路
 | 
			
		||||
				var isResolved = false
 | 
			
		||||
				if len(defaultRoute) > 0 {
 | 
			
		||||
					var recordType = "A"
 | 
			
		||||
					if utils.IsIPv6(node.IpAddr) {
 | 
			
		||||
						recordType = "AAAA"
 | 
			
		||||
					}
 | 
			
		||||
					checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
 | 
			
		||||
						DnsDomainId: cluster.DnsDomainId,
 | 
			
		||||
						Name:        cluster.DnsName,
 | 
			
		||||
						Type:        recordType,
 | 
			
		||||
						Route:       defaultRoute,
 | 
			
		||||
						Value:       node.IpAddr,
 | 
			
		||||
					})
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						this.ErrorPage(err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
					isResolved = checkResp.IsOk
 | 
			
		||||
				}
 | 
			
		||||
				nodeMaps = append(nodeMaps, maps.Map{
 | 
			
		||||
					"id":     node.Id,
 | 
			
		||||
					"name":   node.Name,
 | 
			
		||||
@@ -96,7 +124,7 @@ func (this *NodesPopupAction) RunGet(params struct {
 | 
			
		||||
						"code": "",
 | 
			
		||||
					},
 | 
			
		||||
					"clusterId": node.NodeClusterId,
 | 
			
		||||
					"isOk":      false,
 | 
			
		||||
					"isOk":      isResolved,
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,8 @@ func (this *ServersPopupAction) Init() {
 | 
			
		||||
func (this *ServersPopupAction) RunGet(params struct {
 | 
			
		||||
	DomainId int64
 | 
			
		||||
}) {
 | 
			
		||||
	this.Data["domainId"] = params.DomainId
 | 
			
		||||
 | 
			
		||||
	// 域名信息
 | 
			
		||||
	domainResp, err := this.RPC().DNSDomainRPC().FindBasicDNSDomain(this.AdminContext(), &pb.FindBasicDNSDomainRequest{
 | 
			
		||||
		DnsDomainId: params.DomainId,
 | 
			
		||||
@@ -25,7 +27,7 @@ func (this *ServersPopupAction) RunGet(params struct {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	domain := domainResp.DnsDomain
 | 
			
		||||
	var domain = domainResp.DnsDomain
 | 
			
		||||
	if domain == nil {
 | 
			
		||||
		this.NotFound("dnsDomain", params.DomainId)
 | 
			
		||||
		return
 | 
			
		||||
@@ -34,7 +36,7 @@ func (this *ServersPopupAction) RunGet(params struct {
 | 
			
		||||
	this.Data["domain"] = domain.Name
 | 
			
		||||
 | 
			
		||||
	// 服务信息
 | 
			
		||||
	clusterMaps := []maps.Map{}
 | 
			
		||||
	var clusterMaps = []maps.Map{}
 | 
			
		||||
	clustersResp, err := this.RPC().NodeClusterRPC().FindAllEnabledNodeClustersWithDNSDomainId(this.AdminContext(), &pb.FindAllEnabledNodeClustersWithDNSDomainIdRequest{DnsDomainId: params.DomainId})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
@@ -46,9 +48,9 @@ func (this *ServersPopupAction) RunGet(params struct {
 | 
			
		||||
			this.ErrorPage(err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		serverMaps := []maps.Map{}
 | 
			
		||||
		var serverMaps = []maps.Map{}
 | 
			
		||||
		for _, server := range serversResp.Servers {
 | 
			
		||||
			isOk := false
 | 
			
		||||
			var isOk = false
 | 
			
		||||
			if len(cluster.DnsName) > 0 && len(server.DnsName) > 0 {
 | 
			
		||||
				checkResp, err := this.RPC().DNSDomainRPC().ExistDNSDomainRecord(this.AdminContext(), &pb.ExistDNSDomainRecordRequest{
 | 
			
		||||
					DnsDomainId: params.DomainId,
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,10 @@ Vue.component("link-red", {
 | 
			
		||||
	methods: {
 | 
			
		||||
		clickPrevent: function () {
 | 
			
		||||
			emitClick(this, arguments)
 | 
			
		||||
 | 
			
		||||
			if (this.vHref.length > 0) {
 | 
			
		||||
				window.location = this.vHref
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	template: `<a :href="vHref" :title="title" style="border-bottom: 1px #db2828 dashed" @click.prevent="clickPrevent"><span class="red"><slot></slot></span></a>`
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,7 @@
 | 
			
		||||
                    <p class="comment" v-if="!dnsIsExcludingLnNode">通过设置A记录可以将集群上的服务请求转发到不同线路的节点上。</p>
 | 
			
		||||
                </div>
 | 
			
		||||
                <p class="comment" v-if="dnsIsExcludingLnNode"><span class="red">当前集群DNS已设置不解析Ln节点,所以当前节点不会加入DNS解析;如需加入,请修改"集群设置" -- "DNS设置" -- "更多选项" -- "包含Ln节点"。</span></p>
 | 
			
		||||
                <p class="comment" v-if="!node.isInstalled"><span class="red">当前节点尚未完成安装,DNS解析记录将不会生效,<a :href="'/clusters/cluster/node/install?clusterId=' + clusterId + '&nodeId=' + node.id">[点此安装]</a>。</span></p>
 | 
			
		||||
            </td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,11 @@
 | 
			
		||||
 | 
			
		||||
<!-- 未安装 -->
 | 
			
		||||
<div v-if="!node.isInstalled">
 | 
			
		||||
    <div>
 | 
			
		||||
        <span class="red">在当前节点完成安装前,相关DNS解析记录将不会生效,<link-red href="" @click.prevent="updateNodeIsInstalled(true)">已完成安装</link-red> 。</span>
 | 
			
		||||
        <div class="ui divider"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <h4>方法1:通过SSH自动安装</h4>
 | 
			
		||||
 | 
			
		||||
    <div v-if="installStatus != null && (installStatus.isRunning || installStatus.isFinished)"
 | 
			
		||||
@@ -69,7 +74,8 @@ secret: "{{node.secret}}"</source-code-box>
 | 
			
		||||
        </tr>
 | 
			
		||||
    </table>
 | 
			
		||||
 | 
			
		||||
    <a href="" @click.prevent="updateNodeIsInstalled(true)">[修改为已安装状态]</a>
 | 
			
		||||
    <div class="ui divider"></div>
 | 
			
		||||
    <a href="" @click.prevent="updateNodeIsInstalled(true)">[修改当前节点为已安装状态]</a>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- 已安装 -->
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,8 @@ Tea.context(function () {
 | 
			
		||||
 | 
			
		||||
    // 设置节点安装状态
 | 
			
		||||
    this.updateNodeIsInstalled = function (isInstalled) {
 | 
			
		||||
        teaweb.confirm("确定要将当前节点修改为未安装状态?", function () {
 | 
			
		||||
		let msg = isInstalled ? "html:确定要将当前节点修改为<strong>已安装</strong>状态?" : "html:确定要将当前节点修改为<strong>未安装</strong>状态?"
 | 
			
		||||
        teaweb.confirm(msg, function () {
 | 
			
		||||
            this.$post("/clusters/cluster/node/updateInstallStatus")
 | 
			
		||||
                .params({
 | 
			
		||||
                    nodeId: this.nodeId,
 | 
			
		||||
 
 | 
			
		||||
@@ -164,8 +164,11 @@
 | 
			
		||||
			<link-red v-else title="点击设置" @click.prevent="updateNode(node.clusterId, node.id, node.ipAddrId)">没有设置</link-red>
 | 
			
		||||
		</td>
 | 
			
		||||
        <td>
 | 
			
		||||
            <span v-if="node.isInstalled">
 | 
			
		||||
                <span class="green" v-if="node.isResolved">已解析</span>
 | 
			
		||||
                <span v-else class="red">未解析</span>
 | 
			
		||||
            </span>
 | 
			
		||||
            <link-red :href="'/clusters/cluster/node/install?clusterId=' + cluster.id + '&nodeId=' + node.id" v-if="!node.isInstalled"><span class="red">未安装</span></link-red>
 | 
			
		||||
        </td>
 | 
			
		||||
		<td>
 | 
			
		||||
			<link-popup @click.prevent="updateNode(node.clusterId, node.id, node.ipAddrId)">修改</link-popup>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
{$layout "layout_popup"}
 | 
			
		||||
 | 
			
		||||
<h3>使用域名"{{domain}}"的节点</h3>
 | 
			
		||||
<form class="ui form">
 | 
			
		||||
<form class="ui form" action="/dns/domains/nodesPopup" method="get">
 | 
			
		||||
    <input type="hidden" name="domainId" :value="domainId"/>
 | 
			
		||||
    <div class="ui fields inline">
 | 
			
		||||
        <div class="ui field">
 | 
			
		||||
            <input type="text" placeholder="关键词" v-model="keyword"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
{$layout "layout_popup"}
 | 
			
		||||
 | 
			
		||||
<h3>使用域名"{{domain}}"的节点</h3>
 | 
			
		||||
<form class="ui form">
 | 
			
		||||
<h3>使用域名"{{domain}}"的服务</h3>
 | 
			
		||||
<form class="ui form" action="/dns/domains/serversPopup" method="get">
 | 
			
		||||
    <input type="hidden" name="domainId" :value="domainId"/>
 | 
			
		||||
    <div class="ui fields inline">
 | 
			
		||||
        <div class="ui field">
 | 
			
		||||
            <input type="text" placeholder="关键词" v-model="keyword"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -127,7 +127,10 @@ Tea.context(function () {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.viewServers = function (domainId) {
 | 
			
		||||
		teaweb.popup("/dns/domains/serversPopup?domainId=" + domainId)
 | 
			
		||||
		teaweb.popup("/dns/domains/serversPopup?domainId=" + domainId, {
 | 
			
		||||
			width: "50em",
 | 
			
		||||
			height: "30em"
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.alertDown = function () {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user