From f220b679ea7ed0233950548ec326eeb774e13107 Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Fri, 12 Apr 2024 13:32:02 +0100 Subject: [PATCH] fix entrypoint typo and add prom web server --- entrypoint.sh | 2 +- main.go | 17 +++++++---------- nomad.go | 13 +++++++++++++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 020e868..9d3dcc4 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -12,7 +12,7 @@ do --cloud-dns-zone=$GCLOUD_DNS_ZONE \ --json-keyfile=$JSON_KEYFILE \ --nomad-server-uri=$NOMAD_SERVER_URI \ - --nomad-token_file=$NOMAD_TOKEN_FILE \ + --nomad-token-file=$NOMAD_TOKEN_FILE \ $GCLOUD_VERB ;; getzonefile | putzonefile) diff --git a/main.go b/main.go index 142e651..c3d9bad 100644 --- a/main.go +++ b/main.go @@ -3,12 +3,12 @@ package main import ( "context" "flag" + "fmt" "io" "log" "net" "net/http" "os" - "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" @@ -68,6 +68,7 @@ func main() { var nomadServerURI = flag.String("nomad-server-uri", "http://localhost:4646", "URI for a nomad server to talk to.") var nomadTokenFile = flag.String("nomad-token-file", "", "file to read ou rnomad token from") var nomadSyncInterval = flag.Int("nomad-sync-interval-secs", 300, "seconds between nomad updates. set to -1 to sync once only.") + var httpPort = flag.Int("http-port", 8080, "Port to listen on for /metrics") // for dynrecord var cloudDnsDynRecordName = flag.String("cloud-dns-dyn-record-name", "", "Cloud DNS record to update with our IP") @@ -177,7 +178,6 @@ func main() { log.Fatalf("Error Updating GCloud: %s", err) } case "nomad_sync": - http.Handle("/metrics", promhttp.Handler()) nomadSpec := &NomadSpec{ uri: *nomadServerURI, } @@ -191,15 +191,12 @@ func main() { nomadSpec.token = "" } - syncNomad(dns_spec, nomadSpec, pruneMissing) + http.Handle("/metrics", promhttp.Handler()) + + go periodicallySyncNomad(dns_spec, nomadSpec, *nomadSyncInterval, pruneMissing) + + log.Fatal(http.ListenAndServe(":"+fmt.Sprintf("%v", *httpPort), nil)) - if *nomadSyncInterval >= 0 { - for { - log.Printf("Waiting %d seconds.", *nomadSyncInterval) - time.Sleep(time.Duration(*nomadSyncInterval) * time.Second) - syncNomad(dns_spec, nomadSpec, pruneMissing) - } - } default: log.Fatal("Unknown verb: ", verb) } diff --git a/nomad.go b/nomad.go index ef67298..7979e70 100644 --- a/nomad.go +++ b/nomad.go @@ -2,6 +2,7 @@ package main import ( "log" + "time" nomad "github.com/hashicorp/nomad/api" ) @@ -18,6 +19,18 @@ type NomadSpec struct { token string } +func periodicallySyncNomad(dns_spec *CloudDNSSpec, nomadSpec *NomadSpec, interval int, pruneMissing *bool) { + syncNomad(dns_spec, nomadSpec, pruneMissing) + + if interval >= 0 { + for { + log.Printf("Waiting %d seconds.", interval) + time.Sleep(time.Duration(interval) * time.Second) + syncNomad(dns_spec, nomadSpec, pruneMissing) + } + } +} + func syncNomad(dnsSpec *CloudDNSSpec, nomadSpec *NomadSpec, pruneMissing *bool) { //c := make(<-chan *dns.Change) jobLocs := getNomadTaskLocations(nomadSpec)