实现在域名解析中使用EdgeDNS

This commit is contained in:
刘祥超
2021-06-02 18:13:48 +08:00
parent fe6c610d56
commit ef5630ba4a
28 changed files with 731 additions and 174 deletions

View File

@@ -84,7 +84,7 @@ func (this *NSRecordService) ListEnabledNSRecords(ctx context.Context, req *pb.L
}
var tx = this.NullTx()
records, err := nameservers.SharedNSRecordDAO.ListAllEnabledRecords(tx, req.NsDomainId, req.Type, req.Keyword, req.NsRouteId, req.Offset, req.Size)
records, err := nameservers.SharedNSRecordDAO.ListEnabledRecords(tx, req.NsDomainId, req.Type, req.Keyword, req.NsRouteId, req.Offset, req.Size)
if err != nil {
return nil, err
}

View File

@@ -6,6 +6,7 @@ import (
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/dns"
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
"github.com/TeaOSLab/EdgeAPI/internal/errors"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils"
@@ -302,7 +303,7 @@ func (this *DNSDomainService) ExistAvailableDomains(ctx context.Context, req *pb
func (this *DNSDomainService) convertDomainToPB(domain *dns.DNSDomain) (*pb.DNSDomain, error) {
domainId := int64(domain.Id)
records := []*dnsclients.Record{}
records := []*dnstypes.Record{}
if len(domain.Records) > 0 && domain.Records != "null" {
err := json.Unmarshal([]byte(domain.Records), &records)
if err != nil {
@@ -376,7 +377,7 @@ func (this *DNSDomainService) convertDomainToPB(domain *dns.DNSDomain) (*pb.DNSD
}
// 转换域名记录信息
func (this *DNSDomainService) convertRecordToPB(record *dnsclients.Record) *pb.DNSRecord {
func (this *DNSDomainService) convertRecordToPB(record *dnstypes.Record) *pb.DNSRecord {
return &pb.DNSRecord{
Id: record.Id,
Name: record.Name,
@@ -387,7 +388,7 @@ func (this *DNSDomainService) convertRecordToPB(record *dnsclients.Record) *pb.D
}
// 检查集群节点变化
func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, records []*dnsclients.Record, domainName string) (result []maps.Map, doneNodeRecords []*dnsclients.Record, doneServerRecords []*dnsclients.Record, countAllNodes int64, countAllServers int64, nodesChanged bool, serversChanged bool, err error) {
func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster, records []*dnstypes.Record, domainName 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
@@ -400,10 +401,10 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
return nil, nil, nil, 0, 0, false, false, err
}
countAllNodes = int64(len(nodes))
nodeRecords := []*dnsclients.Record{} // 之所以用数组再存一遍是因为dnsName可能会重复
nodeRecordMapping := map[string]*dnsclients.Record{} // value_route => *Record
nodeRecords := []*dnstypes.Record{} // 之所以用数组再存一遍是因为dnsName可能会重复
nodeRecordMapping := map[string]*dnstypes.Record{} // value_route => *Record
for _, record := range records {
if record.Type == dnsclients.RecordTypeA && record.Name == clusterDnsName {
if record.Type == dnstypes.RecordTypeA && record.Name == clusterDnsName {
nodeRecords = append(nodeRecords, record)
nodeRecordMapping[record.Value+"_"+record.Route] = record
}
@@ -441,10 +442,10 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
if !ok {
result = append(result, maps.Map{
"action": "create",
"record": &dnsclients.Record{
"record": &dnstypes.Record{
Id: "",
Name: clusterDnsName,
Type: dnsclients.RecordTypeA,
Type: dnstypes.RecordTypeA,
Value: ip,
Route: route,
},
@@ -475,10 +476,10 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
return nil, nil, nil, 0, 0, false, false, err
}
countAllServers = int64(len(servers))
serverRecords := []*dnsclients.Record{} // 之所以用数组再存一遍是因为dnsName可能会重复
serverRecordsMap := map[string]*dnsclients.Record{} // dnsName => *Record
serverRecords := []*dnstypes.Record{} // 之所以用数组再存一遍是因为dnsName可能会重复
serverRecordsMap := map[string]*dnstypes.Record{} // dnsName => *Record
for _, record := range records {
if record.Type == dnsclients.RecordTypeCName && record.Value == clusterDomain+"." {
if record.Type == dnstypes.RecordTypeCNAME && record.Value == clusterDomain+"." {
serverRecords = append(serverRecords, record)
serverRecordsMap[record.Name] = record
}
@@ -497,10 +498,10 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
serversChanged = true
result = append(result, maps.Map{
"action": "create",
"record": &dnsclients.Record{
"record": &dnstypes.Record{
Id: "",
Name: dnsName,
Type: dnsclients.RecordTypeCName,
Type: dnstypes.RecordTypeCNAME,
Value: clusterDomain + ".",
Route: "", // 注意这里为空,需要在执行过程中获取默认值
},
@@ -645,7 +646,7 @@ func (this *DNSDomainService) syncClusterDNS(req *pb.SyncDNSDomainDataRequest) (
}
for _, change := range allChanges {
action := change.GetString("action")
record := change.Get("record").(*dnsclients.Record)
record := change.Get("record").(*dnstypes.Record)
if len(record.Route) == 0 {
record.Route = manager.DefaultRoute()

View File

@@ -8,12 +8,12 @@ import (
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
// DNS服务商相关服务
// DNSProviderService DNS服务商相关服务
type DNSProviderService struct {
BaseService
}
// 创建服务商
// CreateDNSProvider 创建服务商
func (this *DNSProviderService) CreateDNSProvider(ctx context.Context, req *pb.CreateDNSProviderRequest) (*pb.CreateDNSProviderResponse, error) {
// 校验请求
adminId, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
@@ -31,7 +31,7 @@ func (this *DNSProviderService) CreateDNSProvider(ctx context.Context, req *pb.C
return &pb.CreateDNSProviderResponse{DnsProviderId: providerId}, nil
}
// 修改服务商
// UpdateDNSProvider 修改服务商
func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.UpdateDNSProviderRequest) (*pb.RPCSuccess, error) {
// 校验请求
_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
@@ -50,7 +50,7 @@ func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.U
return this.Success()
}
// 计算服务商数量
// CountAllEnabledDNSProviders 计算服务商数量
func (this *DNSProviderService) CountAllEnabledDNSProviders(ctx context.Context, req *pb.CountAllEnabledDNSProvidersRequest) (*pb.RPCCountResponse, error) {
// 校验请求
_, _, err := this.ValidateAdminAndUser(ctx, 0, req.UserId)
@@ -67,7 +67,7 @@ func (this *DNSProviderService) CountAllEnabledDNSProviders(ctx context.Context,
return this.SuccessCount(count)
}
// 列出单页服务商信息
// ListEnabledDNSProviders 列出单页服务商信息
func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req *pb.ListEnabledDNSProvidersRequest) (*pb.ListEnabledDNSProvidersResponse, error) {
// 校验请求
_, _, err := this.ValidateAdminAndUser(ctx, 0, req.UserId)
@@ -97,7 +97,7 @@ func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req
return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
}
// 查找所有的DNS服务商
// FindAllEnabledDNSProviders 查找所有的DNS服务商
func (this *DNSProviderService) FindAllEnabledDNSProviders(ctx context.Context, req *pb.FindAllEnabledDNSProvidersRequest) (*pb.FindAllEnabledDNSProvidersResponse, error) {
// 校验请求
_, _, err := this.ValidateAdminAndUser(ctx, 0, req.UserId)
@@ -127,7 +127,7 @@ func (this *DNSProviderService) FindAllEnabledDNSProviders(ctx context.Context,
return &pb.FindAllEnabledDNSProvidersResponse{DnsProviders: result}, nil
}
// 删除服务商
// DeleteDNSProvider 删除服务商
func (this *DNSProviderService) DeleteDNSProvider(ctx context.Context, req *pb.DeleteDNSProviderRequest) (*pb.RPCSuccess, error) {
// 校验请求
_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
@@ -146,7 +146,7 @@ func (this *DNSProviderService) DeleteDNSProvider(ctx context.Context, req *pb.D
return this.Success()
}
// 查找单个服务商
// FindEnabledDNSProvider 查找单个服务商
func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req *pb.FindEnabledDNSProviderRequest) (*pb.FindEnabledDNSProviderResponse, error) {
// 校验请求
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -174,7 +174,7 @@ func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req
}}, nil
}
// 取得所有服务商类型
// FindAllDNSProviderTypes 取得所有服务商类型
func (this *DNSProviderService) FindAllDNSProviderTypes(ctx context.Context, req *pb.FindAllDNSProviderTypesRequest) (*pb.FindAllDNSProviderTypesResponse, error) {
// 校验请求
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -183,16 +183,17 @@ func (this *DNSProviderService) FindAllDNSProviderTypes(ctx context.Context, req
}
result := []*pb.DNSProviderType{}
for _, t := range dnsclients.AllProviderTypes {
for _, t := range dnsclients.FindAllProviderTypes() {
result = append(result, &pb.DNSProviderType{
Name: t.GetString("name"),
Code: t.GetString("code"),
Name: t.GetString("name"),
Code: t.GetString("code"),
Description: t.GetString("description"),
})
}
return &pb.FindAllDNSProviderTypesResponse{ProviderTypes: result}, nil
}
// 取得某个类型的所有服务商
// FindAllEnabledDNSProvidersWithType 取得某个类型的所有服务商
func (this *DNSProviderService) FindAllEnabledDNSProvidersWithType(ctx context.Context, req *pb.FindAllEnabledDNSProvidersWithTypeRequest) (*pb.FindAllEnabledDNSProvidersWithTypeResponse, error) {
// 校验请求
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/dns"
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
"github.com/TeaOSLab/EdgeAPI/internal/errors"
"github.com/TeaOSLab/EdgeAPI/internal/installers"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
@@ -156,7 +156,7 @@ func (this *NodeService) ListEnabledNodesMatch(ctx context.Context, req *pb.List
}
dnsDomainId := int64(0)
domainRoutes := []*dnsclients.Route{}
domainRoutes := []*dnstypes.Route{}
if clusterDNS != nil {
dnsDomainId = int64(clusterDNS.DnsDomainId)
if clusterDNS.DnsDomainId > 0 {