diff --git a/internal/db/models/dns/dnsutils/dns_utils.go b/internal/db/models/dns/dnsutils/dns_utils.go index 800506a0..c320bad0 100644 --- a/internal/db/models/dns/dnsutils/dns_utils.go +++ b/internal/db/models/dns/dnsutils/dns_utils.go @@ -16,8 +16,11 @@ import ( // CheckClusterDNS 检查集群的DNS问题 // 藏这么深是避免package循环引用的问题 func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster) (issues []*pb.DNSIssue, err error) { - clusterId := int64(cluster.Id) - domainId := int64(cluster.DnsDomainId) + var clusterId = int64(cluster.Id) + var domainId = int64(cluster.DnsDomainId) + + // 集群DNS设置 + var clusterDNSConfig, _ = cluster.DecodeDNSConfig() // 检查域名 domain, err := dns.SharedDNSDomainDAO.FindEnabledDNSDomain(tx, domainId, nil) @@ -101,7 +104,7 @@ func CheckClusterDNS(tx *dbs.Tx, cluster *models.NodeCluster) (issues []*pb.DNSI // TODO 检查域名是否已解析 // 检查节点 - nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true) + nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true, clusterDNSConfig != nil && clusterDNSConfig.IncludingLnNodes) if err != nil { return nil, err } diff --git a/internal/db/models/node_cluster_dao.go b/internal/db/models/node_cluster_dao.go index ebedad51..449025cc 100644 --- a/internal/db/models/node_cluster_dao.go +++ b/internal/db/models/node_cluster_dao.go @@ -147,11 +147,12 @@ func (this *NodeClusterDAO) CreateCluster(tx *dbs.Tx, adminId int64, name string op.DnsDomainId = dnsDomainId op.DnsName = dnsName var dnsConfig = &dnsconfigs.ClusterDNSConfig{ - NodesAutoSync: true, - ServersAutoSync: true, - CNameRecords: []string{}, - CNameAsDomain: true, - TTL: 0, + NodesAutoSync: true, + ServersAutoSync: true, + CNameRecords: []string{}, + CNameAsDomain: true, + TTL: 0, + IncludingLnNodes: true, } dnsJSON, err := json.Marshal(dnsConfig) if err != nil { @@ -468,7 +469,7 @@ func (this *NodeClusterDAO) ExistClusterDNSName(tx *dbs.Tx, dnsName string, excl } // UpdateClusterDNS 修改集群DNS相关信息 -func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsName string, dnsDomainId int64, nodesAutoSync bool, serversAutoSync bool, cnameRecords []string, ttl int32, cnameAsDomain bool) error { +func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsName string, dnsDomainId int64, nodesAutoSync bool, serversAutoSync bool, cnameRecords []string, ttl int32, cnameAsDomain bool, includingLnNodes bool) error { if clusterId <= 0 { return errors.New("invalid clusterId") } @@ -504,11 +505,12 @@ func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsNam } var dnsConfig = &dnsconfigs.ClusterDNSConfig{ - NodesAutoSync: nodesAutoSync, - ServersAutoSync: serversAutoSync, - CNameRecords: cnameRecords, - TTL: ttl, - CNameAsDomain: cnameAsDomain, + NodesAutoSync: nodesAutoSync, + ServersAutoSync: serversAutoSync, + CNameRecords: cnameRecords, + TTL: ttl, + CNameAsDomain: cnameAsDomain, + IncludingLnNodes: includingLnNodes, } dnsJSON, err := json.Marshal(dnsConfig) if err != nil { diff --git a/internal/db/models/node_cluster_model_ext.go b/internal/db/models/node_cluster_model_ext.go index 2bae1f91..3ebf77fe 100644 --- a/internal/db/models/node_cluster_model_ext.go +++ b/internal/db/models/node_cluster_model_ext.go @@ -11,13 +11,15 @@ func (this *NodeCluster) DecodeDNSConfig() (*dnsconfigs.ClusterDNSConfig, error) if len(this.Dns) == 0 { // 一定要返回一个默认的值,防止产生nil return &dnsconfigs.ClusterDNSConfig{ - NodesAutoSync: false, - ServersAutoSync: false, - CNameAsDomain: true, + NodesAutoSync: false, + ServersAutoSync: false, + CNameAsDomain: true, + IncludingLnNodes: true, }, nil } var dnsConfig = &dnsconfigs.ClusterDNSConfig{ - CNameAsDomain: true, + CNameAsDomain: true, + IncludingLnNodes: true, } err := json.Unmarshal(this.Dns, &dnsConfig) if err != nil { diff --git a/internal/db/models/node_dao.go b/internal/db/models/node_dao.go index e3251d3c..22f90eab 100644 --- a/internal/db/models/node_dao.go +++ b/internal/db/models/node_dao.go @@ -1403,7 +1403,7 @@ func (this *NodeDAO) CountAllEnabledNodesWithRegionId(tx *dbs.Tx, regionId int64 } // FindAllEnabledNodesDNSWithClusterId 获取一个集群的节点DNS信息 -func (this *NodeDAO) FindAllEnabledNodesDNSWithClusterId(tx *dbs.Tx, clusterId int64, includeSecondaryNodes bool) (result []*Node, err error) { +func (this *NodeDAO) FindAllEnabledNodesDNSWithClusterId(tx *dbs.Tx, clusterId int64, includeSecondaryNodes bool, includingLnNodes bool) (result []*Node, err error) { if clusterId <= 0 { return nil, nil } @@ -1415,6 +1415,9 @@ func (this *NodeDAO) FindAllEnabledNodesDNSWithClusterId(tx *dbs.Tx, clusterId i } else { query.Attr("clusterId", clusterId) } + if !includingLnNodes { + query.Lte("level", 1) + } _, err = query. State(NodeStateEnabled). Attr("isOn", true). diff --git a/internal/rpc/services/service_dns_domain.go b/internal/rpc/services/service_dns_domain.go index dc5d1749..9d4c8a19 100644 --- a/internal/rpc/services/service_dns_domain.go +++ b/internal/rpc/services/service_dns_domain.go @@ -417,9 +417,10 @@ func (this *DNSDomainService) convertRecordToPB(record *dnstypes.Record) *pb.DNS // 检查集群节点变化 func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, records []*dnstypes.Record, domainName string, defaultRoute string) (result []maps.Map, doneNodeRecords []*dnstypes.Record, doneServerRecords []*dnstypes.Record, countAllNodes int64, countAllServers int64, nodesChanged bool, serversChanged bool, err error) { - clusterId := int64(cluster.Id) - clusterDnsName := cluster.DnsName - clusterDomain := clusterDnsName + "." + domainName + var clusterId = int64(cluster.Id) + var clusterDnsName = cluster.DnsName + var clusterDomain = clusterDnsName + "." + domainName + var dnsConfig, _ = cluster.DecodeDNSConfig() var tx = this.NullTx() @@ -437,7 +438,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, } // 节点域名 - nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true) + nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true, dnsConfig != nil && dnsConfig.IncludingLnNodes) if err != nil { return nil, nil, nil, 0, 0, false, false, err } diff --git a/internal/rpc/services/service_node.go b/internal/rpc/services/service_node.go index 181fc218..b04c7d74 100644 --- a/internal/rpc/services/service_node.go +++ b/internal/rpc/services/service_node.go @@ -1304,18 +1304,19 @@ func (this *NodeService) FindAllEnabledNodesDNSWithNodeClusterId(ctx context.Con if clusterDNS == nil { return nil, errors.New("not found clusterId '" + numberutils.FormatInt64(req.NodeClusterId) + "'") } - dnsDomainId := int64(clusterDNS.DnsDomainId) + var dnsConfig, _ = clusterDNS.DecodeDNSConfig() + var dnsDomainId = int64(clusterDNS.DnsDomainId) routes, err := dns.SharedDNSDomainDAO.FindDomainRoutes(tx, dnsDomainId) if err != nil { return nil, err } - nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, req.NodeClusterId, true) + nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, req.NodeClusterId, true, dnsConfig != nil && dnsConfig.IncludingLnNodes) if err != nil { return nil, err } - result := []*pb.NodeDNSInfo{} + var result = []*pb.NodeDNSInfo{} for _, node := range nodes { ipAddresses, err := models.SharedNodeIPAddressDAO.FindNodeAccessAndUpIPAddresses(tx, int64(node.Id), nodeconfigs.NodeRoleNode) if err != nil { @@ -1327,7 +1328,7 @@ func (this *NodeService) FindAllEnabledNodesDNSWithNodeClusterId(ctx context.Con return nil, err } - pbRoutes := []*pb.DNSRoute{} + var pbRoutes = []*pb.DNSRoute{} for _, routeCode := range domainRouteCodes { for _, r := range routes { if r.Code == routeCode { diff --git a/internal/rpc/services/service_node_cluster.go b/internal/rpc/services/service_node_cluster.go index bb4dacc0..22640fc3 100644 --- a/internal/rpc/services/service_node_cluster.go +++ b/internal/rpc/services/service_node_cluster.go @@ -450,14 +450,15 @@ func (this *NodeClusterService) FindEnabledNodeClusterDNS(ctx context.Context, r if dnsInfo.DnsDomainId == 0 { return &pb.FindEnabledNodeClusterDNSResponse{ - Name: dnsInfo.DnsName, - Domain: nil, - Provider: nil, - NodesAutoSync: dnsConfig.NodesAutoSync, - ServersAutoSync: dnsConfig.ServersAutoSync, - CnameRecords: dnsConfig.CNameRecords, - Ttl: dnsConfig.TTL, - CnameAsDomain: dnsConfig.CNameAsDomain, + Name: dnsInfo.DnsName, + Domain: nil, + Provider: nil, + NodesAutoSync: dnsConfig.NodesAutoSync, + ServersAutoSync: dnsConfig.ServersAutoSync, + CnameRecords: dnsConfig.CNameRecords, + Ttl: dnsConfig.TTL, + CnameAsDomain: dnsConfig.CNameAsDomain, + IncludingLnNodes: dnsConfig.IncludingLnNodes, }, nil } @@ -509,15 +510,16 @@ func (this *NodeClusterService) FindEnabledNodeClusterDNS(ctx context.Context, r } return &pb.FindEnabledNodeClusterDNSResponse{ - Name: dnsInfo.DnsName, - Domain: pbDomain, - Provider: pbProvider, - NodesAutoSync: dnsConfig.NodesAutoSync, - ServersAutoSync: dnsConfig.ServersAutoSync, - CnameRecords: dnsConfig.CNameRecords, - Ttl: dnsConfig.TTL, - CnameAsDomain: dnsConfig.CNameAsDomain, - DefaultRoute: defaultRoute, + Name: dnsInfo.DnsName, + Domain: pbDomain, + Provider: pbProvider, + NodesAutoSync: dnsConfig.NodesAutoSync, + ServersAutoSync: dnsConfig.ServersAutoSync, + CnameRecords: dnsConfig.CNameRecords, + Ttl: dnsConfig.TTL, + CnameAsDomain: dnsConfig.CNameAsDomain, + IncludingLnNodes: dnsConfig.IncludingLnNodes, + DefaultRoute: defaultRoute, }, nil } @@ -610,7 +612,7 @@ func (this *NodeClusterService) UpdateNodeClusterDNS(ctx context.Context, req *p var tx = this.NullTx() - err = models.SharedNodeClusterDAO.UpdateClusterDNS(tx, req.NodeClusterId, req.DnsName, req.DnsDomainId, req.NodesAutoSync, req.ServersAutoSync, req.CnameRecords, req.Ttl, req.CnameAsDomain) + err = models.SharedNodeClusterDAO.UpdateClusterDNS(tx, req.NodeClusterId, req.DnsName, req.DnsDomainId, req.NodesAutoSync, req.ServersAutoSync, req.CnameRecords, req.Ttl, req.CnameAsDomain, req.IncludingLnNodes) if err != nil { return nil, err } diff --git a/internal/tasks/dns_task_executor.go b/internal/tasks/dns_task_executor.go index ddde375e..f2d3f172 100644 --- a/internal/tasks/dns_task_executor.go +++ b/internal/tasks/dns_task_executor.go @@ -355,12 +355,12 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { } // 当前的节点记录 - newRecordKeys := []string{} - nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true) + var newRecordKeys = []string{} + nodes, err := models.SharedNodeDAO.FindAllEnabledNodesDNSWithClusterId(tx, clusterId, true, dnsConfig != nil && dnsConfig.IncludingLnNodes) if err != nil { return err } - isChanged := false + var isChanged = false for _, node := range nodes { routes, err := node.DNSRouteCodesForDomainId(domainId) if err != nil { @@ -379,7 +379,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { continue } for _, ipAddress := range ipAddresses { - ip := ipAddress.DNSIP() + var ip = ipAddress.DNSIP() if len(ip) == 0 || !ipAddress.CanAccess || !ipAddress.IsUp || !ipAddress.IsOn { continue } @@ -387,14 +387,14 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { continue } for _, route := range routes { - key := route + "@" + ip + var key = route + "@" + ip _, ok := oldRecordsMap[key] if ok { newRecordKeys = append(newRecordKeys, key) continue } - recordType := dnstypes.RecordTypeA + var recordType = dnstypes.RecordTypeA if utils.IsIPv6(ip) { recordType = dnstypes.RecordTypeAAAA }