Repository: kubernetes-sigs/cloud-provider-azure
Pull request #3877 (2023-05-12 07:25:03)

fix: the pip without tags should be user-assigned
<!--  Thanks for sending a pull request!  Here are some tips for you:

1. If this is your first time, please read our contributor guidelines: https://git.k8s.io/community/contributors/guide/first-contribution.md#your-first-contribution and developer guide https://git.k8s.io/community/contributors/devel/development.md#development-guide
2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. For reference on required PR/issue labels, read here:
https://git.k8s.io/community/contributors/devel/sig-release/release.md#issuepr-kind-label
3. Ensure you have added or ran the appropriate tests for your PR: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md
4. If you want *faster* PR reviews, read how: https://git.k8s.io/community/contributors/guide/pull-requests.md#best-practices-for-faster-reviews
5. If the PR is unfinished, see how to mark it: https://git.k8s.io/community/contributors/guide/pull-requests.md#marking-unfinished-pull-requests
-->

#### What type of PR is this?

<!--
Add one of the following kinds:
/kind bug
/kind cleanup
/kind documentation
/kind feature
/kind design

Optionally add one or more of the following kinds if applicable:
/kind api-change
/kind deprecation
/kind failing-test
/kind flake
/kind regression
-->

/kind bug

#### What this PR does / why we need it:

1. PIPs without tags should be treated as user-assigned resources. We should not tag user-assigned pip without tags.
2. When the svc changes its IP from one to another, the cached pip can be outdated. Need to refresh the cache when necessary.
3. We should not tag user-assigned pip for DNS labels.

#### Which issue(s) this PR fixes:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
-->
Fixes #

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?
<!--
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".

For more information on release notes see: https://git.k8s.io/community/contributors/guide/release-notes.md
-->
```release-note
fix: the pip without tags should be user-assigned
fix: refresh the pip cache when necessary
fix: do not tag user-assigned pip with `kubernetes-dns-label-service: <svcName>`
```

#### Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.:

<!--
This section can be blank if this pull request does not require a release note.

When adding links which point to resources within git repositories, like
KEPs or supporting documentation, please reference a specific commit and avoid
linking directly to the master branch. This ensures that links reference a
specific point in time, rather than a document that may change over time.

See here for guidance on getting permanent links to files: https://help.github.com/en/articles/getting-permanent-links-to-files

Please use the following format for linking documentation:
- [KEP]: <link>
- [Usage]: <link>
- [Other doc]: <link>
-->
```docs

```


