EdgeDNS支持内置线路
This commit is contained in:
@@ -7,10 +7,10 @@ import (
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models/nameservers"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
"github.com/iwind/TeaGo/types"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -48,7 +48,7 @@ func (this *LocalEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes
|
||||
offset := int64(0)
|
||||
size := int64(1000)
|
||||
for {
|
||||
result, err := nameservers.SharedNSRecordDAO.ListEnabledRecords(tx, domainId, "", "", 0, offset, size)
|
||||
result, err := nameservers.SharedNSRecordDAO.ListEnabledRecords(tx, domainId, "", "", "", offset, size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -61,17 +61,15 @@ func (this *LocalEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes
|
||||
}
|
||||
|
||||
routeIds := record.DecodeRouteIds()
|
||||
var routeIdString = ""
|
||||
if len(routeIds) > 0 {
|
||||
routeIdString = fmt.Sprintf("%d", routeIds[0])
|
||||
if len(routeIds) == 0 {
|
||||
routeIds = []string{dnsconfigs.DefaultRouteCode}
|
||||
}
|
||||
|
||||
records = append(records, &dnstypes.Record{
|
||||
Id: fmt.Sprintf("%d", record.Id),
|
||||
Name: record.Name,
|
||||
Type: record.Type,
|
||||
Value: record.Value,
|
||||
Route: routeIdString,
|
||||
Route: routeIds[0],
|
||||
})
|
||||
}
|
||||
|
||||
@@ -92,7 +90,15 @@ func (this *LocalEdgeDNSProvider) GetRoutes(domain string) (routes []*dnstypes.R
|
||||
return nil, errors.New("can not find domain '" + domain + "'")
|
||||
}
|
||||
|
||||
// TODO 将来支持集群、域名、用户自定义线路
|
||||
// 默认线路
|
||||
for _, route := range dnsconfigs.AllDefaultRoutes {
|
||||
routes = append(routes, &dnstypes.Route{
|
||||
Name: route.Name,
|
||||
Code: route.Code,
|
||||
})
|
||||
}
|
||||
|
||||
// 自定义线路
|
||||
result, err := nameservers.SharedNSRouteDAO.FindAllEnabledRoutes(tx, 0, 0, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -100,7 +106,31 @@ func (this *LocalEdgeDNSProvider) GetRoutes(domain string) (routes []*dnstypes.R
|
||||
for _, route := range result {
|
||||
routes = append(routes, &dnstypes.Route{
|
||||
Name: route.Name,
|
||||
Code: fmt.Sprintf("%d", route.Id),
|
||||
Code: "id:" + types.String(route.Id),
|
||||
})
|
||||
}
|
||||
|
||||
// 默认ISP
|
||||
for _, route := range dnsconfigs.AllDefaultISPRoutes {
|
||||
routes = append(routes, &dnstypes.Route{
|
||||
Name: route.Name,
|
||||
Code: route.Code,
|
||||
})
|
||||
}
|
||||
|
||||
// 默认中国省份
|
||||
for _, route := range dnsconfigs.AllDefaultChinaProvinceRoutes {
|
||||
routes = append(routes, &dnstypes.Route{
|
||||
Name: route.Name,
|
||||
Code: route.Code,
|
||||
})
|
||||
}
|
||||
|
||||
// 默认全球国家/地区
|
||||
for _, route := range dnsconfigs.AllDefaultWorldRegionRoutes {
|
||||
routes = append(routes, &dnstypes.Route{
|
||||
Name: route.Name,
|
||||
Code: route.Code,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -129,7 +159,9 @@ func (this *LocalEdgeDNSProvider) QueryRecord(domain string, name string, record
|
||||
routeIds := record.DecodeRouteIds()
|
||||
var routeIdString = ""
|
||||
if len(routeIds) > 0 {
|
||||
routeIdString = fmt.Sprintf("%d", routeIds[0])
|
||||
routeIdString = routeIds[0]
|
||||
} else {
|
||||
routeIdString = dnsconfigs.DefaultRouteCode
|
||||
}
|
||||
|
||||
return &dnstypes.Record{
|
||||
@@ -152,12 +184,9 @@ func (this *LocalEdgeDNSProvider) AddRecord(domain string, newRecord *dnstypes.R
|
||||
return errors.New("can not find domain '" + domain + "'")
|
||||
}
|
||||
|
||||
var routeIds []int64
|
||||
if len(newRecord.Route) > 0 && regexp.MustCompile(`^\d+$`).MatchString(newRecord.Route) {
|
||||
routeId := types.Int64(newRecord.Route)
|
||||
if routeId > 0 {
|
||||
routeIds = append(routeIds, routeId)
|
||||
}
|
||||
var routeIds = []string{}
|
||||
if len(newRecord.Route) > 0 {
|
||||
routeIds = append(routeIds, newRecord.Route)
|
||||
}
|
||||
|
||||
_, err = nameservers.SharedNSRecordDAO.CreateRecord(tx, domainId, "", newRecord.Name, newRecord.Type, newRecord.Value, this.ttl, routeIds)
|
||||
@@ -179,12 +208,9 @@ func (this *LocalEdgeDNSProvider) UpdateRecord(domain string, record *dnstypes.R
|
||||
return errors.New("can not find domain '" + domain + "'")
|
||||
}
|
||||
|
||||
var routeIds []int64
|
||||
if len(newRecord.Route) > 0 && regexp.MustCompile(`^\d+$`).MatchString(newRecord.Route) {
|
||||
routeId := types.Int64(newRecord.Route)
|
||||
if routeId > 0 {
|
||||
routeIds = append(routeIds, routeId)
|
||||
}
|
||||
var routeIds []string
|
||||
if len(newRecord.Route) > 0 {
|
||||
routeIds = append(routeIds, newRecord.Route)
|
||||
}
|
||||
|
||||
if len(record.Id) > 0 {
|
||||
@@ -242,5 +268,5 @@ func (this *LocalEdgeDNSProvider) DeleteRecord(domain string, record *dnstypes.R
|
||||
|
||||
// DefaultRoute 默认线路
|
||||
func (this *LocalEdgeDNSProvider) DefaultRoute() string {
|
||||
return ""
|
||||
return "default"
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package dnsclients
|
||||
package dnsclients_test
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
@@ -10,12 +11,14 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
const testClusterId = 7
|
||||
|
||||
func TestLocalEdgeDNSProvider_GetRecords(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -31,9 +34,9 @@ func TestLocalEdgeDNSProvider_GetRecords(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_GetRoutes(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -49,9 +52,9 @@ func TestLocalEdgeDNSProvider_GetRoutes(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_QueryRecord(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -66,9 +69,9 @@ func TestLocalEdgeDNSProvider_QueryRecord(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_AddRecord(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -79,7 +82,7 @@ func TestLocalEdgeDNSProvider_AddRecord(t *testing.T) {
|
||||
Name: "example",
|
||||
Type: dnstypes.RecordTypeA,
|
||||
Value: "10.0.0.1",
|
||||
Route: "7",
|
||||
Route: "id:7",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -90,9 +93,9 @@ func TestLocalEdgeDNSProvider_AddRecord(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_UpdateRecord(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -124,9 +127,9 @@ func TestLocalEdgeDNSProvider_UpdateRecord(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_DeleteRecord(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -148,9 +151,9 @@ func TestLocalEdgeDNSProvider_DeleteRecord(t *testing.T) {
|
||||
func TestLocalEdgeDNSProvider_DefaultRoute(t *testing.T) {
|
||||
dbs.NotifyReady()
|
||||
|
||||
provider := &LocalEdgeDNSProvider{}
|
||||
provider := &dnsclients.LocalEdgeDNSProvider{}
|
||||
err := provider.Auth(maps.Map{
|
||||
"clusterId": 1,
|
||||
"clusterId": testClusterId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
Reference in New Issue
Block a user