mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-07 10:40:25 +08:00
服务切换集群后,直接删除老的域名记录
This commit is contained in:
@@ -74,8 +74,8 @@ func (this *DNSTaskDAO) CreateNodeTask(tx *dbs.Tx, nodeId int64, taskType DNSTas
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateServerTask 生成服务任务
|
// CreateServerTask 生成服务任务
|
||||||
func (this *DNSTaskDAO) CreateServerTask(tx *dbs.Tx, serverId int64, taskType DNSTaskType) error {
|
func (this *DNSTaskDAO) CreateServerTask(tx *dbs.Tx, clusterId int64, serverId int64, taskType DNSTaskType) error {
|
||||||
return this.CreateDNSTask(tx, 0, serverId, 0, 0, taskType)
|
return this.CreateDNSTask(tx, clusterId, serverId, 0, 0, taskType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateDomainTask 生成域名更新任务
|
// CreateDomainTask 生成域名更新任务
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ func (this *ServerDAO) CreateServer(tx *dbs.Tx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateServerBasic 修改服务基本信息
|
// UpdateServerBasic 修改服务基本信息
|
||||||
func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string, description string, clusterId int64, keepOldChanges bool, isOn bool, groupIds []int64) error {
|
func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string, description string, clusterId int64, keepOldConfigs bool, isOn bool, groupIds []int64) error {
|
||||||
if serverId <= 0 {
|
if serverId <= 0 {
|
||||||
return errors.New("serverId should not be smaller than 0")
|
return errors.New("serverId should not be smaller than 0")
|
||||||
}
|
}
|
||||||
@@ -320,7 +320,7 @@ func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string
|
|||||||
|
|
||||||
if clusterId != oldClusterId {
|
if clusterId != oldClusterId {
|
||||||
// 服务配置更新
|
// 服务配置更新
|
||||||
if !keepOldChanges {
|
if !keepOldConfigs {
|
||||||
err = this.NotifyClusterUpdate(tx, oldClusterId, serverId)
|
err = this.NotifyClusterUpdate(tx, oldClusterId, serverId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -328,7 +328,11 @@ func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DNS更新
|
// DNS更新
|
||||||
// TODO
|
// 这里不受 keepOldConfigs 的限制
|
||||||
|
err = this.NotifyClusterDNSUpdate(tx, oldClusterId, serverId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -2467,7 +2471,7 @@ func (this *ServerDAO) NotifyClusterUpdate(tx *dbs.Tx, clusterId, serverId int64
|
|||||||
return SharedNodeTaskDAO.CreateClusterTask(tx, nodeconfigs.NodeRoleNode, clusterId, serverId, NodeTaskTypeConfigChanged)
|
return SharedNodeTaskDAO.CreateClusterTask(tx, nodeconfigs.NodeRoleNode, clusterId, serverId, NodeTaskTypeConfigChanged)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotifyDNSUpdate 通知DNS更新
|
// NotifyDNSUpdate 通知当前集群DNS更新
|
||||||
func (this *ServerDAO) NotifyDNSUpdate(tx *dbs.Tx, serverId int64) error {
|
func (this *ServerDAO) NotifyDNSUpdate(tx *dbs.Tx, serverId int64) error {
|
||||||
clusterId, err := this.Query(tx).
|
clusterId, err := this.Query(tx).
|
||||||
Pk(serverId).
|
Pk(serverId).
|
||||||
@@ -2489,7 +2493,22 @@ func (this *ServerDAO) NotifyDNSUpdate(tx *dbs.Tx, serverId int64) error {
|
|||||||
if len(dnsInfo.DnsName) == 0 || dnsInfo.DnsDomainId <= 0 {
|
if len(dnsInfo.DnsName) == 0 || dnsInfo.DnsDomainId <= 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return dns.SharedDNSTaskDAO.CreateServerTask(tx, serverId, dns.DNSTaskTypeServerChange)
|
return dns.SharedDNSTaskDAO.CreateServerTask(tx, clusterId, serverId, dns.DNSTaskTypeServerChange)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotifyClusterDNSUpdate 通知某个集群中的DNS更新
|
||||||
|
func (this *ServerDAO) NotifyClusterDNSUpdate(tx *dbs.Tx, clusterId int64, serverId int64) error {
|
||||||
|
dnsInfo, err := SharedNodeClusterDAO.FindClusterDNSInfo(tx, clusterId, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if dnsInfo == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if len(dnsInfo.DnsName) == 0 || dnsInfo.DnsDomainId <= 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return dns.SharedDNSTaskDAO.CreateServerTask(tx, clusterId, serverId, dns.DNSTaskTypeServerChange)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotifyDisable 通知禁用
|
// NotifyDisable 通知禁用
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ func (this *DNSTaskExecutor) Loop() error {
|
|||||||
taskId := int64(task.Id)
|
taskId := int64(task.Id)
|
||||||
switch task.Type {
|
switch task.Type {
|
||||||
case dnsmodels.DNSTaskTypeServerChange:
|
case dnsmodels.DNSTaskTypeServerChange:
|
||||||
err = this.doServer(taskId, int64(task.ServerId))
|
err = this.doServer(taskId, int64(task.ClusterId), int64(task.ServerId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskError(nil, taskId, err.Error())
|
err = dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskError(nil, taskId, err.Error())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -88,7 +88,7 @@ func (this *DNSTaskExecutor) Loop() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case dnsmodels.DNSTaskTypeDomainChange:
|
case dnsmodels.DNSTaskTypeDomainChange:
|
||||||
err = this.doDomain(taskId, int64(task.DomainId))
|
err = this.doDomainWithTask(taskId, int64(task.DomainId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskError(nil, taskId, err.Error())
|
err = dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskError(nil, taskId, err.Error())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -102,7 +102,7 @@ func (this *DNSTaskExecutor) Loop() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 修改服务相关记录
|
// 修改服务相关记录
|
||||||
func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
func (this *DNSTaskExecutor) doServer(taskId int64, oldClusterId int64, serverId int64) error {
|
||||||
var tx *dbs.Tx
|
var tx *dbs.Tx
|
||||||
|
|
||||||
isOk := false
|
isOk := false
|
||||||
@@ -129,6 +129,41 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var recordName = serverDNS.DnsName
|
||||||
|
var recordType = dnstypes.RecordTypeCNAME
|
||||||
|
|
||||||
|
// 如果集群发生了变化,则从老的集群中删除
|
||||||
|
if oldClusterId > 0 && int64(serverDNS.ClusterId) != oldClusterId {
|
||||||
|
oldManager, oldDomainId, oldDomain, _, _, err := this.findDNSManager(tx, oldClusterId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if oldManager != nil {
|
||||||
|
oldRecord, err := oldManager.QueryRecord(oldDomain, recordName, recordType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if oldRecord != nil {
|
||||||
|
// 删除记录
|
||||||
|
err = oldManager.DeleteRecord(oldDomain, oldRecord)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新域名中记录缓存
|
||||||
|
// 这里不创建域名更新任务,而是直接更新,避免影响其他任务的执行
|
||||||
|
err = this.doDomain(oldDomainId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isOk = true
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理新的集群
|
||||||
manager, domainId, domain, clusterDNSName, dnsConfig, 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
|
||||||
@@ -142,10 +177,8 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error {
|
|||||||
ttl = dnsConfig.TTL
|
ttl = dnsConfig.TTL
|
||||||
}
|
}
|
||||||
|
|
||||||
recordName := serverDNS.DnsName
|
|
||||||
recordValue := clusterDNSName + "." + domain + "."
|
recordValue := clusterDNSName + "." + domain + "."
|
||||||
recordRoute := manager.DefaultRoute()
|
recordRoute := manager.DefaultRoute()
|
||||||
recordType := dnstypes.RecordTypeCNAME
|
|
||||||
if serverDNS.State == models.ServerStateDisabled || !serverDNS.IsOn {
|
if serverDNS.State == models.ServerStateDisabled || !serverDNS.IsOn {
|
||||||
// 检查记录是否已经存在
|
// 检查记录是否已经存在
|
||||||
record, err := manager.QueryRecord(domain, recordName, recordType)
|
record, err := manager.QueryRecord(domain, recordName, recordType)
|
||||||
@@ -466,17 +499,23 @@ func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *DNSTaskExecutor) doDomain(taskId int64, domainId int64) error {
|
func (this *DNSTaskExecutor) doDomain(domainId int64) error {
|
||||||
|
return this.doDomainWithTask(0, domainId)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *DNSTaskExecutor) doDomainWithTask(taskId int64, domainId int64) error {
|
||||||
var tx *dbs.Tx
|
var tx *dbs.Tx
|
||||||
|
|
||||||
isOk := false
|
isOk := false
|
||||||
defer func() {
|
defer func() {
|
||||||
if isOk {
|
if isOk {
|
||||||
|
if taskId > 0 {
|
||||||
err := dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskDone(tx, taskId)
|
err := dnsmodels.SharedDNSTaskDAO.UpdateDNSTaskDone(tx, taskId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
remotelogs.Error("DNSTaskExecutor", err.Error())
|
remotelogs.Error("DNSTaskExecutor", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
dnsDomain, err := dnsmodels.SharedDNSDomainDAO.FindEnabledDNSDomain(tx, domainId, nil)
|
dnsDomain, err := dnsmodels.SharedDNSDomainDAO.FindEnabledDNSDomain(tx, domainId, nil)
|
||||||
|
|||||||
Reference in New Issue
Block a user