Repository navigation
Add Az.RedHatOpenShiftHcp (Azure Red Hat OpenShift Hosted Control Planes) module - #30326
Open
Nikhil Thomas (nikhil-thomas) wants to merge 26 commits into
Open
Nikhil Thomas (nikhil-thomas) wants to merge 26 commits into
Nikhil Thomas (nikhil-thomas) wants to merge 26 commits into
Conversation
…Hcp module - Add the AutoRest literate README.md for the new ARO-HCP module - Pin the azure-rest-api-specs swagger via commit + input-file (stable 2026-10-01) - Set module metadata (module-version 0.1.0, title/service-name RedHatOpenShiftHcp) - Set subject-prefix to '' and document the rationale inline - this RP's subjects already contain Hcp/OpenShift tokens, so the inherited $(service-name) prefix would produce doubled nouns (e.g. Get-AzRedHatOpenShiftHcpHcpOpenShiftCluster) - Nouns will be branded explicitly via subject-rename directives in a follow-up. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…16 cmdlets)
- Add the generated Az.RedHatOpenShiftHcp module for the Microsoft.RedHatOpenShift
hcpOpenShiftClusters (ARO-HCP) RP, from azure-rest-api-specs stable API 2026-10-01
(pinned commit dfe87dc0).
- Surface (16 cmdlets): Get/New/Update/Remove for Cluster, NodePool, ExternalAuth;
Get for Version and OperatorIdentityRoleSet; Request/Revoke cluster credentials.
- Generation directives (authored in README.md):
- subject-prefix: '' with explicit subject renames to brand nouns as
RedHatOpenShiftHcp* (avoids the Hcp/OpenShift token doubling).
- Remove Set-* cmdlets (autogen convention: New-*/Update-* instead).
- Remove the generic CreateViaIdentity variants on New-*.
- Rename the ExternalAuth -Client parameter to -ClientProfile (resolves a
CS0102 collision with the generated SDK client accessor).
- Keep the whole-body-object (-Parameter) Create/Update variants.
- Remove the OperatorIdentityRoleSet cmdlet via a `remove` directive (product decision); surface now 15 cmdlets.
- Tests and examples are generated stubs, to be implemented and recorded in a
follow-up.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Regenerate Az.RedHatOpenShiftHcp against the preview spec
(hcpopenshiftclusters/preview/2026-09-01-preview) instead of
stable/2026-10-01, so cmdlets send api-version=2026-09-01-preview —
the version actually merged and deployed to the dev/preview RP.
- README: pin input-file to the preview openapi and bump the spec commit
- UX manifests: apiVersion 2026-10-01 -> 2026-09-01-preview
- regenerate cmdlet docs/help; drop params absent from the preview API
(e.g. ContainerRegistryManagedIdentity, KmKeyVaultType)
- refresh generate-info.json, Az.RedHatOpenShiftHcp.psd1, and the solution
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…t- cmdlet
- Replace the generated Request-AzRedHatOpenShiftHcpClusterAdminCredential with a custom
cmdlet that performs the whole admin-credential flow in one call
- generate an RSA-4096 key + CSR locally
- send only the CSR
- splice the signed key into the returned kubeconfig
- merge it into the user's kubeconfig AKS-style.
- README: hide directive routes the generated cmdlet to internal/ so the custom one
replaces it (matched on the pre-rename subject, before the brand renames)
- Directory.Build.props: YamlDotNet.Signed 5.2.1 scoped to the Autorest project so the
reference survives autorest regeneration (which rewrites the csproj)
- regenerated docs/help/psd1 for the cmdlet
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
….Version
- Replace the generated Get-AzRedHatOpenShiftHcpVersion with a custom wrapper that curates
the version list
- filter to `enabled` versions and sort ascending by semver
- `-ControlPlane` returning distinct MAJOR.MINOR (for a cluster's -VersionId)
- `-NodePool` returning full X.Y.Z (for a node pool's -VersionId)
- The two switches are mutually exclusive.
- For CLI parity the default list output is also enabled-only + sorted (disabled versions
hidden; default == -NodePool); a single lookup by -Name is returned as-is. The enabled
filter uses `-ne $false` so a missing 'enabled' is treated as enabled (matches the CLI's
get('enabled', True)).
- README: hide directive routes the generated cmdlet to internal/ so the custom one
replaces it (pre-rename subject, alongside the C1 hide)
- custom/Get-AzRedHatOpenShiftHcpVersion.ps1: wrapper over
Az.RedHatOpenShiftHcp.internal\Get-AzRedHatOpenShiftHcpVersion
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…ersion/external-auth - Add format-table directives so Get-* cmdlets show useful columns by default instead of the generated empty SystemData* columns - Cluster: Name, Location, Resource Group, Version, ProvisioningState, API Server - Node pool: Name, Version, VM Size, Replica, ProvisioningState - Version: Name, Channel, Enabled, End Of Life - External auth: Name, Issuer, ProvisioningState Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…luster - Replace the generated New-AzRedHatOpenShiftHcpCluster with a custom wrapper that assembles the derivable parts of the create body, so callers pass only the operator-identity maps + KMS vault/key: - derives -UserAssignedIdentity = control-plane `operators ∪ service MI` (hidden) - hardcodes etcd -CustomerManagedEncryptionType = KMS (hidden) - resolves bare UAMI names to full resource IDs via the subscription/RG parsed from - keeps the operator hashtable params and -KmVaultName/-ActiveKeyName/-ActiveKeyVersion/ - README: hide directive routes the generated cmdlet to internal/ (anchored ^HcpOpenShiftCluster$ + verb New) - custom/New-AzRedHatOpenShiftHcpCluster.ps1: the wrapper (CreateExpanded surface minus the two auto-filled params) Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…uster
- Replace the generated Update-AzRedHatOpenShiftHcpCluster with a custom wrapper that lets you
rotate/set operator identities without rebuilding the identity map
- When any identity param is bound it does GET -> merge -> forward:
- fetches the current cluster (via Az.RedHatOpenShiftHcp.internal\Get-...; reads operator maps +
subnet from .ToJsonString())
- merges the supplied -UserAssignedIdentity*Operator maps over the current ones, so rotating a
single operator preserves the rest
- resolves bare identity names to resource IDs via the cluster's subnet (shared IdentityResolver)
- recomputes -UserAssignedIdentity = control-plane operators + service MI (data-plane excluded,
consistent with create
- If no identity param is supplied (e.g. a -Tag-only patch) the request is forwarded unchanged (no
GET). -UserAssignedIdentity is not exposed
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Prepare the Pester harness for incremental, per-cmdlet test coverage.
- Add test/env.json with the coordinates the recorded tests will read
(Location/ResourceGroupName/ClusterName/NodePoolName/ExternalAuthName).
Subscription and tenant IDs are masked (all-zero GUIDs) so no real
identifiers are committed; record passes will sanitize recordings to
match these placeholders.
- Delete the Get-AzRedHatOpenShiftHcpOperatorIdentityRoleSet test stub:
that cmdlet was removed from the module via the README `subject:
HcpOperatorIdentityRoleSet / remove: true` directive, so the stub
tested a cmdlet that no longer exists.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
… (C4) - Replace the generated -skip stub with real coverage of the custom Get-AzRedHatOpenShiftHcpVersion wrapper: - default list is enabled-only and semver-sorted (CLI parity) - `-ControlPlane` returns distinct MAJOR.MINOR - `-NodePool` returns full X.Y.Z - `-ControlPlane/-NodePool` are mutually exclusive - single `-Name` lookup is returned as-is - Add the recorded ARM responses, sanitized to masked subscription/tenant GUIDs so playback matches env.json (via Get-SubscriptionIdTestSafe) and no real identifiers are committed. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Add offline Pester unit tests for the custom C# helpers (no Azure, no
recording), calling the compiled static methods directly:
- IdentityResolver.Resolve: full resource ID passthrough, bare-name
expansion from the subnet's subscription/RG, idempotency, empty-input
passthrough, and both error paths (no subnet, unparseable subnet).
- KubeConfigHelper: PrepareKubeconfig embeds the key as client-key-data
and renames cluster/user/context + current-context; MergeKubeConfig
preserves existing entries and lets additions win on name collision.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Replace the generated -skip stubs for Get-AzRedHatOpenShiftHcpCluster, -NodePool, and -ExternalAuth with List + Get coverage asserting Name/Location/ProvisioningState against the live cluster. - Add the recorded ARM responses, sanitized to masked subscription/tenant GUIDs. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Record a full node-pool lifecycle against the live cluster on a fixed throwaway pool (nptest-ps, 1 replica): CreateExpanded (version, VM size, subnet, AutoRepair), UpdateExpanded (NodeDrainTimeoutMinute PATCH), and Delete. - The create's subnet id is built from the runtime subscription so no real subscription is committed; recordings are sanitized to masked subscription/tenant GUIDs. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…move) - Record the external-auth lifecycle on a throwaway resource: CreateExpanded with a Confidential console client (provisions to AwaitingSecret), a negative test asserting the one-external-auth-per-cluster RP rule, UpdateExpanded (UsernameClaim PATCH), and Delete. - Issuer is built from the runtime tenant and the audience is synthetic, so no real tenant/app id is committed; recordings are sanitized to masked subscription/tenant GUIDs. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…y merge (C3)
- Update-AzRedHatOpenShiftHcpCluster GET-merges operator identities with the
current cluster before updating. Two defects in that nested read:
1. It invoked `Az.RedHatOpenShiftHcp.internal\Get-AzRedHatOpenShiftHcpCluster`,
but Get-Cluster is not hidden, it lives in exports/, not the internal
module — so the call threw CommandNotFoundException whenever an operator
identity parameter was supplied. Call the exported cmdlet by plain name.
2. The nested child-cmdlet call did not inherit HTTP pipeline steps, so
caller-injected steps (and the record/playback test mock attached via
-HttpPipelinePrepend) were dropped and the Get made an unintended direct
call. Forward -HttpPipelinePrepend/-HttpPipelineAppend into the nested Get.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Record the cluster lifecycle on a throwaway cluster (cltest-ps, fixed
literal name for deterministic URI matching):
- New CreateExpanded: full create with the operator-identity maps,
KMS vault/key, and network config
- Update UpdateExpanded: asserts the operator identity maps to
exercise the GET-merge path, plus a tag change.
- Remove Delete: deletes the throwaway cluster.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- revokeCredentials is a long-running POST whose terminal response is HTTP 204, but the 2026-09-01-preview spec declares only 202 + default, so the generated cmdlet dispatched the successful 204 to onDefault and threw "The server responded with an unrecognized response, Status: NoContent". Add a swagger-document directive injecting a 204 response (the DELETE operations already declare 202 + 204 + default and work), so AutoRest emits an onNoContent success handler. generated/ is reproduced from this directive at build time. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Replace the generated -skip stubs with real coverage:
- Request-AzRedHatOpenShiftHcpClusterAdminCredential: generates the
key+CSR, calls the hidden cmdlet, decodes the SecureString kubeconfig,
and writes it to -OutFile; asserts the file exists, contains a
current-context, and is written 0600.
- Revoke-AzRedHatOpenShiftHcpClusterCredentials: asserts the revoke
returns cleanly on its 204 terminal (no "unrecognized response").
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Add examples illustrative commands: generic resource names, valid parameter values, masked GUIDs, output blocks dropped for Remove-/Revoke - Regenerate the Autorest docs/ and the wrapper help/ markdown so the embedded EXAMPLES, SYNOPSIS, and PARAMETERS stay in sync with the module. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
- Switch the module from the preview 2026-09-01-preview API to the stable GA 2026-10-01 spec (azure-rest-api-specs PR #47069, merge commit 322d99de): README commit/input-file pin, regenerate, and reconcile. - The surface is unchanged (15 cmdlets); all customizations still apply. Additive-only schema deltas (keyVaultType, containerRegistry, api.authorizedCidrs, typed *ResourceStatus). - Reconcile recordings to api-version=2026-10-01 (shapes unchanged, no re-record) and genericize test fixtures. - Regenerate docs/help against stable. Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
…ceptions - Add the first-release note to ChangeLog.md under Upcoming Release Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
Contributor
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
|
Thank you for your contribution Nikhil Thomas (@nikhil-thomas)! We will review the pull request and get back to you soon. |
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
One or more issues must be addressed before approval.
7 open issues
Generated project misses YamlDotNet dependency · New Credential cmdlet uses APIs unavailable in PowerShell 5.1 · New Create tests conflict with persistent external-auth fixture · New Update test depends on deleted cluster fixture · New External-auth update test depends on deleted fixture · New Node-pool update test depends on deleted fixture · New Test setup overwrites environment with incomplete configuration · New
What changed in this PR
Introduces the preview Az.RedHatOpenShiftHcp module for managing Azure Red Hat OpenShift Hosted Control Planes using the stable 2026-10-01 API.
Changes:
- Adds module packaging, command mappings, and static-analysis exceptions.
- Adds version discovery and shared identity-resolution and kubeconfig helpers.
- Adds reference documentation, examples, and playback/live test scenarios.
| File | Description |
|---|---|
| tools/StaticAnalysis/Exceptions/Az.RedHatOpenShiftHcp/SignatureIssues.csv | Updated as part of this pull request. |
| tools/CreateMappings_rules.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/RedHatOpenShiftHcp.csproj | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/Properties/AssemblyInfo.cs | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Revoke-AzRedHatOpenShiftHcpClusterCredentials.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Remove-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Remove-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Remove-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Get-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Get-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Get-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/help/Az.RedHatOpenShiftHcp.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/ChangeLog.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp/Az.RedHatOpenShiftHcp.psd1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/UX/Microsoft.RedHatOpenShift/hcpOpenShiftClusters.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/UX/Microsoft.RedHatOpenShift/hcpOpenShiftClusters-nodePools.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/UX/Microsoft.RedHatOpenShift/hcpOpenShiftClusters-externalAuths.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/utils/Unprotect-SecureString.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/utils/Get-SubscriptionIdTestSafe.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/utils.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Update-AzRedHatOpenShiftHcpNodePool.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Update-AzRedHatOpenShiftHcpExternalAuth.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Update-AzRedHatOpenShiftHcpCluster.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Revoke-AzRedHatOpenShiftHcpClusterCredentials.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Request-AzRedHatOpenShiftHcpClusterAdminCredential.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Remove-AzRedHatOpenShiftHcpNodePool.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Remove-AzRedHatOpenShiftHcpExternalAuth.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Remove-AzRedHatOpenShiftHcpCluster.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/README.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/New-AzRedHatOpenShiftHcpNodePool.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/New-AzRedHatOpenShiftHcpExternalAuth.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/New-AzRedHatOpenShiftHcpCluster.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/loadEnv.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/KubeConfigHelper.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/IdentityResolver.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Get-AzRedHatOpenShiftHcpVersion.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Get-AzRedHatOpenShiftHcpNodePool.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Get-AzRedHatOpenShiftHcpExternalAuth.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/Get-AzRedHatOpenShiftHcpCluster.Tests.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/test/env.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/resources/README.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/Properties/AssemblyInfo.cs | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/how-to.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/generate-info.json | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Update-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Update-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Update-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Revoke-AzRedHatOpenShiftHcpClusterCredentials.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Request-AzRedHatOpenShiftHcpClusterAdminCredential.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Remove-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Remove-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Remove-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/New-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/New-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/New-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Get-AzRedHatOpenShiftHcpVersion.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Get-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Get-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/examples/Get-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Revoke-AzRedHatOpenShiftHcpClusterCredentials.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Remove-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Remove-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Remove-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/README.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Get-AzRedHatOpenShiftHcpVersion.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Get-AzRedHatOpenShiftHcpNodePool.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Get-AzRedHatOpenShiftHcpExternalAuth.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Get-AzRedHatOpenShiftHcpCluster.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/docs/Az.RedHatOpenShiftHcp.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/custom/README.md | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/custom/KubeConfigHelper.cs | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/custom/IdentityResolver.cs | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/custom/Get-AzRedHatOpenShiftHcpVersion.ps1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/custom/Az.RedHatOpenShiftHcp.custom.psm1 | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/.gitignore | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/RedHatOpenShiftHcp.Autorest/.gitattributes | Updated as part of this pull request. |
| src/RedHatOpenShiftHcp/Directory.Build.props | Updated as part of this pull request. |
Review effort: Balanced
Member
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
Member
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
One or more issues must be addressed before approval.
2 open issues
8 resolved since last review
Credential cmdlet uses APIs unavailable in PowerShell 5.1 The cmdlet declares an OutputType ofIHcpOpenShiftVersion, but the-ControlPlanebranch emits… The cmdlet declares an OutputType ofIHcpOpenShiftVersion, but the-ControlPlanebranch emits… Test setup overwrites environment with incomplete configuration Node-pool update test depends on deleted fixture External-auth update test depends on deleted fixture Update test depends on deleted cluster fixture Create tests conflict with persistent external-auth fixture
Review effort: Balanced
- Credential cmdlet PowerShell 5.1 compatibility
- Request-...ClusterAdminCredential used PS 7+/.NET Core-only APIs while the manifest
declares CompatiblePSEditions 'Desktop' + PowerShellVersion 5.1. Replace
ConvertFrom-SecureString -AsPlainText with [Net.NetworkCredential], and branch
RSA private-key export
- Recorded-test fixture lifecycle
- setupEnv now merges+preserves the committed env.json fixture instead of overwriting it
with only SubscriptionId/Tenant during record
- Order each resource's lifecycle so the delete runs after the update: the real Remove
tests become ZRemove-* (Az.StorageMover ZUnregister convention) so they sort last; the
Remove-* skip stubs are regenerated by the build.
- Move the external-auth create/update/delete lifecycle off the persistent read-fixture
cluster (which owns the single allowed 'entra' auth) onto the throwaway cltest-ps, so it
no longer mutates the read fixture or collides with the one-auth-per-cluster rule
- Get-Version output contract
- Get-...Version declared only IHcpOpenShiftVersion but -ControlPlane emits a summarized
PSCustomObject (Name=MAJOR.MINOR, ChannelGroup). Declare both output types and document
the per-view shapes; the projection stays a PSCustomObject because a MAJOR.MINOR value
is not a real version resource.
Signed-off-by: Nikhil Thomas <nikthoma@redhat.com>
Nikhil Thomas (nikhil-thomas)
force-pushed
the
Az.RedHatOpenShiftHcp-generation
branch
from
October 22, 2026 05:46
37109c2 to
9a50a96
Compare
Contributor
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
Member
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
| * Overview of change #1 | ||
| - Additional information about change #1 | ||
| --> | ||
| ## Version 0.1.0 |
Reformatted SignatureIssues.csv to ensure proper structure and consistency.
Contributor
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
Member
|
/azp run |
Contributor
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



🤖 PR Validation —⚠️ Review suggested
️✔️Az.Accounts
Description
This PR introduces
Az.RedHatOpenShiftHcp, a new generated Azure PowerShell module for Azure Red Hat OpenShift Hosted Control Planes (ARO-HCP). The module was generated with AutoRest from the stable2026-10-01API (azure-rest-api-specs PR #47069, merge 322d99de).The module ships 15 cmdlets spanning the ARO-HCP surface:
Get-AzRedHatOpenShiftHcpVersionNew-/Get-/Update-/Remove-AzRedHatOpenShiftHcpClusterNew-/Get-/Update-/Remove-AzRedHatOpenShiftHcpNodePoolNew-/Get-/Update-/Remove-AzRedHatOpenShiftHcpExternalAuthNew-AzRedHatOpenShiftHcpClusterAdminCredential,Remove-AzRedHatOpenShiftHcpClusterAdminCredential(revoke)Customizations
Six customizations layer usability and correctness on top of the generated surface:
New-...ClusterAdminCredentialperforms the full CSR + kubeconfig exchange in a single call, returning a ready-to-use kubeconfig.New-...Clusterauto-wires the managed/user-assigned identity and KMS encryption settings so callers don't hand-assemble the identity payload.Update-...Clusterperforms a GET-merge of the existing identity block before PATCH, preventing accidental clobbering of identities on update.Get-...Versionexposes distinct control-plane and node-pool version views.204response onrevokeCredentialsto work around a spec gap (see below).Spec gap (C6)
The
revokeCredentialsoperation in the2026-10-01spec does not declare its204 No Contentresponse, which breaks generated deserialization. The workaround is self-contained and can be removed once the spec is corrected.Testing & quality
ChangeLog.mdupdated under## Upcoming Release.Design review
Cmdlet design review is waived for generated/AutoRest modules (confirmed with the PowerShell module PM); the gate to merge for this module is technical readiness only.
Note: Repository https://github.com/Azure/azure-powershell-cmdlet-review-pr was in archived state in the first week of October 2026.
Mandatory Checklist
Please choose the target release of Azure PowerShell. (⚠️ Target release is a different concept from API readiness. Please click below links for details.)
Check this box to confirm: I have read the Submitting Changes section of
CONTRIBUTING.mdand reviewed the following information:ChangeLog.mdfile(s) appropriatelysrc/{{SERVICE}}/{{SERVICE}}/ChangeLog.md.## Upcoming Releaseheader in the past tense.ChangeLog.mdif no new release is required, such as fixing test case only.