Repository: kubernetes-sigs/cluster-api
Pull request #6039 (2022-02-01 19:50:19)

:bug: ClusterToInfrastructureMapFunc: Exclude externally managed infrastructures
The map func needs to check if the infrastructure is managed externally
and if so avoid creating a reconcile.Request.

There is already code for this in capa, but it is needed for all
providers:
https://github.com/kubernetes-sigs/cluster-api-provider-aws/blob/cf6fea721385d490b570b4cf119defea705b3320/controllers/awscluster_controller.go#L331-L377



<!-- please add a icon to the title of this PR (see https://sigs.k8s.io/cluster-api/VERSIONING.md), and delete this line and similar ones -->
<!-- the icon will be either ⚠️ (:warning:, major or breaking changes), ✨ (:sparkles:, feature additions), 🐛 (:bug:, patch and bugfixes), 📖 (:book:, documentation or proposals), or 🌱 (:seedling:, minor or other) -->

**What this PR does / why we need it**:

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #

/assign @CecileRobertMichon

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **enxebre** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @enxebre` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fcluster-api).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes-sigs/cluster-api/blob/main/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["enxebre"]} -->
k8s-ci-robot: @alvaroaleman: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488600628081987584) | true | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488600628081987584) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488600628115542016) | true | `/test pull-cluster-api-test-mink8s-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-apidiff-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488600628014878720) | false | `/test pull-cluster-api-apidiff-main`
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488600628081987584) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488600628115542016) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488600628048433152) | true | `/test pull-cluster-api-verify-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please ask for approval from **cecilerobertmichon** after the PR has been reviewed.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fcluster-api).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes-sigs/cluster-api/blob/main/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["cecilerobertmichon"]} -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488600627972935680) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488600628157485056) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488600628081987584) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488600628115542016) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488600628048433152) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-apidiff-main | b7219ef029133e74988282290627549d55f7d85e | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488603211844554752) | false | `/test pull-cluster-api-apidiff-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-informing-ipv6-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488600628245565440) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-informing-main | c997f845876fd34542acc32cb6d08efb224eff29 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488600628203622400) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-apidiff-main | f446b0b4f9a8eb5d2fd7864e718179dfd5f6356d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-apidiff-main/1488605535430250496) | false | `/test pull-cluster-api-apidiff-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
CecileRobertMichon: Right now this is a bug fix _and_ a breaking change which means we can't fix it until the next minor version of CAPI and since we just cut the RC it won't be part of the 1.1 release, which means it won't be released until 1.2 a few months from now. What do you think about fixing the bug without making it a breaking change (eg. adding a new function that wraps around the current one and just filters out externally managed clusters) so that providers can pick it up quickly (we could cherry-pick it to 1.1 as a bug fix - cc @vincepri @fabriziopandini) and then as a followup change the `ClusterToInfrastructureMapFunc` function in the main branch as you have it now as a breaking change for the next release?

This would still require providers to change their codebase to pick up the fix but allows them to get it more quickly and avoid duplicating the func like we're doing in https://github.com/kubernetes-sigs/cluster-api-provider-azure/pull/2023.
alvaroaleman: @CecileRobertMichon adding a new mapper with the changed signature to keep it backwards-compatible so it can be picked up sounds good to me, updated the PR to do that.
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-build-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488916722579673088) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-informing-ipv6-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488916723204624384) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-informing-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488916723162681344) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488921080784490496) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488916722697113600) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488921080784490496) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-informing-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488921080734158848) | false | `/test pull-cluster-api-e2e-informing-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-test-mink8s-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488916722730668032) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488921080784490496) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-informing-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488921080734158848) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488921080604135424) | true | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-e2e-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488916723112349696) | true | `/test pull-cluster-api-e2e-main`
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488921080784490496) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-informing-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488921080734158848) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488921080604135424) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488921080667049984) | true | `/test pull-cluster-api-test-mink8s-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @alvaroaleman: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-cluster-api-verify-main | 4e0e57b9f962ad0af32b5d93c669d3e2cb72e431 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-verify-main/1488916722676142080) | true | `/test pull-cluster-api-verify-main`
pull-cluster-api-build-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-build-main/1488921080490889216) | true | `/test pull-cluster-api-build-main`
pull-cluster-api-e2e-informing-ipv6-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-ipv6-main/1488921080784490496) | false | `/test pull-cluster-api-e2e-informing-ipv6-main`
pull-cluster-api-e2e-informing-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-informing-main/1488921080734158848) | false | `/test pull-cluster-api-e2e-informing-main`
pull-cluster-api-test-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-main/1488921080604135424) | true | `/test pull-cluster-api-test-main`
pull-cluster-api-test-mink8s-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-test-mink8s-main/1488921080667049984) | true | `/test pull-cluster-api-test-mink8s-main`
pull-cluster-api-e2e-main | 1e5017c11d22dd64dd13cc021b39b1236ad8670d | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/6039/pull-cluster-api-e2e-main/1488921080708993024) | true | `/test pull-cluster-api-e2e-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=6039). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Aalvaroaleman). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
CecileRobertMichon: lgtm besides a couple of lint errors

