Skip to content

{ARO} Add first stable API version for ARO HCP - #10510

Open
Kipp Morris (kimorris27) wants to merge 9 commits into
Azure:mainfrom
kimorris27:aro-hcp-stable-cli
Open

Kipp Morris (kimorris27) wants to merge 9 commits into
Azure:mainfrom
kimorris27:aro-hcp-stable-cli

Conversation

@kimorris27

@kimorris27 Kipp Morris (kimorris27) commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

🤖 PR Validation — ❌ Action needed

Breaking Changes Suppressions
❌ 1 ⚠️ 15 added
❌Azure CLI Extensions Breaking Change Test
❌aro
rule cmd_name rule_message suggest_message
❌ 1007 - ParaRemove aro hcp cluster update cmd aro hcp cluster update removed parameter etcd please add back parameter etcd for cmd aro hcp cluster update
⚠️ 1006 - ParaAdd aro hcp cluster create cmd aro hcp cluster create added parameter assign_container_registry_managed_identity
⚠️ 1006 - ParaAdd aro hcp cluster create cmd aro hcp cluster create added parameter etcd_encryption_type
⚠️ 1006 - ParaAdd aro hcp cluster create cmd aro hcp cluster create added parameter key_management_mode
⚠️ 1006 - ParaAdd aro hcp cluster create cmd aro hcp cluster create added parameter key_vault_type
⚠️ 1006 - ParaAdd aro hcp cluster update cmd aro hcp cluster update added parameter assign_container_registry_managed_identity
⚠️ 1006 - ParaAdd aro hcp cluster update cmd aro hcp cluster update added parameter authorized_cidrs
⚠️ 1006 - ParaAdd aro hcp cluster update cmd aro hcp cluster update added parameter kms_active_key_version
⚠️ 1011 - SubgroupAdd aro hcp identity-role-sets sub group aro hcp identity-role-sets added

This PR adds warning or check suppressions. Fix the underlying warning where possible and justify each remaining suppression in a code comment or the PR description.

