mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-07 10:06:57 +02:00
Google Provider: add support for batch interval.
The parameter is google-batch-change-interval. Default value is 2s.
This commit is contained in:
parent
ce2eadcd66
commit
ce94d2f328
2
main.go
2
main.go
@ -142,7 +142,7 @@ func main() {
|
|||||||
case "rcodezero":
|
case "rcodezero":
|
||||||
p, err = provider.NewRcodeZeroProvider(domainFilter, cfg.DryRun, cfg.RcodezeroTXTEncrypt)
|
p, err = provider.NewRcodeZeroProvider(domainFilter, cfg.DryRun, cfg.RcodezeroTXTEncrypt)
|
||||||
case "google":
|
case "google":
|
||||||
p, err = provider.NewGoogleProvider(cfg.GoogleProject, domainFilter, zoneIDFilter, cfg.GoogleBatchChangeSize, cfg.DryRun)
|
p, err = provider.NewGoogleProvider(cfg.GoogleProject, domainFilter, zoneIDFilter, cfg.GoogleBatchChangeSize, cfg.GoogleBatchChangeInterval, cfg.DryRun)
|
||||||
case "digitalocean":
|
case "digitalocean":
|
||||||
p, err = provider.NewDigitalOceanProvider(domainFilter, cfg.DryRun)
|
p, err = provider.NewDigitalOceanProvider(domainFilter, cfg.DryRun)
|
||||||
case "linode":
|
case "linode":
|
||||||
|
@ -55,6 +55,7 @@ type Config struct {
|
|||||||
Provider string
|
Provider string
|
||||||
GoogleProject string
|
GoogleProject string
|
||||||
GoogleBatchChangeSize int
|
GoogleBatchChangeSize int
|
||||||
|
GoogleBatchChangeInterval time.Duration
|
||||||
DomainFilter []string
|
DomainFilter []string
|
||||||
ExcludeDomains []string
|
ExcludeDomains []string
|
||||||
ZoneIDFilter []string
|
ZoneIDFilter []string
|
||||||
@ -147,6 +148,7 @@ var defaultConfig = &Config{
|
|||||||
Provider: "",
|
Provider: "",
|
||||||
GoogleProject: "",
|
GoogleProject: "",
|
||||||
GoogleBatchChangeSize: 1000,
|
GoogleBatchChangeSize: 1000,
|
||||||
|
GoogleBatchChangeInterval: time.Second,
|
||||||
DomainFilter: []string{},
|
DomainFilter: []string{},
|
||||||
ExcludeDomains: []string{},
|
ExcludeDomains: []string{},
|
||||||
AlibabaCloudConfigFile: "/etc/kubernetes/alibaba-cloud.json",
|
AlibabaCloudConfigFile: "/etc/kubernetes/alibaba-cloud.json",
|
||||||
@ -293,6 +295,7 @@ func (cfg *Config) ParseFlags(args []string) error {
|
|||||||
app.Flag("zone-id-filter", "Filter target zones by hosted zone id; specify multiple times for multiple zones (optional)").Default("").StringsVar(&cfg.ZoneIDFilter)
|
app.Flag("zone-id-filter", "Filter target zones by hosted zone id; specify multiple times for multiple zones (optional)").Default("").StringsVar(&cfg.ZoneIDFilter)
|
||||||
app.Flag("google-project", "When using the Google provider, current project is auto-detected, when running on GCP. Specify other project with this. Must be specified when running outside GCP.").Default(defaultConfig.GoogleProject).StringVar(&cfg.GoogleProject)
|
app.Flag("google-project", "When using the Google provider, current project is auto-detected, when running on GCP. Specify other project with this. Must be specified when running outside GCP.").Default(defaultConfig.GoogleProject).StringVar(&cfg.GoogleProject)
|
||||||
app.Flag("google-batch-change-size", "When using the Google provider, set the maximum number of changes that will be applied in each batch.").Default(strconv.Itoa(defaultConfig.GoogleBatchChangeSize)).IntVar(&cfg.GoogleBatchChangeSize)
|
app.Flag("google-batch-change-size", "When using the Google provider, set the maximum number of changes that will be applied in each batch.").Default(strconv.Itoa(defaultConfig.GoogleBatchChangeSize)).IntVar(&cfg.GoogleBatchChangeSize)
|
||||||
|
app.Flag("google-batch-change-interval", "When using the Google provider, set the interval between batch changes.").Default(defaultConfig.GoogleBatchChangeInterval.String()).DurationVar(&cfg.GoogleBatchChangeInterval)
|
||||||
app.Flag("alibaba-cloud-config-file", "When using the Alibaba Cloud provider, specify the Alibaba Cloud configuration file (required when --provider=alibabacloud").Default(defaultConfig.AlibabaCloudConfigFile).StringVar(&cfg.AlibabaCloudConfigFile)
|
app.Flag("alibaba-cloud-config-file", "When using the Alibaba Cloud provider, specify the Alibaba Cloud configuration file (required when --provider=alibabacloud").Default(defaultConfig.AlibabaCloudConfigFile).StringVar(&cfg.AlibabaCloudConfigFile)
|
||||||
app.Flag("alibaba-cloud-zone-type", "When using the Alibaba Cloud provider, filter for zones of this type (optional, options: public, private)").Default(defaultConfig.AlibabaCloudZoneType).EnumVar(&cfg.AlibabaCloudZoneType, "", "public", "private")
|
app.Flag("alibaba-cloud-zone-type", "When using the Alibaba Cloud provider, filter for zones of this type (optional, options: public, private)").Default(defaultConfig.AlibabaCloudZoneType).EnumVar(&cfg.AlibabaCloudZoneType, "", "public", "private")
|
||||||
app.Flag("aws-zone-type", "When using the AWS provider, filter for zones of this type (optional, options: public, private)").Default(defaultConfig.AWSZoneType).EnumVar(&cfg.AWSZoneType, "", "public", "private")
|
app.Flag("aws-zone-type", "When using the AWS provider, filter for zones of this type (optional, options: public, private)").Default(defaultConfig.AWSZoneType).EnumVar(&cfg.AWSZoneType, "", "public", "private")
|
||||||
|
@ -41,6 +41,7 @@ var (
|
|||||||
Provider: "google",
|
Provider: "google",
|
||||||
GoogleProject: "",
|
GoogleProject: "",
|
||||||
GoogleBatchChangeSize: 1000,
|
GoogleBatchChangeSize: 1000,
|
||||||
|
GoogleBatchChangeInterval: time.Second,
|
||||||
DomainFilter: []string{""},
|
DomainFilter: []string{""},
|
||||||
ExcludeDomains: []string{""},
|
ExcludeDomains: []string{""},
|
||||||
ZoneIDFilter: []string{""},
|
ZoneIDFilter: []string{""},
|
||||||
@ -106,6 +107,7 @@ var (
|
|||||||
Provider: "google",
|
Provider: "google",
|
||||||
GoogleProject: "project",
|
GoogleProject: "project",
|
||||||
GoogleBatchChangeSize: 100,
|
GoogleBatchChangeSize: 100,
|
||||||
|
GoogleBatchChangeInterval: time.Second * 2,
|
||||||
DomainFilter: []string{"example.org", "company.com"},
|
DomainFilter: []string{"example.org", "company.com"},
|
||||||
ExcludeDomains: []string{"xapi.example.org", "xapi.company.com"},
|
ExcludeDomains: []string{"xapi.example.org", "xapi.company.com"},
|
||||||
ZoneIDFilter: []string{"/hostedzone/ZTST1", "/hostedzone/ZTST2"},
|
ZoneIDFilter: []string{"/hostedzone/ZTST1", "/hostedzone/ZTST2"},
|
||||||
@ -177,6 +179,7 @@ var (
|
|||||||
Provider: "google",
|
Provider: "google",
|
||||||
GoogleProject: "",
|
GoogleProject: "",
|
||||||
GoogleBatchChangeSize: 1000,
|
GoogleBatchChangeSize: 1000,
|
||||||
|
GoogleBatchChangeInterval: time.Second,
|
||||||
DomainFilter: []string{""},
|
DomainFilter: []string{""},
|
||||||
ExcludeDomains: []string{""},
|
ExcludeDomains: []string{""},
|
||||||
ZoneIDFilter: []string{""},
|
ZoneIDFilter: []string{""},
|
||||||
@ -260,6 +263,7 @@ func TestParseFlags(t *testing.T) {
|
|||||||
"--provider=google",
|
"--provider=google",
|
||||||
"--google-project=project",
|
"--google-project=project",
|
||||||
"--google-batch-change-size=100",
|
"--google-batch-change-size=100",
|
||||||
|
"--google-batch-change-interval=2s",
|
||||||
"--azure-config-file=azure.json",
|
"--azure-config-file=azure.json",
|
||||||
"--azure-resource-group=arg",
|
"--azure-resource-group=arg",
|
||||||
"--cloudflare-proxied",
|
"--cloudflare-proxied",
|
||||||
@ -339,6 +343,7 @@ func TestParseFlags(t *testing.T) {
|
|||||||
"EXTERNAL_DNS_PROVIDER": "google",
|
"EXTERNAL_DNS_PROVIDER": "google",
|
||||||
"EXTERNAL_DNS_GOOGLE_PROJECT": "project",
|
"EXTERNAL_DNS_GOOGLE_PROJECT": "project",
|
||||||
"EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_SIZE": "100",
|
"EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_SIZE": "100",
|
||||||
|
"EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_INTERVAL": "2s",
|
||||||
"EXTERNAL_DNS_AZURE_CONFIG_FILE": "azure.json",
|
"EXTERNAL_DNS_AZURE_CONFIG_FILE": "azure.json",
|
||||||
"EXTERNAL_DNS_AZURE_RESOURCE_GROUP": "arg",
|
"EXTERNAL_DNS_AZURE_RESOURCE_GROUP": "arg",
|
||||||
"EXTERNAL_DNS_CLOUDFLARE_PROXIED": "1",
|
"EXTERNAL_DNS_CLOUDFLARE_PROXIED": "1",
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"cloud.google.com/go/compute/metadata"
|
"cloud.google.com/go/compute/metadata"
|
||||||
"github.com/linki/instrumented_http"
|
"github.com/linki/instrumented_http"
|
||||||
@ -106,6 +107,8 @@ type GoogleProvider struct {
|
|||||||
dryRun bool
|
dryRun bool
|
||||||
// Max batch size to submit to Google Cloud DNS per transaction.
|
// Max batch size to submit to Google Cloud DNS per transaction.
|
||||||
batchChangeSize int
|
batchChangeSize int
|
||||||
|
// Interval between batch updates.
|
||||||
|
batchChangeInterval time.Duration
|
||||||
// only consider hosted zones managing domains ending in this suffix
|
// only consider hosted zones managing domains ending in this suffix
|
||||||
domainFilter DomainFilter
|
domainFilter DomainFilter
|
||||||
// only consider hosted zones ending with this zone id
|
// only consider hosted zones ending with this zone id
|
||||||
@ -119,7 +122,7 @@ type GoogleProvider struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewGoogleProvider initializes a new Google CloudDNS based Provider.
|
// NewGoogleProvider initializes a new Google CloudDNS based Provider.
|
||||||
func NewGoogleProvider(project string, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, batchChangeSize int, dryRun bool) (*GoogleProvider, error) {
|
func NewGoogleProvider(project string, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, batchChangeSize int, batchChangeInterval time.Duration, dryRun bool) (*GoogleProvider, error) {
|
||||||
gcloud, err := google.DefaultClient(context.TODO(), dns.NdevClouddnsReadwriteScope)
|
gcloud, err := google.DefaultClient(context.TODO(), dns.NdevClouddnsReadwriteScope)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -149,6 +152,7 @@ func NewGoogleProvider(project string, domainFilter DomainFilter, zoneIDFilter Z
|
|||||||
project: project,
|
project: project,
|
||||||
dryRun: dryRun,
|
dryRun: dryRun,
|
||||||
batchChangeSize: batchChangeSize,
|
batchChangeSize: batchChangeSize,
|
||||||
|
batchChangeInterval: batchChangeInterval,
|
||||||
domainFilter: domainFilter,
|
domainFilter: domainFilter,
|
||||||
zoneIDFilter: zoneIDFilter,
|
zoneIDFilter: zoneIDFilter,
|
||||||
resourceRecordSetsClient: resourceRecordSetsService{dnsClient.ResourceRecordSets},
|
resourceRecordSetsClient: resourceRecordSetsService{dnsClient.ResourceRecordSets},
|
||||||
@ -310,6 +314,8 @@ func (p *GoogleProvider) submitChange(change *dns.Change) error {
|
|||||||
if _, err := p.changesClient.Create(p.project, zone, c).Do(); err != nil {
|
if _, err := p.changesClient.Create(p.project, zone, c).Do(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time.Sleep(p.batchChangeInterval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user