k8s-ci-robot: Adding the "do-not-merge/release-note-label-needed" label because no release-note block was detected, please follow our [release note process](https://git.k8s.io/community/contributors/guide/release-notes.md) to remove it.

<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.
</details>
netlify[bot]: ### <span aria-hidden="true">👷</span> Deploy Preview for *kubernetes-sigs-cloud-provide-azure* processing.


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | 17ddfd611ada41038fb9255324e3855ca752fb90 |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/kubernetes-sigs-cloud-provide-azure/deploys/645de9d2d630ab0007c5a55d |
k8s-ci-robot: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 875d48560d77aa07af589726e063ab4cbe0d5c27 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656926873382293504) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 875d48560d77aa07af589726e063ab4cbe0d5c27 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656926873382293504) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-capz | 875d48560d77aa07af589726e063ab4cbe0d5c27 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-capz/1656926873189355520) | true | `/test pull-cloud-provider-azure-e2e-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 875d48560d77aa07af589726e063ab4cbe0d5c27 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656926873382293504) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-capz | 875d48560d77aa07af589726e063ab4cbe0d5c27 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-capz/1656926873189355520) | true | `/test pull-cloud-provider-azure-e2e-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656935819056779264) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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 -->
lzhecheng: /retest
k8s-ci-robot: @nilo19: 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-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656935819056779264) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656935819128082432) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656935819128082432) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656944092690518016) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1656935819128082432) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656944092690518016) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1656944092560494592) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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 -->
nilo19: /retest
k8s-ci-robot: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656944092690518016) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1656944092560494592) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657189282101596160) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1656944092690518016) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657189282101596160) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657189281992544256) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1656935818880618496) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657189282101596160) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657189281992544256) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657189282042875904) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657189282101596160) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657189281992544256) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657189282042875904) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657189281938018304) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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 -->
nilo19: /retest
k8s-ci-robot: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657189281992544256) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657189282042875904) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657189281938018304) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657723882108358656) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657189282042875904) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657189281938018304) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657723882108358656) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657189282042875904) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657723882108358656) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1657723882108358656) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657723882049638400) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657723882049638400) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-unit | 59c8691c6efd1aed7d569afe66b990f7f278f860 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-unit/1658305468235255808) | true | `/test pull-cloud-provider-azure-unit`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657723882049638400) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-unit | 59c8691c6efd1aed7d569afe66b990f7f278f860 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-unit/1658305468235255808) | true | `/test pull-cloud-provider-azure-unit`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 59c8691c6efd1aed7d569afe66b990f7f278f860 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1658305464057729024) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmssflex-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1657723881995112448) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657723882049638400) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1658340531941412864) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1657723881936392192) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 460214b64cb088fb12b3a1b9f9151f953c2c9d30 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1657723882049638400) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1658340531941412864) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1658340531748474880) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1658340531941412864) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1658340531748474880) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1658340531668783104) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1658340531865915392) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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: @nilo19: 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-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz/1658340531941412864) | false | `/test pull-cloud-provider-azure-e2e-ccm-vmss-ip-lb-capz`
pull-cloud-provider-azure-e2e-ccm-vmssflex-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmssflex-capz/1658340531748474880) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmssflex-capz`
pull-cloud-provider-azure-e2e-ccm-vmss-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-vmss-capz/1658340531668783104) | true | `/test pull-cloud-provider-azure-e2e-ccm-vmss-capz`
pull-cloud-provider-azure-e2e-ccm-capz | 9330e9229e7e383bd3acd7077c0a1a6021b19157 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-ccm-capz/1658340531865915392) | true | `/test pull-cloud-provider-azure-e2e-ccm-capz`
pull-cloud-provider-azure-e2e-capz | cb9db9b385dbe0deffd16972cecccae4b5fb3c7b | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cloud-provider-azure/3877/pull-cloud-provider-azure-e2e-capz/1658707406177177600) | true | `/test pull-cloud-provider-azure-e2e-capz`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cloud-provider-azure&pr=3877). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Anilo19). 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/cloud-provider-azure/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 -->

Patch:
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 251d65c92..5155a1857 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -29,7 +29,7 @@ updates:
       - "lgtm"
       - "approved"
   - package-ecosystem: "gomod"
-    directory: "/pkg/azclient/"
+    directory: "/pkg/azclient"
     open-pull-requests-limit: 1
     schedule:
       interval: daily
diff --git a/go.mod b/go.mod
index 2acd60368..aa3326f32 100644
--- a/go.mod
+++ b/go.mod
@@ -13,7 +13,7 @@ require (
 	github.com/fsnotify/fsnotify v1.6.0
 	github.com/go-logr/logr v1.2.4
 	github.com/golang/mock v1.6.0
-	github.com/onsi/ginkgo/v2 v2.9.5
+	github.com/onsi/ginkgo/v2 v2.9.4
 	github.com/onsi/gomega v1.27.6
 	github.com/spf13/cobra v1.7.0
 	github.com/spf13/pflag v1.0.5
@@ -120,7 +120,7 @@ require (
 	golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
 	golang.org/x/term v0.8.0 // indirect
 	golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
-	golang.org/x/tools v0.9.1 // indirect
+	golang.org/x/tools v0.8.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect
 	google.golang.org/grpc v1.51.0 // indirect
diff --git a/go.sum b/go.sum
index fddc1edbf..8c79760fc 100644
--- a/go.sum
+++ b/go.sum
@@ -319,8 +319,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q=
-github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k=
+github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=
+github.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM=
 github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
 github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
@@ -485,7 +485,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -664,8 +663,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
-golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
+golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
+golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/pkg/azclient/Makefile b/pkg/azclient/Makefile
index 68407c58a..b96282d22 100644
--- a/pkg/azclient/Makefile
+++ b/pkg/azclient/Makefile
@@ -68,7 +68,7 @@ build: fmt vet ## Build manager binary.
 	CGO_ENABLED=0 go build -o bin/typescaffold ./client-gen/cmd/typescaffold/
 
 .PHONY: generate
-generate: install-dependencies build generatecode generateimpl vet-all
+generate: install-dependencies build generatecode generateimpl fmt-all vet-all
 
 .PHONY: generatecode
 generatecode: build ## Generate client
@@ -91,7 +91,11 @@ generatecode: build ## Generate client
 
 .PHONY: generateimpl
 generateimpl: build ## Generate client
-	$(CLIENTGEN) clientgen:headerFile=../../hack/boilerplate/boilerplate.gomock.txt paths=./...
+	PATH=$PATH:$(LOCALBIN) $(CLIENTGEN) clientgen:headerFile=../../hack/boilerplate/boilerplate.gomock.txt paths=./...
+
+.PHONY: fmt-all
+fmt-all: goimports ## Run go fmt against code.
+	$(GOIMPORTS) -w -local sigs.k8s.io/cloud-provider-azure/pkg/azclient .
 
 .PHONY: vet-all
 vet-all: golangci-lint ## Run go vet against code.
@@ -105,6 +109,8 @@ endif
 
 .PHONY: install-dependencies
 install-dependencies: golangci-lint goimports mockgen ginkgo## Install all build dependencies.
+	export PATH=$$PATH:$(LOCALBIN)
+
 
 GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint
 .PHONY: golangci-lint
diff --git a/pkg/azclient/availabilitysetclient/zz_generated_client.go b/pkg/azclient/availabilitysetclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/availabilitysetclient/zz_generated_client.go
rename to pkg/azclient/availabilitysetclient/zz_generated.client.go
diff --git a/pkg/azclient/client-gen/generator/codegenerator.go b/pkg/azclient/client-gen/generator/codegenerator.go
index 65b3a0547..992674af6 100644
--- a/pkg/azclient/client-gen/generator/codegenerator.go
+++ b/pkg/azclient/client-gen/generator/codegenerator.go
@@ -18,8 +18,8 @@ limitations under the License.
 package generator
 
 import (
+	"fmt"
 	"go/ast"
-	"os/exec"
 
 	"sigs.k8s.io/controller-tools/pkg/genall"
 	"sigs.k8s.io/controller-tools/pkg/loader"
@@ -72,6 +72,8 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
 			continue
 		}
 
+		fmt.Printf("found marker")
+
 		//check for syntax error
 		ctx.Checker.Check(root)
 
@@ -86,16 +88,6 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
 			root.AddError(err)
 			return err
 		}
-		if err := generateTest(ctx, root, headerText); err != nil {
-			root.AddError(err)
-			return err
-		}
-
-		//nolint:gosec // G204 ignore this!
-		if err := exec.Command("goimports", "-local", "sigs.k8s.io/cloud-provider-azure/pkg/azclient", "-w", root.Name).Run(); err != nil {
-			root.AddError(err)
-			return err
-		}
 	}
 	return nil
 }
diff --git a/pkg/azclient/client-gen/generator/gencode_action.go b/pkg/azclient/client-gen/generator/gencode_action.go
index 0f84b7619..e21ae4267 100644
--- a/pkg/azclient/client-gen/generator/gencode_action.go
+++ b/pkg/azclient/client-gen/generator/gencode_action.go
@@ -21,6 +21,7 @@ import (
 	"bufio"
 	"bytes"
 	"fmt"
+	"go/format"
 	"io"
 	"os/exec"
 	"strings"
@@ -37,29 +38,30 @@ func generateClient(ctx *genall.GenerationContext, root *loader.Package, headerT
 	err := markers.EachType(ctx.Collector, root, func(typeInfo *markers.TypeInfo) {
 		if typeInfo := typeInfo.Markers.Get(clientGenMarker.Name); typeInfo != nil {
 			markerConf := typeInfo.(ClientGenConfig)
+			fmt.Printf("found marker,%+v", markerConf)
 			//nolint:gosec // G204 ignore this!
 			if err := exec.Command("go", "get", markerConf.PackageName).Run(); err != nil {
 				root.AddError(err)
 				return
 			}
-			importList["context"] = make(map[string]struct{})
-			importList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"] = make(map[string]struct{})
-			aliasMap, ok := importList[markerConf.PackageName]
-			if !ok {
-				aliasMap = make(map[string]struct{})
-				importList[markerConf.PackageName] = aliasMap
-			}
-			aliasMap[markerConf.PackageAlias] = struct{}{}
 
 			var outContent bytes.Buffer
 			if err := ClientTemplate.Execute(&outContent, markerConf); err != nil {
 				root.AddError(err)
 			}
+			//context.Context
+			importList["context"] = make(map[string]struct{})
+			//utils.Funcs
+			importList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"] = make(map[string]struct{})
+
 			if err := ClientFactoryTemplate.Execute(&outContent, markerConf); err != nil {
 				root.AddError(err)
 			}
+			//	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
+			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore"] = make(map[string]struct{})
+
+			//"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
+			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"] = make(map[string]struct{})
 
 			// define structs
 			for _, verb := range markerConf.Verbs {
@@ -86,6 +88,15 @@ func generateClient(ctx *genall.GenerationContext, root *loader.Package, headerT
 					}
 				}
 			}
+
+			aliasMap, ok := importList[markerConf.PackageName]
+			if !ok {
+				aliasMap = make(map[string]struct{})
+				importList[markerConf.PackageName] = aliasMap
+			}
+
+			aliasMap[markerConf.PackageAlias] = struct{}{}
+
 			codeSnips = append(codeSnips, &outContent)
 		}
 
@@ -132,18 +143,23 @@ import (
 			return err
 		}
 	}
-	rawBytes := outContent.Bytes()
+	fmt.Println(string(outContent.Bytes()))
+	formattedBytes, err := format.Source(outContent.Bytes())
+	if err != nil {
+		return err
+		// we still write the invalid source to disk to figure out what went wrong
+	}
 
-	outputFile, err := ctx.Open(root, "zz_generated_client.go")
+	outputFile, err := ctx.Open(root, "zz_generated.client.go")
 	if err != nil {
 		return err
 	}
 	defer outputFile.Close()
-	n, err := outputFile.Write(rawBytes)
+	n, err := outputFile.Write(formattedBytes)
 	if err != nil {
 		return err
 	}
-	if n < len(rawBytes) {
+	if n < len(formattedBytes) {
 		return io.ErrShortWrite
 	}
 	return nil
diff --git a/pkg/azclient/client-gen/generator/template.go b/pkg/azclient/client-gen/generator/template.go
index 7bd2a419e..cd78b30b7 100644
--- a/pkg/azclient/client-gen/generator/template.go
+++ b/pkg/azclient/client-gen/generator/template.go
@@ -134,67 +134,3 @@ type ImportStatement struct {
 	Alias   string
 	Package string
 }
-
-var TestSuiteTemplate = template.Must(template.New("object-scaffolding-test-suite").Parse(
-	`
-	
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/{{.Resource}}")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
-`))
diff --git a/pkg/azclient/diskclient/zz_generated_client.go b/pkg/azclient/diskclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/diskclient/zz_generated_client.go
rename to pkg/azclient/diskclient/zz_generated.client.go
diff --git a/pkg/azclient/go.mod b/pkg/azclient/go.mod
index 5fd4da3e7..1f11aa48f 100644
--- a/pkg/azclient/go.mod
+++ b/pkg/azclient/go.mod
@@ -4,7 +4,7 @@ go 1.19
 
 require (
 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0
-	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0
+	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v2 v2.4.0
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1
@@ -14,7 +14,7 @@ require (
 	github.com/golang/mock v1.6.0
 	github.com/google/go-cmp v0.5.9
 	github.com/google/uuid v1.3.0
-	github.com/onsi/ginkgo/v2 v2.9.5
+	github.com/onsi/ginkgo/v2 v2.9.2
 	github.com/onsi/gomega v1.27.6
 	github.com/spf13/cobra v1.7.0
 	gopkg.in/dnaeon/go-vcr.v2 v2.3.0
@@ -26,7 +26,7 @@ require (
 
 require (
 	github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
-	github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
+	github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 // indirect
 	github.com/fatih/color v1.15.0 // indirect
 	github.com/go-logr/logr v1.2.4 // indirect
 	github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
@@ -43,11 +43,11 @@ require (
 	github.com/stretchr/testify v1.8.2 // indirect
 	golang.org/x/crypto v0.8.0 // indirect
 	golang.org/x/mod v0.10.0 // indirect
-	golang.org/x/net v0.10.0 // indirect
-	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/net v0.9.0 // indirect
+	golang.org/x/sys v0.7.0 // indirect
 	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
-	golang.org/x/tools v0.9.1 // indirect
+	golang.org/x/tools v0.8.0 // indirect
 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/pkg/azclient/go.sum b/pkg/azclient/go.sum
index 53b6a602c..841e98d05 100644
--- a/pkg/azclient/go.sum
+++ b/pkg/azclient/go.sum
@@ -1,7 +1,7 @@
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 h1:uqM+VoHjVH6zdlkLF2b6O0ZANcHoj3rO0PoQ3jglUJA=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2/go.mod h1:twTKAa1E6hLmSDjLhaCkbTMQKc7p/rNLU40rLxGEOCI=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ=
@@ -19,8 +19,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw=
 github.com/Azure/go-armbalancer v0.0.2 h1:NVnxsTWHI5/fEzL6k6TjxPUfcB/3Si3+HFOZXOu0QtA=
 github.com/Azure/go-armbalancer v0.0.2/go.mod h1:yTg7MA/8YnfKQc9o97tzAJ7fbdVkod1xGsIvKmhYPRE=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
+github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 h1:UE9n9rkJF62ArLb1F3DEjRt8O3jLwMWdSoypKV4f3MU=
+github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -29,7 +29,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
+github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c=
 github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
 github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
 github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
@@ -67,8 +67,8 @@ github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPn
 github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q=
-github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k=
+github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
+github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
 github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
 github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=
 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
@@ -101,11 +101,11 @@ golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
+golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -114,8 +114,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -126,8 +126,8 @@ golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
-golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
+golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
+golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/pkg/azclient/virtualmachinescalesetclient/zz_generated_client.go b/pkg/azclient/virtualmachinescalesetclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/virtualmachinescalesetclient/zz_generated_client.go
rename to pkg/azclient/virtualmachinescalesetclient/zz_generated.client.go
diff --git a/pkg/consts/consts.go b/pkg/consts/consts.go
index 286a950ff..5415b7d74 100644
--- a/pkg/consts/consts.go
+++ b/pkg/consts/consts.go
@@ -19,6 +19,7 @@ package consts
 import (
 	"time"
 
+	"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2022-08-01/compute"
 	"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-09-01/storage"
 )
 
@@ -127,6 +128,8 @@ const (
 	TagKeyValueDelimiter = "="
 	// VMSetNamesSharingPrimarySLBDelimiter is the delimiter of vmSet names sharing the primary SLB
 	VMSetNamesSharingPrimarySLBDelimiter = ","
+	// PremiumV2_LRS type for Azure Disk
+	PremiumV2LRS = compute.DiskStorageAccountTypes("PremiumV2_LRS")
 	// ProvisioningStateDeleting ...
 	ProvisioningStateDeleting = "Deleting"
 	// ProvisioningStateSucceeded ...
diff --git a/pkg/provider/azure_loadbalancer.go b/pkg/provider/azure_loadbalancer.go
index 677d42999..b7d7cc60b 100644
--- a/pkg/provider/azure_loadbalancer.go
+++ b/pkg/provider/azure_loadbalancer.go
@@ -897,19 +897,36 @@ func (az *Cloud) determinePublicIPName(clusterName string, service *v1.Service,
 }
 
 func (az *Cloud) findMatchedPIPByLoadBalancerIP(service *v1.Service, loadBalancerIP, pipResourceGroup string) (*network.PublicIPAddress, error) {
-	pips, err := az.listPIP(pipResourceGroup)
+	pips, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeDefault)
 	if err != nil {
 		return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: failed to listPIP: %w", err)
 	}
+
+	pip, err := getExpectedPIPFromListByIPAddress(pips, loadBalancerIP)
+	if err != nil {
+		pips, err = az.listPIP(pipResourceGroup, azcache.CacheReadTypeForceRefresh)
+		if err != nil {
+			return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: failed to listPIP force refresh: %w", err)
+		}
+
+		pip, err = getExpectedPIPFromListByIPAddress(pips, loadBalancerIP)
+		if err != nil {
+			return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: cannot find public IP with IP address %s in resource group %s", loadBalancerIP, pipResourceGroup)
+		}
+	}
+
+	return pip, nil
+}
+
+func getExpectedPIPFromListByIPAddress(pips []network.PublicIPAddress, ip string) (*network.PublicIPAddress, error) {
 	for _, pip := range pips {
-		pip := pip
 		if pip.PublicIPAddressPropertiesFormat.IPAddress != nil &&
-			*pip.PublicIPAddressPropertiesFormat.IPAddress == loadBalancerIP {
+			*pip.PublicIPAddressPropertiesFormat.IPAddress == ip {
 			return &pip, nil
 		}
 	}
 
-	return nil, fmt.Errorf("findMatchedPIPByLoadBalancerIP: cannot find public IP with IP address %s in resource group %s", loadBalancerIP, pipResourceGroup)
+	return nil, fmt.Errorf("getExpectedPIPFromListByIPAddress: cannot find public IP with IP address %s", ip)
 }
 
 func flipServiceInternalAnnotation(service *v1.Service) *v1.Service {
@@ -1080,7 +1097,7 @@ func (az *Cloud) ensurePublicIPExists(service *v1.Service, pipName string, domai
 	}
 
 	if foundDNSLabelAnnotation {
-		updatedDNSSettings, err := reconcileDNSSettings(&pip, domainNameLabel, serviceName, pipName)
+		updatedDNSSettings, err := reconcileDNSSettings(&pip, domainNameLabel, serviceName, pipName, isUserAssignedPIP)
 		if err != nil {
 			return nil, fmt.Errorf("ensurePublicIPExists for service(%s): failed to reconcileDNSSettings: %w", serviceName, err)
 		}
@@ -1149,7 +1166,11 @@ func (az *Cloud) reconcileIPSettings(pip *network.PublicIPAddress, service *v1.S
 	return changed
 }
 
-func reconcileDNSSettings(pip *network.PublicIPAddress, domainNameLabel, serviceName, pipName string) (bool, error) {
+func reconcileDNSSettings(
+	pip *network.PublicIPAddress,
+	domainNameLabel, serviceName, pipName string,
+	isUserAssignedPIP bool,
+) (bool, error) {
 	var changed bool
 
 	if existingServiceName := getServiceFromPIPDNSTags(pip.Tags); existingServiceName != "" && !strings.EqualFold(existingServiceName, serviceName) {
@@ -1178,8 +1199,10 @@ func reconcileDNSSettings(pip *network.PublicIPAddress, domainNameLabel, service
 		}
 
 		if svc := getServiceFromPIPDNSTags(pip.Tags); svc == "" || !strings.EqualFold(svc, serviceName) {
-			pip.Tags[consts.ServiceUsingDNSKey] = &serviceName
-			changed = true
+			if !isUserAssignedPIP {
+				pip.Tags[consts.ServiceUsingDNSKey] = &serviceName
+				changed = true
+			}
 		}
 	}
 
@@ -3111,7 +3134,7 @@ func (az *Cloud) reconcilePublicIPs(clusterName string, service *v1.Service, lbN
 	pipResourceGroup := az.getPublicIPAddressResourceGroup(service)
 
 	reconciledPIPs := []*network.PublicIPAddress{}
-	pips, err := az.listPIP(pipResourceGroup)
+	pips, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeDefault)
 	if err != nil {
 		return nil, err
 	}
@@ -3260,7 +3283,7 @@ func (az *Cloud) getPublicIPUpdates(
 		owns, isUserAssignedPIP := serviceOwnsPublicIP(service, &pip, clusterName)
 		if owns {
 			var dirtyPIP, toBeDeleted bool
-			if !wantLb {
+			if !wantLb && !isUserAssignedPIP {
 				klog.V(2).Infof("reconcilePublicIP for service(%s): unbinding the service from pip %s", serviceName, *pip.Name)
 				if err = unbindServiceFromPIP(&pip, service, serviceName, clusterName, isUserAssignedPIP); err != nil {
 					return false, nil, false, nil, err
@@ -3305,65 +3328,77 @@ func (az *Cloud) getPublicIPUpdates(
 func (az *Cloud) safeDeletePublicIP(service *v1.Service, pipResourceGroup string, pip *network.PublicIPAddress, lb *network.LoadBalancer) error {
 	// Remove references if pip.IPConfiguration is not nil.
 	if pip.PublicIPAddressPropertiesFormat != nil &&
-		pip.PublicIPAddressPropertiesFormat.IPConfiguration != nil &&
-		lb != nil && lb.LoadBalancerPropertiesFormat != nil &&
-		lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations != nil {
-		referencedLBRules := []network.SubResource{}
-		frontendIPConfigUpdated := false
-		loadBalancerRuleUpdated := false
-
-		// Check whether there are still frontend IP configurations referring to it.
-		ipConfigurationID := pointer.StringDeref(pip.PublicIPAddressPropertiesFormat.IPConfiguration.ID, "")
-		if ipConfigurationID != "" {
-			lbFrontendIPConfigs := *lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations
-			for i := len(lbFrontendIPConfigs) - 1; i >= 0; i-- {
-				config := lbFrontendIPConfigs[i]
-				if strings.EqualFold(ipConfigurationID, pointer.StringDeref(config.ID, "")) {
-					if config.FrontendIPConfigurationPropertiesFormat != nil &&
-						config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules != nil {
-						referencedLBRules = *config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules
-					}
+		pip.PublicIPAddressPropertiesFormat.IPConfiguration != nil {
+		// Fetch latest pip to check if the pip in the cache is stale.
+		// In some cases the public IP to be deleted is still referencing
+		// the frontend IP config on the LB. This is because the pip is
+		// stored in the cache and is not up-to-date.
+		latestPIP, ok, err := az.getPublicIPAddress(pipResourceGroup, *pip.Name, azcache.CacheReadTypeForceRefresh)
+		if err != nil {
+			klog.Errorf("safeDeletePublicIP: failed to get latest public IP %s/%s: %s", pipResourceGroup, *pip.Name, err.Error())
+			return err
+		}
+		if ok && latestPIP.PublicIPAddressPropertiesFormat != nil &&
+			latestPIP.PublicIPAddressPropertiesFormat.IPConfiguration != nil &&
+			lb != nil && lb.LoadBalancerPropertiesFormat != nil &&
+			lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations != nil {
+			referencedLBRules := []network.SubResource{}
+			frontendIPConfigUpdated := false
+			loadBalancerRuleUpdated := false
+
+			// Check whether there are still frontend IP configurations referring to it.
+			ipConfigurationID := pointer.StringDeref(pip.PublicIPAddressPropertiesFormat.IPConfiguration.ID, "")
+			if ipConfigurationID != "" {
+				lbFrontendIPConfigs := *lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations
+				for i := len(lbFrontendIPConfigs) - 1; i >= 0; i-- {
+					config := lbFrontendIPConfigs[i]
+					if strings.EqualFold(ipConfigurationID, pointer.StringDeref(config.ID, "")) {
+						if config.FrontendIPConfigurationPropertiesFormat != nil &&
+							config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules != nil {
+							referencedLBRules = *config.FrontendIPConfigurationPropertiesFormat.LoadBalancingRules
+						}
 
-					frontendIPConfigUpdated = true
-					lbFrontendIPConfigs = append(lbFrontendIPConfigs[:i], lbFrontendIPConfigs[i+1:]...)
-					break
+						frontendIPConfigUpdated = true
+						lbFrontendIPConfigs = append(lbFrontendIPConfigs[:i], lbFrontendIPConfigs[i+1:]...)
+						break
+					}
 				}
-			}
 
-			if frontendIPConfigUpdated {
-				lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations = &lbFrontendIPConfigs
+				if frontendIPConfigUpdated {
+					lb.LoadBalancerPropertiesFormat.FrontendIPConfigurations = &lbFrontendIPConfigs
+				}
 			}
-		}
 
-		// Check whether there are still load balancer rules referring to it.
-		if len(referencedLBRules) > 0 {
-			referencedLBRuleIDs := sets.New[string]()
-			for _, refer := range referencedLBRules {
-				referencedLBRuleIDs.Insert(pointer.StringDeref(refer.ID, ""))
-			}
+			// Check whether there are still load balancer rules referring to it.
+			if len(referencedLBRules) > 0 {
+				referencedLBRuleIDs := sets.New[string]()
+				for _, refer := range referencedLBRules {
+					referencedLBRuleIDs.Insert(pointer.StringDeref(refer.ID, ""))
+				}
 
-			if lb.LoadBalancerPropertiesFormat.LoadBalancingRules != nil {
-				lbRules := *lb.LoadBalancerPropertiesFormat.LoadBalancingRules
-				for i := len(lbRules) - 1; i >= 0; i-- {
-					ruleID := pointer.StringDeref(lbRules[i].ID, "")
-					if ruleID != "" && referencedLBRuleIDs.Has(ruleID) {
-						loadBalancerRuleUpdated = true
-						lbRules = append(lbRules[:i], lbRules[i+1:]...)
+				if lb.LoadBalancerPropertiesFormat.LoadBalancingRules != nil {
+					lbRules := *lb.LoadBalancerPropertiesFormat.LoadBalancingRules
+					for i := len(lbRules) - 1; i >= 0; i-- {
+						ruleID := pointer.StringDeref(lbRules[i].ID, "")
+						if ruleID != "" && referencedLBRuleIDs.Has(ruleID) {
+							loadBalancerRuleUpdated = true
+							lbRules = append(lbRules[:i], lbRules[i+1:]...)
+						}
 					}
-				}
 
-				if loadBalancerRuleUpdated {
-					lb.LoadBalancerPropertiesFormat.LoadBalancingRules = &lbRules
+					if loadBalancerRuleUpdated {
+						lb.LoadBalancerPropertiesFormat.LoadBalancingRules = &lbRules
+					}
 				}
 			}
-		}
 
-		// Update load balancer when frontendIPConfigUpdated or loadBalancerRuleUpdated.
-		if frontendIPConfigUpdated || loadBalancerRuleUpdated {
-			err := az.CreateOrUpdateLB(service, *lb)
-			if err != nil {
-				klog.Errorf("safeDeletePublicIP for service(%s) failed with error: %v", getServiceName(service), err)
-				return err
+			// Update load balancer when frontendIPConfigUpdated or loadBalancerRuleUpdated.
+			if frontendIPConfigUpdated || loadBalancerRuleUpdated {
+				err := az.CreateOrUpdateLB(service, *lb)
+				if err != nil {
+					klog.Errorf("safeDeletePublicIP for service(%s) failed with error: %v", getServiceName(service), err)
+					return err
+				}
 			}
 		}
 	}
@@ -3623,14 +3658,14 @@ func serviceOwnsPublicIP(service *v1.Service, pip *network.PublicIPAddress, clus
 
 	serviceName := getServiceName(service)
 
+	isIPv6 := pip.PublicIPAddressVersion == network.IPv6
 	if pip.Tags != nil {
 		serviceTag := getServiceFromPIPServiceTags(pip.Tags)
 		clusterTag := getClusterFromPIPClusterTags(pip.Tags)
 
 		// if there is no service tag on the pip, it is user-created pip
-		isIPv6 := pip.PublicIPAddressVersion == network.IPv6
 		if serviceTag == "" {
-			return strings.EqualFold(pointer.StringDeref(pip.IPAddress, ""), getServiceLoadBalancerIP(service, isIPv6)), true
+			return isServiceLoadBalancerIPMatchesPIP(service, pip, isIPv6), true
 		}
 
 		// if there is service tag on the pip, it is system-created pip
@@ -3642,17 +3677,20 @@ func serviceOwnsPublicIP(service *v1.Service, pip *network.PublicIPAddress, clus
 			}
 
 			// If cluster name tag is set, then return true if it matches.
-			if clusterTag == clusterName {
-				return true, false
-			}
-		} else {
-			// if the service is not included in the tags of the system-created pip, check the ip address
-			// this could happen for secondary services
-			return strings.EqualFold(pointer.StringDeref(pip.IPAddress, ""), getServiceLoadBalancerIP(service, isIPv6)), false
+			return strings.EqualFold(clusterTag, clusterName), false
 		}
+
+		// if the service is not included in the tags of the system-created pip, check the ip address
+		// this could happen for secondary services
+		return isServiceLoadBalancerIPMatchesPIP(service, pip, isIPv6), false
 	}
 
-	return false, false
+	// if the pip has no tags, it should be user-created
+	return isServiceLoadBalancerIPMatchesPIP(service, pip, isIPv6), true
+}
+
+func isServiceLoadBalancerIPMatchesPIP(service *v1.Service, pip *network.PublicIPAddress, isIPV6 bool) bool {
+	return strings.EqualFold(pointer.StringDeref(pip.IPAddress, ""), getServiceLoadBalancerIP(service, isIPV6))
 }
 
 func isSVCNameInPIPTag(tag, svcName string) bool {
diff --git a/pkg/provider/azure_managedDiskController.go b/pkg/provider/azure_managedDiskController.go
index a0b8af849..083656fcc 100644
--- a/pkg/provider/azure_managedDiskController.go
+++ b/pkg/provider/azure_managedDiskController.go
@@ -161,7 +161,7 @@ func (c *ManagedDiskController) CreateManagedDisk(ctx context.Context, options *
 		}
 	}
 
-	if diskSku == compute.UltraSSDLRS || diskSku == compute.PremiumV2LRS {
+	if diskSku == compute.UltraSSDLRS || diskSku == consts.PremiumV2LRS {
 		if options.DiskIOPSReadWrite == "" {
 			if diskSku == compute.UltraSSDLRS {
 				diskIOPSReadWrite := int64(consts.DefaultDiskIOPSReadWrite)
diff --git a/pkg/provider/azure_utils.go b/pkg/provider/azure_utils.go
index d314fd995..5a749cd18 100644
--- a/pkg/provider/azure_utils.go
+++ b/pkg/provider/azure_utils.go
@@ -467,7 +467,7 @@ func (az *Cloud) isFIPIPv6(service *v1.Service, fip *network.FrontendIPConfigura
 		fipPIPID = pointer.StringDeref(fip.FrontendIPConfigurationPropertiesFormat.PublicIPAddress.ID, "")
 	}
 	pipResourceGroup := az.getPublicIPAddressResourceGroup(service)
-	pips, err := az.listPIP(pipResourceGroup)
+	pips, err := az.listPIP(pipResourceGroup, azcache.CacheReadTypeDefault)
 	if err != nil {
 		return false, err
 	}
diff --git a/pkg/provider/azure_wrap.go b/pkg/provider/azure_wrap.go
index 2f5a66c44..ea6e555e3 100644
--- a/pkg/provider/azure_wrap.go
+++ b/pkg/provider/azure_wrap.go
@@ -125,8 +125,8 @@ func (az *Cloud) getPublicIPAddress(pipResourceGroup string, pipName string, crt
 	return *(deepcopy.Copy(pip).(*network.PublicIPAddress)), true, nil
 }
 
-func (az *Cloud) listPIP(pipResourceGroup string) ([]network.PublicIPAddress, error) {
-	cached, err := az.pipCache.Get(pipResourceGroup, azcache.CacheReadTypeDefault)
+func (az *Cloud) listPIP(pipResourceGroup string, crt azcache.AzureCacheReadType) ([]network.PublicIPAddress, error) {
+	cached, err := az.pipCache.Get(pipResourceGroup, crt)
 	if err != nil {
 		return nil, err
 	}
diff --git a/site/content/en/topics/shared-ip.md b/site/content/en/topics/shared-ip.md
index ab5fb264c..8e61eaf26 100644
--- a/site/content/en/topics/shared-ip.md
+++ b/site/content/en/topics/shared-ip.md
@@ -35,7 +35,8 @@ kind: Service
 metadata:
   name: https
   namespace: default
-  service.beta.kubernetes.io/azure-load-balancer-ipv4: 1.2.3.4 # the IP address could be the same as it is of `nginx` service
+  annotations:
+    service.beta.kubernetes.io/azure-load-balancer-ipv4: 1.2.3.4 # the IP address could be the same as it is of `nginx` service
 spec:
   ports:
     - port: 443
@@ -50,9 +51,9 @@ Note that if you specify the annotations `service.beta.kubernetes.io/azure-load-
 
 ## DNS
 
