diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index 792a65e2..559df676 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -848,6 +848,35 @@ func (this *ServerDAO) FindAllServersToFixWithDNSDomainId(dnsDomainId int64) (re return } +// 获取某个集群下的服务DNS信息 +func (this *ServerDAO) FindAllServersDNSWithClusterId(clusterId int64) (result []*Server, err error) { + _, err = this.Query(). + State(ServerStateEnabled). + Attr("isOn", true). + Attr("clusterId", clusterId). + Result("id", "name", "dnsName"). + DescPk(). + Slice(&result). + FindAll() + return +} + +// 重新生成子域名 +func (this *ServerDAO) GenerateServerDNSName(serverId int64) (string, error) { + if serverId <= 0 { + return "", errors.New("invalid serverId") + } + dnsName, err := this.genDNSName() + if err != nil { + return "", err + } + op := NewServerOperator() + op.Id = serverId + op.DnsName = dnsName + _, err = this.Save(op) + return dnsName, err +} + // 创建事件 func (this *ServerDAO) createEvent() error { return SharedSysEventDAO.CreateEvent(NewServerChangeEvent()) diff --git a/internal/rpc/services/service_server.go b/internal/rpc/services/service_server.go index 101ac4ba..450d4b42 100644 --- a/internal/rpc/services/service_server.go +++ b/internal/rpc/services/service_server.go @@ -856,3 +856,37 @@ func (this *ServerService) NotifyServersChange(ctx context.Context, req *pb.Noti return &pb.NotifyServersChangeResponse{}, nil } + +// 取得某个集群下的所有服务相关的DNS +func (this *ServerService) FindAllEnabledServersDNSWithClusterId(ctx context.Context, req *pb.FindAllEnabledServersDNSWithClusterIdRequest) (*pb.FindAllEnabledServersDNSWithClusterIdResponse, error) { + // 校验请求 + _, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin) + if err != nil { + return nil, err + } + + servers, err := models.SharedServerDAO.FindAllServersDNSWithClusterId(req.ClusterId) + if err != nil { + return nil, err + } + result := []*pb.ServerDNSInfo{} + for _, server := range servers { + // 如果子域名为空 + if len(server.DnsName) == 0 { + // 自动生成子域名 + dnsName, err := models.SharedServerDAO.GenerateServerDNSName(int64(server.Id)) + if err != nil { + return nil, err + } + server.DnsName = dnsName + } + + result = append(result, &pb.ServerDNSInfo{ + Id: int64(server.Id), + Name: server.Name, + DnsName: server.DnsName, + }) + } + + return &pb.FindAllEnabledServersDNSWithClusterIdResponse{Servers: result}, nil +}