You've already forked ddns-updater
minor refactor
This commit is contained in:
85
main.go
85
main.go
@@ -47,51 +47,58 @@ func main() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("waiting for update tick ...")
|
// public ip resolver
|
||||||
|
publicIpResolver := getResolver(config.PublicIpResolverTag)
|
||||||
|
|
||||||
|
checkFunc := func() {
|
||||||
|
currentPublicIP, err := publicIpResolver.ResolvePublicIp(ctx)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
log.Printf("Current public ip `%s`", currentPublicIP)
|
||||||
|
|
||||||
|
dns, err := allDNSRecords(ctx, api, cloudflare.ZoneIdentifier(zoneID))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dnsRecord := range dns {
|
||||||
|
if internal.Contains(config.DnsRecordsToCheck, dnsRecord.Name) {
|
||||||
|
log.Printf("Checking record `%s` with current value `%s` ...", dnsRecord.Name, dnsRecord.Content)
|
||||||
|
if currentPublicIP.String() == dnsRecord.Content {
|
||||||
|
log.Println("OK")
|
||||||
|
continue // no update needed
|
||||||
|
}
|
||||||
|
|
||||||
|
update := cloudflare.UpdateDNSRecordParams{
|
||||||
|
ID: dnsRecord.ID,
|
||||||
|
Content: currentPublicIP.String(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.OnChangeComment != "" {
|
||||||
|
update.Comment = config.OnChangeComment
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := api.UpdateDNSRecord(ctx, cloudflare.ZoneIdentifier(zoneID), update); err != nil {
|
||||||
|
log.Printf("error updating dns record: %s", err)
|
||||||
|
} else {
|
||||||
|
log.Printf("Updated to `%s`", currentPublicIP)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("checking ...")
|
||||||
|
checkFunc()
|
||||||
|
|
||||||
|
log.Println("waiting for check tick ...")
|
||||||
ticker := time.NewTicker(config.CheckInterval)
|
ticker := time.NewTicker(config.CheckInterval)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
log.Println("tick received checking ...")
|
log.Println("tick received checking ...")
|
||||||
func() {
|
checkFunc()
|
||||||
currentPublicIP, err := getResolver(config.PublicIpResolverTag).ResolvePublicIp(ctx)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Current public ip `%s`", currentPublicIP)
|
|
||||||
|
|
||||||
dns, err := allDNSRecords(ctx, api, cloudflare.ZoneIdentifier(zoneID))
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, dnsRecord := range dns {
|
|
||||||
if internal.Contains(config.DnsRecordsToCheck, dnsRecord.Name) {
|
|
||||||
log.Printf("Checking record `%s` with current value `%s` ...", dnsRecord.Name, dnsRecord.Content)
|
|
||||||
if currentPublicIP.String() == dnsRecord.Content {
|
|
||||||
log.Println("OK")
|
|
||||||
continue // no update needed
|
|
||||||
}
|
|
||||||
|
|
||||||
update := cloudflare.UpdateDNSRecordParams{
|
|
||||||
ID: dnsRecord.ID,
|
|
||||||
Content: currentPublicIP.String(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.OnChangeComment != "" {
|
|
||||||
update.Comment = config.OnChangeComment
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := api.UpdateDNSRecord(ctx, cloudflare.ZoneIdentifier(zoneID), update); err != nil {
|
|
||||||
log.Printf("error updating dns record: %s", err)
|
|
||||||
} else {
|
|
||||||
log.Printf("Updated to `%s`", currentPublicIP)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user