From 3c685f84732e24718e1bc0aa812c20b8bfb543e1 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 18 Feb 2026 14:15:25 +0100 Subject: [PATCH] fix: sequential --- cmd/zz_gen_cmd_dnshelp.go | 1 + docs/content/dns/zz_gen_artfiles.md | 1 + providers/dns/artfiles/artfiles.go | 13 +++++++++++-- providers/dns/artfiles/artfiles.toml | 1 + providers/dns/artfiles/artfiles_test.go | 3 +-- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cmd/zz_gen_cmd_dnshelp.go b/cmd/zz_gen_cmd_dnshelp.go index 9e83a7b25..dbc474b64 100644 --- a/cmd/zz_gen_cmd_dnshelp.go +++ b/cmd/zz_gen_cmd_dnshelp.go @@ -375,6 +375,7 @@ func displayDNSHelp(w io.Writer, name string) error { ew.writeln(` - "ARTFILES_HTTP_TIMEOUT": API request timeout in seconds (Default: 30)`) ew.writeln(` - "ARTFILES_POLLING_INTERVAL": Time between DNS propagation check in seconds (Default: 2)`) ew.writeln(` - "ARTFILES_PROPAGATION_TIMEOUT": Maximum waiting time for DNS propagation in seconds (Default: 360)`) + ew.writeln(` - "ARTFILES_SEQUENCE_INTERVAL": Time between sequential requests in seconds (Default: 10)`) ew.writeln(` - "ARTFILES_TTL": The TTL of the TXT record used for the DNS challenge in seconds (Default: 120)`) ew.writeln() diff --git a/docs/content/dns/zz_gen_artfiles.md b/docs/content/dns/zz_gen_artfiles.md index 15ac2d964..3e1b7b470 100644 --- a/docs/content/dns/zz_gen_artfiles.md +++ b/docs/content/dns/zz_gen_artfiles.md @@ -52,6 +52,7 @@ More information [here]({{% ref "dns#configuration-and-credentials" %}}). | `ARTFILES_HTTP_TIMEOUT` | API request timeout in seconds (Default: 30) | | `ARTFILES_POLLING_INTERVAL` | Time between DNS propagation check in seconds (Default: 2) | | `ARTFILES_PROPAGATION_TIMEOUT` | Maximum waiting time for DNS propagation in seconds (Default: 360) | +| `ARTFILES_SEQUENCE_INTERVAL` | Time between sequential requests in seconds (Default: 10) | | `ARTFILES_TTL` | The TTL of the TXT record used for the DNS challenge in seconds (Default: 120) | The environment variable names can be suffixed by `_FILE` to reference a file instead of a value. diff --git a/providers/dns/artfiles/artfiles.go b/providers/dns/artfiles/artfiles.go index c918d77f6..1752a5466 100644 --- a/providers/dns/artfiles/artfiles.go +++ b/providers/dns/artfiles/artfiles.go @@ -23,6 +23,7 @@ const ( EnvUsername = envNamespace + "USERNAME" EnvPassword = envNamespace + "PASSWORD" + EnvSequenceInterval = envNamespace + "SEQUENCE_INTERVAL" EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" EnvPollingInterval = envNamespace + "POLLING_INTERVAL" EnvHTTPTimeout = envNamespace + "HTTP_TIMEOUT" @@ -33,6 +34,7 @@ type Config struct { Username string Password string + SequenceInterval time.Duration PropagationTimeout time.Duration PollingInterval time.Duration HTTPClient *http.Client @@ -43,6 +45,7 @@ func NewDefaultConfig() *Config { return &Config{ PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 6*time.Minute), PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval), + SequenceInterval: env.GetOrDefaultSecond(EnvSequenceInterval, 10*time.Second), HTTPClient: &http.Client{ Timeout: env.GetOrDefaultSecond(EnvHTTPTimeout, 30*time.Second), }, @@ -126,7 +129,7 @@ func (d *DNSProvider) Present(domain, token, keyAuth string) error { return fmt.Errorf("artfiles: %w", err) } - rv.Add(subDomain, info.Value) + rv.Set(subDomain, info.Value) err = d.client.SetRecords(ctx, zone, "TXT", rv) if err != nil { @@ -166,7 +169,7 @@ func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { return fmt.Errorf("artfiles: %w", err) } - rv.RemoveValue(subDomain, info.Value) + rv.Delete(subDomain) err = d.client.SetRecords(ctx, zone, "TXT", rv) if err != nil { @@ -182,6 +185,12 @@ func (d *DNSProvider) Timeout() (timeout, interval time.Duration) { return d.config.PropagationTimeout, d.config.PollingInterval } +// Sequential All DNS challenges for this provider will be resolved sequentially. +// Returns the interval between each iteration. +func (d *DNSProvider) Sequential() time.Duration { + return d.config.SequenceInterval +} + func (d *DNSProvider) findZone(ctx context.Context, fqdn string) (string, error) { domains, err := d.client.GetDomains(ctx) if err != nil { diff --git a/providers/dns/artfiles/artfiles.toml b/providers/dns/artfiles/artfiles.toml index 00ff12342..a15024b99 100644 --- a/providers/dns/artfiles/artfiles.toml +++ b/providers/dns/artfiles/artfiles.toml @@ -17,6 +17,7 @@ lego --dns artfiles -d '*.example.com' -d example.com run [Configuration.Additional] ARTFILES_POLLING_INTERVAL = "Time between DNS propagation check in seconds (Default: 2)" ARTFILES_PROPAGATION_TIMEOUT = "Maximum waiting time for DNS propagation in seconds (Default: 360)" + ARTFILES_SEQUENCE_INTERVAL = "Time between sequential requests in seconds (Default: 10)" ARTFILES_TTL = "The TTL of the TXT record used for the DNS challenge in seconds (Default: 120)" ARTFILES_HTTP_TIMEOUT = "API request timeout in seconds (Default: 30)" diff --git a/providers/dns/artfiles/artfiles_test.go b/providers/dns/artfiles/artfiles_test.go index dd422f5c4..5571730f4 100644 --- a/providers/dns/artfiles/artfiles_test.go +++ b/providers/dns/artfiles/artfiles_test.go @@ -184,7 +184,7 @@ func TestDNSProvider_Present(t *testing.T) { servermock.ResponseFromInternal("set_dns.json"), servermock.CheckQueryParameter().Strict(). With("TXT", `@ "v=spf1 a mx ~all" -_acme-challenge "TheAcmeChallenge" "ADw2sEd82DUgXcQ9hNBZThJs7zVJkR5v9JeSbAb9mZY" +_acme-challenge "ADw2sEd82DUgXcQ9hNBZThJs7zVJkR5v9JeSbAb9mZY" _dmarc "v=DMARC1;p=reject;sp=reject;adkim=r;aspf=r;pct=100;rua=mailto:someone@in.mailhardener.com,mailto:postmaster@example.tld;ri=86400;ruf=mailto:someone@in.mailhardener.com,mailto:postmaster@example.tld;fo=1;rf=afrf" _mta-sts "v=STSv1;id=yyyymmddTHHMMSS;" _smtp._tls "v=TLSRPTv1;rua=mailto:someone@in.mailhardener.com" @@ -212,7 +212,6 @@ func TestDNSProvider_CleanUp(t *testing.T) { servermock.ResponseFromInternal("set_dns.json"), servermock.CheckQueryParameter().Strict(). With("TXT", `@ "v=spf1 a mx ~all" -_acme-challenge "TheAcmeChallenge" _dmarc "v=DMARC1;p=reject;sp=reject;adkim=r;aspf=r;pct=100;rua=mailto:someone@in.mailhardener.com,mailto:postmaster@example.tld;ri=86400;ruf=mailto:someone@in.mailhardener.com,mailto:postmaster@example.tld;fo=1;rf=afrf" _mta-sts "v=STSv1;id=yyyymmddTHHMMSS;" _smtp._tls "v=TLSRPTv1;rua=mailto:someone@in.mailhardener.com"