File Line Kind Code
src/aro/azext_aro/azext_aro_hcp/commands.py 30 pylint self.command_table["aro hcp cluster nodepool list"] = NodepoolList(loader=self, table_transformer=nodepool_list_table_f…
src/aro/azext_aro/azext_aro_hcp/commands.py 31 pylint self.command_table["aro hcp cluster nodepool show"] = NodepoolShow(loader=self, table_transformer=nodepool_show_table_f…
src/aro/azext_aro/azext_aro_hcp/custom.py 174 pylint args_schema.key_management_mode._default = None # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 175 pylint args_schema.key_management_mode._required = True # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 177 pylint args_schema.user_assigned_identities._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 178 pylint args_schema.operators_authentication._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 179 pylint args_schema.container_registry_managed_identity._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 288 pylint args_schema.user_assigned_identities._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 289 pylint args_schema.operators_authentication._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 290 pylint args_schema.container_registry_managed_identity._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 457 pylint args_schema.certificate_signing_request._registered = False # pylint: disable=protected-access
src/aro/azext_aro/azext_aro_hcp/custom.py 485 pylint "Requesting a non-admin credential is not supported yet. Specify --admin/-a to request an admin credential." # pylint:…
src/aro/azext_aro/azext_aro_hcp/custom.py 517 pylint overwrite_existing = bool(self.ctx.args.overwrite_existing.to_serialized_data()) if has_value(self.ctx.args.overwrite_e…
src/aro/linter_exclusions.yml 27 linter exclusion - parameter_should_not_end_in_resource_group
src/aro/linter_exclusions.yml 33 linter exclusion - parameter_should_not_end_in_resource_group

Note that I intentionally avoided updating the version. I'm just putting these changes here before we incorporate az aro hcp into azure-cli.


This checklist is used to make sure that common guidelines for a pull request are followed.

Related command

az aro

General Guidelines

  • Have you run azdev style <YOUR_EXT> locally? (pip install azdev required)
  • Have you run python scripts/ci/test_index.py -q locally? (pip install azdev required)
  • My extension version conforms to the Extension version schema

For new extensions:

About Extension Publish

There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

Copilot AI balanced review requested due to automatic review settings October 22, 2026 22:51
@microsoft-github-policy-service microsoft-github-policy-service Bot added the customer-reported Issues that are reported by GitHub users external to the Azure organization. label Oct 22, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Thank you for your contribution Kipp Morris (@kimorris27)! We will review the pull request and get back to you soon.

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The encryption-mode default regression and omitted-registry test fixture need correction before approval.

2 open issues
What changed in this PR

Updates ARO hosted control plane commands to the first stable API, 2026-10-01, ahead of their planned integration into Azure CLI. The extension version remains unchanged intentionally.

Changes:

  • Migrates cluster, node pool, external authentication, and credential operations to the stable API.
  • Adds identity-role-set listing, registry identity support, encryption options, and active-version response fields.
  • Updates identity tests, the lifecycle scenario, version recordings, and linter exclusions.
File Description
src/​aro/​linter_exclusions.yml Adds identity-command parameter exclusions.
src/​aro/​azext_aro/​tests/​latest/​hcp/​unit/​test_custom_commands.py Tests registry identity arguments and resolution.
src/​aro/​azext_aro/​tests/​latest/​hcp/​integration/​test_aro_hcp_scenario.py Supplies explicit customer-managed encryption mode.
src/​aro/​azext_aro/​tests/​latest/​hcp/​integration/​recordings/​test_aro_hcp_get_versions.yaml Refreshes stable-API version-list recording.
src/​aro/​azext_aro/​azext_aro_hcp/​custom.py Adds registry identity handling and adjusts encryption defaults.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​identity_role_sets/​_list.py Implements identity-role-set listing.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​identity_role_sets/​__init__.py Exports the new command group and command.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​identity_role_sets/​__cmd_group.py Registers the identity-role-sets group.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_wait.py Updates API and active-version schema.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_update.py Updates API and active-version schema.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_show.py Updates API and exposes active versions.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_list.py Updates API and exposes active versions.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_delete.py Uses the stable deletion API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​nodepool/​_create.py Updates API and active-version schema.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_wait.py Uses the stable polling API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_update.py Uses the stable update API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_show.py Uses the stable retrieval API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_list.py Uses the stable listing API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_delete.py Uses the stable deletion API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​external_auth/​_create.py Uses the stable creation API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_wait.py Updates API and cluster response fields.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_update.py Adds CIDR, key-version, and registry identity options.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_show.py Exposes new stable-API cluster fields.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_revoke_credential.py Uses the stable credential-revocation API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_request_credential.py Uses the stable credential-request API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_list.py Exposes new stable-API cluster fields.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_delete.py Uses the stable deletion API.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​cluster/​_create.py Adds vault-type and registry identity support.
src/​aro/​azext_aro/​aaz/​latest/​aro/​hcp/​_get_versions.py Uses the stable version-discovery API.

Review effort: Balanced

Comment thread src/aro/azext_aro/tests/latest/hcp/unit/test_custom_commands.py
Comment thread src/aro/azext_aro/azext_aro_hcp/custom.py Outdated
@x-engineering-agent
x-engineering-agent Bot requested a review from a team October 22, 2026 23:02
@kimorris27

Copy link
Copy Markdown
Contributor Author

Hi Kipp Morris (Kipp Morris (@kimorris27)), Please write the description of changes which can be perceived by customers into HISTORY.rst. If you want to release a new extension version, please update the version in pyproject.toml (or setup.py, if the extension has not migrated yet) as well.

I figured it would make more sense to update HISTORY.rst when it's time to update the version number and actually expose any changes.

@JaysonTaiMicrosoft JaysonTaiMicrosoft added the Request X Engineering Agent Ask the agent to triage this issue or review this PR label Oct 23, 2026
@x-engineering-agent

x-engineering-agent Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

X Engineering Agent Report

Review — Comments

Kipp Morris (@kimorris27)

Upstream CI completed without failures, but generated source ownership blocks acceptance. Reviewed Azure/azure-cli-extensions #10510 at verified current head badf40f899bdb05e137e2f6a02718c24ef2cb521.

Repository policy findings
Semantic review and scenario evidence

No additional runtime defect confirmed. The registered handwritten create command (src/aro/azext_aro/azext_aro_hcp/commands.py:20) clears the generated key-management default and requires an explicit value (custom.py:174-175 in that directory); the generated PlatformManaged default is not a demonstrated CLI defect.

Author-provided tests and recordings changed; these are not Agent live-test results. Under src/aro/azext_aro/tests/latest/hcp/:

  • unit/test_custom_commands.py:57-61,118-158,326-350 checks the required encryption argument, registry identity resolution and aliases. Registry tests stop at argument assignment, not the serialized HTTP request or service result.
  • integration/test_aro_hcp_scenario.py:313-339,362-399 exercises CustomerManaged/KeyVault creation and node-drain updates. Its updated integration/recordings/test_aro_hcp_cluster_lifecycle.yaml:3394,3442,4711 contains the KeyVault request, stable API version and activeVersions response data. The updated integration/recordings/test_aro_hcp_get_versions.yaml:18 also requests 2026-10-01.

Focused verification still needed: Those scenarios do not exercise ManagedHSM, registry identity create/update, authorized-CIDR updates, key rotation or the new identity-role-sets command. These map to src/aro/azext_aro/aaz/latest/aro/hcp/cluster/_create.py:157-162,650-652, cluster/_update.py:533-566,586-588 and identity_role_sets/_list.py:33-69 under the same HCP directory. Extend and rerun focused author scenarios with recordings: assert the corresponding outgoing fields and returned values, preservation on unrelated updates, CIDR clearing/bounds, and service-error propagation. For identity-role-sets, verify role mappings with empty/multiple results and pagination. Assert activeVersions output explicitly rather than relying on its presence in a recording. This is a validation limitation, not evidence that these implementations fail.

Test validation
  • Agent live test: Not run; this is a review-only PR. Check author-provided test evidence and upstream CI separately.
  • Regression coverage: Not applicable to the changed files.

The handoff records 23 completed upstream checks, 22 passed and zero failed. The automatic coverage “not applicable” classification is not scenario proof.

Risk assessment — 83/100 · Critical

The Critical rating is driven by security-sensitive behavior, public CLI behavior, failure-handling behavior and 1 additional signal(s).

  • Change scope: 38 changed files, 5713 changed lines (+2748 / -2965), including 32 production files.
  • Affected components: aro
  • Risk drivers: security-sensitive behavior (+28); public CLI behavior (+18); failure-handling behavior (+12); generated output (+12)
  • Regression evidence: Changed regression tests are included, reducing risk.
  • Confidence: High because changed-line patches were available for every production file.
  • Required review: Owning-squad review is required for aro before merge.

Posted by x-engineering-agent (Reviewer)

@JaysonTaiMicrosoft

Copy link
Copy Markdown
Contributor

Kipp Morris (@kimorris27)

  1. Please update the PR title to denote which module this PR belongs to. Refer to https://github.com/Azure/azure-cli/tree/dev/doc/authoring_command_modules#format-pr-title for guidelines
  2. Please bump the associated HISTORY.rst and setup.py files' version numbers and add history notes. Refer to https://github.com/Azure/azure-cli/blob/dev/doc/extensions/versioning_guidelines.md#cli-extension-version-transition-table

@kimorris27 Kipp Morris (kimorris27) changed the title Add first stable API version for ARO HCP {ARO} Add first stable API version for ARO HCP Oct 23, 2026
@kimorris27

Copy link
Copy Markdown
Contributor Author

Kipp Morris (Kipp Morris (@kimorris27))

  1. Please update the PR title to denote which module this PR belongs to. Refer to https://github.com/Azure/azure-cli/tree/dev/doc/authoring_command_modules#format-pr-title for guidelines
  2. Please bump the associated HISTORY.rst and setup.py files' version numbers and add history notes. Refer to https://github.com/Azure/azure-cli/blob/dev/doc/extensions/versioning_guidelines.md#cli-extension-version-transition-table

Kipp Morris (Kipp Morris (@kimorris27))

  1. Please update the PR title to denote which module this PR belongs to. Refer to https://github.com/Azure/azure-cli/tree/dev/doc/authoring_command_modules#format-pr-title for guidelines
  2. Please bump the associated HISTORY.rst and setup.py files' version numbers and add history notes. Refer to https://github.com/Azure/azure-cli/blob/dev/doc/extensions/versioning_guidelines.md#cli-extension-version-transition-table

JaysonTaiMicrosoft, I updated the title. I intentionally avoided updating the HISTORY.rst and setup.py files (noted in the PR description).

@x-engineering-agent x-engineering-agent Bot added the X Engineering Agent Reviewed Agent reviewed this PR label Oct 23, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Kipp Morris (@kimorris27) Please add a scenario test for this to increase test coverage

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I unfortunately can't yet... this API endpoint has already rolled out in our stable API spec, but my team is still working on implementing it. It will be implemented in time for GA, and I can follow up with a scenario test once it's implemented.

@JaysonTaiMicrosoft

Copy link
Copy Markdown
Contributor

Kipp Morris (@kimorris27) As these changes are not meant to be rolled out can you update just the HISTORY.rst with the change notes under a pending section. When this is ready to be released, we can just assign a version number.

Please see https://github.com/suyadav1/azure-cli-extensions/blob/01a38479f8da2082d29c36fc6054bd28bfc5b39f/src/aks-preview/HISTORY.rst for reference.

@JaysonTaiMicrosoft

Copy link
Copy Markdown
Contributor

aaz: Azure/aaz#1140

@kimorris27

Copy link
Copy Markdown
Contributor Author

Updated HISTORY.rst and addressed AI review comments.

…he stable API version

Note that this extension is still a preview extension - the top-level `__init__.py` sets `is_preview=true` at the level of the `aro` command group
@x-engineering-agent

Copy link
Copy Markdown

Automated processing is paused because the local security scan detected sensitive information in this pull request.

  • Categories: payment card
  • Locations: src/aro/azext_aro/tests/latest/hcp/integration/recordings/test_aro_hcp_cluster_lifecycle.yaml

Please remove the sensitive values from the PR description, discussion, review comments, and commits. Rewrite the affected commit history if needed, then rotate or revoke any exposed credentials. Automated processing will resume after the PR is clean.

For safety, the detected values are not reproduced here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

customer-reported Issues that are reported by GitHub users external to the Azure organization. Request X Engineering Agent Ask the agent to triage this issue or review this PR X Engineering Agent Reviewed Agent reviewed this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants