mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-05 17:40:24 +08:00
可以设置集群的DNS记录TTL
This commit is contained in:
@@ -141,6 +141,8 @@ func (this *NodeClusterDAO) CreateCluster(tx *dbs.Tx, adminId int64, name string
|
|||||||
dnsConfig := &dnsconfigs.ClusterDNSConfig{
|
dnsConfig := &dnsconfigs.ClusterDNSConfig{
|
||||||
NodesAutoSync: true,
|
NodesAutoSync: true,
|
||||||
ServersAutoSync: true,
|
ServersAutoSync: true,
|
||||||
|
CNameRecords: []string{},
|
||||||
|
TTL: 0,
|
||||||
}
|
}
|
||||||
dnsJSON, err := json.Marshal(dnsConfig)
|
dnsJSON, err := json.Marshal(dnsConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -436,7 +438,7 @@ func (this *NodeClusterDAO) ExistClusterDNSName(tx *dbs.Tx, dnsName string, excl
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateClusterDNS 修改集群DNS相关信息
|
// UpdateClusterDNS 修改集群DNS相关信息
|
||||||
func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsName string, dnsDomainId int64, nodesAutoSync bool, serversAutoSync bool, cnameRecords []string) error {
|
func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsName string, dnsDomainId int64, nodesAutoSync bool, serversAutoSync bool, cnameRecords []string, ttl int32) error {
|
||||||
if clusterId <= 0 {
|
if clusterId <= 0 {
|
||||||
return errors.New("invalid clusterId")
|
return errors.New("invalid clusterId")
|
||||||
}
|
}
|
||||||
@@ -453,6 +455,7 @@ func (this *NodeClusterDAO) UpdateClusterDNS(tx *dbs.Tx, clusterId int64, dnsNam
|
|||||||
NodesAutoSync: nodesAutoSync,
|
NodesAutoSync: nodesAutoSync,
|
||||||
ServersAutoSync: serversAutoSync,
|
ServersAutoSync: serversAutoSync,
|
||||||
CNameRecords: cnameRecords,
|
CNameRecords: cnameRecords,
|
||||||
|
TTL: ttl,
|
||||||
}
|
}
|
||||||
dnsJSON, err := json.Marshal(dnsConfig)
|
dnsJSON, err := json.Marshal(dnsConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ type Record struct {
|
|||||||
Type RecordType `json:"type"`
|
Type RecordType `json:"type"`
|
||||||
Value string `json:"value"`
|
Value string `json:"value"`
|
||||||
Route string `json:"route"`
|
Route string `json:"route"`
|
||||||
|
TTL int32 `json:"ttl"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
|
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
|
||||||
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
|
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
"github.com/iwind/TeaGo/types"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -87,6 +88,7 @@ func (this *AliDNSProvider) GetRecords(domain string) (records []*dnstypes.Recor
|
|||||||
Type: record.Type,
|
Type: record.Type,
|
||||||
Value: record.Value,
|
Value: record.Value,
|
||||||
Route: record.Line,
|
Route: record.Line,
|
||||||
|
TTL: types.Int32(record.TTL),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +143,10 @@ func (this *AliDNSProvider) AddRecord(domain string, newRecord *dnstypes.Record)
|
|||||||
req.DomainName = domain
|
req.DomainName = domain
|
||||||
req.Line = newRecord.Route
|
req.Line = newRecord.Route
|
||||||
|
|
||||||
|
if newRecord.TTL > 0 {
|
||||||
|
req.TTL = requests.NewInteger(types.Int(newRecord.TTL))
|
||||||
|
}
|
||||||
|
|
||||||
resp := alidns.CreateAddDomainRecordResponse()
|
resp := alidns.CreateAddDomainRecordResponse()
|
||||||
err := this.doAPI(req, resp)
|
err := this.doAPI(req, resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -162,6 +168,10 @@ func (this *AliDNSProvider) UpdateRecord(domain string, record *dnstypes.Record,
|
|||||||
req.Value = newRecord.Value
|
req.Value = newRecord.Value
|
||||||
req.Line = newRecord.Route
|
req.Line = newRecord.Route
|
||||||
|
|
||||||
|
if newRecord.TTL > 0 {
|
||||||
|
req.TTL = requests.NewInteger(types.Int(newRecord.TTL))
|
||||||
|
}
|
||||||
|
|
||||||
resp := alidns.CreateUpdateDomainRecordResponse()
|
resp := alidns.CreateUpdateDomainRecordResponse()
|
||||||
err := this.doAPI(req, resp)
|
err := this.doAPI(req, resp)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||||
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
||||||
"github.com/iwind/TeaGo/maps"
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
"github.com/iwind/TeaGo/types"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -158,6 +159,7 @@ func (this *CloudFlareProvider) QueryRecord(domain string, name string, recordTy
|
|||||||
Name: record.Name,
|
Name: record.Name,
|
||||||
Type: record.Type,
|
Type: record.Type,
|
||||||
Value: record.Content,
|
Value: record.Content,
|
||||||
|
TTL: types.Int32(record.Ttl),
|
||||||
Route: CloudFlareDefaultRoute,
|
Route: CloudFlareDefaultRoute,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@@ -170,11 +172,17 @@ func (this *CloudFlareProvider) AddRecord(domain string, newRecord *dnstypes.Rec
|
|||||||
}
|
}
|
||||||
|
|
||||||
resp := new(cloudflare.CreateDNSRecordResponse)
|
resp := new(cloudflare.CreateDNSRecordResponse)
|
||||||
|
|
||||||
|
var ttl = newRecord.TTL
|
||||||
|
if ttl <= 0 {
|
||||||
|
ttl = 1 // 自动默认
|
||||||
|
}
|
||||||
|
|
||||||
err = this.doAPI(http.MethodPost, "zones/"+zoneId+"/dns_records", nil, maps.Map{
|
err = this.doAPI(http.MethodPost, "zones/"+zoneId+"/dns_records", nil, maps.Map{
|
||||||
"type": newRecord.Type,
|
"type": newRecord.Type,
|
||||||
"name": newRecord.Name + "." + domain,
|
"name": newRecord.Name + "." + domain,
|
||||||
"content": newRecord.Value,
|
"content": newRecord.Value,
|
||||||
"ttl": 1,
|
"ttl": ttl,
|
||||||
}, resp)
|
}, resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -189,12 +197,17 @@ func (this *CloudFlareProvider) UpdateRecord(domain string, record *dnstypes.Rec
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ttl = newRecord.TTL
|
||||||
|
if ttl <= 0 {
|
||||||
|
ttl = 1 // 自动默认
|
||||||
|
}
|
||||||
|
|
||||||
resp := new(cloudflare.UpdateDNSRecordResponse)
|
resp := new(cloudflare.UpdateDNSRecordResponse)
|
||||||
return this.doAPI(http.MethodPut, "zones/"+zoneId+"/dns_records/"+record.Id, nil, maps.Map{
|
return this.doAPI(http.MethodPut, "zones/"+zoneId+"/dns_records/"+record.Id, nil, maps.Map{
|
||||||
"type": newRecord.Type,
|
"type": newRecord.Type,
|
||||||
"name": newRecord.Name + "." + domain,
|
"name": newRecord.Name + "." + domain,
|
||||||
"content": newRecord.Value,
|
"content": newRecord.Value,
|
||||||
"ttl": 1,
|
"ttl": ttl,
|
||||||
}, resp)
|
}, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ func TestCloudFlareProvider_AddRecord(t *testing.T) {
|
|||||||
Type: dnstypes.RecordTypeA,
|
Type: dnstypes.RecordTypeA,
|
||||||
Value: "182.92.212.46",
|
Value: "182.92.212.46",
|
||||||
Route: "",
|
Route: "",
|
||||||
|
TTL: 300,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DNSPodMaxTTL int32 = 604800
|
||||||
|
)
|
||||||
|
|
||||||
// DNSPodProvider DNSPod服务商
|
// DNSPodProvider DNSPod服务商
|
||||||
type DNSPodProvider struct {
|
type DNSPodProvider struct {
|
||||||
BaseProvider
|
BaseProvider
|
||||||
@@ -94,6 +98,7 @@ func (this *DNSPodProvider) GetRecords(domain string) (records []*dnstypes.Recor
|
|||||||
Type: recordMap.GetString("type"),
|
Type: recordMap.GetString("type"),
|
||||||
Value: recordMap.GetString("value"),
|
Value: recordMap.GetString("value"),
|
||||||
Route: recordMap.GetString("line"),
|
Route: recordMap.GetString("line"),
|
||||||
|
TTL: recordMap.GetInt32("ttl"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,13 +170,18 @@ func (this *DNSPodProvider) AddRecord(domain string, newRecord *dnstypes.Record)
|
|||||||
if newRecord.Type == dnstypes.RecordTypeCNAME && !strings.HasSuffix(newRecord.Value, ".") {
|
if newRecord.Type == dnstypes.RecordTypeCNAME && !strings.HasSuffix(newRecord.Value, ".") {
|
||||||
newRecord.Value += "."
|
newRecord.Value += "."
|
||||||
}
|
}
|
||||||
_, err := this.post("/Record.Create", map[string]string{
|
|
||||||
|
var args = map[string]string{
|
||||||
"domain": domain,
|
"domain": domain,
|
||||||
"sub_domain": newRecord.Name,
|
"sub_domain": newRecord.Name,
|
||||||
"record_type": newRecord.Type,
|
"record_type": newRecord.Type,
|
||||||
"value": newRecord.Value,
|
"value": newRecord.Value,
|
||||||
"record_line": newRecord.Route,
|
"record_line": newRecord.Route,
|
||||||
})
|
}
|
||||||
|
if newRecord.TTL > 0 && newRecord.TTL <= DNSPodMaxTTL {
|
||||||
|
args["ttl"] = types.String(newRecord.TTL)
|
||||||
|
}
|
||||||
|
_, err := this.post("/Record.Create", args)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,14 +198,19 @@ func (this *DNSPodProvider) UpdateRecord(domain string, record *dnstypes.Record,
|
|||||||
if newRecord.Type == dnstypes.RecordTypeCNAME && !strings.HasSuffix(newRecord.Value, ".") {
|
if newRecord.Type == dnstypes.RecordTypeCNAME && !strings.HasSuffix(newRecord.Value, ".") {
|
||||||
newRecord.Value += "."
|
newRecord.Value += "."
|
||||||
}
|
}
|
||||||
_, err := this.post("/Record.Modify", map[string]string{
|
|
||||||
|
var args = map[string]string{
|
||||||
"domain": domain,
|
"domain": domain,
|
||||||
"record_id": record.Id,
|
"record_id": record.Id,
|
||||||
"sub_domain": newRecord.Name,
|
"sub_domain": newRecord.Name,
|
||||||
"record_type": newRecord.Type,
|
"record_type": newRecord.Type,
|
||||||
"value": newRecord.Value,
|
"value": newRecord.Value,
|
||||||
"record_line": newRecord.Route,
|
"record_line": newRecord.Route,
|
||||||
})
|
}
|
||||||
|
if newRecord.TTL > 0 && newRecord.TTL <= DNSPodMaxTTL {
|
||||||
|
args["ttl"] = types.String(newRecord.TTL)
|
||||||
|
}
|
||||||
|
_, err := this.post("/Record.Modify", args)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ func TestDNSPodProvider_AddRecord(t *testing.T) {
|
|||||||
Name: "hello-forward",
|
Name: "hello-forward",
|
||||||
Value: "hello.yun4s.cn",
|
Value: "hello.yun4s.cn",
|
||||||
Route: "联通",
|
Route: "联通",
|
||||||
|
TTL: 300,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ var huaweiDNSHTTPClient = &http.Client{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HuaweiDNSProvider 华为云DNS
|
||||||
|
// 相关文档链接:https://support.huaweicloud.com/api-dns/dns_api_62001.html
|
||||||
type HuaweiDNSProvider struct {
|
type HuaweiDNSProvider struct {
|
||||||
BaseProvider
|
BaseProvider
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ func (this *HuaweiDNSProvider) GetRecords(domain string) (records []*dnstypes.Re
|
|||||||
Type: recordSet.Type,
|
Type: recordSet.Type,
|
||||||
Value: value,
|
Value: value,
|
||||||
Route: recordSet.Line,
|
Route: recordSet.Line,
|
||||||
|
TTL: types.Int32(recordSet.Ttl),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1320,6 +1323,7 @@ func (this *HuaweiDNSProvider) QueryRecord(domain string, name string, recordTyp
|
|||||||
Type: recordType,
|
Type: recordType,
|
||||||
Value: recordSet.Records[0],
|
Value: recordSet.Records[0],
|
||||||
Route: recordSet.Line,
|
Route: recordSet.Line,
|
||||||
|
TTL: types.Int32(recordSet.Ttl),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1331,12 +1335,17 @@ func (this *HuaweiDNSProvider) AddRecord(domain string, newRecord *dnstypes.Reco
|
|||||||
}
|
}
|
||||||
|
|
||||||
var resp = new(huaweidns.ZonesCreateRecordSetResponse)
|
var resp = new(huaweidns.ZonesCreateRecordSetResponse)
|
||||||
|
var ttl = newRecord.TTL
|
||||||
|
if ttl <= 0 {
|
||||||
|
ttl = 300
|
||||||
|
}
|
||||||
err = this.doAPI(http.MethodPost, "/v2.1/zones/"+zoneId+"/recordsets", map[string]string{}, maps.Map{
|
err = this.doAPI(http.MethodPost, "/v2.1/zones/"+zoneId+"/recordsets", map[string]string{}, maps.Map{
|
||||||
"name": newRecord.Name + "." + domain + ".",
|
"name": newRecord.Name + "." + domain + ".",
|
||||||
"description": "CDN系统自动创建",
|
"description": "CDN系统自动创建",
|
||||||
"type": newRecord.Type,
|
"type": newRecord.Type,
|
||||||
"records": []string{newRecord.Value},
|
"records": []string{newRecord.Value},
|
||||||
"line": newRecord.Route,
|
"line": newRecord.Route,
|
||||||
|
"ttl": ttl,
|
||||||
}, resp)
|
}, resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -1362,6 +1371,11 @@ func (this *HuaweiDNSProvider) UpdateRecord(domain string, record *dnstypes.Reco
|
|||||||
recordId = record.Id
|
recordId = record.Id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ttl = newRecord.TTL
|
||||||
|
if ttl <= 0 {
|
||||||
|
ttl = 300
|
||||||
|
}
|
||||||
|
|
||||||
var resp = new(huaweidns.ZonesUpdateRecordSetResponse)
|
var resp = new(huaweidns.ZonesUpdateRecordSetResponse)
|
||||||
err = this.doAPI(http.MethodPut, "/v2.1/zones/"+zoneId+"/recordsets/"+recordId, map[string]string{}, maps.Map{
|
err = this.doAPI(http.MethodPut, "/v2.1/zones/"+zoneId+"/recordsets/"+recordId, map[string]string{}, maps.Map{
|
||||||
"name": newRecord.Name + "." + domain + ".",
|
"name": newRecord.Name + "." + domain + ".",
|
||||||
@@ -1369,6 +1383,7 @@ func (this *HuaweiDNSProvider) UpdateRecord(domain string, record *dnstypes.Reco
|
|||||||
"type": newRecord.Type,
|
"type": newRecord.Type,
|
||||||
"records": []string{newRecord.Value},
|
"records": []string{newRecord.Value},
|
||||||
"line": newRecord.Route, // TODO 华为云此API无法修改线路,API地址:https://support.huaweicloud.com/api-dns/dns_api_65006.html
|
"line": newRecord.Route, // TODO 华为云此API无法修改线路,API地址:https://support.huaweicloud.com/api-dns/dns_api_65006.html
|
||||||
|
"ttl": ttl,
|
||||||
}, resp)
|
}, resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ func TestHuaweiDNSProvider_AddRecord(t *testing.T) {
|
|||||||
Type: "A",
|
Type: "A",
|
||||||
Value: "192.168.2.40",
|
Value: "192.168.2.40",
|
||||||
Route: "Beijing",
|
Route: "Beijing",
|
||||||
|
TTL: 120,
|
||||||
}
|
}
|
||||||
err = provider.AddRecord("yun4s.cn", record)
|
err = provider.AddRecord("yun4s.cn", record)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ func (this *LocalEdgeDNSProvider) GetRecords(domain string) (records []*dnstypes
|
|||||||
Type: record.Type,
|
Type: record.Type,
|
||||||
Value: record.Value,
|
Value: record.Value,
|
||||||
Route: routeIds[0],
|
Route: routeIds[0],
|
||||||
|
TTL: types.Int32(record.Ttl),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,6 +184,7 @@ func (this *LocalEdgeDNSProvider) QueryRecord(domain string, name string, record
|
|||||||
Type: record.Type,
|
Type: record.Type,
|
||||||
Value: record.Value,
|
Value: record.Value,
|
||||||
Route: routeIdString,
|
Route: routeIdString,
|
||||||
|
TTL: types.Int32(record.Ttl),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,7 +204,10 @@ func (this *LocalEdgeDNSProvider) AddRecord(domain string, newRecord *dnstypes.R
|
|||||||
routeIds = append(routeIds, newRecord.Route)
|
routeIds = append(routeIds, newRecord.Route)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = nameservers.SharedNSRecordDAO.CreateRecord(tx, domainId, "", newRecord.Name, newRecord.Type, newRecord.Value, this.ttl, routeIds)
|
if newRecord.TTL <= 0 {
|
||||||
|
newRecord.TTL = this.ttl
|
||||||
|
}
|
||||||
|
_, err = nameservers.SharedNSRecordDAO.CreateRecord(tx, domainId, "", newRecord.Name, newRecord.Type, newRecord.Value, newRecord.TTL, routeIds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -226,8 +231,12 @@ func (this *LocalEdgeDNSProvider) UpdateRecord(domain string, record *dnstypes.R
|
|||||||
routeIds = append(routeIds, newRecord.Route)
|
routeIds = append(routeIds, newRecord.Route)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if newRecord.TTL <= 0 {
|
||||||
|
newRecord.TTL = this.ttl
|
||||||
|
}
|
||||||
|
|
||||||
if len(record.Id) > 0 {
|
if len(record.Id) > 0 {
|
||||||
err = nameservers.SharedNSRecordDAO.UpdateRecord(tx, types.Int64(record.Id), "", newRecord.Name, newRecord.Type, newRecord.Value, this.ttl, routeIds, true)
|
err = nameservers.SharedNSRecordDAO.UpdateRecord(tx, types.Int64(record.Id), "", newRecord.Name, newRecord.Type, newRecord.Value, newRecord.TTL, routeIds, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -237,7 +246,7 @@ func (this *LocalEdgeDNSProvider) UpdateRecord(domain string, record *dnstypes.R
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if realRecord != nil {
|
if realRecord != nil {
|
||||||
err = nameservers.SharedNSRecordDAO.UpdateRecord(tx, types.Int64(realRecord.Id), "", newRecord.Name, newRecord.Type, newRecord.Value, this.ttl, routeIds, true)
|
err = nameservers.SharedNSRecordDAO.UpdateRecord(tx, types.Int64(realRecord.Id), "", newRecord.Name, newRecord.Type, newRecord.Value, newRecord.TTL, routeIds, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ func TestLocalEdgeDNSProvider_AddRecord(t *testing.T) {
|
|||||||
Type: dnstypes.RecordTypeA,
|
Type: dnstypes.RecordTypeA,
|
||||||
Value: "10.0.0.1",
|
Value: "10.0.0.1",
|
||||||
Route: "id:7",
|
Route: "id:7",
|
||||||
|
TTL: 300,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|||||||
@@ -404,10 +404,14 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
|
|||||||
|
|
||||||
// 自动设置的cname记录
|
// 自动设置的cname记录
|
||||||
var cnameRecords = []string{}
|
var cnameRecords = []string{}
|
||||||
|
var ttl int32
|
||||||
if len(cluster.Dns) > 0 {
|
if len(cluster.Dns) > 0 {
|
||||||
dnsConfig, _ := cluster.DecodeDNSConfig()
|
dnsConfig, _ := cluster.DecodeDNSConfig()
|
||||||
if dnsConfig != nil {
|
if dnsConfig != nil {
|
||||||
cnameRecords = dnsConfig.CNameRecords
|
cnameRecords = dnsConfig.CNameRecords
|
||||||
|
if dnsConfig.TTL > 0 {
|
||||||
|
ttl = dnsConfig.TTL
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,6 +477,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
|
|||||||
Type: recordType,
|
Type: recordType,
|
||||||
Value: ip,
|
Value: ip,
|
||||||
Route: route,
|
Route: route,
|
||||||
|
TTL: ttl,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
nodesChanged = true
|
nodesChanged = true
|
||||||
@@ -529,6 +534,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
|
|||||||
Type: dnstypes.RecordTypeCNAME,
|
Type: dnstypes.RecordTypeCNAME,
|
||||||
Value: clusterDomain + ".",
|
Value: clusterDomain + ".",
|
||||||
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
||||||
|
TTL: ttl,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@@ -550,6 +556,7 @@ func (this *DNSDomainService) findClusterDNSChanges(cluster *models.NodeCluster,
|
|||||||
Type: dnstypes.RecordTypeCNAME,
|
Type: dnstypes.RecordTypeCNAME,
|
||||||
Value: clusterDomain + ".",
|
Value: clusterDomain + ".",
|
||||||
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
||||||
|
TTL: ttl,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -447,6 +447,7 @@ func (this *NodeClusterService) FindEnabledNodeClusterDNS(ctx context.Context, r
|
|||||||
NodesAutoSync: dnsConfig.NodesAutoSync,
|
NodesAutoSync: dnsConfig.NodesAutoSync,
|
||||||
ServersAutoSync: dnsConfig.ServersAutoSync,
|
ServersAutoSync: dnsConfig.ServersAutoSync,
|
||||||
CnameRecords: dnsConfig.CNameRecords,
|
CnameRecords: dnsConfig.CNameRecords,
|
||||||
|
Ttl: dnsConfig.TTL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,6 +505,7 @@ func (this *NodeClusterService) FindEnabledNodeClusterDNS(ctx context.Context, r
|
|||||||
NodesAutoSync: dnsConfig.NodesAutoSync,
|
NodesAutoSync: dnsConfig.NodesAutoSync,
|
||||||
ServersAutoSync: dnsConfig.ServersAutoSync,
|
ServersAutoSync: dnsConfig.ServersAutoSync,
|
||||||
CnameRecords: dnsConfig.CNameRecords,
|
CnameRecords: dnsConfig.CNameRecords,
|
||||||
|
Ttl: dnsConfig.TTL,
|
||||||
DefaultRoute: defaultRoute,
|
DefaultRoute: defaultRoute,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@@ -597,7 +599,7 @@ func (this *NodeClusterService) UpdateNodeClusterDNS(ctx context.Context, req *p
|
|||||||
|
|
||||||
tx := this.NullTx()
|
tx := this.NullTx()
|
||||||
|
|
||||||
err = models.SharedNodeClusterDAO.UpdateClusterDNS(tx, req.NodeClusterId, req.DnsName, req.DnsDomainId, req.NodesAutoSync, req.ServersAutoSync, req.CnameRecords)
|
err = models.SharedNodeClusterDAO.UpdateClusterDNS(tx, req.NodeClusterId, req.DnsName, req.DnsDomainId, req.NodesAutoSync, req.ServersAutoSync, req.CnameRecords, req.Ttl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||||
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
||||||
"github.com/iwind/TeaGo/dbs"
|
"github.com/iwind/TeaGo/dbs"
|
||||||
"github.com/iwind/TeaGo/lists"
|
"github.com/iwind/TeaGo/lists"
|
||||||
@@ -125,7 +126,7 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
manager, domainId, domain, clusterDNSName, _, err := this.findDNSManager(tx, int64(serverDNS.ClusterId))
|
manager, domainId, domain, clusterDNSName, dnsConfig, err := this.findDNSManager(tx, int64(serverDNS.ClusterId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -133,6 +134,10 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
|||||||
isOk = true
|
isOk = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
var ttl int32 = 0
|
||||||
|
if dnsConfig != nil {
|
||||||
|
ttl = dnsConfig.TTL
|
||||||
|
}
|
||||||
|
|
||||||
recordName := serverDNS.DnsName
|
recordName := serverDNS.DnsName
|
||||||
recordValue := clusterDNSName + "." + domain + "."
|
recordValue := clusterDNSName + "." + domain + "."
|
||||||
@@ -196,6 +201,7 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
|||||||
Type: recordType,
|
Type: recordType,
|
||||||
Value: recordValue,
|
Value: recordValue,
|
||||||
Route: recordRoute,
|
Route: recordRoute,
|
||||||
|
TTL: ttl,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -264,7 +270,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
var tx *dbs.Tx
|
var tx *dbs.Tx
|
||||||
manager, domainId, domain, clusterDNSName, cnameRecords, err := this.findDNSManager(tx, clusterId)
|
manager, domainId, domain, clusterDNSName, dnsConfig, err := this.findDNSManager(tx, clusterId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -275,6 +281,11 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
|
|
||||||
var clusterDomain = clusterDNSName + "." + domain
|
var clusterDomain = clusterDNSName + "." + domain
|
||||||
|
|
||||||
|
var ttl int32 = 0
|
||||||
|
if dnsConfig != nil {
|
||||||
|
ttl = dnsConfig.TTL
|
||||||
|
}
|
||||||
|
|
||||||
// 以前的节点记录
|
// 以前的节点记录
|
||||||
records, err := manager.GetRecords(domain)
|
records, err := manager.GetRecords(domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -343,6 +354,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
Type: recordType,
|
Type: recordType,
|
||||||
Value: ip,
|
Value: ip,
|
||||||
Route: route,
|
Route: route,
|
||||||
|
TTL: ttl,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -395,6 +407,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
Type: dnstypes.RecordTypeCNAME,
|
Type: dnstypes.RecordTypeCNAME,
|
||||||
Value: clusterDomain + ".",
|
Value: clusterDomain + ".",
|
||||||
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
||||||
|
TTL: ttl,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -403,6 +416,10 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 自动设置的CNAME
|
// 自动设置的CNAME
|
||||||
|
var cnameRecords = []string{}
|
||||||
|
if dnsConfig != nil {
|
||||||
|
cnameRecords = dnsConfig.CNameRecords
|
||||||
|
}
|
||||||
for _, cnameRecord := range cnameRecords {
|
for _, cnameRecord := range cnameRecords {
|
||||||
serverDNSNames = append(serverDNSNames, cnameRecord)
|
serverDNSNames = append(serverDNSNames, cnameRecord)
|
||||||
_, ok := serverRecordsMap[cnameRecord]
|
_, ok := serverRecordsMap[cnameRecord]
|
||||||
@@ -414,6 +431,7 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
Type: dnstypes.RecordTypeCNAME,
|
Type: dnstypes.RecordTypeCNAME,
|
||||||
Value: clusterDomain + ".",
|
Value: clusterDomain + ".",
|
||||||
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
Route: "", // 注意这里为空,需要在执行过程中获取默认值
|
||||||
|
TTL: ttl,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -511,7 +529,7 @@ func (this *DNSTaskExecutor) doDomain(taskId int64, domainId int64) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *DNSTaskExecutor) findDNSManager(tx *dbs.Tx, clusterId int64) (manager dnsclients.ProviderInterface, domainId int64, domain string, clusterDNSName string, cnameRecords []string, err error) {
|
func (this *DNSTaskExecutor) findDNSManager(tx *dbs.Tx, clusterId int64) (manager dnsclients.ProviderInterface, domainId int64, domain string, clusterDNSName string, dnsConfig *dnsconfigs.ClusterDNSConfig, err error) {
|
||||||
clusterDNS, err := models.SharedNodeClusterDAO.FindClusterDNSInfo(tx, clusterId, nil)
|
clusterDNS, err := models.SharedNodeClusterDAO.FindClusterDNSInfo(tx, clusterId, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, "", "", nil, err
|
return nil, 0, "", "", nil, err
|
||||||
@@ -520,7 +538,7 @@ func (this *DNSTaskExecutor) findDNSManager(tx *dbs.Tx, clusterId int64) (manage
|
|||||||
return nil, 0, "", "", nil, nil
|
return nil, 0, "", "", nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsConfig, err := clusterDNS.DecodeDNSConfig()
|
dnsConfig, err = clusterDNS.DecodeDNSConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, "", "", nil, err
|
return nil, 0, "", "", nil, err
|
||||||
}
|
}
|
||||||
@@ -559,5 +577,5 @@ func (this *DNSTaskExecutor) findDNSManager(tx *dbs.Tx, clusterId int64) (manage
|
|||||||
return nil, 0, "", "", nil, err
|
return nil, 0, "", "", nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return manager, int64(dnsDomain.Id), dnsDomain.Name, clusterDNS.DnsName, dnsConfig.CNameRecords, nil
|
return manager, int64(dnsDomain.Id), dnsDomain.Name, clusterDNS.DnsName, dnsConfig, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user