diff --git a/go.mod b/go.mod index 2a98ab1..a9af990 100644 --- a/go.mod +++ b/go.mod @@ -9,4 +9,5 @@ require ( github.com/pquerna/otp v1.4.0 // indirect github.com/xlzd/gotp v0.1.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..341585a --- /dev/null +++ b/go.sum @@ -0,0 +1,19 @@ +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dspinhirne/netaddr-go v0.0.0-20211008142535-a4c5bccad224 h1:Y7k0gYiBQz/sMahnvLzM9I40UOvCeQ8WVjjsBeCtFF8= +github.com/dspinhirne/netaddr-go v0.0.0-20211008142535-a4c5bccad224/go.mod h1:j1oDdmBtACJEAQr2T3DQNZQDfSuJzRKHadPABYd/MHo= +github.com/joeig/go-powerdns/v3 v3.14.3 h1:z55hTGtBe7mEaKG1B/xtMHagqWPpxH+z4VVf8u9+NTc= +github.com/joeig/go-powerdns/v3 v3.14.3/go.mod h1:hA54LX2p4A/Jp1Kgdhd7Lh3jAU0u7wV1mk1JbGywt60= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/otp v1.4.0 h1:wZvl1TIVxKRThZIBiwOOHOGP/1+nZyWBil9Y2XNEDzg= +github.com/pquerna/otp v1.4.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po= +github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 2a8849e..2d0e722 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,8 @@ package main /* * https://github.com/joeig/go-powerdns * https://github.com/xlzd/gotp + * https://github.com/dspinhirne/netaddr-go => https://pkg.go.dev/github.com/dspinhirne/netaddr-go + * https://github.com/go-yaml/yaml/tree/v2.4.0 => */ import ( "context" @@ -10,7 +12,7 @@ import ( "github.com/dspinhirne/netaddr-go" "github.com/joeig/go-powerdns/v3" "github.com/xlzd/gotp" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" "log" "net" "net/http" @@ -62,6 +64,7 @@ func main() { ipv6, _ := netaddr.ParseIPv6(ip) new_prefix := ipv6.NetId() + updated := false for _, record_to_update := range c.Records { records, err := pdns.Records.Get(ctx, c.Zone, record_to_update, powerdns.RRTypePtr(powerdns.RRTypeAAAA)) if err != nil { @@ -75,17 +78,21 @@ func main() { } hostId := ipv6.HostId() new_ipv6 := netaddr.NewIPv6(new_prefix, hostId) - log.Println(fmt.Sprintf("Host: %q -> %q", ipv6, new_ipv6)) - err = pdns.Records.Change(ctx, c.Zone, record_to_update+"."+c.Zone, powerdns.RRTypeAAAA, 30, []string{new_ipv6.Long()}) - if err != nil { - log.Fatalf("Update err %v ", err) + log.Println(fmt.Sprintf("Host: %q -> %q needs update: %t", ipv6, new_ipv6, ipv6.Long() != new_ipv6.Long())) + if ipv6.Long() != new_ipv6.Long() { + updated = true + err = pdns.Records.Change(ctx, c.Zone, record_to_update+"."+c.Zone, powerdns.RRTypeAAAA, 30, []string{new_ipv6.Long()}) + if err != nil { + log.Fatalf("Update err %v ", err) + } } } } } - - pdns.Zones.Notify(ctx, c.Zone) - log.Println("Updated...") + if updated { + pdns.Zones.Notify(ctx, c.Zone) + log.Println("Updated...") + } } })