diff --git a/main.go b/main.go index 1ab0a31..956eacb 100644 --- a/main.go +++ b/main.go @@ -47,51 +47,58 @@ func main() { 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) defer ticker.Stop() for { select { case <-ticker.C: log.Println("tick received checking ...") - func() { - 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) - } - } - } - }() + checkFunc() case <-ctx.Done(): break }