mirror of
https://github.com/coredns/coredns.git
synced 2025-12-07 02:45:11 -05:00
plugin/route53: make refresh frequency adjustable (#3083)
the current update frequency for the refresh loop in the route 53 plugin is hard-coded to 1 minute. aws rate-limits the number of api requests so less frequent record refreshes can help when reaching those limits depending upon your individual scenarios. this pull adds a configuration option to the route53 plugin to adjust the refresh frequency. thanks for getting my last pull released so quickly. this is the last local change that i have been running and would love to get it contributed back to the project. Signed-off-by: Matt Kulka <mkulka@parchment.com>
This commit is contained in:
@@ -2,7 +2,10 @@ package route53
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/coredns/coredns/core/dnsserver"
|
||||
"github.com/coredns/coredns/plugin"
|
||||
@@ -53,6 +56,8 @@ func setup(c *caddy.Controller, f func(*credentials.Credentials) route53iface.Ro
|
||||
|
||||
up := upstream.New()
|
||||
|
||||
refresh := time.Duration(1) * time.Minute // default update frequency to 1 minute
|
||||
|
||||
args := c.RemainingArgs()
|
||||
|
||||
for i := 0; i < len(args); i++ {
|
||||
@@ -98,6 +103,23 @@ func setup(c *caddy.Controller, f func(*credentials.Credentials) route53iface.Ro
|
||||
}
|
||||
case "fallthrough":
|
||||
fall.SetZonesFromArgs(c.RemainingArgs())
|
||||
case "refresh":
|
||||
if c.NextArg() {
|
||||
refreshStr := c.Val()
|
||||
_, err := strconv.Atoi(refreshStr)
|
||||
if err == nil {
|
||||
refreshStr = fmt.Sprintf("%ss", c.Val())
|
||||
}
|
||||
refresh, err = time.ParseDuration(refreshStr)
|
||||
if err != nil {
|
||||
return c.Errf("Unable to parse duration: '%v'", err)
|
||||
}
|
||||
if refresh <= 0 {
|
||||
return c.Errf("refresh interval must be greater than 0: %s", refreshStr)
|
||||
}
|
||||
} else {
|
||||
return c.ArgErr()
|
||||
}
|
||||
default:
|
||||
return c.Errf("unknown property '%s'", c.Val())
|
||||
}
|
||||
@@ -107,7 +129,7 @@ func setup(c *caddy.Controller, f func(*credentials.Credentials) route53iface.Ro
|
||||
})
|
||||
client := f(credentials.NewChainCredentials(providers))
|
||||
ctx := context.Background()
|
||||
h, err := New(ctx, client, keys, up)
|
||||
h, err := New(ctx, client, keys, up, refresh)
|
||||
if err != nil {
|
||||
return c.Errf("failed to create Route53 plugin: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user