52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"cloudflare-dns-docker/internal/cloudflare"
|
|
"cloudflare-dns-docker/internal/docker"
|
|
)
|
|
|
|
func main() {
|
|
// Build the list of configs
|
|
configs, err := docker.InitialScan()
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
// Retrieve server hostname from env
|
|
serverHostname := os.Getenv("CDD_SERVER_HOSTNAME")
|
|
|
|
// Init Cloudflare client
|
|
cloudflareApiToken := os.Getenv("CDD_CLOUDFLARE_TOKEN")
|
|
if len(cloudflareApiToken) == 0 {
|
|
log.Println("Error: you need to provide a Cloudflare API token")
|
|
os.Exit(1)
|
|
}
|
|
cf := cloudflare.NewApiClient(cloudflareApiToken)
|
|
|
|
// Ensure every record is matching current config initially
|
|
for _, c := range configs {
|
|
var err error
|
|
|
|
// Zone
|
|
zoneId, err := cloudflare.GetZoneId(cf, c.Domain)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
// Record
|
|
record, err := cloudflare.GetRecord(cf, zoneId, c.Fqdn)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
if len(record) == 0 {
|
|
err := cloudflare.CreateRecord(cf, serverHostname, zoneId, c.Fqdn)
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
}
|
|
}
|
|
}
|