feat: update modules

This commit is contained in:
2025-12-05 09:18:40 +01:00
parent c944aaff40
commit 16b27817f4
5 changed files with 49 additions and 14 deletions

View File

@@ -10,40 +10,42 @@ import (
func main() {
// Build the list of configs
configs, err := docker.GetConfigsFromContainers()
configs, err := docker.InitialScan()
if err != nil {
log.Println(err)
os.Exit(1)
}
// Retrieve server hostname from env
serverHostname := os.Getenv("CDD_SERVER_HOSTNAME")
// Init Cloudflare client
cloudflareApiToken := os.Getenv("CLOUDFLARE_TOKEN")
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
id, err := cloudflare.GetZoneId(cf, c.Domain)
zoneId, err := cloudflare.GetZoneId(cf, c.Domain)
if err != nil {
log.Println(err)
os.Exit(1)
}
log.Println(id)
// Record
record, err := cloudflare.GetRecord(cf, id, c.Fqdn)
record, err := cloudflare.GetRecord(cf, zoneId, c.Fqdn)
if err != nil {
log.Println(err)
os.Exit(1)
}
for _, r := range record {
log.Println(string(r.Name) + " " + string(r.Type))
if len(record) == 0 {
err := cloudflare.CreateRecord(cf, serverHostname, zoneId, c.Fqdn)
if err != nil {
log.Println(err)
}
}
}
}

2
go.mod
View File

@@ -5,6 +5,7 @@ go 1.25.4
require (
github.com/cloudflare/cloudflare-go/v6 v6.3.0
github.com/docker/docker v28.5.2+incompatible
github.com/joeguo/tldextract v0.0.0-20220507100122-d83daa6adef8
)
require (
@@ -18,7 +19,6 @@ require (
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/joeguo/tldextract v0.0.0-20220507100122-d83daa6adef8 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/sys/atomicwriter v0.1.0 // indirect
github.com/moby/term v0.5.2 // indirect

View File

@@ -46,7 +46,7 @@ func GetRecord(cf *cloudflare.Client, zoneId string, fqdn string) ([]dns.RecordR
return page.Result, nil
}
func CreateRecord(cf *cloudflare.Client, record dns.RecordResponse) error {
func CreateRecord(cf *cloudflare.Client, serverHostname string, zoneId string, fqdn string) error {
return nil
}

View File

@@ -1,15 +1,19 @@
package docker
import (
"cloudflare-dns-docker/internal/cloudflare"
"cloudflare-dns-docker/internal/types"
"context"
cf "github.com/cloudflare/cloudflare-go/v6"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/joeguo/tldextract"
"log"
)
func GetConfigsFromContainers() ([]types.Config, error) {
func InitialScan(cf *cf.Client) ([]types.Config, error) {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
return nil, err
@@ -42,7 +46,9 @@ func GetConfigsFromContainers() ([]types.Config, error) {
domain := extract.Extract(fqdn).Root + "." + extract.Extract(fqdn).Tld
configs = append(configs, types.Config{
Cf: cf,
Name: container.Names[0],
Cname: serverHostname,
Fqdn: fqdn,
Domain: domain,
SubDomain: extract.Extract(fqdn).Sub,
@@ -50,5 +56,28 @@ func GetConfigsFromContainers() ([]types.Config, error) {
})
}
// 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)
}
}
}
return configs, nil
}

View File

@@ -1,7 +1,11 @@
package types
import "github.com/cloudflare/cloudflare-go/v6"
type Config struct {
Cf *cloudflare.Client
Name string
Cname string
Fqdn string
Domain string
SubDomain string