Skip to content

Conversation

davidwin93
Copy link
Contributor

@davidwin93 davidwin93 commented Mar 31, 2025

Description

This PR updates routes are matched to their parent Gateway. This change prevents stale route statuses from being considered valid and ensures that the route's acceptance status is up-to-date with its current state.

Changes

  • Added logic to ensure that the Gateway is a valid parent in the routes spec
  • This lookup will return false is the Gateway is not defined in the routes spec as a parent.

Why

The previous implementation only checked for the presence of an accepted condition with a true status, but didn't verify if the condition was stale. This could lead to:

  • Routes being considered accepted even after significant changes
  • Potential misrouting of traffic based on outdated status
  • Inconsistent behavior with an old parent references still being used instead of the one defined in the routes spec.

Fixes #5095

Checklist

  • Unit tests updated
  • End user documentation updated

Copy link

linux-foundation-easycla bot commented Mar 31, 2025

CLA Signed

The committers listed above are authorized under a signed CLA.

@k8s-ci-robot k8s-ci-robot added the cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. label Mar 31, 2025
@k8s-ci-robot
Copy link
Contributor

Welcome @davidwin93!

It looks like this is your first PR to kubernetes-sigs/external-dns 🎉. Please refer to our pull request process documentation to help your PR have a smooth ride to approval.

You will be prompted by a bot to use commands during the review process. Do not be afraid to follow the prompts! It is okay to experiment. Here is the bot commands documentation.

You can also check if kubernetes-sigs/external-dns has its own contribution guidelines.

You may want to refer to our testing guide if you run into trouble with your tests not passing.

If you are having difficulty getting your pull request seen, please follow the recommended escalation practices. Also, for tips and tricks in the contribution process you may want to read the Kubernetes contributor cheat sheet. We want to make sure your contribution gets all the attention it needs!

Thank you, and welcome to Kubernetes. 😃

@k8s-ci-robot k8s-ci-robot added the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Mar 31, 2025
@k8s-ci-robot
Copy link
Contributor

Hi @davidwin93. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@k8s-ci-robot k8s-ci-robot added the size/M Denotes a PR that changes 30-99 lines, ignoring generated files. label Mar 31, 2025
@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. and removed cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. labels Mar 31, 2025
@mloiseleur
Copy link
Collaborator

/ok-to-test
/retitle fix(Gateway API): ensure generation match

@abursavich Do you think you can review this PR ?

@k8s-ci-robot k8s-ci-robot added the ok-to-test Indicates a non-member PR verified by an org member that is safe to test. label Mar 31, 2025
@k8s-ci-robot k8s-ci-robot changed the title Only consider accepted gateway routes if the condition generation matches the current one fix(Gateway API): ensure generation match Mar 31, 2025
@k8s-ci-robot k8s-ci-robot removed the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Mar 31, 2025
@travisghansen
Copy link

travisghansen commented Apr 4, 2025

Are all gateway api resources covered by this? ie: grpcroutes, udproutes, tcproutes, etc

@travisghansen
Copy link

travisghansen commented Apr 4, 2025

Also is it possible that race conditions could occur where the route has a new generation but the gateways have not reconciled/reacted yet and thereby updated the status? That seems potentially dangerous.

ie: maybe a gateway controller is temporarily down for maintenance or whatever

Maybe the logic should be:

  • only analyze parents that are in the current route spec.parentRefs (this ensures any statuses for no longer relevant gateways is ignored)
  • When checking conditions we find the most recent status update for the given parent (this ensures race conditions don’t overly aggressively remove DNS entries)

@davidwin93
Copy link
Contributor Author

Are all gateway api resources covered by this? ie: grpcroutes, udproutes, tcproutes, etc

Yes they should all be covered by this change.

Also is it possible that race conditions could occur where the route has a new generation but the gateways have not reconciled/reacted yet and thereby updated the status? That seems potentially dangerous.

That's a fair point. I'll review my change and try and setup a similar test case to validate.

@travisghansen
Copy link

only analyze parents that are in the current route spec.parentRefs (this ensures any statuses for no longer relevant gateways is ignored)
This is should already be happening here.

envoyproxy/gateway#5656

@travisghansen
Copy link

