66 Commits

Author SHA1 Message Date
Isaac Wilson
e33ab8d46b
feat(gateway): add gateway-api listenerset support (#6254)
* Add listenerset support

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>
Signed-off-by: jukie <isaac.wilson514@gmail.com>

* Add cross-namespace test

Signed-off-by: jukie <isaac.wilson514@gmail.com>

* lint

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* lint

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* Add flag to gate listenerset informer

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* generate docs

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* Include default behavior

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* Support listenerset target annotation

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* docs

Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>

* feedback

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

* Update source/gateway_listenerset_test.go

Co-authored-by: Ivan Ka <5395690+ivankatliarchuk@users.noreply.github.com>

* Fix gateway labelFilter

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

* lint

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

* test case

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

* feedback

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

* lint

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>

---------

Signed-off-by: jukie <10012479+Jukie@users.noreply.github.com>
Signed-off-by: jukie <isaac.wilson514@gmail.com>
Signed-off-by: jukie <10012479+jukie@users.noreply.github.com>
Co-authored-by: Ivan Ka <5395690+ivankatliarchuk@users.noreply.github.com>
2026-04-02 17:23:04 +05:30
Seena Fallah
736a2d58ae
feat!: generalize PTR record support from rfc2136 to all providers (#6232)
* feat(metrics): add source wrapper metrics for invalid and deduplicated endpoints

Add GaugeVecMetric.Reset() to clear stale label combinations between cycles.

Introduce invalidEndpoints and deduplicatedEndpoints gauge vectors in the
source wrappers package, partitioned by record_type and source_type. The
dedup source wrapper now tracks rejected (invalid) and de-duplicated
endpoints per collection cycle.

Update the metrics documentation and bump the known metrics count.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* feat(source): add PTR source wrapper for automatic reverse DNS

Implement ptrSource, a source wrapper that generates PTR endpoints from
A/AAAA records. The wrapper supports:

- Global default via WithCreatePTR (maps to --create-ptr flag)
- Per-endpoint override via record-type provider-specific property
- Grouping multiple hostnames sharing an IP into a single PTR endpoint
- Skipping wildcard DNS names

Add WithPTRSupported and WithCreatePTR options to the wrapper Config
and wire the PTR wrapper into the WrapSources chain when PTR is in
managed-record-types.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* feat(config): add --create-ptr flag and deprecate --rfc2136-create-ptr

Add the generic --create-ptr boolean flag to Config, enabling automatic
PTR record creation for any provider. Add IsPTRSupported() helper that
checks whether PTR is included in --managed-record-types.

Add validation: --create-ptr (or legacy --rfc2136-create-ptr) now
requires PTR in --managed-record-types, preventing misconfiguration.

Mark --rfc2136-create-ptr as deprecated in the flag description.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* refactor(rfc2136): remove inline PTR logic in favor of PTR source wrapper

Remove the createPTR field, AddReverseRecord, RemoveReverseRecord, and
GenerateReverseRecord methods from the rfc2136 provider. PTR record
generation is now handled generically by the PTR source wrapper before
records reach the provider.

Update the PTR creation test to supply pre-generated PTR endpoints
(simulating what the source wrapper produces) instead of relying on
the provider to create them internally.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* feat(controller): wire PTR source wrapper into buildSource

Pass the top-level Config to buildSource so it can read IsPTRSupported()
and the CreatePTR / RFC2136CreatePTR flags. When PTR is in
managed-record-types, the PTR source wrapper is installed in the
wrapper chain with the combined create-ptr default.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* chore(pdns): remove stale comment and fix whitespace

Remove an outdated comment about a single-target-per-tuple assumption
that no longer applies.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* docs: add PTR records documentation and update existing guides

Add docs/advanced/ptr-records.md covering the --create-ptr flag,
per-resource annotation overrides, prerequisites, and usage examples.

Update:
- annotations.md: document record-type annotation
- flags.md: add --create-ptr, mark --rfc2136-create-ptr as deprecated
- tutorials/rfc2136.md: point to generic --create-ptr flag
- contributing/source-wrappers.md: add PTR wrapper to the chain
- mkdocs.yml: add PTR Records navigation entry

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* feat(rfc2136)!: remove rfc2136-create-ptr in favor of create-ptr

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

---------

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
2026-03-30 13:36:16 +05:30
Ivan Ka
f1d771815f
feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting (#6322)
* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(client): add --kube-api-qps and --kube-api-burst flags for Kubernetes client rate limiting

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2026-03-30 02:40:12 +05:30
Ivan Ka
13e58d52b0
fix(docs): flags (#6288)
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2026-03-17 20:25:40 +05:30
Oleksandr Simonov
18c451cf87
chore(digitalocean)!: remove in-tree provider (#6283) 2026-03-17 14:11:39 +05:30
Ivan Ka
8bea2e4127
chore(deps): bump pre-commit and fix markdown docs (#6241)
* deps(pre-commit): bump pre-commit

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown issues

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown issues

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown violations

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown violations

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown violations

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown violations

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* deps(pre-commit): bump pre-commit, fix linter markdown violations

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2026-03-17 02:07:39 +05:30
Charles Anderson
ca58d993af
feat(cloudflare): support batch API for DNS record changes (#6208)
* feat(cloudflare): add --batch-change-size and --batch-change-interval flags

Adds two new global CLI flags for controlling batch DNS change behaviour:
- --batch-change-size (default 200): maximum number of DNS operations per batch
- --batch-change-interval (default 1s): pause between consecutive batch chunks

Wires the flags through Config into the Cloudflare provider's DNSRecordsConfig.

* feat(cloudflare): implement batch DNS records API with automatic fallback

Uses Cloudflare's Batch DNS Records API to submit all creates, updates, and
deletes for a zone in a single transactional API call per chunk, significantly
reducing the total number of requests made against the Cloudflare API.

- Batch size and interval are controlled via --batch-change-size / --batch-change-interval
- Record types unsupported by the batch PUT endpoint (e.g. SRV, CAA) are
  submitted individually via the standard API
- If a batch chunk is rejected by Cloudflare, ExternalDNS automatically retries
  each record change in that chunk individually so no changes are silently lost
- Adds cloudflare_batch.go with the core batching logic and full test coverage

* feat(cloudflare): soft retry for 'unexpected EOF' (issue 3798)

* feat(cloudflare): soft retry for 'unexpected EOF' (issue 3798)

* feat(cloudflare): debug logs for intentional invididual-updates

* feat(cloudflare): improved code coverage

* feat(cloudflare): handle json.Encoder error in test helper
2026-03-12 22:21:36 +05:30
Ivan Ka
c35ed0b82a
feat(source): add unstructured source (#6172)
* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>

* feat(source): add unstructured source

Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* Update docs/sources/unstructured.md

Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add unstructured source

* feat(source): add unstructured source

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: vflaux <38909103+vflaux@users.noreply.github.com>
2026-03-12 05:23:33 +05:30
Vyacheslav Klimov
f4c758665b
feat(pdns): add --[no-]prefer-alias flag and alias annotation support (#6129)
* feat: add support for expand alias in pdns provider

* feat: codereview

* feat: rewrite docs

* feat: gofmt

* feat: rewrite using postprocessor

* feat: gofmt

* feat: update docs

* fix: prefer-alias respects existing annotations

* feat: update formatting verbs

* fix: fix return values and call sites after convertRRSetToEndpoints signature change

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove unused error return from convertRRSetToEndpoints

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 17:38:27 +05:30
Ivan Ka
d2fb11a3fc
chore(source)!: remove cloudfoundry support (#6074)
* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* chore(source): remove cloudfoundry support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2026-01-07 13:19:41 +05:30
Ivan Ka
72425c85cc
fix(domain-exclusion): domain exclusion filter fix (#6050)
* fix(domain-exclusion): domain exclusion filter fix

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* fix(domain-exclusion): domain exclusion filter fix

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* fix(domain-exclusion): domain exclusion filter fix

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2025-12-27 22:18:39 +05:30
vflaux
2e65603f6a
fix(flags): restore min-ttl flag (#6014) 2025-12-12 02:12:11 -08:00
Jan Jansen
8085ce246d
feat(coredns): use txt-owner-id to strictly separated external-dns instances (#5921)
* feat(coredns): use managed-by to separate records

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>

* feat(coredns): use txt-owner-id to strictly separated external-dns instances

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>

* fix tests

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>

* fix reviewer comments

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>

* answer review comments

* fix deletion behavior and remove extra function

* fix markdown

* fix tests again

---------

Signed-off-by: Jan Jansen <jan.jansen@gdata.de>
2025-12-02 00:48:25 -08:00
Aleksei Sviridkin
5a55b09f48
feat(annotations): add custom annotation prefix support for split horizon DNS (#5889)
* feat(annotations): add custom annotation prefix support for split horizon DNS

Add --annotation-prefix flag to allow customizing the annotation prefix
used by external-dns. This enables split horizon DNS scenarios where
multiple instances process different sets of annotations from the same
Kubernetes resources.

Changes:
- Add AnnotationPrefix field to Config with validation
- Convert annotation constants to variables that can be reconfigured
- Add SetAnnotationPrefix() function to rebuild annotation keys
- Integrate annotation prefix setting in controller startup
- Update Helm chart with annotationPrefix value
- Add comprehensive split horizon DNS documentation
- Update FAQ with annotation prefix examples

This maintains full backward compatibility - the default prefix remains
"external-dns.alpha.kubernetes.io/".

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(advanced): fix markdown formatting in split-horizon guide

Add blank lines before code blocks to improve markdown rendering
and comply with markdownlint rules.

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(advanced): fix markdown formatting in split-horizon guide

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(charts): regenerate Helm chart documentation

Co-Authored-By: Claude <noreply@anthropic.com>

* test: add AnnotationPrefix field to test configs

Add missing AnnotationPrefix field to minimalConfig and overriddenConfig
test configurations to match the new default value set in NewConfig().

Co-Authored-By: Claude <noreply@anthropic.com>

* test(charts): update error pattern in json-schema test

Update expected error message pattern to match current Helm validation
output format.

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor(annotations): remove init() for explicit initialization

- Remove init() function from annotations package
- Add explicit SetAnnotationPrefix() call in controller/execute.go
- Remove annotation key aliases from source/source.go
- Replace all alias usages with annotations.* references (348 changes in 28 files)
- Add TestMain to existing test files (service_test.go, cloudflare_test.go)

This change makes annotation initialization explicit and predictable,
avoiding hidden global state initialization at import time.

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: update changelog and mkdocs to include annotationPrefix and split horizon DNS

Signed-off-by: Aleksei Sviridkin <f@lex.la>

* docs(split-horizon): fix linting

Signed-off-by: Aleksei Sviridkin <f@lex.la>

* refactor(annotations): replace hardcoded annotation prefix with constant

Replace all hardcoded "external-dns.alpha.kubernetes.io/" strings
with annotations.DefaultAnnotationPrefix constant to establish
a single source of truth.

Changes:
- Add DefaultAnnotationPrefix constant in source/annotations/annotations.go
- Replace hardcoded string in controller/execute.go with constant reference
- Replace hardcoded strings in pkg/apis/externaldns/types.go (2 occurrences)
- Add helm unit tests for annotationPrefix value

This eliminates string duplication and makes future changes easier.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Signed-off-by: Aleksei Sviridkin <f@lex.la>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-08 03:56:52 -08:00
troll-os
41b1154cdd
feat: add new flags to allow migration of OwnerID (#4823)
* Reintroduce base config for txt owner migration

# Conflicts:
#	controller/execute.go
#	registry/txt.go

# Conflicts:
#	pkg/apis/externaldns/types.go

* Added label update logic and fixed existing tests

* Fixed existing declaration in tests, re introduced tests for new flag, regened flags.md from make

* Fixed tests logic and target expression evaluation, fixed update of label in the TXT registry process

* Set Old owner id var down the plan to calculate changes correctly

* Lint fixes

* (wip) Code cleaning and test coverage

* Simplified label overwriting on migration and implem tests for coverage

* Fix tests

* Update txt registry doc

* Fix rebase issues in txt test

* Update docs/registry/txt.md

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* Update docs/registry/txt.md

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* Update docs/registry/txt.md

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* Fix label overriding in TXT record generation when migration is enabled

* Make linter happy

* Regen flags, fix types tests after types updates

* Removed boolean flag that enabled migration, evaluate only against old owner flag instead

---------

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-09-29 01:20:19 -07:00
Tobias Harnickell
c2276d8b84
feat(cli): migrate kingpin to cobra - dual parity (#5836)
* feat(cli): add Cobra binder and backend switch

* add FlagBinder with Kingpin and Cobra implementations
* support --cli-backend and EXTERNAL_DNS_CLI (default: kingpin)
* add tests for binders and CLI switch

Refs: #5379

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

* feat(cli): centralize flag registration and add Cobra parity

Started moving CLI flag registration into a common binder function,
avoiding duplication between Kingpin and Cobra.

Refs: #5820

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

* feat(cli): enforce Cobra parity with Kingpin

* Add `regexpValue` and `RegexpVar` to Cobra binder with
  `setRegexpDefault`
* Enforce `--provider` presence and validate against `providerNames
* require at least one `--source` and validate against new
  `allowedSources`
* Expand tests for Kingpin and Cobra

Refs: #5379

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

* feat(cli): Commit go-lint edits

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

* feat(cli): add kingpin vs cobra binder parity

* Test parity assertion across binders
* Test Cobra-specific incapabilities (`--no-<flag>` and env vars)
* Deduplicate regexp flag handling

Refs: #5379

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

* feat(cli): Rebuild flags documentation

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>

---------

Signed-off-by: Tobias Harnickell <tobias.harnickell@bedag.ch>
2025-09-17 03:22:14 -07:00
Ivan Ka
7792e78eba
feat(source): add min-ttl support (#5641)
* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(source): add min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source): add min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(source/min-ttl): added min-ttl support

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(source): add min-ttl support

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-09-10 02:28:00 -07:00
Ivan Ka
e9983a5726
feat(events): raise k8s events with fake provider (#5659)
* feat(events): publish k8s events

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): publish k8s events

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): publish k8s events

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): publish k8s events

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): publish k8s events

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provide

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(events): raise k8s events with fake provider

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-08-20 00:37:07 -07:00
Ivan Ka
d8f31eb27e
fix(provider/aws-sd): fix namespace type filtering (#5682)
Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
2025-07-25 03:18:28 -07:00
Michel Loiseleur
8cc73bd1e4
feat(traefik)!: disable legacy listeners on traefik.containo.us API Group (#5565)
* feat(traefik)!: disable legacy listeners on traefik.containo.us API Group

* update docs accordingly

* update test accordingly

* type argument is infered

* fix rebase
2025-07-03 09:15:27 -07:00
Michel Loiseleur
2d898cd88d
feat(nodes)!: expose external ipv6 by default (#5575)
* feat(nodes)!: expose external ipv6 by default

* update proposal
2025-06-27 03:44:28 -07:00
Ivan Ka
5a321b6fb6
docs(traefik): public and private routing (#5559)
* docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

docs: added treafik public and private routing

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

docs(traefik): public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* docs(traefik): public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* docs(traefik): public and private routing

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* docs(traefik): public and private routing

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* docs(traefik): public and private routing

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-06-25 00:40:29 -07:00
Ivan Ka
9f16d835f1
feat(txt-registry): deprecate legacy txt-format (#5172)
* feat(txt-registry): only support single format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): only support single format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): only support single format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): only support single format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): only support single format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(txt-registry): deprecate legacy txt-format

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): address review comments

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

* feat(txt-registry): deprecate legacy txt-format

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

* feat(txt-registry): deprecate legacy txt-format

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-06-25 00:16:29 -07:00
vflaux
7108979df1
improve cloudflare regional hostname implementation (#5309)
- add flag to enable regional hostname feature
- support deletion of regional hostname on annotation edit
- correctly support differences detection with cloudflare state
- increased tests coverage

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-06-22 03:22:52 -07:00
vflaux
ef6e0e5e1e
feat(source): use EndpointSlices instead of Endpoints for Service (#5493)
* feat(source): use EndpointSlice for Service source

* feat(source): use indexer for EndpointSlice listing
2025-06-19 03:06:52 -07:00
Alen Zubic
28f9e9c06e
feat(source)!: introduce optional force-default-targets (#5316)
* BREAKING CHANGE: Improve default targets management

* fix: Remove old test case

* fix: Test confirming legacy mode allows empty CRD targets

* fix: Remove comments

* fix: Move flag definition closer to detault-targets

* fix: Initial merge adaptation

* fix: Improved legacy needs a chance to work with empty CRD list

* fix: Code coverage and dead code

* fix: Simpler Endpoints logic

* fix: Flag description

* feat: Add tutorial

* fix: Improve linting

* fix: Improve linting

* fix: Import linting
2025-06-17 23:48:51 -07:00
Ivan Ka
0d1108f5d7
chore(source/service): restructure code to make service type filters testable (#5485)
* chore(source/service): restructure code with filters are testable

* chore(source/service): restructure code with filters are testable

Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>

* chore(source/service): restructure code with filters are testable

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>

---------

Signed-off-by: ivan katliarchuk <ivan.katliarchuk@gmail.com>
Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com>
2025-06-01 12:00:13 -07:00
Kubernetes Prow Robot
ef7e1af8c7
Merge pull request #5463 from mloiseleur/chore/unmaintained-providers
chore!: remove unmaintained providers
2025-05-26 09:18:16 -07:00
Michel Loiseleur
a48b75b266 remove ultradns provider 2025-05-25 10:09:11 +02:00
Michel Loiseleur
640e593fcb remove tencentcloud provider 2025-05-25 10:04:19 +02:00
Michel Loiseleur
756a7288da chore!: remove unmaintained providers 2025-05-25 09:43:01 +02:00
Henry Arend
34e9aea2d5 feat(cloudflare): update docs with better language for none argument 2025-05-24 07:51:04 -04:00
Henry Arend
426ea7e1fd feat(cloudflare): update flags.md 2025-05-23 15:10:19 -04:00
Henry Arend
12e82b4085 feat(cloudflare): update docs 2025-05-23 15:01:00 -04:00
ivan katliarchuk
9a9661a4e5
chore(codebase): enable dupword linter 2025-05-20 23:55:20 +01:00
Kubernetes Prow Robot
cd0de612e9
Merge pull request #5409 from foyerunix/fix-pod-source-doc-discrepancy
fix(source/pod): discrepancy between the documentation and the actual behavior
2025-05-19 12:35:29 -07:00
tom
14ea50300e
feat(cloudflare): Suppport DNS record comments (#5411)
* feat(cloudflare): Suppport DNS record comments

* Provide comment flag example
2025-05-19 00:43:15 -07:00
Shruti Panapana
7b9d8d9355
fix(azure): enhance retry logic using azure SDK (#5361)
* fix(azure): Enhance retry logic using azure SDK

* Added the changes for flag based maxretries configuration

* Fixed types.go, flags.md and delected unneccesary comments

* Added the correct image for the Azure Private DNS tutorial

* Following the go naming convention for maxRetriesCount

* Added the correct flag information to the --azure-maxretries-count

* Made the required changes to accept the --azure-maxretries-count flag value from cli/env
2025-05-17 02:09:14 -07:00
foyerunix
4bd5f45d3c fix(pod source): align documentation with actual behavior 2025-05-16 07:32:45 +00:00
shapirus
15c07bc4e3 Document the default behavior of --[no-]combine-fqdn-annotation 2025-05-15 10:32:29 +03:00
Michel Loiseleur
3c93bcb076
chore(code): improve some tests + re-order sources flags CLI (#5288)
* fix(plan): always use managed records

* robust random port in test

* use defaultconfig for managed-record-types

* be explicit about static variable

* fix wait

* re-order flags related to sources + dynamic managedrecordtype help

* fix flag doc
2025-04-27 14:11:24 -07:00
Bas Janssen
7a2ba6dec6 Update flags doc in correct location 2025-04-24 16:19:28 +02:00
Bas Janssen
f6cd8b9bab RFC2136: Update flags documentation to be more clear about multiple zones. 2025-04-24 13:12:40 +02:00
Markus
c0a9eed521
feat(source): optional exclusion of unschedulable nodes (#5045)
* feat(source/node): Make exclusion of unschedulable Nodes configurable

This fixes a behavioral regression introduced in #4761, where
nodes that were previously added to DNS are removed when they are considered
unschedulable, for example due to automated maintenance tasks.

This change will introduce a new flag called `exclude-unschedulable`, which
defaults to `true` in order to keep in line with the current behavior.
However, it would also be reasonable to restore the initial behavior before

* Allow testing for expected log entries in testNodeSourceEndpoints

This commit adds the required logic to be able to test for
the existence (and absence) of certain log messages
in testNodeSourceEndpoints. As an example, this is implemented
for the tests around excludeUnschedulable.

A side effect of using LogsToBuffer is that tests can't run in
parallel due to the log buffer being shared across all
parallel test cases. As such, these specific tests are now executed
one after another.

* Ensure logging is only hooked for tests that require it

* Document new exclude-unschedulable flag for nodes source
2025-04-07 07:34:40 -07:00
tJouve
1efdf4161c
feat(pihole): add optional support for v6 (#5226)
* Pi hole V6 impl

* Code Review Part One

* Fix Go Lint

* Regenerate Flags file

* Increase code coverage 1/2

* Increase code coverage 2/2

* Fix merge conflict => Provider init move from main.go to execute.go
2025-04-02 09:10:43 -07:00
Kubernetes Prow Robot
a2f0f2eb5d
Merge pull request #5192 from hjoshi123/feat-expose-internal-ipv6
feat(source): optional expose of nodes internal ipv6
2025-03-26 15:26:44 -07:00
hjoshi123
1bf31daf4c
edited docs and made new test 2025-03-19 21:38:52 -06:00
Romain Beuque
ecd57c86f5
feat(ovh): major rewriting of the provider (#5143)
* feat: ovh: improve cache invalidation on errors + dry-run mode + relative CNAME handling + optimization

Signed-off-by: Romain Beuque <556072+rbeuque74@users.noreply.github.com>

* chore: add more tests

Signed-off-by: Romain Beuque <556072+rbeuque74@users.noreply.github.com>

* fix: align cache expiration with Default value

* chore: address comments from review + updated documentation

* chore: address comments from review

---------

Signed-off-by: Romain Beuque <556072+rbeuque74@users.noreply.github.com>
2025-03-17 07:53:49 -07:00
hjoshi123
1fbcb5749a
Merge branch 'master' of github.com:hjoshi123/external-dns into feat-expose-internal-ipv6 2025-03-17 08:39:12 -06:00
hjoshi123
87e3c4bc9c
feat: added expose internal ipv6 flag 2025-03-17 08:37:06 -06:00