feat: working example in main.go
This commit is contained in:
72
main.go
Normal file
72
main.go
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"realdnydns/pkg/changeDetector"
|
||||||
|
"realdnydns/pkg/config"
|
||||||
|
"realdnydns/pkg/dnsProvider"
|
||||||
|
ionos "realdnydns/pkg/dnsProvider/ionos"
|
||||||
|
"realdnydns/pkg/externalIpProvider"
|
||||||
|
plainExternalIpProvider "realdnydns/pkg/externalIpProvider/plain"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-co-op/gocron"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
configClient := config.Config{}
|
||||||
|
err := configClient.Load("config.yaml")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var externalIpProvider externalIpProvider.ExternalIpProvider
|
||||||
|
switch configClient.ExternalIPProvider.Type {
|
||||||
|
case "plain":
|
||||||
|
var plainConfig plainExternalIpProvider.PlainExternalIpProviderConfig
|
||||||
|
err := configClient.ExternalIPProvider.ProviderConfig.Decode(&plainConfig)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
externalIpProvider, err = plainExternalIpProvider.New(plainConfig)
|
||||||
|
default:
|
||||||
|
panic(fmt.Errorf("unknown external IP provider: %s", configClient.ExternalIPProvider.Type))
|
||||||
|
}
|
||||||
|
|
||||||
|
var dnsProvider dnsProvider.DNSProvider
|
||||||
|
switch configClient.DNSProvider.Type {
|
||||||
|
case "ionos":
|
||||||
|
var ionosConfig ionos.IONOSConfig
|
||||||
|
err := configClient.DNSProvider.ProviderConfig.Decode(&ionosConfig)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
dnsProvider, err = ionos.NewIonos(&ionosConfig)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
panic(fmt.Errorf("unknown DNS provider: %s", configClient.DNSProvider.Type))
|
||||||
|
}
|
||||||
|
|
||||||
|
changeDetector := changeDetector.New(externalIpProvider, dnsProvider, configClient.Domains)
|
||||||
|
|
||||||
|
s := gocron.NewScheduler(time.UTC)
|
||||||
|
s.SingletonMode()
|
||||||
|
job, err := s.CronWithSeconds(configClient.CheckInterval).DoWithJobDetails(func(in string, job gocron.Job) {
|
||||||
|
numberChanged, err := changeDetector.DetectAndApplyChanges()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("Number of changes: %d\n", numberChanged)
|
||||||
|
fmt.Println("Next run:", job.NextRun())
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Starting scheduler")
|
||||||
|
fmt.Println("Next run:", job.NextRun())
|
||||||
|
s.StartBlocking()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user