So same issue applies there, the controller may be down or simply doesn't remove the conditions when the gateway has been removed from the actual spec.parentRefs. I'm unclear what expected behavior on the part of the controllers is supposed to be:

  • Leave old conditions around after they are no longer associated
    OR
  • Delete old conditions when the 2 are no longer connected via spec.parentRefs

The former is what envoy-gateway is currently doing which your original code would resolve (but could lead to overly aggressive removal).

If gateways are expected to do the latter then we're being underly agressive removing the entry if the controller hasn't gotten around to removing the status entry.

That's why I suggested the steps above...

  1. Check the that spec.parentRefs (this ensures we're removing them when appropriate regardless of status)
  2. Only use the most recent status vs requiring an exact match on generation (this ensures we're safe from the race conditions and not overly aggressive on the removal front)

Just some crude suggestions without being overly familiar with all the intricacies, I certainly could be missing something.

@davidwin93
Copy link
Contributor Author

davidwin93 commented Apr 4, 2025

Digging more into this I think using the spec.parentRef as you mentioned as a filter on the route conditions list should work. There is a possible race condition when changing gateways where the record could be dropped before the new gateway accepts the route, but a user can work around this my listing both gateways as parentRefs in their spec.

I don't think that using transitionTime is beneficial and instead we should just depend on the route status being accepted.

Ill draft these changes this weekend. Thanks for the feedback on this.

@travisghansen
Copy link

Thank you for the PR! I am not sure I follow the risks etc entirely as you mentioned but probably easiest to just review code when in drops and go from there at this point. I am not proficient in go but can certainly read it well enough to understand the logic flow.

@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Apr 7, 2025
@davidwin93
Copy link
Contributor Author

/retest

@@ -316,7 +338,8 @@ func (c *gatewayRouteResolver) resolve(rt gatewayRoute) (map[string]endpoint.Tar
log.Debugf("Gateway %s/%s does not match %s %s/%s", namespace, ref.Name, c.src.gwName, meta.Namespace, meta.Name)
continue
}
// Confirm the Gateway has accepted the Route.

// Confirm the Gateway has accepted the Route, and that the generation matches.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably should revert this comment.

@travisghansen
Copy link

travisghansen commented Apr 7, 2025

I think the logic in this will work given 2 requirements:

  1. the status.parents never ends up with multiple entries for the same gateway (I would assume this supposed to be the case)
  2. the conditions only ever have 1 entry for the accepted condition type (less sure about this one)

I am essentially unclear if the conditions is meant to carry some historical record in there or if there should only ever be the ‘current’ entry of the given type.

@davidwin93
Copy link
Contributor Author

| the conditions only ever have 1 entry for the accepted condition type (less sure about this one)
Reading more about the architectural design behind Conditions it seems that it'll be up to each Controller. I do think there will only ever be a single Accepted type condition based on the earlier doc.

@davidwin93
Copy link
Contributor Author

/retest

@mloiseleur
Copy link
Collaborator

@davidwin93 If you rebase on top of #5268, the tests should go green.

@k8s-ci-robot k8s-ci-robot removed the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Apr 9, 2025
@davidwin93
Copy link
Contributor Author

@mloiseleur or @abursavich mind if I grab the lgtm label again? My rebase on master removed it.

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Apr 9, 2025
@mloiseleur
Copy link
Collaborator

/approve

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: abursavich, mloiseleur

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 9, 2025
@k8s-ci-robot k8s-ci-robot merged commit 66009e7 into kubernetes-sigs:master Apr 9, 2025
13 checks passed
JesusMtnez added a commit to JesusMtnez/homelab that referenced this pull request May 29, 2025
…o v0.17.0 (#712)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [registry.k8s.io/external-dns/external-dns](https://github.com/kubernetes-sigs/external-dns) | minor | `v0.16.1` -> `v0.17.0` |

---

### Release Notes

<details>
<summary>kubernetes-sigs/external-dns (registry.k8s.io/external-dns/external-dns)</summary>

### [`v0.17.0`](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.17.0)

[Compare Source](kubernetes-sigs/external-dns@v0.16.1...v0.17.0)

#### Global information

:information_source: On Pi Hole, support for v6 has been added. Pi Hole v5 support is deprecated and will be removed in a future version

:information_source: On OVH, the provider has been heavily rewritten. New ACLs are need. See documentation and PR [#&#8203;5143](kubernetes-sigs/external-dns#5143) for details.

:information_source: On IPv6, the [proposal 002](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/proposal/002-internal-ipv6-handling-rollback.md) has been implemented, thanks to [@&#8203;hjoshi123](https://github.com/hjoshi123)

-   ⚠️ In the next release, the default of this new `expose-internal-ipv6` flag will be set to false

⚠️ There is a severe known issue with Active Directory ([#&#8203;5240](kubernetes-sigs/external-dns#5240)) since v0.16.0. PR to fix it ([#&#8203;5385](kubernetes-sigs/external-dns#5385)) is in review

:information_source: The legacy txt-format will be removed in the next minor version ([#&#8203;5172](kubernetes-sigs/external-dns#5172))

-   ⚠️ There is currently no migration script to clean old style txt records. If you need it, if you think you can do it, PRs are welcome.

ℹ️ A new Nomad source may be added to external-dns ([#&#8203;5284](kubernetes-sigs/external-dns#5284))

-   This PR can be merged only after a review and test from real Nomad users

#### 🚀 Features

-   feat: additional template functions by [@&#8203;matkam](https://github.com/matkam) in [#&#8203;3949](kubernetes-sigs/external-dns#3949)
-   feat(banner): standardize user agent and output by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5154](kubernetes-sigs/external-dns#5154)
-   feat(chart): Update image to v0.16.1 by [@&#8203;stevehipwell](https://github.com/stevehipwell) in [#&#8203;5201](kubernetes-sigs/external-dns#5201)
-   feat(cloudflare): multiple custom hostnames support by [@&#8203;mrozentsvayg](https://github.com/mrozentsvayg) in [#&#8203;5239](kubernetes-sigs/external-dns#5239)
-   feat(helm): allow extraArgs to also be a map enabling overrides of individual values by [@&#8203;frittentheke](https://github.com/frittentheke) in [#&#8203;5293](kubernetes-sigs/external-dns#5293)
-   feat: IDNA awareness in the zone finder by [@&#8203;lexisother](https://github.com/lexisother) in [#&#8203;5147](kubernetes-sigs/external-dns#5147)
-   feat(ovh): major rewriting of the provider by [@&#8203;rbeuque74](https://github.com/rbeuque74) in [#&#8203;5143](kubernetes-sigs/external-dns#5143)
-   feat(pihole): add optional support for v6 by [@&#8203;tJouve](https://github.com/tJouve) in [#&#8203;5226](kubernetes-sigs/external-dns#5226)
-   feat(pihole): add support for IPv6 Dual format by [@&#8203;tJouve](https://github.com/tJouve) in [#&#8203;5253](kubernetes-sigs/external-dns#5253)
-   feat(source): optional exclusion of unschedulable nodes by [@&#8203;Hayajiro](https://github.com/Hayajiro) in [#&#8203;5045](kubernetes-sigs/external-dns#5045)
-   feat(source): optional expose of nodes internal ipv6 by [@&#8203;hjoshi123](https://github.com/hjoshi123) in [#&#8203;5192](kubernetes-sigs/external-dns#5192)

#### 🐛 Bug fixes

-   fix(aws): typo on route53 IAM by [@&#8203;tico24](https://github.com/tico24) in [#&#8203;5197](kubernetes-sigs/external-dns#5197)
-   fix(chart): add missing types for empty values by [@&#8203;t3mi](https://github.com/t3mi) in [#&#8203;5207](kubernetes-sigs/external-dns#5207)
-   fix(cloudflare): custom hostnames edge-cases causing duplicates by [@&#8203;mrozentsvayg](https://github.com/mrozentsvayg) in [#&#8203;5183](kubernetes-sigs/external-dns#5183)
-   fix(cloudflare): regional hostnames by [@&#8203;vflaux](https://github.com/vflaux) in [#&#8203;5175](kubernetes-sigs/external-dns#5175)
-   fix(Gateway API): ensure generation match by [@&#8203;davidwin93](https://github.com/davidwin93) in [#&#8203;5241](kubernetes-sigs/external-dns#5241)
-   fix(gateway-api): ensure to use only latest generation with HTTPRoutes by [@&#8203;kashalls](https://github.com/kashalls) in [#&#8203;5349](kubernetes-sigs/external-dns#5349)
-   fix(helm): added missing schema values by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5228](kubernetes-sigs/external-dns#5228)
-   fix(helm): update helm schema by [@&#8203;semnell](https://github.com/semnell) in [#&#8203;5297](kubernetes-sigs/external-dns#5297)
-   fix(log testing): re-use logger library testing functionality by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5368](kubernetes-sigs/external-dns#5368)
-   fix(node): logger test fixed by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5232](kubernetes-sigs/external-dns#5232)
-   fix(ovh): handling capitalized DNS records + prevent panic by [@&#8203;rbeuque74](https://github.com/rbeuque74) in [#&#8203;5390](kubernetes-sigs/external-dns#5390)
-   fix(webhook): api json object plan.Changes case by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5355](kubernetes-sigs/external-dns#5355)
-   fix(zonefinder): handle underscores in dns records by [@&#8203;arthlr](https://github.com/arthlr) in [#&#8203;5281](kubernetes-sigs/external-dns#5281)

#### 📝 Documentation

-   docs(contributing): add conventional commits by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5333](kubernetes-sigs/external-dns#5333)
-   docs(proposal): externaldns api graduation to beta by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5079](kubernetes-sigs/external-dns#5079)
-   docs(rfc2136): fix env variable in the guideline by [@&#8203;riupie](https://github.com/riupie) in [#&#8203;5352](kubernetes-sigs/external-dns#5352)
-   docs(tutorials): add IONOS Cloud  setup tutorial for ExternalDNS by [@&#8203;smilutinovic-ionos](https://github.com/smilutinovic-ionos) in [#&#8203;5364](kubernetes-sigs/external-dns#5364)
-   docs(typo): grcp → grpc by [@&#8203;octo](https://github.com/octo) in [#&#8203;5231](kubernetes-sigs/external-dns#5231)
-   docs: update link to Anexia webhook provider by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5244](kubernetes-sigs/external-dns#5244)
-   docs: update rfc2136 by [@&#8203;BasJ93](https://github.com/BasJ93) in [#&#8203;5325](kubernetes-sigs/external-dns#5325)

#### 📦 Others

-   Add Yandex Cloud Webhook by [@&#8203;ismailbaskin](https://github.com/ismailbaskin) in [#&#8203;5190](kubernetes-sigs/external-dns#5190)
-   chore: add se for nlb, alb in thailand region by [@&#8203;xshot9011](https://github.com/xshot9011) in [#&#8203;5200](kubernetes-sigs/external-dns#5200)
-   chore: fix typo on txtOwnerId comment/description by [@&#8203;lanandra](https://github.com/lanandra) in [#&#8203;5351](kubernetes-sigs/external-dns#5351)
-   chore(ci): fix random data race failure on source/node test by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5268](kubernetes-sigs/external-dns#5268)
-   chore(ci): improve release script by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5394](kubernetes-sigs/external-dns#5394)
-   chore(ci): update linter to v2.0.2 by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5246](kubernetes-sigs/external-dns#5246)
-   chore(code-cleanup): move logic away from main.go add tests by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5222](kubernetes-sigs/external-dns#5222)
-   chore(code): improve some tests + re-order sources flags CLI by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5288](kubernetes-sigs/external-dns#5288)
-   chore(code-quality): added lint checks by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5318](kubernetes-sigs/external-dns#5318)
-   chore(code-quality): providers linter warnings fixes by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5320](kubernetes-sigs/external-dns#5320)
-   chore(code-quality): refactoring and linter fixes by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5374](kubernetes-sigs/external-dns#5374)
-   chore(code-quality): webhook increase code coverage by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5337](kubernetes-sigs/external-dns#5337)
-   chore(crd): use conventional paths and update controller-gen to v0.17.2 by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5287](kubernetes-sigs/external-dns#5287)
-   chore(dependencies): update toools versions by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5252](kubernetes-sigs/external-dns#5252)
-   chore(deps): build with go 1.24.2 by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5306](kubernetes-sigs/external-dns#5306)
-   chore(deps): bump renovatebot/github-action from 41.0.14 to 41.0.16 in the dev-dependencies group by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5188](kubernetes-sigs/external-dns#5188)
-   chore(deps): bump renovatebot/github-action from 41.0.16 to 41.0.17 in the dev-dependencies group by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5210](kubernetes-sigs/external-dns#5210)
-   chore(deps): bump the dev-dependencies group across 1 directory with 14 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5346](kubernetes-sigs/external-dns#5346)
-   chore(deps): bump the dev-dependencies group across 1 directory with 14 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5382](kubernetes-sigs/external-dns#5382)
-   chore(deps): bump the dev-dependencies group across 1 directory with 17 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5238](kubernetes-sigs/external-dns#5238)
-   chore(deps): bump the dev-dependencies group across 1 directory with 19 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5262](kubernetes-sigs/external-dns#5262)
-   chore(deps): bump the dev-dependencies group across 1 directory with 20 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5211](kubernetes-sigs/external-dns#5211)
-   chore(deps): bump the dev-dependencies group across 1 directory with 21 updates by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5313](kubernetes-sigs/external-dns#5313)
-   chore(deps): bump the dev-dependencies group across 1 directory with 2 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5247](kubernetes-sigs/external-dns#5247)
-   chore(deps): bump the dev-dependencies group across 1 directory with 2 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5301](kubernetes-sigs/external-dns#5301)
-   chore(deps): bump the dev-dependencies group across 1 directory with 2 updates by [@&#8203;app/dependabot](https://github.com/app/dependabot) in [#&#8203;5323](kubernetes-sigs/external-dns#5323)
-   chore(deps): code cleanup, pkg/errors is archived by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5335](kubernetes-sigs/external-dns#5335)
-   chore(deps): switch to goccy yaml by [@&#8203;Raffo](https://github.com/Raffo) in [#&#8203;5292](kubernetes-sigs/external-dns#5292)
-   chore(deps): update linter to v2.1.x by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5366](kubernetes-sigs/external-dns#5366)
-   chore(fqdn-template): fqdn templating move to specific folder and update documentation by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5354](kubernetes-sigs/external-dns#5354)
-   chore(github): add a release template by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5324](kubernetes-sigs/external-dns#5324)
-   chore(helm): add validation for prefix and suffix and capture regression by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5250](kubernetes-sigs/external-dns#5250)
-   chore(openstack designate)!: remove in-tree provider by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5126](kubernetes-sigs/external-dns#5126)
-   chore(providers): rename custom TTL constants to defaultTTL by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5312](kubernetes-sigs/external-dns#5312)
-   chore: Release Helm chart v1.16.1 by [@&#8203;stevehipwell](https://github.com/stevehipwell) in [#&#8203;5270](kubernetes-sigs/external-dns#5270)
-   chore(release): updates kustomize & docs with v0.16.1 by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5184](kubernetes-sigs/external-dns#5184)
-   chore(source): code cleanup by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5304](kubernetes-sigs/external-dns#5304)
-   chore(webhook): bump cenkalti/backoff version by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5342](kubernetes-sigs/external-dns#5342)
-   test: add tests for cloudflare provider by [@&#8203;natitomattis](https://github.com/natitomattis) in [#&#8203;5248](kubernetes-sigs/external-dns#5248)
-   test(log): execute on multiple platforms by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5370](kubernetes-sigs/external-dns#5370)
-   test(log): fix random race detection by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5273](kubernetes-sigs/external-dns#5273)
-   test(source): cover unhappy paths by [@&#8203;linoleparquet](https://github.com/linoleparquet) in [#&#8203;5369](kubernetes-sigs/external-dns#5369)
-   test(source): fix data race on node_test by [@&#8203;mloiseleur](https://github.com/mloiseleur) in [#&#8203;5334](kubernetes-sigs/external-dns#5334)
-   test(source/pod): improve code coverage by [@&#8203;ivankatliarchuk](https://github.com/ivankatliarchuk) in [#&#8203;5378](kubernetes-sigs/external-dns#5378)
-   test(tlsconfig): add unit tests by [@&#8203;linoleparquet](https://github.com/linoleparquet) in [#&#8203;5381](kubernetes-sigs/external-dns#5381)
-   test(zone_filter): improve coverage from 66.7% to 100% by [@&#8203;upsaurav12](https://github.com/upsaurav12) in [#&#8203;5388](kubernetes-sigs/external-dns#5388)

#### 📦 Docker Image

    docker pull registry.k8s.io/external-dns/external-dns:v0.17.0

#### New Contributors

-   [@&#8203;ismailbaskin](https://github.com/ismailbaskin) made their first contribution in kubernetes-sigs/external-dns#5190
-   [@&#8203;lexisother](https://github.com/lexisother) made their first contribution in kubernetes-sigs/external-dns#5147
-   [@&#8203;tico24](https://github.com/tico24) made their first contribution in kubernetes-sigs/external-dns#5197
-   [@&#8203;t3mi](https://github.com/t3mi) made their first contribution in kubernetes-sigs/external-dns#5207
-   [@&#8203;octo](https://github.com/octo) made their first contribution in kubernetes-sigs/external-dns#5231
-   [@&#8203;xshot9011](https://github.com/xshot9011) made their first contribution in kubernetes-sigs/external-dns#5200
-   [@&#8203;tJouve](https://github.com/tJouve) made their first contribution in kubernetes-sigs/external-dns#5226
-   [@&#8203;Hayajiro](https://github.com/Hayajiro) made their first contribution in kubernetes-sigs/external-dns#5045
-   [@&#8203;davidwin93](https://github.com/davidwin93) made their first contribution in kubernetes-sigs/external-dns#5241
-   [@&#8203;vflaux](https://github.com/vflaux) made their first contribution in kubernetes-sigs/external-dns#5175
-   [@&#8203;arthlr](https://github.com/arthlr) made their first contribution in kubernetes-sigs/external-dns#5281
-   [@&#8203;semnell](https://github.com/semnell) made their first contribution in kubernetes-sigs/external-dns#5297
-   [@&#8203;BasJ93](https://github.com/BasJ93) made their first contribution in kubernetes-sigs/external-dns#5325
-   [@&#8203;natitomattis](https://github.com/natitomattis) made their first contribution in kubernetes-sigs/external-dns#5248
-   [@&#8203;riupie](https://github.com/riupie) made their first contribution in kubernetes-sigs/external-dns#5352
-   [@&#8203;lanandra](https://github.com/lanandra) made their first contribution in kubernetes-sigs/external-dns#5351
-   [@&#8203;smilutinovic-ionos](https://github.com/smilutinovic-ionos) made their first contribution in kubernetes-sigs/external-dns#5364
-   [@&#8203;linoleparquet](https://github.com/linoleparquet) made their first contribution in kubernetes-sigs/external-dns#5369
-   [@&#8203;kashalls](https://github.com/kashalls) made their first contribution in kubernetes-sigs/external-dns#5349
-   [@&#8203;matkam](https://github.com/matkam) made their first contribution in kubernetes-sigs/external-dns#3949
-   [@&#8203;upsaurav12](https://github.com/upsaurav12) made their first contribution in kubernetes-sigs/external-dns#5388

**Full Changelog**: kubernetes-sigs/external-dns@v0.16.1...v0.17.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS4xNSIsInVwZGF0ZWRJblZlciI6IjQwLjExLjE1IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXAvbWlub3IiXX0=-->

Co-authored-by: JesusMtnez <jesusmartinez93@gmail.com>
Reviewed-on: https://codeberg.org/JesusMtnez/homelab/pulls/712
Co-authored-by: JesusMtnez-bot <jesusmartinez93+bot@gmail.com>
Co-committed-by: JesusMtnez-bot <jesusmartinez93+bot@gmail.com>
@mrozentsvayg
Copy link
Contributor

For the reference - this PR also fixes #5348

By the way, it would be helpful to retitle and update the description.
After creation (and first commit) the logic switched from comparing generations to matching parentRef instead.
Which is great, but the title and PR info are no longer accurate and little confusing.

@mloiseleur mloiseleur changed the title fix(Gateway API): ensure generation match fix(Gateway API): ensure parentRef match Jun 3, 2025
@mloiseleur
Copy link
Collaborator

@mrozentsvayg That's right. I updated PR title. Feel free to suggest a better one if needed.
I'll let @davidwin93 update PR info.

@davidwin93
Copy link
Contributor Author

I've updated the PR description to match the changes that I made.

@travisghansen
Copy link

Did this land in a release yet?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

A record not updated correctly when changing gateway in gateway-httproute with Route 53
7 participants