Skip to content

Commit

Permalink
enable multiple domain updates
Browse files Browse the repository at this point in the history
  • Loading branch information
ctragesser committed Sep 6, 2022
1 parent be3b905 commit 8e71184
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 31 deletions.
35 changes: 17 additions & 18 deletions dnsexit/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"flag"
"os"
"strconv"
"strings"
"sync"
"time"
)

Expand Down Expand Up @@ -34,10 +36,6 @@ func CLIArgs() {
}

func CLIWorkflow(cliEvent Event) {
var response Event
var err error
statusAPI := recordStatus{}

//check for env vars and compare with flag values
if cliEvent.Record.Name == "" {
cliEvent.Record.Name = os.Getenv("DOMAIN")
Expand All @@ -52,26 +50,27 @@ func CLIWorkflow(cliEvent Event) {
}

if cliEvent.Interval == 10 {
env, ok := os.LookupEnv("CHECK_INTERVAL")
if ok {
env, varSet := os.LookupEnv("CHECK_INTERVAL")
if varSet {
cliEvent.Interval, _ = strconv.Atoi(env)
}
}

if hasDepencies(cliEvent) {
if !recordIsCurrent(statusAPI, cliEvent) {
cliLogFields["domain"] = cliEvent.Record.Name
cliLogFields["A record"] = cliEvent.Record.Content

response, err = dynamicUpdate(response, cliEvent)
if err != nil {
log.WithFields(cliLogFields).Error("Dynamic IP update failed.")
}

if response.Code == 0 && response.Message != "" {
log.WithFields(cliLogFields).Infoln(response.Message)
}
domains := strings.Split(cliEvent.Record.Name, ",")
wg := new(sync.WaitGroup)

wg.Add(len(domains))

for _, d := range domains {
instance := cliEvent
instance.Record.Name = d

go setUpdate(wg, instance)
}

wg.Wait()

} else {
os.Exit(0)
}
Expand Down
48 changes: 35 additions & 13 deletions dnsexit/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"io"
"net"
"net/http"
"sync"
)

const (
Expand Down Expand Up @@ -78,19 +79,6 @@ func (r Event) setUpdate(event Event) (Event, error) {
return responseData, err
}

func dynamicUpdate(api dnsExitAPI, event Event) (Event, error) {
if event.Record.Content == "" {
event.Record.Content = recordStatus{}.getLocationIP()
}

eventResponse, err := api.setUpdate(event)
if err != nil {
log.WithFields(updateLogFields).Error("Failed to set A record update.")
}

return eventResponse, err
}

func hasDepencies(event Event) bool {
var eventReady = true

Expand All @@ -111,3 +99,37 @@ func hasDepencies(event Event) bool {

return eventReady
}

func setUpdate(wg *sync.WaitGroup, event Event) {
defer wg.Done()
var response Event
var err error
statusAPI := recordStatus{}

if !recordIsCurrent(statusAPI, event) {
updateLogFields["domain"] = event.Record.Name
updateLogFields["A record"] = event.Record.Content

response, err = dynamicUpdate(response, event)
if err != nil {
log.WithFields(updateLogFields).Error("Dynamic IP update failed.")
}

if response.Code == 0 && response.Message != "" {
log.WithFields(updateLogFields).Infoln(response.Message)
}
}
}

func dynamicUpdate(api dnsExitAPI, event Event) (Event, error) {
if event.Record.Content == "" {
event.Record.Content = recordStatus{}.getLocationIP()
}

eventResponse, err := api.setUpdate(event)
if err != nil {
log.WithFields(updateLogFields).Error("Failed to set A record update.")
}

return eventResponse, err
}

0 comments on commit 8e71184

Please sign in to comment.