feat: update modules
This commit is contained in:
24
cmd/main.go
24
cmd/main.go
@@ -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
2
go.mod
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user