@fabriziopandini @vincepri any objections to cherry-picking this to release-1.1 once it merges? 

Patch:
diff --git a/bootstrap/kubeadm/config/manager/manager.yaml b/bootstrap/kubeadm/config/manager/manager.yaml
index b006f1b00..8f5805b24 100644
--- a/bootstrap/kubeadm/config/manager/manager.yaml
+++ b/bootstrap/kubeadm/config/manager/manager.yaml
@@ -41,5 +41,3 @@ spec:
       tolerations:
         - effect: NoSchedule
           key: node-role.kubernetes.io/master
-        - effect: NoSchedule
-          key: node-role.kubernetes.io/control-plane
diff --git a/cmd/clusterctl/client/config/cert_manager_client.go b/cmd/clusterctl/client/config/cert_manager_client.go
index 2271ca2ee..bb6eec995 100644
--- a/cmd/clusterctl/client/config/cert_manager_client.go
+++ b/cmd/clusterctl/client/config/cert_manager_client.go
@@ -32,7 +32,7 @@ const (
 	// CertManagerDefaultURL defines the default cert-manager repository url to be used by clusterctl.
 	// NOTE: At runtime /latest will be replaced with the CertManagerDefaultVersion or with the
 	// version defined by the user in the clusterctl configuration file.
-	CertManagerDefaultURL = "https://github.com/cert-manager/cert-manager/releases/latest/cert-manager.yaml"
+	CertManagerDefaultURL = "https://github.com/jetstack/cert-manager/releases/latest/cert-manager.yaml"
 
 	// CertManagerDefaultTimeout defines the default cert-manager timeout to be used by clusterctl.
 	CertManagerDefaultTimeout = 10 * time.Minute
diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml
index 9a928eca1..6e4d23e7a 100644
--- a/config/manager/manager.yaml
+++ b/config/manager/manager.yaml
@@ -42,5 +42,3 @@ spec:
       tolerations:
         - effect: NoSchedule
           key: node-role.kubernetes.io/master
-        - effect: NoSchedule
-          key: node-role.kubernetes.io/control-plane
diff --git a/controlplane/kubeadm/config/manager/manager.yaml b/controlplane/kubeadm/config/manager/manager.yaml
index baa32cd40..99b372b44 100644
--- a/controlplane/kubeadm/config/manager/manager.yaml
+++ b/controlplane/kubeadm/config/manager/manager.yaml
@@ -41,5 +41,3 @@ spec:
       tolerations:
         - effect: NoSchedule
           key: node-role.kubernetes.io/master
-        - effect: NoSchedule
-          key: node-role.kubernetes.io/control-plane
diff --git a/controlplane/kubeadm/internal/workload_cluster.go b/controlplane/kubeadm/internal/workload_cluster.go
index 6b18651cb..f386a8be1 100644
--- a/controlplane/kubeadm/internal/workload_cluster.go
+++ b/controlplane/kubeadm/internal/workload_cluster.go
@@ -36,7 +36,6 @@ import (
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-	"k8s.io/apimachinery/pkg/util/sets"
 	"k8s.io/client-go/util/retry"
 	ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/yaml"
@@ -52,14 +51,13 @@ import (
 )
 
 const (
-	kubeProxyKey                 = "kube-proxy"
-	kubeadmConfigKey             = "kubeadm-config"
-	kubeletConfigKey             = "kubelet"
-	cgroupDriverKey              = "cgroupDriver"
-	labelNodeRoleOldControlPlane = "node-role.kubernetes.io/master" // Deprecated: https://github.com/kubernetes/kubeadm/issues/2200
-	labelNodeRoleControlPlane    = "node-role.kubernetes.io/control-plane"
-	clusterStatusKey             = "ClusterStatus"
-	clusterConfigurationKey      = "ClusterConfiguration"
+	kubeProxyKey              = "kube-proxy"
+	kubeadmConfigKey          = "kubeadm-config"
+	kubeletConfigKey          = "kubelet"
+	cgroupDriverKey           = "cgroupDriver"
+	labelNodeRoleControlPlane = "node-role.kubernetes.io/master"
+	clusterStatusKey          = "ClusterStatus"
+	clusterConfigurationKey   = "ClusterConfiguration"
 )
 
 var (
@@ -123,31 +121,14 @@ type Workload struct {
 var _ WorkloadCluster = &Workload{}
 
 func (w *Workload) getControlPlaneNodes(ctx context.Context) (*corev1.NodeList, error) {
-	controlPlaneNodes := &corev1.NodeList{}
-	controlPlaneNodeNames := sets.NewString()
-
-	for _, label := range []string{labelNodeRoleOldControlPlane, labelNodeRoleControlPlane} {
-		nodes := &corev1.NodeList{}
-		if err := w.Client.List(ctx, nodes, ctrlclient.MatchingLabels(map[string]string{
-			label: "",
-		})); err != nil {
-			return nil, err
-		}
-
-		for i := range nodes.Items {
-			node := nodes.Items[i]
-
-			// Continue if we already added that node.
-			if controlPlaneNodeNames.Has(node.Name) {
-				continue
-			}
-
-			controlPlaneNodeNames.Insert(node.Name)
-			controlPlaneNodes.Items = append(controlPlaneNodes.Items, node)
-		}
+	nodes := &corev1.NodeList{}
+	labels := map[string]string{
+		labelNodeRoleControlPlane: "",
 	}
-
-	return controlPlaneNodes, nil
+	if err := w.Client.List(ctx, nodes, ctrlclient.MatchingLabels(labels)); err != nil {
+		return nil, err
+	}
+	return nodes, nil
 }
 
 func (w *Workload) getConfigMap(ctx context.Context, configMap ctrlclient.ObjectKey) (*corev1.ConfigMap, error) {
diff --git a/docs/book/src/reference/versions.md b/docs/book/src/reference/versions.md
index bb35d26bf..2b9699daf 100644
--- a/docs/book/src/reference/versions.md
+++ b/docs/book/src/reference/versions.md
@@ -77,29 +77,20 @@ The Kubeadm Bootstrap Provider generates kubeadm configuration using the API ver
 #### Kubeadm Control Plane Provider (`kubeadm-control-plane-controller`)
 
 |                            | CAPI v1alpha3 (v0.3) Management | CAPI v1alpha3 (v0.3) Workload | CAPI v1alpha4 (v0.4) Management | CAPI v1alpha4 (v0.4) Workload | CAPI v1beta1 (v1.x) Management | CAPI v1beta1 (v1.x) Workload |
-| -------------------------- | ------------------------------- |-------------------------------|---------------------------------|-------------------------------| ------------------------------- | ----------------------------- |
+| -------------------------- | ------------------------------- | ----------------------------- | ------------------------------- | ----------------------------- | ------------------------------- | ----------------------------- |
 | Kubernetes v1.16 + etcd/v3 | ✓                               | ✓                             |                                 |                               |                                 |                               |
 | Kubernetes v1.17 + etcd/v3 | ✓                               | ✓                             |                                 |                               |                                 |                               |
 | Kubernetes v1.18 + etcd/v3 | ✓                               | ✓                             |                                 | ✓                             |                                 | ✓                             |
 | Kubernetes v1.19 + etcd/v3 | ✓                               | ✓                             | ✓                               | ✓                             | ✓                               | ✓                             |
 | Kubernetes v1.20 + etcd/v3 | ✓                               | ✓                             | ✓                               | ✓                             | ✓                               | ✓                             |
 | Kubernetes v1.21 + etcd/v3 | ✓                               | ✓                             | ✓                               | ✓                             | ✓                               | ✓                             |
-| Kubernetes v1.22 + etcd/v3 |                                 | ✓*                            | ✓                               | ✓                             | ✓                               | ✓                             |
-| Kubernetes v1.23 + etcd/v3 |                                 |                               | ✓*                              | ✓*                            | ✓                               | ✓                             |
+| Kubernetes v1.22 + etcd/v3 |                                 | ✓                             | ✓                               | ✓                             | ✓                               | ✓                             |
+| Kubernetes v1.23 + etcd/v3 |                                 |                               | ✓                               | ✓                             | ✓                               | ✓                             |
 
 The Kubeadm Control Plane Provider talks to the API server and etcd members of every Workload Cluster whose control plane it owns. It uses the etcd v3 API.
 
 The Kubeadm Control Plane requires the Kubeadm Bootstrap Provider.
 
-\*  Newer versions of CoreDNS may not be compatible as an upgrade target for clusters managed with Cluster API. Kubernetes versions marked on the table are supported as an upgrade target only if CoreDNS is not upgraded to the latest version supported by the respective Kubernetes version. The versions supported are represented in the below table.
-
-| CAPI Version    | Max CoreDNS Version for Upgrade |
-|-----------------|---------------------------------|
-| v0.3 (v1alpha3) | v1.8.4                          |
-| v0.4 (v1alpha4) | v1.8.4                          |
-| v1.0 (v1beta1)  | v1.8.5                          | 
-| v1.1 (v1beta1)  | v1.8.6                          |
-
 #### clusterctl
 
 It is strongly recommended to always use the latest version of [clusterctl](../clusterctl/overview.md), in order to
diff --git a/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md b/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md
index 50a0812c3..7772931a7 100644
--- a/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md
+++ b/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md
@@ -484,47 +484,22 @@ metadata:
   name: docker-clusterclass-v0.1.0
 spec:
   ...
-  jsonPatches:
-  - op: add
-    path: /spec/template/spec/httpProxy/url
-    valueFrom:
-      # Use the url field of the httpProxy variable.
-      variable: httpProxy.url
-  - op: add
-    path: /spec/template/spec/dnsServers
-    valueFrom:
-      # Use the entire dnsServers array.
-      variable: dnsServers
-  - op: add
-    path: /spec/template/spec/dnsServer
-    valueFrom:
-      # Use the first item of the dnsServers array.
-      variable: dnsServers[0]
-```
-
-**Tips & Tricks**
-
-Complex variables can be used to make references in templates configurable, e.g. the `identityRef` used in `AzureCluster`.
-Of course it's also possible to only make the name of the reference configurable, including restricting the valid values 
-to a pre-defined enum.
-
-```yaml
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: ClusterClass
-metadata:
-  name: azure-clusterclass-v0.1.0
-spec:
-  ...
-  variables:
-  - name: clusterIdentityRef
-    schema:
-      openAPIV3Schema:
-        type: object
-        properties:
-          kind:
-            type: string
-          name:
-            type: string
+      jsonPatches:
+      - op: add
+        path: /spec/template/spec/httpProxy/url
+        valueFrom:
+          # Use the url field of the httpProxy variable.
+          variable: httpProxy.url
+      - op: add
+        path: /spec/template/spec/dnsServers
+        valueFrom:
+          # Use the entire dnsServers array.
+          variable: dnsServers
+      - op: add
+        path: /spec/template/spec/dnsServer
+        valueFrom:
+          # Use the first item of the dnsServers array.
+          variable: dnsServers[0]
 ```
 
 ### Using variable values in JSON patches
diff --git a/docs/book/src/user/troubleshooting.md b/docs/book/src/user/troubleshooting.md
index 73a9a32c5..69f9e0013 100644
--- a/docs/book/src/user/troubleshooting.md
+++ b/docs/book/src/user/troubleshooting.md
@@ -35,10 +35,7 @@ kubectl label nodes <name> node-role.kubernetes.io/worker=""
 For convenience, here is an example one-liner to do this post installation
 
 ```
-# Kubernetes 1.19 (kubeadm 1.19 sets only the node-role.kubernetes.io/master label)
 kubectl get nodes --no-headers -l '!node-role.kubernetes.io/master' -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}' | xargs -I{} kubectl label node {} node-role.kubernetes.io/worker=''
-# Kubernetes >= 1.20 (kubeadm >= 1.20 sets the node-role.kubernetes.io/control-plane label) 
-kubectl get nodes --no-headers -l '!node-role.kubernetes.io/control-plane' -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}' | xargs -I{} kubectl label node {} node-role.kubernetes.io/worker=''
 ```                  
 
 ## Cluster API with Docker
@@ -76,28 +73,3 @@ exit
 ```
 
 Note: This error was observed in Docker 4.3. An alternative solution is to stick with an older version of Docker Desktop while this issue is being resolved. [An issue is currently open on the Docker Desktop repository.](https://github.com/docker/for-mac/issues/6071)
-
-## Failed clusterctl init - 'failed to get cert-manager object'
-
-When using older versions of Cluster API 0.4 and 1.0 releases - 0.4.6, 1.0.3 and older respectively - Cert Manager may not be downloadable due to a change in the repository location. This will cause `clusterctl init` to fail with the error:
-
-```bash
-$ cluster-api % clusterctl init --infrastructure docker
-
-Fetching providers
-Installing cert-manager Version="v1.5.3"
-Error: action failed after 10 attempts: failed to get cert-manager object /, Kind=, /: Object 'Kind' is missing in 'unstructured object has no kind'
-```
-
-This error was fixed in more recent Cluster API releases on the 0.4 and 1.0 release branches. The simplest way to resolve the issue is to upgrade to a newer version of Cluster API for a given release. For who need to continue using an older release it is possible to override the repository used by `clusterctl init` in the clusterctl config file. The default location of this file is in `~/.cluster-api/clusterctl.yaml`.
-
-To do so add the following to the file:
-```yaml
-cert-manager:
-  url: "https://github.com/cert-manager/cert-manager/releases/latest/cert-manager.yaml"
-```
-
-Alternatively a Cert Manager yaml file can be placed in the [clusterctl overrides layer](../clusterctl/configuration.md#overrides-layer) which is by default in `$HOME/.cluster-api/overrides`. A Cert Manager yaml file can be placed at `$(HOME)/.cluster-api/overrides/cert-manager/v1.5.3/cert-manager.yaml`
-
-More information on the clusterctl config file can be found at [its page in the book](../clusterctl/configuration.md#clusterctl-configuration-file)
-
diff --git a/util/util.go b/util/util.go
index 988e2548d..2628f936c 100644
--- a/util/util.go
+++ b/util/util.go
@@ -37,6 +37,7 @@ import (
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	"k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/runtime/schema"
+	"k8s.io/apimachinery/pkg/types"
 	k8sversion "k8s.io/apimachinery/pkg/version"
 	ctrl "sigs.k8s.io/controller-runtime"
 	"sigs.k8s.io/controller-runtime/pkg/client"
@@ -45,6 +46,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/reconcile"
 
 	clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
+	"sigs.k8s.io/cluster-api/util/annotations"
 )
 
 const (
@@ -222,6 +224,36 @@ func ClusterToInfrastructureMapFunc(gvk schema.GroupVersionKind) handler.MapFunc
 	}
 }
 
+// ClusterToInfrastructureMapFuncWithExternallyManagedCheck is like ClusterToInfrastructureMapFunc but will exclude externally managed infrastructures from the mapping.
+// We will update  ClusterToInfrastructureMapFunc to include this check in an upcoming release but defer that for now as adjusting the signature is a breaking change.
+func ClusterToInfrastructureMapFuncWithExternallyManagedCheck(ctx context.Context, gvk schema.GroupVersionKind, c client.Client, providerCluster client.Object) handler.MapFunc {
+	baseMapper := ClusterToInfrastructureMapFunc(gvk)
+	log := ctrl.LoggerFrom(ctx)
+	return func(o client.Object) []reconcile.Request {
+		var result []reconcile.Request
+		for _, request := range baseMapper(o) {
+			providerCluster := providerCluster.DeepCopyObject().(client.Object)
+			key := types.NamespacedName{Namespace: request.Namespace, Name: request.Name}
+
+			if err := c.Get(ctx, key, providerCluster); err != nil {
+				log.V(4).Error(err, fmt.Sprintf("Failed to get %T", providerCluster))
+				fmt.Printf("failed to get %s: %v\n", key, err)
+				continue
+			}
+
+			if annotations.IsExternallyManaged(providerCluster) {
+				log.V(4).Info(fmt.Sprintf("%T is externally managed, skipping mapping", providerCluster))
+				fmt.Printf("%T is externally managed\n", providerCluster)
+				continue
+			}
+
+			result = append(result, request)
+		}
+
+		return result
+	}
+}
+
 // GetOwnerMachine returns the Machine object owning the current resource.
 func GetOwnerMachine(ctx context.Context, c client.Client, obj metav1.ObjectMeta) (*clusterv1.Machine, error) {
 	for _, ref := range obj.OwnerReferences {


Test patch:
diff --git a/controlplane/kubeadm/internal/controllers/controller_test.go b/controlplane/kubeadm/internal/controllers/controller_test.go
index 011fef277..4a29c10a1 100644
--- a/controlplane/kubeadm/internal/controllers/controller_test.go
+++ b/controlplane/kubeadm/internal/controllers/controller_test.go
@@ -1516,7 +1516,7 @@ func createMachineNodePair(name string, cluster *clusterv1.Cluster, kcp *control
 	node := &corev1.Node{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:   name,
-			Labels: map[string]string{"node-role.kubernetes.io/control-plane": ""},
+			Labels: map[string]string{"node-role.kubernetes.io/master": ""},
 		},
 	}
 
diff --git a/controlplane/kubeadm/internal/workload_cluster_conditions_test.go b/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
index 5f44f7e13..2b44f0d90 100644
--- a/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
+++ b/controlplane/kubeadm/internal/workload_cluster_conditions_test.go
@@ -980,9 +980,6 @@ func fakeNode(name string, options ...fakeNodeOption) *corev1.Node {
 	p := &corev1.Node{
 		ObjectMeta: metav1.ObjectMeta{
 			Name: name,
-			Labels: map[string]string{
-				labelNodeRoleControlPlane: "",
-			},
 		},
 	}
 	for _, opt := range options {
diff --git a/controlplane/kubeadm/internal/workload_cluster_test.go b/controlplane/kubeadm/internal/workload_cluster_test.go
index 704e91096..d1035302e 100644
--- a/controlplane/kubeadm/internal/workload_cluster_test.go
+++ b/controlplane/kubeadm/internal/workload_cluster_test.go
@@ -38,78 +38,6 @@ import (
 	"sigs.k8s.io/cluster-api/util/yaml"
 )
 
-func TestGetControlPlaneNodes(t *testing.T) {
-	tests := []struct {
-		name          string
-		nodes         []corev1.Node
-		expectedNodes []string
-	}{
-		{
-			name: "Return control plane nodes",
-			nodes: []corev1.Node{
-				{
-					ObjectMeta: metav1.ObjectMeta{
-						Name: "control-plane-node-with-old-label",
-						Labels: map[string]string{
-							labelNodeRoleOldControlPlane: "",
-						},
-					},
-				},
-				{
-					ObjectMeta: metav1.ObjectMeta{
-						Name: "control-plane-node-with-both-labels",
-						Labels: map[string]string{
-							labelNodeRoleOldControlPlane: "",
-							labelNodeRoleControlPlane:    "",
-						},
-					},
-				},
-				{
-					ObjectMeta: metav1.ObjectMeta{
-						Name: "control-plane-node-with-new-label",
-						Labels: map[string]string{
-							labelNodeRoleControlPlane: "",
-						},
-					},
-				},
-				{
-					ObjectMeta: metav1.ObjectMeta{
-						Name:   "worker-node",
-						Labels: map[string]string{},
-					},
-				},
-			},
-			expectedNodes: []string{
-				"control-plane-node-with-both-labels",
-				"control-plane-node-with-old-label",
-				"control-plane-node-with-new-label",
-			},
-		},
-	}
-
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			g := NewWithT(t)
-			objs := []client.Object{}
-			for i := range tt.nodes {
-				objs = append(objs, &tt.nodes[i])
-			}
-			fakeClient := fake.NewClientBuilder().WithObjects(objs...).Build()
-
-			w := &Workload{
-				Client: fakeClient,
-			}
-			nodes, err := w.getControlPlaneNodes(ctx)
-			g.Expect(err).ToNot(HaveOccurred())
-			var actualNodes []string
-			for _, n := range nodes.Items {
-				actualNodes = append(actualNodes, n.Name)
-			}
-			g.Expect(actualNodes).To(Equal(tt.expectedNodes))
-		})
-	}
-}
-
 func TestUpdateKubeProxyImageInfo(t *testing.T) {
 	tests := []struct {
 		name        string
diff --git a/test/framework/deployment_helpers.go b/test/framework/deployment_helpers.go
index 405a6d57e..704d3c0e0 100644
--- a/test/framework/deployment_helpers.go
+++ b/test/framework/deployment_helpers.go
@@ -34,7 +34,6 @@ import (
 	"k8s.io/api/policy/v1beta1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/intstr"
-	utilversion "k8s.io/apimachinery/pkg/util/version"
 	"k8s.io/client-go/kubernetes"
 	"k8s.io/utils/pointer"
 	"sigs.k8s.io/controller-runtime/pkg/client"
@@ -43,11 +42,6 @@ import (
 	"sigs.k8s.io/cluster-api/test/framework/internal/log"
 )
 
-const (
-	nodeRoleOldControlPlane = "node-role.kubernetes.io/master" // Deprecated: https://github.com/kubernetes/kubeadm/issues/2200
-	nodeRoleControlPlane    = "node-role.kubernetes.io/control-plane"
-)
-
 // WaitForDeploymentsAvailableInput is the input for WaitForDeploymentsAvailable.
 type WaitForDeploymentsAvailableInput struct {
 	Getter     Getter
@@ -312,23 +306,10 @@ func DeployUnevictablePod(ctx context.Context, input DeployUnevictablePodInput)
 		},
 	}
 	if input.ControlPlane != nil {
-		serverVersion, err := workloadClient.ServerVersion()
-		Expect(err).ToNot(HaveOccurred())
-
-		// Use the control-plane label for Kubernetes version >= v1.20.0.
-		if utilversion.MustParseGeneric(serverVersion.String()).AtLeast(utilversion.MustParseGeneric("v1.20.0")) {
-			workloadDeployment.Spec.Template.Spec.NodeSelector = map[string]string{nodeRoleControlPlane: ""}
-		} else {
-			workloadDeployment.Spec.Template.Spec.NodeSelector = map[string]string{nodeRoleOldControlPlane: ""}
-		}
-
+		workloadDeployment.Spec.Template.Spec.NodeSelector = map[string]string{"node-role.kubernetes.io/master": ""}
 		workloadDeployment.Spec.Template.Spec.Tolerations = []corev1.Toleration{
 			{
-				Key:    nodeRoleOldControlPlane,
-				Effect: "NoSchedule",
-			},
-			{
-				Key:    nodeRoleControlPlane,
+				Key:    "node-role.kubernetes.io/master",
 				Effect: "NoSchedule",
 			},
 		}
diff --git a/test/infrastructure/docker/config/manager/manager.yaml b/test/infrastructure/docker/config/manager/manager.yaml
index fa2488f99..4454c9004 100644
--- a/test/infrastructure/docker/config/manager/manager.yaml
+++ b/test/infrastructure/docker/config/manager/manager.yaml
@@ -44,8 +44,6 @@ spec:
       tolerations:
       - effect: NoSchedule
         key: node-role.kubernetes.io/master
-      - effect: NoSchedule
-        key: node-role.kubernetes.io/control-plane
       volumes:
         - name: dockersock
           hostPath:
diff --git a/test/infrastructure/docker/internal/controllers/dockercluster_controller.go b/test/infrastructure/docker/internal/controllers/dockercluster_controller.go
index c6d8fac95..025707fd9 100644
--- a/test/infrastructure/docker/internal/controllers/dockercluster_controller.go
+++ b/test/infrastructure/docker/internal/controllers/dockercluster_controller.go
@@ -200,7 +200,7 @@ func (r *DockerClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl
 	}
 	return c.Watch(
 		&source.Kind{Type: &clusterv1.Cluster{}},
-		handler.EnqueueRequestsFromMapFunc(util.ClusterToInfrastructureMapFunc(infrav1.GroupVersion.WithKind("DockerCluster"))),
+		handler.EnqueueRequestsFromMapFunc(util.ClusterToInfrastructureMapFuncWithExternallyManagedCheck(ctx, infrav1.GroupVersion.WithKind("DockerCluster"), mgr.GetClient(), &infrav1.DockerCluster{})),
 		predicates.ClusterUnpaused(ctrl.LoggerFrom(ctx)),
 	)
 }
diff --git a/util/util_test.go b/util/util_test.go
index f2c9d2b87..f7cb2e640 100644
--- a/util/util_test.go
+++ b/util/util_test.go
@@ -17,6 +17,7 @@ limitations under the License.
 package util
 
 import (
+	"context"
 	"fmt"
 	"testing"
 
@@ -109,13 +110,12 @@ func TestMachineToInfrastructureMapFunc(t *testing.T) {
 }
 
 func TestClusterToInfrastructureMapFunc(t *testing.T) {
-	g := NewWithT(t)
-
 	var testcases = []struct {
-		name    string
-		input   schema.GroupVersionKind
-		request client.Object
-		output  []reconcile.Request
+		name           string
+		input          schema.GroupVersionKind
+		request        *clusterv1.Cluster
+		infrastructure client.Object
+		output         []reconcile.Request
 	}{
 		{
 			name: "should reconcile infra-1",
@@ -137,6 +137,14 @@ func TestClusterToInfrastructureMapFunc(t *testing.T) {
 					},
 				},
 			},
+			infrastructure: &unstructured.Unstructured{Object: map[string]interface{}{
+				"apiVersion": "foo.cluster.x-k8s.io/v1beta1",
+				"kind":       "TestCluster",
+				"metadata": map[string]interface{}{
+					"namespace": metav1.NamespaceDefault,
+					"name":      "infra-1",
+				},
+			}},
 			output: []reconcile.Request{
 				{
 					NamespacedName: client.ObjectKey{
@@ -168,11 +176,55 @@ func TestClusterToInfrastructureMapFunc(t *testing.T) {
 			},
 			output: nil,
 		},
+		{
+			name: "Externally managed provider cluster is excluded",
+			input: schema.GroupVersionKind{
+				Group:   "foo.cluster.x-k8s.io",
+				Version: "v1alpha4",
+				Kind:    "TestCluster",
+			},
+			request: &clusterv1.Cluster{
+				ObjectMeta: metav1.ObjectMeta{
+					Namespace: metav1.NamespaceDefault,
+					Name:      "test-1",
+				},
+				Spec: clusterv1.ClusterSpec{
+					InfrastructureRef: &corev1.ObjectReference{
+						APIVersion: "foo.cluster.x-k8s.io/v1beta1",
+						Kind:       "TestCluster",
+						Name:       "infra-1",
+					},
+				},
+			},
+			infrastructure: &unstructured.Unstructured{Object: map[string]interface{}{
+				"apiVersion": "foo.cluster.x-k8s.io/v1beta1",
+				"kind":       "TestCluster",
+				"metadata": map[string]interface{}{
+					"namespace": metav1.NamespaceDefault,
+					"name":      "infra-1",
+					"annotations": map[string]interface{}{
+						clusterv1.ManagedByAnnotation: "",
+					},
+				},
+			}},
+		},
 	}
 
 	for _, tc := range testcases {
 		t.Run(tc.name, func(t *testing.T) {
-			fn := ClusterToInfrastructureMapFunc(tc.input)
+			g := NewWithT(t)
+			clientBuilder := fake.NewClientBuilder()
+			if tc.infrastructure != nil {
+				clientBuilder.WithObjects(tc.infrastructure)
+			}
+
+			// Unstructured simplifies testing but should not be used in real usage, because it will
+			// likely result in a duplicate cache in an unstructured projection.
+			referenceObject := &unstructured.Unstructured{}
+			referenceObject.SetAPIVersion(tc.request.Spec.InfrastructureRef.APIVersion)
+			referenceObject.SetKind(tc.request.Spec.InfrastructureRef.Kind)
+
+			fn := ClusterToInfrastructureMapFuncWithExternallyManagedCheck(context.Background(), tc.input, clientBuilder.Build(), referenceObject)
 			out := fn(tc.request)
 			g.Expect(out).To(Equal(tc.output))
 		})