mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	同步域名解析时不再强制要求修复节点问题
This commit is contained in:
		@@ -15,7 +15,7 @@ import (
 | 
			
		||||
 | 
			
		||||
// CheckClusterDNS 检查集群的DNS问题
 | 
			
		||||
// 藏这么深是避免package循环引用的问题
 | 
			
		||||
func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster) (issues []*pb.DNSIssue, err error) {
 | 
			
		||||
func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster, checkNodeIssues bool) (issues []*pb.DNSIssue, err error) {
 | 
			
		||||
	var clusterId = int64(cluster.Id)
 | 
			
		||||
	var domainId = int64(cluster.DnsDomainId)
 | 
			
		||||
 | 
			
		||||
@@ -104,47 +104,27 @@ func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster) (issues []*pb.DNSI
 | 
			
		||||
	// TODO 检查域名是否已解析
 | 
			
		||||
 | 
			
		||||
	// 检查节点
 | 
			
		||||
	nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true, clusterDNSConfig != nil && clusterDNSConfig.IncludingLnNodes)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO 检查节点数量不能为0
 | 
			
		||||
 | 
			
		||||
	for _, node := range nodes {
 | 
			
		||||
		nodeId := int64(node.Id)
 | 
			
		||||
 | 
			
		||||
		routeCodes, err := node.DNSRouteCodesForDomainId(domainId)
 | 
			
		||||
	if checkNodeIssues {
 | 
			
		||||
		nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true, clusterDNSConfig != nil && clusterDNSConfig.IncludingLnNodes)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if len(routeCodes) == 0 && !hasDefaultRoute {
 | 
			
		||||
			issues = append(issues, &pb.DNSIssue{
 | 
			
		||||
				Target:      node.Name,
 | 
			
		||||
				TargetId:    nodeId,
 | 
			
		||||
				Type:        "node",
 | 
			
		||||
				Description: "没有选择节点所属线路",
 | 
			
		||||
				Params: map[string]string{
 | 
			
		||||
					"clusterName": cluster.Name,
 | 
			
		||||
					"clusterId":   numberutils.FormatInt64(clusterId),
 | 
			
		||||
				},
 | 
			
		||||
				MustFix: true,
 | 
			
		||||
			})
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 检查线路是否在已有线路中
 | 
			
		||||
		for _, routeCode := range routeCodes {
 | 
			
		||||
			routeOk, err := domain.ContainsRouteCode(routeCode)
 | 
			
		||||
		// TODO 检查节点数量不能为0
 | 
			
		||||
 | 
			
		||||
		for _, node := range nodes {
 | 
			
		||||
			nodeId := int64(node.Id)
 | 
			
		||||
 | 
			
		||||
			routeCodes, err := node.DNSRouteCodesForDomainId(domainId)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			if !routeOk {
 | 
			
		||||
			if len(routeCodes) == 0 && !hasDefaultRoute {
 | 
			
		||||
				issues = append(issues, &pb.DNSIssue{
 | 
			
		||||
					Target:      node.Name,
 | 
			
		||||
					TargetId:    nodeId,
 | 
			
		||||
					Type:        "node",
 | 
			
		||||
					Description: "线路已经失效,请重新选择",
 | 
			
		||||
					Description: "没有选择节点所属线路",
 | 
			
		||||
					Params: map[string]string{
 | 
			
		||||
						"clusterName": cluster.Name,
 | 
			
		||||
						"clusterId":   numberutils.FormatInt64(clusterId),
 | 
			
		||||
@@ -153,29 +133,51 @@ func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster) (issues []*pb.DNSI
 | 
			
		||||
				})
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 检查IP地址
 | 
			
		||||
		ipAddr, _, err := models.SharedNodeIPAddressDAO.FindFirstNodeAccessIPAddress(tx, nodeId, true, nodeconfigs.NodeRoleNode)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if len(ipAddr) == 0 {
 | 
			
		||||
			issues = append(issues, &pb.DNSIssue{
 | 
			
		||||
				Target:      node.Name,
 | 
			
		||||
				TargetId:    nodeId,
 | 
			
		||||
				Type:        "node",
 | 
			
		||||
				Description: "没有设置IP地址",
 | 
			
		||||
				Params: map[string]string{
 | 
			
		||||
					"clusterName": cluster.Name,
 | 
			
		||||
					"clusterId":   numberutils.FormatInt64(clusterId),
 | 
			
		||||
				},
 | 
			
		||||
				MustFix: true,
 | 
			
		||||
			})
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
			// 检查线路是否在已有线路中
 | 
			
		||||
			for _, routeCode := range routeCodes {
 | 
			
		||||
				routeOk, err := domain.ContainsRouteCode(routeCode)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return nil, err
 | 
			
		||||
				}
 | 
			
		||||
				if !routeOk {
 | 
			
		||||
					issues = append(issues, &pb.DNSIssue{
 | 
			
		||||
						Target:      node.Name,
 | 
			
		||||
						TargetId:    nodeId,
 | 
			
		||||
						Type:        "node",
 | 
			
		||||
						Description: "线路已经失效,请重新选择",
 | 
			
		||||
						Params: map[string]string{
 | 
			
		||||
							"clusterName": cluster.Name,
 | 
			
		||||
							"clusterId":   numberutils.FormatInt64(clusterId),
 | 
			
		||||
						},
 | 
			
		||||
						MustFix: true,
 | 
			
		||||
					})
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		// TODO 检查是否有解析记录
 | 
			
		||||
			// 检查IP地址
 | 
			
		||||
			ipAddr, _, err := models.SharedNodeIPAddressDAO.FindFirstNodeAccessIPAddress(tx, nodeId, true, nodeconfigs.NodeRoleNode)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			if len(ipAddr) == 0 {
 | 
			
		||||
				issues = append(issues, &pb.DNSIssue{
 | 
			
		||||
					Target:      node.Name,
 | 
			
		||||
					TargetId:    nodeId,
 | 
			
		||||
					Type:        "node",
 | 
			
		||||
					Description: "没有设置IP地址",
 | 
			
		||||
					Params: map[string]string{
 | 
			
		||||
						"clusterName": cluster.Name,
 | 
			
		||||
						"clusterId":   numberutils.FormatInt64(clusterId),
 | 
			
		||||
					},
 | 
			
		||||
					MustFix: true,
 | 
			
		||||
				})
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// TODO 检查是否有解析记录
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ func (this *DNSService) FindAllDNSIssues(ctx context.Context, req *pb.FindAllDNS
 | 
			
		||||
		clusters = []*models.NodeCluster{cluster}
 | 
			
		||||
	}
 | 
			
		||||
	for _, cluster := range clusters {
 | 
			
		||||
		issues, err := dnsutils.CheckClusterDNS(tx, cluster)
 | 
			
		||||
		issues, err := dnsutils.CheckClusterDNS(tx, cluster, true)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -472,8 +472,8 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
 | 
			
		||||
		return nil, nil, nil, 0, 0, false, false, err
 | 
			
		||||
	}
 | 
			
		||||
	countAllNodes = int64(len(nodes))
 | 
			
		||||
	nodeRecords := []*dnstypes.Record{}                // 之所以用数组再存一遍,是因为dnsName可能会重复
 | 
			
		||||
	nodeRecordMapping := map[string]*dnstypes.Record{} // value_route => *Record
 | 
			
		||||
	var nodeRecords = []*dnstypes.Record{}                // 之所以用数组再存一遍,是因为dnsName可能会重复
 | 
			
		||||
	var nodeRecordMapping = map[string]*dnstypes.Record{} // value_route => *Record
 | 
			
		||||
	for _, record := range records {
 | 
			
		||||
		if (record.Type == dnstypes.RecordTypeA || record.Type == dnstypes.RecordTypeAAAA) && record.Name == clusterDnsName {
 | 
			
		||||
			nodeRecords = append(nodeRecords, record)
 | 
			
		||||
@@ -482,7 +482,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 新增的节点域名
 | 
			
		||||
	nodeKeys := []string{}
 | 
			
		||||
	var nodeKeys = []string{}
 | 
			
		||||
	for _, node := range nodes {
 | 
			
		||||
		ipAddresses, err := models.SharedNodeIPAddressDAO.FindNodeAccessAndUpIPAddresses(tx, int64(node.Id), nodeconfigs.NodeRoleNode)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -557,8 +557,8 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
 | 
			
		||||
		return nil, nil, nil, 0, 0, false, false, err
 | 
			
		||||
	}
 | 
			
		||||
	countAllServers = int64(len(servers))
 | 
			
		||||
	serverRecords := []*dnstypes.Record{}             // 之所以用数组再存一遍,是因为dnsName可能会重复
 | 
			
		||||
	serverRecordsMap := map[string]*dnstypes.Record{} // dnsName => *Record
 | 
			
		||||
	var serverRecords = []*dnstypes.Record{}             // 之所以用数组再存一遍,是因为dnsName可能会重复
 | 
			
		||||
	var serverRecordsMap = map[string]*dnstypes.Record{} // dnsName => *Record
 | 
			
		||||
	for _, record := range records {
 | 
			
		||||
		if record.Type == dnstypes.RecordTypeCNAME && record.Value == clusterDomain+"." {
 | 
			
		||||
			serverRecords = append(serverRecords, record)
 | 
			
		||||
@@ -567,7 +567,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 新增的域名
 | 
			
		||||
	serverDNSNames := []string{}
 | 
			
		||||
	var serverDNSNames = []string{}
 | 
			
		||||
	for _, server := range servers {
 | 
			
		||||
		dnsName := server.DnsName
 | 
			
		||||
		if len(dnsName) == 0 {
 | 
			
		||||
@@ -635,7 +635,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
 | 
			
		||||
	// 查询集群信息
 | 
			
		||||
	var err error
 | 
			
		||||
	clusters := []*models.NodeCluster{}
 | 
			
		||||
	var clusters = []*models.NodeCluster{}
 | 
			
		||||
	if req.NodeClusterId > 0 {
 | 
			
		||||
		cluster, err := models.SharedNodeClusterDAO.FindEnabledNodeCluster(tx, req.NodeClusterId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -671,8 +671,8 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
	if domain == nil {
 | 
			
		||||
		return &pb.SyncDNSDomainDataResponse{IsOk: false, Error: "找不到要操作的域名"}, nil
 | 
			
		||||
	}
 | 
			
		||||
	domainId := int64(domain.Id)
 | 
			
		||||
	domainName := domain.Name
 | 
			
		||||
	var domainId = int64(domain.Id)
 | 
			
		||||
	var domainName = domain.Name
 | 
			
		||||
 | 
			
		||||
	// 服务商信息
 | 
			
		||||
	provider, err := dns.SharedDNSProviderDAO.FindEnabledDNSProvider(tx, int64(domain.ProviderId))
 | 
			
		||||
@@ -691,7 +691,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 开始同步
 | 
			
		||||
	manager := dnsclients.FindProvider(provider.Type)
 | 
			
		||||
	var manager = dnsclients.FindProvider(provider.Type)
 | 
			
		||||
	if manager == nil {
 | 
			
		||||
		return &pb.SyncDNSDomainDataResponse{IsOk: false, Error: "目前不支持'" + provider.Type + "'"}, nil
 | 
			
		||||
	}
 | 
			
		||||
@@ -716,7 +716,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
 | 
			
		||||
	// 检查集群设置
 | 
			
		||||
	for _, cluster := range clusters {
 | 
			
		||||
		issues, err := dnsutils.CheckClusterDNS(tx, cluster)
 | 
			
		||||
		issues, err := dnsutils.CheckClusterDNS(tx, cluster, req.CheckNodeIssues)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
@@ -740,7 +740,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 对比变化
 | 
			
		||||
	allChanges := []maps.Map{}
 | 
			
		||||
	var allChanges = []maps.Map{}
 | 
			
		||||
	for _, cluster := range clusters {
 | 
			
		||||
		changes, _, _, _, _, _, _, err := this.findClusterDNSChanges(cluster, records, domainName, manager.DefaultRoute())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -768,8 +768,6 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
 | 
			
		||||
				return &pb.SyncDNSDomainDataResponse{IsOk: false, Error: "删除域名记录失败:" + err.Error()}, nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//logs.Println(action, record.Name, record.Type, record.Value, record.Route)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 重新更新记录
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user