-Even if multiple services can refer to one public IP, the DNS label cannot be re-used. The public IP would have the label `kubernetes-dns-label-service: <svcName>` to indicate which service is binding to the DNS label. In this case if there is another service sharing this specific IP address trying to refer to the DNS label, an error would be reported.
+Even if multiple services can refer to one public IP, the DNS label cannot be re-used. The public IP would have the label `kubernetes-dns-label-service: <svcName>` to indicate which service is binding to the DNS label. In this case if there is another service sharing this specific IP address trying to refer to the DNS label, an error would be reported. For managed public IPs, this label will be added automatically by the cloud provider. For static public IPs, this label should be added manually.
 
-> The DNS name on the public IP won't be deleted after the service with the DNS annotation being deleted, because the cloud provider don't know if the DNS was set by the user or not.
+```yaml
 
 ## Restrictions
 
diff --git a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md
index b1811884b..d680ea4d9 100644
--- a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md
+++ b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md
@@ -1,14 +1,3 @@
-## 2.9.5
-
-### Fixes
-- ensure the correct deterministic sort order is produced when ordered specs are generated by a helper function [7fa0b6b]
-
-### Maintenance
-- fix generators link (#1200) [9f9d8b9]
-- Bump golang.org/x/tools from 0.8.0 to 0.9.1 (#1196) [150e3f2]
-- fix spelling err in docs (#1199) [0013b1a]
-- Bump golang.org/x/sys from 0.7.0 to 0.8.0 (#1193) [9e9e3e5]
-
 ## 2.9.4
 
 ### Fixes
diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/node.go b/vendor/github.com/onsi/ginkgo/v2/internal/node.go
index 14c7cf54e..0869bffb3 100644
--- a/vendor/github.com/onsi/ginkgo/v2/internal/node.go
+++ b/vendor/github.com/onsi/ginkgo/v2/internal/node.go
@@ -875,15 +875,6 @@ func (n Nodes) FirstNodeMarkedOrdered() Node {
 	return Node{}
 }
 
-func (n Nodes) IndexOfFirstNodeMarkedOrdered() int {
-	for i := range n {
-		if n[i].MarkedOrdered {
-			return i
-		}
-	}
-	return -1
-}
-
 func (n Nodes) GetMaxFlakeAttempts() int {
 	maxFlakeAttempts := 0
 	for i := range n {
diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go b/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go
index 84eea0a59..7ed43c7fd 100644
--- a/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go
+++ b/vendor/github.com/onsi/ginkgo/v2/internal/ordering.go
@@ -27,43 +27,36 @@ func (s *SortableSpecs) Swap(i, j int) { s.Indexes[i], s.Indexes[j] = s.Indexes[
 func (s *SortableSpecs) Less(i, j int) bool {
 	a, b := s.Specs[s.Indexes[i]], s.Specs[s.Indexes[j]]
 
-	aNodes, bNodes := a.Nodes.WithType(types.NodeTypesForContainerAndIt), b.Nodes.WithType(types.NodeTypesForContainerAndIt)
-
-	firstOrderedAIdx, firstOrderedBIdx := aNodes.IndexOfFirstNodeMarkedOrdered(), bNodes.IndexOfFirstNodeMarkedOrdered()
-	if firstOrderedAIdx > -1 && firstOrderedBIdx > -1 && aNodes[firstOrderedAIdx].ID == bNodes[firstOrderedBIdx].ID {
-		// strictly preserve order within an ordered containers.  ID will track this as IDs are generated monotonically
-		return aNodes.FirstNodeWithType(types.NodeTypeIt).ID < bNodes.FirstNodeWithType(types.NodeTypeIt).ID
-	}
-
-	// if either spec is in an ordered container - only use the nodes up to the outermost ordered container
-	if firstOrderedAIdx > -1 {
-		aNodes = aNodes[:firstOrderedAIdx+1]
-	}
-	if firstOrderedBIdx > -1 {
-		bNodes = bNodes[:firstOrderedBIdx+1]
+	firstOrderedA := a.Nodes.FirstNodeMarkedOrdered()
+	firstOrderedB := b.Nodes.FirstNodeMarkedOrdered()
+	if firstOrderedA.ID == firstOrderedB.ID && !firstOrderedA.IsZero() {
+		// strictly preserve order in ordered containers.  ID will track this as IDs are generated monotonically
+		return a.FirstNodeWithType(types.NodeTypeIt).ID < b.FirstNodeWithType(types.NodeTypeIt).ID
 	}
 
-	for i := 0; i < len(aNodes) && i < len(bNodes); i++ {
-		aCL, bCL := aNodes[i].CodeLocation, bNodes[i].CodeLocation
-		if aCL.FileName != bCL.FileName {
-			return aCL.FileName < bCL.FileName
+	aCLs := a.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations()
+	bCLs := b.Nodes.WithType(types.NodeTypesForContainerAndIt).CodeLocations()
+	for i := 0; i < len(aCLs) && i < len(bCLs); i++ {
+		aCL, bCL := aCLs[i], bCLs[i]
+		if aCL.FileName < bCL.FileName {
+			return true
+		} else if aCL.FileName > bCL.FileName {
+			return false
 		}
-		if aCL.LineNumber != bCL.LineNumber {
-			return aCL.LineNumber < bCL.LineNumber
+		if aCL.LineNumber < bCL.LineNumber {
+			return true
+		} else if aCL.LineNumber > bCL.LineNumber {
+			return false
 		}
 	}
 	// either everything is equal or we have different lengths of CLs
-	if len(aNodes) != len(bNodes) {
-		return len(aNodes) < len(bNodes)
+	if len(aCLs) < len(bCLs) {
+		return true
+	} else if len(aCLs) > len(bCLs) {
+		return false
 	}
 	// ok, now we are sure everything was equal. so we use the spec text to break ties
-	for i := 0; i < len(aNodes); i++ {
-		if aNodes[i].Text != bNodes[i].Text {
-			return aNodes[i].Text < bNodes[i].Text
-		}
-	}
-	// ok, all those texts were equal.  we'll use the ID of the most deeply nested node as a last resort
-	return aNodes[len(aNodes)-1].ID < bNodes[len(bNodes)-1].ID
+	return a.Text() < b.Text()
 }
 
 type GroupedSpecIndices []SpecIndices
diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go
index 43066341e..d452bf9a6 100644
--- a/vendor/github.com/onsi/ginkgo/v2/types/version.go
+++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go
@@ -1,3 +1,3 @@
 package types
 
-const VERSION = "2.9.5"
+const VERSION = "2.9.4"
diff --git a/vendor/modules.txt b/vendor/modules.txt
index cf028f9ab..ae3972b42 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -318,7 +318,7 @@ github.com/modern-go/reflect2
 # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
 ## explicit
 github.com/munnerz/goautoneg
-# github.com/onsi/ginkgo/v2 v2.9.5
+# github.com/onsi/ginkgo/v2 v2.9.4
 ## explicit; go 1.18
 github.com/onsi/ginkgo/v2
 github.com/onsi/ginkgo/v2/config
@@ -562,7 +562,7 @@ golang.org/x/text/width
 # golang.org/x/time v0.0.0-20220210224613-90d013bbcef8
 ## explicit
 golang.org/x/time/rate
-# golang.org/x/tools v0.9.1
+# golang.org/x/tools v0.8.0
 ## explicit; go 1.18
 golang.org/x/tools/go/ast/inspector
 golang.org/x/tools/internal/typeparams


Test patch:
diff --git a/kubetest2-aks/go.mod b/kubetest2-aks/go.mod
index 9eb56cc26..331c0881d 100644
--- a/kubetest2-aks/go.mod
+++ b/kubetest2-aks/go.mod
@@ -22,7 +22,7 @@ require (
 	github.com/Microsoft/go-winio v0.5.2 // indirect
 	github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
 	github.com/acomagu/bufpipe v1.0.4 // indirect
-	github.com/cloudflare/circl v1.3.3 // indirect
+	github.com/cloudflare/circl v1.1.0 // indirect
 	github.com/emirpasic/gods v1.18.1 // indirect
 	github.com/go-git/gcfg v1.5.0 // indirect
 	github.com/go-git/go-billy/v5 v5.4.1 // indirect
diff --git a/kubetest2-aks/go.sum b/kubetest2-aks/go.sum
index c3874c477..b423530c5 100644
--- a/kubetest2-aks/go.sum
+++ b/kubetest2-aks/go.sum
@@ -23,9 +23,8 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
+github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY=
 github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
-github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
-github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
 github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
diff --git a/pkg/azclient/availabilitysetclient/availabilitysetclient_suite_test.go b/pkg/azclient/availabilitysetclient/availabilitysetclient_suite_test.go
deleted file mode 100644
index 707e833f7..000000000
--- a/pkg/azclient/availabilitysetclient/availabilitysetclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package availabilitysetclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/AvailabilitySet")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/client-gen/generator/gentest_action.go b/pkg/azclient/client-gen/generator/gentest_action.go
deleted file mode 100644
index dce9e1299..000000000
--- a/pkg/azclient/client-gen/generator/gentest_action.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Package generator
-package generator
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"io"
-	"os"
-
-	"sigs.k8s.io/controller-tools/pkg/genall"
-	"sigs.k8s.io/controller-tools/pkg/loader"
-	"sigs.k8s.io/controller-tools/pkg/markers"
-)
-
-func generateTest(ctx *genall.GenerationContext, root *loader.Package, headerText string) error {
-	var importList = make(map[string]map[string]struct{})
-	var codeSnips []*bytes.Buffer
-	err := markers.EachType(ctx.Collector, root, func(typeInfo *markers.TypeInfo) {
-		if typeInfo := typeInfo.Markers.Get(clientGenMarker.Name); typeInfo != nil {
-			markerConf := typeInfo.(ClientGenConfig)
-
-			var outContent bytes.Buffer
-
-			importList["context"] = make(map[string]struct{})
-			importList["testing"] = make(map[string]struct{})
-			importList["time"] = make(map[string]struct{})
-			importList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"] = make(map[string]struct{})
-			importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/to"] = make(map[string]struct{})
-			importList["github.com/onsi/ginkgo/v2"] = map[string]struct{}{".": {}}
-			importList["github.com/onsi/gomega"] = map[string]struct{}{".": {}}
-
-			if err := TestSuiteTemplate.Execute(&outContent, markerConf); err != nil {
-				root.AddError(err)
-			}
-			codeSnips = append(codeSnips, &outContent)
-		}
-	})
-	if err != nil {
-		root.AddError(err)
-		return err
-	}
-	if len(codeSnips) <= 0 {
-		return nil
-	}
-
-	outContent := new(bytes.Buffer)
-
-	var importStatement bytes.Buffer
-	importWriter := bufio.NewWriter(&importStatement)
-	for packageName, alias := range importList {
-		if len(alias) == 0 {
-			if err := ImportTemplate.Execute(importWriter, &ImportStatement{Alias: "", Package: packageName}); err != nil {
-				return err
-			}
-		}
-		for item := range alias {
-			if err := ImportTemplate.Execute(importWriter, &ImportStatement{Alias: item, Package: packageName}); err != nil {
-				return err
-			}
-		}
-	}
-	importWriter.Flush()
-	_, err = fmt.Fprintf(outContent, `
-%[3]s
-// Code generated by client-gen. DO NOT EDIT.
-package %[1]s
-import (
-  %[2]s
-)
-`, root.Name, importStatement.String(), headerText)
-	if err != nil {
-		return err
-	}
-
-	for _, codeSnip := range codeSnips {
-		if _, err := io.Copy(outContent, bufio.NewReader(codeSnip)); err != nil {
-			return err
-		}
-	}
-
-	rawBytes := outContent.Bytes()
-	outputFile, err := ctx.Open(root, root.Name+"_suite_test.go")
-	if err != nil {
-		return err
-	}
-	defer outputFile.Close()
-	n, err := outputFile.Write(rawBytes)
-	if err != nil {
-		return err
-	}
-	if n < len(rawBytes) {
-		return io.ErrShortWrite
-	}
-	if err := os.MkdirAll(root.Name+"/testdata", 0755); err != nil {
-		return err
-	}
-	return nil
-}
diff --git a/pkg/azclient/deploymentclient/deploymentclient_suite_test.go b/pkg/azclient/deploymentclient/deploymentclient_suite_test.go
deleted file mode 100644
index b81d955d1..000000000
--- a/pkg/azclient/deploymentclient/deploymentclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package deploymentclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/Deployment")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/deploymentclient/zz_generated_client.go b/pkg/azclient/deploymentclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/deploymentclient/zz_generated_client.go
rename to pkg/azclient/deploymentclient/zz_generated.client.go
diff --git a/pkg/azclient/diskclient/diskclient_suite_test.go b/pkg/azclient/diskclient/diskclient_suite_test.go
index 6116f3e78..efaad1c32 100644
--- a/pkg/azclient/diskclient/diskclient_suite_test.go
+++ b/pkg/azclient/diskclient/diskclient_suite_test.go
@@ -1,20 +1,19 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
+/*
+Copyright 2023 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
 
-// Code generated by client-gen. DO NOT EDIT.
 package diskclient
 
 import (
@@ -25,17 +24,19 @@ import (
 	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
 	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
 	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
+
+	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
+
 	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
 	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
+
 	. "github.com/onsi/ginkgo/v2"
 	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
 )
 
-func TestClient(t *testing.T) {
+func TestDiskclient(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
+	RunSpecs(t, "Diskclient Suite")
 }
 
 var resourceGroupName = "aks-cit"
@@ -45,10 +46,9 @@ var location = "eastus"
 var resourceGroupClient *armresources.ResourceGroupsClient
 var err error
 var recorder *recording.Recorder
-var realClient Interface
 
 var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/Disk")
+	recorder, err = recording.NewRecorder("testdata/diskclient")
 	Expect(err).ToNot(HaveOccurred())
 	subscriptionID = recorder.SubscriptionID()
 	Expect(err).NotTo(HaveOccurred())
@@ -63,7 +63,7 @@ var _ = BeforeSuite(func(ctx context.Context) {
 		},
 	})
 	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
+	diskClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
 		ClientOptions: azcore.ClientOptions{
 			Retry: policy.RetryOptions{
 				MaxRetryDelay: 1 * time.Millisecond,
diff --git a/pkg/azclient/diskclient/diskclient_test.go b/pkg/azclient/diskclient/diskclient_test.go
index 9def657f0..fe4b10c5f 100644
--- a/pkg/azclient/diskclient/diskclient_test.go
+++ b/pkg/azclient/diskclient/diskclient_test.go
@@ -25,12 +25,14 @@ import (
 	. "github.com/onsi/gomega"
 )
 
+var diskClient Interface
+
 var _ = Describe("Diskclient", func() {
 
 	When("requests are raised", func() {
 		It("should not return error", func(ctx context.Context) {
 
-			diskResource, err := realClient.CreateOrUpdate(ctx, resourceGroupName, resourceName, armcompute.Disk{
+			diskResource, err := diskClient.CreateOrUpdate(ctx, resourceGroupName, resourceName, armcompute.Disk{
 				Location: to.Ptr(location),
 				Properties: &armcompute.DiskProperties{
 					CreationData: &armcompute.CreationData{
@@ -43,34 +45,34 @@ var _ = Describe("Diskclient", func() {
 			Expect(diskResource).NotTo(BeNil())
 			Expect(*diskResource.Name).To(Equal(resourceName))
 
-			diskResource, err = realClient.Get(ctx, resourceGroupName, resourceName)
+			diskResource, err = diskClient.Get(ctx, resourceGroupName, resourceName)
 			Expect(err).NotTo(HaveOccurred())
 			Expect(diskResource).NotTo(BeNil())
 
-			diskList, err := realClient.List(ctx, resourceGroupName)
+			diskList, err := diskClient.List(ctx, resourceGroupName)
 			Expect(err).NotTo(HaveOccurred())
 			Expect(diskList).NotTo(BeNil())
 			Expect(len(diskList)).To(Equal(1))
 			Expect(*diskList[0].Name).To(Equal(resourceName))
 
-			err = realClient.Delete(ctx, resourceGroupName, resourceName)
+			err = diskClient.Delete(ctx, resourceGroupName, resourceName)
 			Expect(err).NotTo(HaveOccurred())
 
 		})
 	})
 	When("raise requests against non-existing resources", func() {
 		It("should return error", func(ctx context.Context) {
-			diskResource, err := realClient.CreateOrUpdate(ctx, resourceGroupName, resourceName, armcompute.Disk{
+			diskResource, err := diskClient.CreateOrUpdate(ctx, resourceGroupName, resourceName, armcompute.Disk{
 				Location: to.Ptr(location),
 			})
 			Expect(err).To(HaveOccurred())
 			Expect(diskResource).To(BeNil())
 
-			diskResource, err = realClient.Get(ctx, resourceGroupName, resourceName+"notfound")
+			diskResource, err = diskClient.Get(ctx, resourceGroupName, resourceName+"notfound")
 			Expect(err).To(HaveOccurred())
 			Expect(diskResource).To(BeNil())
 
-			diskList, err := realClient.List(ctx, resourceGroupName+"notfound")
+			diskList, err := diskClient.List(ctx, resourceGroupName+"notfound")
 			Expect(err).To(HaveOccurred())
 			Expect(diskList).To(BeNil())
 		})
diff --git a/pkg/azclient/diskclient/testdata/Disk.yaml b/pkg/azclient/diskclient/testdata/diskclient.yaml
similarity index 82%
rename from pkg/azclient/diskclient/testdata/Disk.yaml
rename to pkg/azclient/diskclient/testdata/diskclient.yaml
index b862f2da2..0c3072960 100644
--- a/pkg/azclient/diskclient/testdata/Disk.yaml
+++ b/pkg/azclient/diskclient/testdata/diskclient.yaml
@@ -51,7 +51,7 @@ interactions:
                 - nosniff
         status: 201 Created
         code: 201
-        duration: 2.640252121s
+        duration: 3.254101101s
     - id: 1
       request:
         proto: HTTP/1.1
@@ -87,7 +87,7 @@ interactions:
         body: "{\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"provisioningState\": \"Updating\"\r\n  }\r\n}"
         headers:
             Azure-Asyncoperation:
-                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5b40bbd0-cb76-493d-8e3d-cc444b9fa207?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
+                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a9899e5c-ae90-4b72-93f6-e1f9e024583b?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
             Cache-Control:
                 - no-cache
             Content-Length:
@@ -97,7 +97,7 @@ interactions:
             Expires:
                 - "-1"
             Location:
-                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5b40bbd0-cb76-493d-8e3d-cc444b9fa207?p=75f6570f-3039-4f38-a9f4-507eba1684c0&monitor=true&api-version=2022-07-02
+                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a9899e5c-ae90-4b72-93f6-e1f9e024583b?p=75f6570f-3039-4f38-a9f4-507eba1684c0&monitor=true&api-version=2022-07-02
             Pragma:
                 - no-cache
             Server:
@@ -108,12 +108,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/CreateUpdateDisks3Min;2999,Microsoft.Compute/CreateUpdateDisks30Min;24999
+                - Microsoft.Compute/CreateUpdateDisks3Min;2999,Microsoft.Compute/CreateUpdateDisks30Min;24995
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 202 Accepted
         code: 202
-        duration: 3.95939954s
+        duration: 4.52384481s
     - id: 2
       request:
         proto: HTTP/1.1
@@ -130,7 +130,7 @@ interactions:
         headers:
             Test-Request-Attempt:
                 - "0"
-        url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/5b40bbd0-cb76-493d-8e3d-cc444b9fa207?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
+        url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/a9899e5c-ae90-4b72-93f6-e1f9e024583b?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
         method: GET
       response:
         proto: HTTP/1.1
@@ -141,7 +141,7 @@ interactions:
         trailer: {}
         content_length: -1
         uncompressed: true
-        body: "{\r\n  \"startTime\": \"2023-05-15T08:27:53.208707+00:00\",\r\n  \"endTime\": \"2023-05-15T08:27:53.3337068+00:00\",\r\n  \"status\": \"Succeeded\",\r\n  \"properties\": {\r\n    \"output\": {\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"networkAccessPolicy\": \"AllowAll\",\r\n    \"publicNetworkAccess\": \"Enabled\",\r\n    \"timeCreated\": \"2023-05-15T08:27:53.2243334+00:00\",\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\n    \"uniqueId\": \"eb6fb600-c11e-4489-80be-1ac36aa57e1f\"\r\n  }\r\n}\r\n  },\r\n  \"name\": \"5b40bbd0-cb76-493d-8e3d-cc444b9fa207\"\r\n}"
+        body: "{\r\n  \"startTime\": \"2023-03-28T04:26:35.2126013+00:00\",\r\n  \"endTime\": \"2023-03-28T04:26:35.3063503+00:00\",\r\n  \"status\": \"Succeeded\",\r\n  \"properties\": {\r\n    \"output\": {\"name\":\"testdisk\",\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\"type\":\"Microsoft.Compute/disks\",\"location\":\"eastus\",\"sku\":{\"name\":\"Standard_LRS\",\"tier\":\"Standard\"},\"properties\":{\"creationData\":{\"createOption\":\"Empty\"},\"diskSizeGB\":200,\"diskIOPSReadWrite\":500,\"diskMBpsReadWrite\":60,\"encryption\":{\"type\":\"EncryptionAtRestWithPlatformKey\"},\"networkAccessPolicy\":\"AllowAll\",\"publicNetworkAccess\":\"Enabled\",\"timeCreated\":\"2023-03-28T04:26:35.2126013+00:00\",\"provisioningState\":\"Succeeded\",\"diskState\":\"Unattached\",\"diskSizeBytes\":214748364800,\"uniqueId\":\"bb4e337f-0a3d-4715-b663-d702b0ac4e29\"}}\r\n  },\r\n  \"name\": \"a9899e5c-ae90-4b72-93f6-e1f9e024583b\"\r\n}"
         headers:
             Cache-Control:
                 - no-cache
@@ -161,12 +161,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/GetOperation3Min;49999,Microsoft.Compute/GetOperation30Min;399999
+                - Microsoft.Compute/GetOperation3Min;49998,Microsoft.Compute/GetOperation30Min;399987
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 200 OK
         code: 200
-        duration: 810.634425ms
+        duration: 2.427411007s
     - id: 3
       request:
         proto: HTTP/1.1
@@ -194,7 +194,7 @@ interactions:
         trailer: {}
         content_length: -1
         uncompressed: true
-        body: "{\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"networkAccessPolicy\": \"AllowAll\",\r\n    \"publicNetworkAccess\": \"Enabled\",\r\n    \"timeCreated\": \"2023-05-15T08:27:53.2243334+00:00\",\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\n    \"uniqueId\": \"eb6fb600-c11e-4489-80be-1ac36aa57e1f\"\r\n  }\r\n}"
+        body: "{\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"networkAccessPolicy\": \"AllowAll\",\r\n    \"publicNetworkAccess\": \"Enabled\",\r\n    \"timeCreated\": \"2023-03-28T04:26:35.2126013+00:00\",\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\n    \"uniqueId\": \"bb4e337f-0a3d-4715-b663-d702b0ac4e29\"\r\n  }\r\n}"
         headers:
             Cache-Control:
                 - no-cache
@@ -214,12 +214,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/LowCostGet3Min;14999,Microsoft.Compute/LowCostGet30Min;119972
+                - Microsoft.Compute/LowCostGet3Min;14997,Microsoft.Compute/LowCostGet30Min;119967
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 200 OK
         code: 200
-        duration: 458.749233ms
+        duration: 607.347377ms
     - id: 4
       request:
         proto: HTTP/1.1
@@ -249,7 +249,7 @@ interactions:
         trailer: {}
         content_length: -1
         uncompressed: true
-        body: "{\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"networkAccessPolicy\": \"AllowAll\",\r\n    \"publicNetworkAccess\": \"Enabled\",\r\n    \"timeCreated\": \"2023-05-15T08:27:53.2243334+00:00\",\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\n    \"uniqueId\": \"eb6fb600-c11e-4489-80be-1ac36aa57e1f\"\r\n  }\r\n}"
+        body: "{\r\n  \"name\": \"testdisk\",\r\n  \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n  \"type\": \"Microsoft.Compute/disks\",\r\n  \"location\": \"eastus\",\r\n  \"sku\": {\r\n    \"name\": \"Standard_LRS\",\r\n    \"tier\": \"Standard\"\r\n  },\r\n  \"properties\": {\r\n    \"creationData\": {\r\n      \"createOption\": \"Empty\"\r\n    },\r\n    \"diskSizeGB\": 200,\r\n    \"diskIOPSReadWrite\": 500,\r\n    \"diskMBpsReadWrite\": 60,\r\n    \"encryption\": {\r\n      \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n    },\r\n    \"networkAccessPolicy\": \"AllowAll\",\r\n    \"publicNetworkAccess\": \"Enabled\",\r\n    \"timeCreated\": \"2023-03-28T04:26:35.2126013+00:00\",\r\n    \"provisioningState\": \"Succeeded\",\r\n    \"diskState\": \"Unattached\",\r\n    \"diskSizeBytes\": 214748364800,\r\n    \"uniqueId\": \"bb4e337f-0a3d-4715-b663-d702b0ac4e29\"\r\n  }\r\n}"
         headers:
             Cache-Control:
                 - no-cache
@@ -269,12 +269,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/LowCostGet3Min;14998,Microsoft.Compute/LowCostGet30Min;119971
+                - Microsoft.Compute/LowCostGet3Min;14996,Microsoft.Compute/LowCostGet30Min;119966
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 200 OK
         code: 200
-        duration: 444.621037ms
+        duration: 1.271801491s
     - id: 5
       request:
         proto: HTTP/1.1
@@ -304,7 +304,7 @@ interactions:
         trailer: {}
         content_length: -1
         uncompressed: true
-        body: "{\r\n  \"value\": [\r\n    {\r\n      \"name\": \"testdisk\",\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n      \"type\": \"Microsoft.Compute/disks\",\r\n      \"location\": \"eastus\",\r\n      \"sku\": {\r\n        \"name\": \"Standard_LRS\",\r\n        \"tier\": \"Standard\"\r\n      },\r\n      \"properties\": {\r\n        \"creationData\": {\r\n          \"createOption\": \"Empty\"\r\n        },\r\n        \"diskSizeGB\": 200,\r\n        \"diskIOPSReadWrite\": 500,\r\n        \"diskMBpsReadWrite\": 60,\r\n        \"encryption\": {\r\n          \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n        },\r\n        \"networkAccessPolicy\": \"AllowAll\",\r\n        \"publicNetworkAccess\": \"Enabled\",\r\n        \"timeCreated\": \"2023-05-15T08:27:53.2243334+00:00\",\r\n        \"provisioningState\": \"Succeeded\",\r\n        \"diskState\": \"Unattached\",\r\n        \"diskSizeBytes\": 214748364800,\r\n        \"uniqueId\": \"eb6fb600-c11e-4489-80be-1ac36aa57e1f\"\r\n      }\r\n    }\r\n  ]\r\n}"
+        body: "{\r\n  \"value\": [\r\n    {\r\n      \"name\": \"testdisk\",\r\n      \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/aks-cit/providers/Microsoft.Compute/disks/testdisk\",\r\n      \"type\": \"Microsoft.Compute/disks\",\r\n      \"location\": \"eastus\",\r\n      \"sku\": {\r\n        \"name\": \"Standard_LRS\",\r\n        \"tier\": \"Standard\"\r\n      },\r\n      \"properties\": {\r\n        \"creationData\": {\r\n          \"createOption\": \"Empty\"\r\n        },\r\n        \"diskSizeGB\": 200,\r\n        \"diskIOPSReadWrite\": 500,\r\n        \"diskMBpsReadWrite\": 60,\r\n        \"encryption\": {\r\n          \"type\": \"EncryptionAtRestWithPlatformKey\"\r\n        },\r\n        \"networkAccessPolicy\": \"AllowAll\",\r\n        \"publicNetworkAccess\": \"Enabled\",\r\n        \"timeCreated\": \"2023-03-28T04:26:35.2126013+00:00\",\r\n        \"provisioningState\": \"Succeeded\",\r\n        \"diskState\": \"Unattached\",\r\n        \"diskSizeBytes\": 214748364800,\r\n        \"uniqueId\": \"bb4e337f-0a3d-4715-b663-d702b0ac4e29\"\r\n      }\r\n    }\r\n  ]\r\n}"
         headers:
             Cache-Control:
                 - no-cache
@@ -324,12 +324,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/HighCostGet3Min;239,Microsoft.Compute/HighCostGet30Min;1919
+                - Microsoft.Compute/HighCostGet3Min;239,Microsoft.Compute/HighCostGet30Min;1918
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 200 OK
         code: 200
-        duration: 978.641681ms
+        duration: 597.663396ms
     - id: 6
       request:
         proto: HTTP/1.1
@@ -359,7 +359,7 @@ interactions:
         body: ""
         headers:
             Azure-Asyncoperation:
-                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/29a78112-0a36-4f50-be83-ea48620dc2cf?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
+                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/b812e0ba-cb6f-4356-b365-90b75e24ef21?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
             Cache-Control:
                 - no-cache
             Content-Length:
@@ -367,7 +367,7 @@ interactions:
             Expires:
                 - "-1"
             Location:
-                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/29a78112-0a36-4f50-be83-ea48620dc2cf?p=75f6570f-3039-4f38-a9f4-507eba1684c0&monitor=true&api-version=2022-07-02
+                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/b812e0ba-cb6f-4356-b365-90b75e24ef21?p=75f6570f-3039-4f38-a9f4-507eba1684c0&monitor=true&api-version=2022-07-02
             Pragma:
                 - no-cache
             Server:
@@ -378,12 +378,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/DeleteDisks3Min;2999,Microsoft.Compute/DeleteDisks30Min;23975
+                - Microsoft.Compute/DeleteDisks3Min;2999,Microsoft.Compute/DeleteDisks30Min;23972
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 202 Accepted
         code: 202
-        duration: 729.141108ms
+        duration: 1.015571693s
     - id: 7
       request:
         proto: HTTP/1.1
@@ -400,7 +400,7 @@ interactions:
         headers:
             Test-Request-Attempt:
                 - "0"
-        url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/29a78112-0a36-4f50-be83-ea48620dc2cf?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
+        url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/b812e0ba-cb6f-4356-b365-90b75e24ef21?p=75f6570f-3039-4f38-a9f4-507eba1684c0&api-version=2022-07-02
         method: GET
       response:
         proto: HTTP/1.1
@@ -411,7 +411,7 @@ interactions:
         trailer: {}
         content_length: -1
         uncompressed: true
-        body: "{\r\n  \"startTime\": \"2023-05-15T08:27:58.224329+00:00\",\r\n  \"endTime\": \"2023-05-15T08:27:58.3805787+00:00\",\r\n  \"status\": \"Succeeded\",\r\n  \"name\": \"29a78112-0a36-4f50-be83-ea48620dc2cf\"\r\n}"
+        body: "{\r\n  \"startTime\": \"2023-03-28T04:26:52.7125176+00:00\",\r\n  \"endTime\": \"2023-03-28T04:26:52.8062691+00:00\",\r\n  \"status\": \"Succeeded\",\r\n  \"name\": \"b812e0ba-cb6f-4356-b365-90b75e24ef21\"\r\n}"
         headers:
             Cache-Control:
                 - no-cache
@@ -431,12 +431,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/GetOperation3Min;49998,Microsoft.Compute/GetOperation30Min;399998
+                - Microsoft.Compute/GetOperation3Min;49997,Microsoft.Compute/GetOperation30Min;399986
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 200 OK
         code: 200
-        duration: 264.725498ms
+        duration: 390.305897ms
     - id: 8
       request:
         proto: HTTP/1.1
@@ -489,12 +489,12 @@ interactions:
             X-Content-Type-Options:
                 - nosniff
             X-Ms-Ratelimit-Remaining-Resource:
-                - Microsoft.Compute/CreateUpdateDisks3Min;2998,Microsoft.Compute/CreateUpdateDisks30Min;24998
+                - Microsoft.Compute/CreateUpdateDisks3Min;2998,Microsoft.Compute/CreateUpdateDisks30Min;24994
             X-Ms-Served-By:
-                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133284967024492923
+                - 75f6570f-3039-4f38-a9f4-507eba1684c0_133119752591600054
         status: 400 Bad Request
         code: 400
-        duration: 525.096443ms
+        duration: 656.432595ms
     - id: 9
       request:
         proto: HTTP/1.1
@@ -543,7 +543,7 @@ interactions:
                 - gateway
         status: 404 Not Found
         code: 404
-        duration: 266.356727ms
+        duration: 346.1639ms
     - id: 10
       request:
         proto: HTTP/1.1
@@ -592,7 +592,7 @@ interactions:
                 - gateway
         status: 404 Not Found
         code: 404
-        duration: 94.768363ms
+        duration: 124.2059ms
     - id: 11
       request:
         proto: HTTP/1.1
@@ -639,7 +639,7 @@ interactions:
                 - nosniff
         status: 202 Accepted
         code: 202
-        duration: 3.071871808s
+        duration: 4.190411402s
     - id: 12
       request:
         proto: HTTP/1.1
@@ -684,7 +684,7 @@ interactions:
                 - nosniff
         status: 202 Accepted
         code: 202
-        duration: 420.948854ms
+        duration: 819.3435ms
     - id: 13
       request:
         proto: HTTP/1.1
@@ -729,7 +729,7 @@ interactions:
                 - nosniff
         status: 202 Accepted
         code: 202
-        duration: 420.706602ms
+        duration: 566.70429ms
     - id: 14
       request:
         proto: HTTP/1.1
@@ -774,7 +774,7 @@ interactions:
                 - nosniff
         status: 202 Accepted
         code: 202
-        duration: 434.081166ms
+        duration: 653.521166ms
     - id: 15
       request:
         proto: HTTP/1.1
@@ -793,51 +793,6 @@ interactions:
                 - "3"
         url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1BS1M6MkRDSVQtRUFTVFVTIiwiam9iTG9jYXRpb24iOiJlYXN0dXMifQ?api-version=2021-04-01
         method: GET
-      response:
-        proto: HTTP/1.1
-        proto_major: 1
-        proto_minor: 1
-        transfer_encoding: []
-        trailer: {}
-        content_length: 0
-        uncompressed: false
-        body: ""
-        headers:
-            Cache-Control:
-                - no-cache
-            Content-Length:
-                - "0"
-            Expires:
-                - "-1"
-            Location:
-                - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1BS1M6MkRDSVQtRUFTVFVTIiwiam9iTG9jYXRpb24iOiJlYXN0dXMifQ?api-version=2021-04-01
-            Pragma:
-                - no-cache
-            Strict-Transport-Security:
-                - max-age=31536000; includeSubDomains
-            X-Content-Type-Options:
-                - nosniff
-        status: 202 Accepted
-        code: 202
-        duration: 433.436575ms
-    - id: 16
-      request:
-        proto: HTTP/1.1
-        proto_major: 1
-        proto_minor: 1
-        content_length: 0
-        transfer_encoding: []
-        trailer: {}
-        host: management.azure.com
-        remote_addr: ""
-        request_uri: ""
-        body: ""
-        form: {}
-        headers:
-            Test-Request-Attempt:
-                - "4"
-        url: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IlJFU09VUkNFR1JPVVBERUxFVElPTkpPQi1BS1M6MkRDSVQtRUFTVFVTIiwiam9iTG9jYXRpb24iOiJlYXN0dXMifQ?api-version=2021-04-01
-        method: GET
       response:
         proto: HTTP/1.1
         proto_major: 1
@@ -862,4 +817,4 @@ interactions:
                 - nosniff
         status: 200 OK
         code: 200
-        duration: 430.058764ms
+        duration: 575.44989ms
diff --git a/pkg/azclient/interfaceclient/interfaceclient_suite_test.go b/pkg/azclient/interfaceclient/interfaceclient_suite_test.go
deleted file mode 100644
index 14c6468a1..000000000
--- a/pkg/azclient/interfaceclient/interfaceclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package interfaceclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/Interface")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/interfaceclient/zz_generated_client.go b/pkg/azclient/interfaceclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/interfaceclient/zz_generated_client.go
rename to pkg/azclient/interfaceclient/zz_generated.client.go
diff --git a/pkg/azclient/loadbalancerclient/loadbalancerclient_suite_test.go b/pkg/azclient/loadbalancerclient/loadbalancerclient_suite_test.go
deleted file mode 100644
index 201b86a7e..000000000
--- a/pkg/azclient/loadbalancerclient/loadbalancerclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package loadbalancerclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/LoadBalancer")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/loadbalancerclient/zz_generated_client.go b/pkg/azclient/loadbalancerclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/loadbalancerclient/zz_generated_client.go
rename to pkg/azclient/loadbalancerclient/zz_generated.client.go
diff --git a/pkg/azclient/managedclusterclient/managedclusterclient_suite_test.go b/pkg/azclient/managedclusterclient/managedclusterclient_suite_test.go
deleted file mode 100644
index ca041b18f..000000000
--- a/pkg/azclient/managedclusterclient/managedclusterclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package managedclusterclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/ManagedCluster")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/managedclusterclient/zz_generated_client.go b/pkg/azclient/managedclusterclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/managedclusterclient/zz_generated_client.go
rename to pkg/azclient/managedclusterclient/zz_generated.client.go
diff --git a/pkg/azclient/privateendpointclient/privateendpointclient_suite_test.go b/pkg/azclient/privateendpointclient/privateendpointclient_suite_test.go
deleted file mode 100644
index 38e34149a..000000000
--- a/pkg/azclient/privateendpointclient/privateendpointclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package privateendpointclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/PrivateEndpoint")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/privateendpointclient/zz_generated_client.go b/pkg/azclient/privateendpointclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/privateendpointclient/zz_generated_client.go
rename to pkg/azclient/privateendpointclient/zz_generated.client.go
diff --git a/pkg/azclient/privatelinkserviceclient/privatelinkserviceclient_suite_test.go b/pkg/azclient/privatelinkserviceclient/privatelinkserviceclient_suite_test.go
deleted file mode 100644
index 433a456ec..000000000
--- a/pkg/azclient/privatelinkserviceclient/privatelinkserviceclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package privatelinkserviceclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/PrivateLinkService")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/privatelinkserviceclient/zz_generated_client.go b/pkg/azclient/privatelinkserviceclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/privatelinkserviceclient/zz_generated_client.go
rename to pkg/azclient/privatelinkserviceclient/zz_generated.client.go
diff --git a/pkg/azclient/privatezoneclient/privatezoneclient_suite_test.go b/pkg/azclient/privatezoneclient/privatezoneclient_suite_test.go
deleted file mode 100644
index 1ad0c416c..000000000
--- a/pkg/azclient/privatezoneclient/privatezoneclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package privatezoneclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/PrivateZone")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/privatezoneclient/zz_generated_client.go b/pkg/azclient/privatezoneclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/privatezoneclient/zz_generated_client.go
rename to pkg/azclient/privatezoneclient/zz_generated.client.go
diff --git a/pkg/azclient/publicipaddressclient/publicipaddressclient_suite_test.go b/pkg/azclient/publicipaddressclient/publicipaddressclient_suite_test.go
deleted file mode 100644
index 30367b9e5..000000000
--- a/pkg/azclient/publicipaddressclient/publicipaddressclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package publicipaddressclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/PublicIPAddress")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/publicipaddressclient/zz_generated_client.go b/pkg/azclient/publicipaddressclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/publicipaddressclient/zz_generated_client.go
rename to pkg/azclient/publicipaddressclient/zz_generated.client.go
diff --git a/pkg/azclient/routetableclient/routetableclient_suite_test.go b/pkg/azclient/routetableclient/routetableclient_suite_test.go
deleted file mode 100644
index 8f185cc8c..000000000
--- a/pkg/azclient/routetableclient/routetableclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package routetableclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/RouteTable")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/routetableclient/zz_generated_client.go b/pkg/azclient/routetableclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/routetableclient/zz_generated_client.go
rename to pkg/azclient/routetableclient/zz_generated.client.go
diff --git a/pkg/azclient/securitygroupclient/securitygroupclient_suite_test.go b/pkg/azclient/securitygroupclient/securitygroupclient_suite_test.go
deleted file mode 100644
index ca0c3e7fc..000000000
--- a/pkg/azclient/securitygroupclient/securitygroupclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package securitygroupclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/SecurityGroup")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/securitygroupclient/zz_generated_client.go b/pkg/azclient/securitygroupclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/securitygroupclient/zz_generated_client.go
rename to pkg/azclient/securitygroupclient/zz_generated.client.go
diff --git a/pkg/azclient/virtualmachineclient/virtualmachineclient_suite_test.go b/pkg/azclient/virtualmachineclient/virtualmachineclient_suite_test.go
deleted file mode 100644
index dc7013809..000000000
--- a/pkg/azclient/virtualmachineclient/virtualmachineclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package virtualmachineclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/VirtualMachine")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/azclient/virtualmachineclient/zz_generated_client.go b/pkg/azclient/virtualmachineclient/zz_generated.client.go
similarity index 100%
rename from pkg/azclient/virtualmachineclient/zz_generated_client.go
rename to pkg/azclient/virtualmachineclient/zz_generated.client.go
diff --git a/pkg/azclient/virtualmachinescalesetclient/virtualmachinescalesetclient_suite_test.go b/pkg/azclient/virtualmachinescalesetclient/virtualmachinescalesetclient_suite_test.go
deleted file mode 100644
index 27fefc0e4..000000000
--- a/pkg/azclient/virtualmachinescalesetclient/virtualmachinescalesetclient_suite_test.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// /*
-// Copyright The Kubernetes Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// */
-
-// Code generated by client-gen. DO NOT EDIT.
-package virtualmachinescalesetclient
-
-import (
-	"context"
-	"testing"
-	"time"
-
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
-	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
-	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-
-	"sigs.k8s.io/cloud-provider-azure/pkg/azclient/recording"
-)
-
-func TestClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "Client Suite")
-}
-
-var resourceGroupName = "aks-cit"
-var resourceName = "testdisk"
-var subscriptionID string
-var location = "eastus"
-var resourceGroupClient *armresources.ResourceGroupsClient
-var err error
-var recorder *recording.Recorder
-var realClient Interface
-
-var _ = BeforeSuite(func(ctx context.Context) {
-	recorder, err = recording.NewRecorder("testdata/VirtualMachineScaleSet")
-	Expect(err).ToNot(HaveOccurred())
-	subscriptionID = recorder.SubscriptionID()
-	Expect(err).NotTo(HaveOccurred())
-	cred := recorder.TokenCredential()
-	resourceGroupClient, err = armresources.NewResourceGroupsClient(subscriptionID, cred, &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	realClient, err = New(subscriptionID, recorder.TokenCredential(), &arm.ClientOptions{
-		ClientOptions: azcore.ClientOptions{
-			Retry: policy.RetryOptions{
-				MaxRetryDelay: 1 * time.Millisecond,
-				RetryDelay:    1 * time.Millisecond,
-			},
-			Transport: recorder.HTTPClient(),
-		},
-	})
-	Expect(err).NotTo(HaveOccurred())
-	_, err = resourceGroupClient.CreateOrUpdate(
-		ctx,
-		resourceGroupName,
-		armresources.ResourceGroup{
-			Location: to.Ptr(location),
-		},
-		nil)
-	Expect(err).NotTo(HaveOccurred())
-})
-
-var _ = AfterSuite(func(ctx context.Context) {
-	pollerResp, err := resourceGroupClient.BeginDelete(ctx, resourceGroupName, nil)
-	Expect(err).NotTo(HaveOccurred())
-	_, err = pollerResp.PollUntilDone(ctx, nil)
-	Expect(err).NotTo(HaveOccurred())
-
-	err = recorder.Stop()
-	Expect(err).ToNot(HaveOccurred())
-})
diff --git a/pkg/provider/azure_loadbalancer_test.go b/pkg/provider/azure_loadbalancer_test.go
index 6d6f450e5..dc682cf93 100644
--- a/pkg/provider/azure_loadbalancer_test.go
+++ b/pkg/provider/azure_loadbalancer_test.go
@@ -1085,6 +1085,17 @@ func TestServiceOwnsPublicIP(t *testing.T) {
 			serviceLBIP:  "1.1.1.1",
 			expectedOwns: true,
 		},
+		{
+			desc: "should be user-assigned pip if it has no tags",
+			pip: &network.PublicIPAddress{
+				PublicIPAddressPropertiesFormat: &network.PublicIPAddressPropertiesFormat{
+					IPAddress: pointer.String("1.2.3.4"),
+				},
+			},
+			serviceLBIP:             "1.2.3.4",
+			expectedOwns:            true,
+			expectedUserAssignedPIP: true,
+		},
 	}
 
 	for i, c := range tests {
@@ -2209,10 +2220,11 @@ func TestFindMatchedPIPByLoadBalancerIP(t *testing.T) {
 		},
 	}
 	testCases := []struct {
-		desc          string
-		pips          []network.PublicIPAddress
-		expectedPIP   *network.PublicIPAddress
-		expectedError bool
+		desc               string
+		pips               []network.PublicIPAddress
+		shouldRefreshCache bool
+		expectedPIP        *network.PublicIPAddress
+		expectedError      bool
 	}{
 		{
 			desc:        "findMatchedPIPByLoadBalancerIP shall return the matched ip",
@@ -2220,9 +2232,16 @@ func TestFindMatchedPIPByLoadBalancerIP(t *testing.T) {
 			expectedPIP: &testPIP,
 		},
 		{
-			desc:          "findMatchedPIPByLoadBalancerIP shall return error if ip is not found",
-			pips:          []network.PublicIPAddress{},
-			expectedError: true,
+			desc:               "findMatchedPIPByLoadBalancerIP shall return error if ip is not found",
+			pips:               []network.PublicIPAddress{},
+			shouldRefreshCache: true,
+			expectedError:      true,
+		},
+		{
+			desc:               "findMatchedPIPByLoadBalancerIP should refresh cache if no matched ip is found",
+			pips:               []network.PublicIPAddress{testPIP},
+			shouldRefreshCache: true,
+			expectedPIP:        &testPIP,
 		},
 	}
 	for _, test := range testCases {
@@ -2232,6 +2251,9 @@ func TestFindMatchedPIPByLoadBalancerIP(t *testing.T) {
 			setServiceLoadBalancerIP(&service, "1.2.3.4")
 
 			mockPIPsClient := az.PublicIPAddressesClient.(*mockpublicipclient.MockInterface)
+			if test.shouldRefreshCache {
+				mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return([]network.PublicIPAddress{}, nil)
+			}
 			mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return(test.pips, nil)
 			pip, err := az.findMatchedPIPByLoadBalancerIP(&service, "1.2.3.4", "rg")
 			assert.Equal(t, test.expectedPIP, pip)
@@ -2288,7 +2310,7 @@ func TestDeterminePublicIPName(t *testing.T) {
 			setServiceLoadBalancerIP(&service, test.loadBalancerIP)
 
 			mockPIPsClient := az.PublicIPAddressesClient.(*mockpublicipclient.MockInterface)
-			mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return(test.existingPIPs, nil).MaxTimes(1)
+			mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return(test.existingPIPs, nil).MaxTimes(2)
 			mockPIPsClient.EXPECT().CreateOrUpdate(gomock.Any(), "rg", gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
 			for _, existingPIP := range test.existingPIPs {
 				mockPIPsClient.EXPECT().Get(gomock.Any(), "rg", *existingPIP.Name, gomock.Any()).Return(existingPIP, nil).AnyTimes()
@@ -4359,7 +4381,8 @@ func TestSafeDeletePublicIP(t *testing.T) {
 		desc          string
 		pip           *network.PublicIPAddress
 		lb            *network.LoadBalancer
-		expectedError bool
+		listError     *retry.Error
+		expectedError error
 	}{
 		{
 			desc: "safeDeletePublicIP shall delete corresponding ip configurations and lb rules",
@@ -4386,12 +4409,30 @@ func TestSafeDeletePublicIP(t *testing.T) {
 				},
 			},
 		},
+		{
+			desc: "safeDeletePublicIP should return error if failed to list pip",
+			pip: &network.PublicIPAddress{
+				Name: pointer.String("pip1"),
+				PublicIPAddressPropertiesFormat: &network.PublicIPAddressPropertiesFormat{
+					IPConfiguration: &network.IPConfiguration{
+						ID: pointer.String("id1"),
+					},
+				},
+			},
+			listError:     retry.NewError(false, errors.New("error")),
+			expectedError: retry.NewError(false, errors.New("error")).Error(),
+		},
 	}
 
 	for _, test := range testCases {
 		t.Run(test.desc, func(t *testing.T) {
 			az := GetTestCloud(ctrl)
 			mockPIPsClient := az.PublicIPAddressesClient.(*mockpublicipclient.MockInterface)
+			if test.pip != nil &&
+				test.pip.PublicIPAddressPropertiesFormat != nil &&
+				test.pip.IPConfiguration != nil {
+				mockPIPsClient.EXPECT().List(gomock.Any(), gomock.Any()).Return([]network.PublicIPAddress{*test.pip}, test.listError)
+			}
 			mockPIPsClient.EXPECT().CreateOrUpdate(gomock.Any(), "rg", "pip1", gomock.Any()).Return(nil).AnyTimes()
 			mockPIPsClient.EXPECT().Delete(gomock.Any(), "rg", "pip1").Return(nil).AnyTimes()
 			err := az.PublicIPAddressesClient.CreateOrUpdate(context.TODO(), "rg", "pip1", network.PublicIPAddress{
@@ -4404,13 +4445,19 @@ func TestSafeDeletePublicIP(t *testing.T) {
 			})
 			assert.NoError(t, err.Error())
 			service := getTestService("test1", v1.ProtocolTCP, nil, false, 80)
-			mockLBsClient := mockloadbalancerclient.NewMockInterface(ctrl)
-			mockLBsClient.EXPECT().CreateOrUpdate(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
-			az.LoadBalancerClient = mockLBsClient
+			if test.listError == nil {
+				mockLBsClient := mockloadbalancerclient.NewMockInterface(ctrl)
+				mockLBsClient.EXPECT().CreateOrUpdate(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
+				az.LoadBalancerClient = mockLBsClient
+			}
 			rerr := az.safeDeletePublicIP(&service, "rg", test.pip, test.lb)
-			assert.Equal(t, 0, len(*test.lb.FrontendIPConfigurations))
-			assert.Equal(t, 0, len(*test.lb.LoadBalancingRules))
-			assert.Equal(t, test.expectedError, rerr != nil)
+			if test.expectedError == nil {
+				assert.Equal(t, 0, len(*test.lb.FrontendIPConfigurations))
+				assert.Equal(t, 0, len(*test.lb.LoadBalancingRules))
+				assert.NoError(t, rerr)
+			} else {
+				assert.Equal(t, rerr.Error(), test.listError.Error().Error())
+			}
 		})
 	}
 }
diff --git a/pkg/provider/azure_managedDiskController_test.go b/pkg/provider/azure_managedDiskController_test.go
index 96763e416..8ac535a53 100644
--- a/pkg/provider/azure_managedDiskController_test.go
+++ b/pkg/provider/azure_managedDiskController_test.go
@@ -89,7 +89,7 @@ func TestCreateManagedDisk(t *testing.T) {
 			desc:                "disk Id and no error shall be returned if everything is good with PremiumV2LRS storage account",
 			diskID:              disk1ID,
 			diskName:            disk1Name,
-			storageAccountType:  compute.PremiumV2LRS,
+			storageAccountType:  consts.PremiumV2LRS,
 			diskIOPSReadWrite:   "100",
 			diskMBPSReadWrite:   "100",
 			diskEncryptionSetID: goodDiskEncryptionSetID,
@@ -101,7 +101,7 @@ func TestCreateManagedDisk(t *testing.T) {
 			desc:                "disk Id and no error shall be returned if everything is good with PremiumV2LRS storage account",
 			diskID:              disk1ID,
 			diskName:            disk1Name,
-			storageAccountType:  compute.PremiumV2LRS,
+			storageAccountType:  consts.PremiumV2LRS,
 			diskIOPSReadWrite:   "",
 			diskMBPSReadWrite:   "",
 			diskEncryptionSetID: goodDiskEncryptionSetID,
diff --git a/pkg/provider/azure_standard_test.go b/pkg/provider/azure_standard_test.go
index 0e6804b24..f20c6b12c 100644
--- a/pkg/provider/azure_standard_test.go
+++ b/pkg/provider/azure_standard_test.go
@@ -2098,7 +2098,7 @@ func TestServiceOwnsFrontendIP(t *testing.T) {
 			cloud := GetTestCloud(ctrl)
 			if test.existingPIPs != nil {
 				mockPIPsClient := cloud.PublicIPAddressesClient.(*mockpublicipclient.MockInterface)
-				mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return(test.existingPIPs, nil)
+				mockPIPsClient.EXPECT().List(gomock.Any(), "rg").Return(test.existingPIPs, nil).MaxTimes(2)
 			}
 			isOwned, isPrimary, err := cloud.serviceOwnsFrontendIP(test.fip, test.service)
 			assert.Equal(t, test.expectedErr, err)
diff --git a/pkg/provider/azure_wrap_test.go b/pkg/provider/azure_wrap_test.go
index d5bb2162e..4caee5195 100644
--- a/pkg/provider/azure_wrap_test.go
+++ b/pkg/provider/azure_wrap_test.go
@@ -396,7 +396,7 @@ func TestListPIP(t *testing.T) {
 			if test.expectPIPList {
 				mockPIPsClient.EXPECT().List(gomock.Any(), az.ResourceGroup).Return(test.existingPIPs, nil).MaxTimes(2)
 			}
-			pips, err := az.listPIP(az.ResourceGroup)
+			pips, err := az.listPIP(az.ResourceGroup, azcache.CacheReadTypeDefault)
 			if test.expectPIPList {
 				assert.ElementsMatch(t, test.existingPIPs, pips)
 			} else {
diff --git a/site/content/en/development/e2e/e2e-tests.md b/site/content/en/development/e2e/e2e-tests.md
index ec67701e3..8c8611ce5 100644
--- a/site/content/en/development/e2e/e2e-tests.md
+++ b/site/content/en/development/e2e/e2e-tests.md
@@ -26,7 +26,7 @@ description: >
   Kubectl allows you to run command against Kubernetes cluster, which is also used for deploying CSI plugins. You can follow [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-binary-with-curl) to install kubectl. e.g. on Linux
 
   ```sh
