package main import ( "flag" "fmt" "os" "time" App "dnsupdater/app" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) var version string = "(unknown)" func main() { configFile := flag.String("config", "./config.yml", "configuration file") versionFlag := flag.Bool("v", false, "Prints the version") flag.Parse() if *versionFlag { fmt.Println(version) os.Exit(0) } log.Logger = log.Output(zerolog.ConsoleWriter{ Out: os.Stderr, TimeFormat: time.RFC3339, }) config, err := App.LoadConfig(*configFile) if err != nil { log.Fatal().Err(err).Str("file", *configFile).Msg("Failed to load config") } app, err := App.NewApp(config) if err != nil { log.Fatal().Err(err).Msg("Failed to initialize application") } for service_name, domains := range config.Updates { // Get DNS Service dnsService := app.DnsServiceMgr.Get(service_name) if dnsService == nil { log.Warn().Str("service", service_name).Msg("Invalid DNS service") continue } log.Info().Str("service", service_name).Msg("Begin update for service") updater := App.NewUpdater(dnsService) for domain, records := range domains { for name, data := range records { logger := log.With(). Str("service", service_name). Str("domain", domain). Str("record", name). Str("interface", data). Logger() ip, err := app.GetIP(data) if err != nil { logger.Error().Err(err).Msg("Failed to fetch ip") continue } logger = logger.With().IPAddr("ip", ip).Logger() err = updater.Update(domain, name, ip) if err != nil { logger.Error().Err(err).Msg("Failed to update record") } else { logger.Info().Msg("Record updated") } } } } }