-  curl -LO https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl
+  curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
   chmod +x kubectl
   sudo mv kubectl /usr/local/bin/
   ```
diff --git a/tests/e2e/network/service_annotations.go b/tests/e2e/network/service_annotations.go
index 60052b2ef..d91753282 100644
--- a/tests/e2e/network/service_annotations.go
+++ b/tests/e2e/network/service_annotations.go
@@ -218,7 +218,7 @@ var _ = Describe("Service with annotation", Label(utils.TestSuiteLabelServiceAnn
 		err = utils.DeleteService(cs, ns.Name, oldServiceName)
 		Expect(err).NotTo(HaveOccurred())
 
-		By("Check if PIP DNS label is deleted")
+		By("Check if PIP DNS label is not tagged onto the user-assigned pip")
 		for _, pipName := range pipNames {
 			deleted, err := ifPIPDNSLabelDeleted(tc, pipName)
 			Expect(err).NotTo(HaveOccurred())
diff --git a/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-md.yaml b/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-md.yaml
deleted file mode 100644
index 2c07a0420..000000000
--- a/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-md.yaml
+++ /dev/null
@@ -1,265 +0,0 @@
-# Modified from: https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/test/ci/cluster-template-prow-ipv6.yaml
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: Cluster
-metadata:
-  name: ${CLUSTER_NAME}
-  namespace: default
-spec:
-  clusterNetwork:
-    pods:
-      cidrBlocks:
-      - 2001:1234:5678:9a40::/58
-    services:
-      cidrBlocks:
-      - fd00::/108
-  controlPlaneRef:
-    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
-    kind: KubeadmControlPlane
-    name: ${CLUSTER_NAME}-control-plane
-  infrastructureRef:
-    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-    kind: AzureCluster
-    name: ${CLUSTER_NAME}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureCluster
-metadata:
-  name: ${CLUSTER_NAME}
-  namespace: default
-spec:
-  additionalTags:
-    buildProvenance: ${BUILD_PROVENANCE}
-    creationTimestamp: ${TIMESTAMP}
-    jobName: ${JOB_NAME}
-  identityRef:
-    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-    kind: AzureClusterIdentity
-    name: ${CLUSTER_IDENTITY_NAME}
-  location: ${AZURE_LOCATION}
-  networkSpec:
-    subnets:
-    - cidrBlocks:
-      - 10.0.0.0/16
-      - 2001:1234:5678:9abc::/64
-      name: control-plane-subnet
-      role: control-plane
-    - cidrBlocks:
-      - 10.1.0.0/16
-      - 2001:1234:5678:9abd::/64
-      name: node-subnet
-      role: node
-    vnet:
-      cidrBlocks:
-      - 10.0.0.0/8
-      - 2001:1234:5678:9a00::/56
-      name: ${AZURE_VNET_NAME:=${CLUSTER_NAME}-vnet}
-  resourceGroup: ${AZURE_RESOURCE_GROUP:=${CLUSTER_NAME}}
-  subscriptionID: ${AZURE_SUBSCRIPTION_ID}
----
-apiVersion: controlplane.cluster.x-k8s.io/v1beta1
-kind: KubeadmControlPlane
-metadata:
-  name: ${CLUSTER_NAME}-control-plane
-  namespace: default
-spec:
-  kubeadmConfigSpec:
-    clusterConfiguration:
-      apiServer:
-        extraArgs:
-          bind-address: '::'
-          cloud-provider: external
-        timeoutForControlPlane: 20m
-      controllerManager:
-        extraArgs:
-          allocate-node-cidrs: "true"
-          bind-address: '::'
-          cloud-provider: external
-          cluster-cidr: 2001:1234:5678:9a40::/58
-          cluster-name: ${CLUSTER_NAME}
-          configure-cloud-routes: "true"
-          v: "4"
-      etcd:
-        local:
-          dataDir: /var/lib/etcddisk/etcd
-          extraArgs:
-            quota-backend-bytes: "8589934592"
-      scheduler:
-        extraArgs:
-          bind-address: '::'
-    diskSetup:
-      filesystems:
-      - device: /dev/disk/azure/scsi1/lun0
-        extraOpts:
-        - -E
-        - lazy_itable_init=1,lazy_journal_init=1
-        filesystem: ext4
-        label: etcd_disk
-      - device: ephemeral0.1
-        filesystem: ext4
-        label: ephemeral0
-        replaceFS: ntfs
-      partitions:
-      - device: /dev/disk/azure/scsi1/lun0
-        layout: true
-        overwrite: false
-        tableType: gpt
-    files:
-    - contentFrom:
-        secret:
-          key: control-plane-azure.json
-          name: ${CLUSTER_NAME}-control-plane-azure-json
-      owner: root:root
-      path: /etc/kubernetes/azure.json
-      permissions: "0644"
-    initConfiguration:
-      localAPIEndpoint:
-        advertiseAddress: '::'
-        bindPort: 6443
-      nodeRegistration:
-        kubeletExtraArgs:
-          azure-container-registry-config: /etc/kubernetes/azure.json
-          cloud-provider: external
-          cluster-dns: fd00::10
-        name: '{{ ds.meta_data["local_hostname"] }}'
-    joinConfiguration:
-      controlPlane:
-        localAPIEndpoint:
-          advertiseAddress: '::'
-          bindPort: 6443
-      nodeRegistration:
-        kubeletExtraArgs:
-          azure-container-registry-config: /etc/kubernetes/azure.json
-          cloud-provider: external
-          cluster-dns: fd00::10
-        name: '{{ ds.meta_data["local_hostname"] }}'
-    mounts:
-    - - LABEL=etcd_disk
-      - /var/lib/etcddisk
-    postKubeadmCommands:
-    - echo "DNSStubListener=no" >> /etc/systemd/resolved.conf
-    - mv /etc/resolv.conf /etc/resolv.conf.OLD && ln -s /run/systemd/resolve/resolv.conf
-      /etc/resolv.conf
-    - systemctl restart systemd-resolved
-    preKubeadmCommands: []
-  machineTemplate:
-    infrastructureRef:
-      apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-      kind: AzureMachineTemplate
-      name: ${CLUSTER_NAME}-control-plane
-  replicas: ${CONTROL_PLANE_MACHINE_COUNT}
-  version: ${KUBERNETES_VERSION}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureMachineTemplate
-metadata:
-  name: ${CLUSTER_NAME}-control-plane
-  namespace: default
-spec:
-  template:
-    spec:
-      dataDisks:
-      - diskSizeGB: 256
-        lun: 0
-        nameSuffix: etcddisk
-      enableIPForwarding: true
-      osDisk:
-        diskSizeGB: 128
-        osType: Linux
-      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
-      vmSize: ${AZURE_CONTROL_PLANE_MACHINE_TYPE}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureClusterIdentity
-metadata:
-  labels:
-    clusterctl.cluster.x-k8s.io/move-hierarchy: "true"
-  name: ${CLUSTER_IDENTITY_NAME}
-  namespace: default
-spec:
-  allowedNamespaces: {}
-  clientID: ${AZURE_CLIENT_ID}
-  clientSecret:
-    name: ${AZURE_CLUSTER_IDENTITY_SECRET_NAME}
-    namespace: ${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}
-  tenantID: ${AZURE_TENANT_ID}
-  type: ServicePrincipal
----
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: MachineDeployment
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  clusterName: ${CLUSTER_NAME}
-  replicas: ${WORKER_MACHINE_COUNT}
-  selector:
-    matchLabels: null
-  template:
-    spec:
-      bootstrap:
-        configRef:
-          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-          kind: KubeadmConfigTemplate
-          name: ${CLUSTER_NAME}-md-0
-      clusterName: ${CLUSTER_NAME}
-      infrastructureRef:
-        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-        kind: AzureMachineTemplate
-        name: ${CLUSTER_NAME}-md-0
-      version: ${KUBERNETES_VERSION}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureMachineTemplate
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  template:
-    spec:
-      enableIPForwarding: true
-      osDisk:
-        diskSizeGB: 30
-        managedDisk:
-          storageAccountType: Premium_LRS
-        osType: Linux
-      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
-      vmSize: ${AZURE_NODE_MACHINE_TYPE}
----
-apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-kind: KubeadmConfigTemplate
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  template:
-    spec:
-      clusterConfiguration:
-        apiServer:
-          extraArgs:
-            bind-address: '::'
-        controllerManager:
-          extraArgs:
-            bind-address: '::'
-        scheduler:
-          extraArgs:
-            bind-address: '::'
-      files:
-      - contentFrom:
-          secret:
-            key: worker-node-azure.json
-            name: ${CLUSTER_NAME}-md-0-azure-json
-        owner: root:root
-        path: /etc/kubernetes/azure.json
-        permissions: "0644"
-      joinConfiguration:
-        nodeRegistration:
-          kubeletExtraArgs:
-            azure-container-registry-config: /etc/kubernetes/azure.json
-            cloud-provider: external
-            cluster-dns: '[fd00::10]'
-          name: '{{ ds.meta_data["local_hostname"] }}'
-      postKubeadmCommands:
-      - echo "DNSStubListener=no" >> /etc/systemd/resolved.conf
-      - mv /etc/resolv.conf /etc/resolv.conf.OLD && ln -s /run/systemd/resolve/resolv.conf
-        /etc/resolv.conf
-      - systemctl restart systemd-resolved
diff --git a/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-mp.yaml b/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-mp.yaml
deleted file mode 100644
index f8900ff31..000000000
--- a/tests/k8s-azure/manifest/cluster-api/cluster-template-prow-ipv6-mp.yaml
+++ /dev/null
@@ -1,347 +0,0 @@
-# Modified from: https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/test/ci/cluster-template-prow-ipv6.yaml
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: Cluster
-metadata:
-  name: ${CLUSTER_NAME}
-  namespace: default
-spec:
-  clusterNetwork:
-    pods:
-      cidrBlocks:
-      - 2001:1234:5678:9a40::/58
-    services:
-      cidrBlocks:
-      - fd00::/108
-  controlPlaneRef:
-    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
-    kind: KubeadmControlPlane
-    name: ${CLUSTER_NAME}-control-plane
-  infrastructureRef:
-    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-    kind: AzureCluster
-    name: ${CLUSTER_NAME}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureCluster
-metadata:
-  name: ${CLUSTER_NAME}
-  namespace: default
-spec:
-  additionalTags:
-    buildProvenance: ${BUILD_PROVENANCE}
-    creationTimestamp: ${TIMESTAMP}
-    jobName: ${JOB_NAME}
-  identityRef:
-    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-    kind: AzureClusterIdentity
-    name: ${CLUSTER_IDENTITY_NAME}
-  location: ${AZURE_LOCATION}
-  networkSpec:
-    subnets:
-    - cidrBlocks:
-      - 10.0.0.0/16
-      - 2001:1234:5678:9abc::/64
-      name: control-plane-subnet
-      role: control-plane
-    - cidrBlocks:
-      - 10.1.0.0/16
-      - 2001:1234:5678:9abd::/64
-      name: node-subnet
-      role: node
-    vnet:
-      cidrBlocks:
-      - 10.0.0.0/8
-      - 2001:1234:5678:9a00::/56
-      name: ${AZURE_VNET_NAME:=${CLUSTER_NAME}-vnet}
-  resourceGroup: ${AZURE_RESOURCE_GROUP:=${CLUSTER_NAME}}
-  subscriptionID: ${AZURE_SUBSCRIPTION_ID}
----
-apiVersion: controlplane.cluster.x-k8s.io/v1beta1
-kind: KubeadmControlPlane
-metadata:
-  name: ${CLUSTER_NAME}-control-plane
-  namespace: default
-spec:
-  kubeadmConfigSpec:
-    clusterConfiguration:
-      apiServer:
-        extraArgs:
-          bind-address: '::'
-          cloud-provider: external
-        timeoutForControlPlane: 20m
-      controllerManager:
-        extraArgs:
-          allocate-node-cidrs: "true"
-          bind-address: '::'
-          cloud-provider: external
-          cluster-cidr: 2001:1234:5678:9a40::/58
-          cluster-name: ${CLUSTER_NAME}
-          configure-cloud-routes: "true"
-          v: "4"
-      etcd:
-        local:
-          dataDir: /var/lib/etcddisk/etcd
-          extraArgs:
-            quota-backend-bytes: "8589934592"
-      scheduler:
-        extraArgs:
-          bind-address: '::'
-    diskSetup:
-      filesystems:
-      - device: /dev/disk/azure/scsi1/lun0
-        extraOpts:
-        - -E
-        - lazy_itable_init=1,lazy_journal_init=1
-        filesystem: ext4
-        label: etcd_disk
-      - device: ephemeral0.1
-        filesystem: ext4
-        label: ephemeral0
-        replaceFS: ntfs
-      partitions:
-      - device: /dev/disk/azure/scsi1/lun0
-        layout: true
-        overwrite: false
-        tableType: gpt
-    files:
-    - contentFrom:
-        secret:
-          key: control-plane-azure.json
-          name: ${CLUSTER_NAME}-control-plane-azure-json
-      owner: root:root
-      path: /etc/kubernetes/azure.json
-      permissions: "0644"
-    initConfiguration:
-      localAPIEndpoint:
-        advertiseAddress: '::'
-        bindPort: 6443
-      nodeRegistration:
-        kubeletExtraArgs:
-          azure-container-registry-config: /etc/kubernetes/azure.json
-          cloud-provider: external
-          cluster-dns: fd00::10
-        name: '{{ ds.meta_data["local_hostname"] }}'
-    joinConfiguration:
-      controlPlane:
-        localAPIEndpoint:
-          advertiseAddress: '::'
-          bindPort: 6443
-      nodeRegistration:
-        kubeletExtraArgs:
-          azure-container-registry-config: /etc/kubernetes/azure.json
-          cloud-provider: external
-          cluster-dns: fd00::10
-        name: '{{ ds.meta_data["local_hostname"] }}'
-    mounts:
-    - - LABEL=etcd_disk
-      - /var/lib/etcddisk
-    postKubeadmCommands:
-    - echo "DNSStubListener=no" >> /etc/systemd/resolved.conf
-    - mv /etc/resolv.conf /etc/resolv.conf.OLD && ln -s /run/systemd/resolve/resolv.conf
-      /etc/resolv.conf
-    - systemctl restart systemd-resolved
-    preKubeadmCommands: []
-  machineTemplate:
-    infrastructureRef:
-      apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-      kind: AzureMachineTemplate
-      name: ${CLUSTER_NAME}-control-plane
-  replicas: ${CONTROL_PLANE_MACHINE_COUNT}
-  version: ${KUBERNETES_VERSION}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureMachineTemplate
-metadata:
-  name: ${CLUSTER_NAME}-control-plane
-  namespace: default
-spec:
-  template:
-    spec:
-      dataDisks:
-      - diskSizeGB: 256
-        lun: 0
-        nameSuffix: etcddisk
-      enableIPForwarding: true
-      osDisk:
-        diskSizeGB: 128
-        osType: Linux
-      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
-      vmSize: ${AZURE_CONTROL_PLANE_MACHINE_TYPE}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureClusterIdentity
-metadata:
-  labels:
-    clusterctl.cluster.x-k8s.io/move-hierarchy: "true"
-  name: ${CLUSTER_IDENTITY_NAME}
-  namespace: default
-spec:
-  allowedNamespaces: {}
-  clientID: ${AZURE_CLIENT_ID}
-  clientSecret:
-    name: ${AZURE_CLUSTER_IDENTITY_SECRET_NAME}
-    namespace: ${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}
-  tenantID: ${AZURE_TENANT_ID}
-  type: ServicePrincipal
----
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: MachineDeployment
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  clusterName: ${CLUSTER_NAME}
-  replicas: 0
-  selector:
-    matchLabels: null
-  template:
-    spec:
-      bootstrap:
-        configRef:
-          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-          kind: KubeadmConfigTemplate
-          name: ${CLUSTER_NAME}-md-0
-      clusterName: ${CLUSTER_NAME}
-      infrastructureRef:
-        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-        kind: AzureMachineTemplate
-        name: ${CLUSTER_NAME}-md-0
-      version: ${KUBERNETES_VERSION}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureMachineTemplate
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  template:
-    spec:
-      enableIPForwarding: true
-      osDisk:
-        diskSizeGB: 30
-        managedDisk:
-          storageAccountType: Premium_LRS
-        osType: Linux
-      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
-      vmSize: ${AZURE_NODE_MACHINE_TYPE}
----
-apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-kind: KubeadmConfigTemplate
-metadata:
-  name: ${CLUSTER_NAME}-md-0
-  namespace: default
-spec:
-  template:
-    spec:
-      clusterConfiguration:
-        apiServer:
-          extraArgs:
-            bind-address: '::'
-        controllerManager:
-          extraArgs:
-            bind-address: '::'
-        scheduler:
-          extraArgs:
-            bind-address: '::'
-      files:
-      - contentFrom:
-          secret:
-            key: worker-node-azure.json
-            name: ${CLUSTER_NAME}-md-0-azure-json
-        owner: root:root
-        path: /etc/kubernetes/azure.json
-        permissions: "0644"
-      joinConfiguration:
-        nodeRegistration:
-          kubeletExtraArgs:
-            azure-container-registry-config: /etc/kubernetes/azure.json
-            cloud-provider: external
-            cluster-dns: '[fd00::10]'
-          name: '{{ ds.meta_data["local_hostname"] }}'
-      postKubeadmCommands:
-      - echo "DNSStubListener=no" >> /etc/systemd/resolved.conf
-      - mv /etc/resolv.conf /etc/resolv.conf.OLD && ln -s /run/systemd/resolve/resolv.conf
-        /etc/resolv.conf
-      - systemctl restart systemd-resolved
----
-apiVersion: cluster.x-k8s.io/v1beta1
-kind: MachinePool
-metadata:
-  name: ${CLUSTER_NAME}-mp-0
-  namespace: default
-spec:
-  clusterName: ${CLUSTER_NAME}
-  replicas: ${WORKER_MACHINE_COUNT}
-  template:
-    spec:
-      bootstrap:
-        configRef:
-          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-          kind: KubeadmConfig
-          name: ${CLUSTER_NAME}-mp-0
-      clusterName: ${CLUSTER_NAME}
-      infrastructureRef:
-        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-        kind: AzureMachinePool
-        name: ${CLUSTER_NAME}-mp-0
-      version: ${KUBERNETES_VERSION}
----
-apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
-kind: AzureMachinePool
-metadata:
-  name: ${CLUSTER_NAME}-mp-0
-  namespace: default
-spec:
-  location: ${AZURE_LOCATION}
-  strategy:
-    rollingUpdate:
-      deletePolicy: Oldest
-      maxSurge: 25%
-      maxUnavailable: 1
-    type: RollingUpdate
-  template:
-    osDisk:
-      diskSizeGB: 30
-      managedDisk:
-        storageAccountType: Premium_LRS
-      osType: Linux
-    sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
-    vmSize: ${AZURE_NODE_MACHINE_TYPE}
----
-apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
-kind: KubeadmConfig
-metadata:
-  name: ${CLUSTER_NAME}-mp-0
-  namespace: default
-spec:
-  clusterConfiguration:
-    apiServer:
-      extraArgs:
-        bind-address: '::'
-    controllerManager:
-      extraArgs:
-        bind-address: '::'
-    scheduler:
-      extraArgs:
-        bind-address: '::'
-  files:
-  - contentFrom:
-      secret:
-        key: worker-node-azure.json
-        name: ${CLUSTER_NAME}-md-0-azure-json
-    owner: root:root
-    path: /etc/kubernetes/azure.json
-    permissions: "0644"
-  joinConfiguration:
-    nodeRegistration:
-      kubeletExtraArgs:
-        azure-container-registry-config: /etc/kubernetes/azure.json
-        cloud-config: /etc/kubernetes/azure.json
-        cloud-provider: azure
-        cluster-dns: '[fd00::10]'
-      name: '{{ ds.meta_data["local_hostname"] }}'
-  postKubeadmCommands:
-  - echo "DNSStubListener=no" >> /etc/systemd/resolved.conf
-  - mv /etc/resolv.conf /etc/resolv.conf.OLD && ln -s /run/systemd/resolve/resolv.conf
-    /etc/resolv.conf
-  - systemctl restart systemd-resolved