Skip to content

fix(ev2): retain global identity retry budgets (AROSLSRE-2101) - #6939

Merged
openshift-merge-bot[bot] merged 5 commits into
Azure:mainfrom
raelga:raelg/aroslsre-2101-geneva-retry-budget
Sep 18, 2026
Merged

openshift-merge-bot[bot] merged 5 commits into
Azure:mainfrom
raelga:raelg/aroslsre-2101-geneva-retry-budget

Conversation

@raelga

@raelga Rael Garcia (raelga) commented Sep 14, 2026 •

Copy link
Copy Markdown
Collaborator

AROSLSRE-2101

What

Add the Microsoft Graph owners relationship retry policy to mise-identity and enable honorRetryBudgetWhenFailingFast for both global identity ARM steps in global-pipeline.yaml:

  • geneva-identities
  • mise-identity

Each step allows three retries after the initial execution, with one minute between retries.

The parallel STG V2 pipeline is intentionally unchanged. Its parameter files set genevaActionApplicationManage = false and miseApplicationDeploy = false, so it does not deploy either Entra app/owners module during coexistence.

Why

Microsoft Graph can return the generic owners relationship error while committing application and service principal ownership:

Failed to update one or more relationships in 'owners'. Please try again later.

The same error affects both global identity deployments. Fail-fast generation normally reduces the available retry budget, while mise-identity had no matching retry policy.

The retries remain bounded. Invalid or deleted owner IDs still exhaust the retry budget and must be corrected in the service configuration.

Testing

  • make validate-config-pipelines
  • make verify
  • check-ev2-render.sh 6939

No new unit tests. This is pipeline configuration only, and validation confirms the schema, pipeline metadata, and generated EV2 resolve manifests are accepted.

Special notes for your reviewer

This depends on the sdp-pipelines generator change tracked by AROSLSRE-2100 before the generated EV2 artifacts change behavior.

PR Checklist

  • PR is scoped to a single task (no mixed concerns)
  • Title follows Conventional Commits format
  • Summary explains the "Why" behind the change
  • Linked to relevant ticket/issue
  • Screenshots included (if dashboards or other UI changes)
  • Self-reviewed the diff
  • CI/CD checks are passing (ignore Tide)
  • Draft PR used for WIP (if applicable)
  • Commit history is clean (rebased/squashed)
  • Tricky code blocks are commented
  • Specific reviewers tagged
  • All comment threads resolved before merge

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.

🔵 Needs a closer look

The workspace-wide Azure SDK impact needs intentional rollout and validation, and required reviewers still need to be tagged.

Pull request overview

Adds bounded Microsoft Graph owners-relationship retries for global identity deployments while preserving retry budgets during fail-fast execution.

Changes:

  • Adds retry handling for mise-identity in global and staging pipelines.
  • Enables retry-budget honoring for both identity steps.
  • Updates pipeline tooling dependencies and checksums.
File summaries
File Description
tooling/templatize/go.sum Updates dependency checksums.
tooling/templatize/go.mod Updates tooling and transitive Azure SDK dependencies.
tooling/pipeline-documentation/go.sum Updates dependency checksums.
tooling/pipeline-documentation/go.mod Updates pipeline dependencies.
tooling/helmtest/go.sum Updates dependency checksums.
tooling/helmtest/go.mod Updates tooling and transitive Azure SDK dependencies.
dev-infrastructure/global-pipeline.yaml Updates global identity retry configuration.
dev-infrastructure/global-pipeline-stg.yaml Updates staging identity retry configuration.
Review details

Suppressed comments (3)

dev-infrastructure/global-pipeline.yaml:223

  • The PR checklist still leaves “Specific reviewers tagged” unchecked, while CONTRIBUTING.md:124-126 requires tagging the owners/SMEs for the changed pipeline and any affected cross-team owners. Please tag the relevant reviewers before approval.
      honorRetryBudgetWhenFailingFast: true

tooling/helmtest/go.mod:23

  • This indirect SDK bump has the same workspace-wide effect: tooling/helmtest is listed in go.work, so its resolved azcore/azidentity versions are selected for unrelated modules even though most module manifests remain on 1.21.1/1.13.1. This conflicts with the repository's explicit workspace-isolation rationale at go.work:21; please make the rollout intentional and validate all affected modules, or avoid introducing these versions here.
	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.0 // indirect
	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0 // indirect

tooling/templatize/go.mod:19

  • These SDK upgrades now enter the main Go workspace through templatize (and the resolved indirect graph in helmtest). go.work:21 deliberately keeps the same newer azcore/azidentity versions out because workspace selection raises them for every module, while modules such as backend/go.mod:7-8 still pin the older versions. Please either isolate this parser dependency or deliberately roll out and validate the workspace-wide SDK upgrade; otherwise unrelated services silently build against new Azure SDKs.
	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.0
	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.14.0
  • Files reviewed: 5/8 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Copilot AI review requested due to automatic review settings September 14, 2026 14:11

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

Four unresolved moderate findings remain regarding ineffective STG retry blocks and the retry count providing two rather than three retries.

Get a fresh assessment by requesting another Copilot review.

Review details

Suppressed comments (3)

dev-infrastructure/global-pipeline-stg.yaml:281

  • This STG V2 step cannot produce the owners-relationship error this retry is meant to catch: geneva-identities-stg.tmpl.bicepparam sets genevaActionApplicationManage = false, and geneva-identities.bicep conditionally creates the app/owners module on that flag. The added retry is therefore ineffective here; if the intent is to fix the live STG rollout, apply it to the canonical pipeline, otherwise remove or clarify this dead configuration.
      honorRetryBudgetWhenFailingFast: true

dev-infrastructure/global-pipeline-stg.yaml:295

  • This STG V2 step cannot produce the owners-relationship error this retry is meant to catch: mise-identity-stg.tmpl.bicepparam sets miseApplicationDeploy = false, and mise-identity.bicep conditionally creates the only app/owners module on that flag. The added retry is therefore ineffective here; if the intent is to fix the live STG rollout, apply it to the canonical pipeline, otherwise remove or clarify this dead configuration.
      honorRetryBudgetWhenFailingFast: true

dev-infrastructure/global-pipeline-stg.yaml:281

  • maximumRetryCount is defined as the total number of step executions, not the number of retries (docs/pipeline-concept.md:235). Both identity blocks in this STG copy still use 3, so they allow only two retries after the initial attempt, not the three one-minute retries stated in the PR description. If three retries are required, use 4 for both blocks (and the canonical copy), or correct the stated budget.
      honorRetryBudgetWhenFailingFast: true
  • Files reviewed: 33/64 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread dev-infrastructure/global-pipeline.yaml Resolved
@raelga

Copy link
Copy Markdown
Collaborator Author

/retest-required

Copilot AI review requested due to automatic review settings September 14, 2026 14:57
@raelga

Copy link
Copy Markdown
Collaborator Author

Pushed 6f4cde8 to make the retry budget match the intended three retry attempts.

maximumRetryCount is total executions, including the initial attempt, so both global identity steps now use maximumRetryCount: 4. That gives one initial Graph owners write plus three one-minute retries while keeping fail-fast manual mitigation disabled.

Validated with make validate-config-pipelines and make verify.

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.

🔵 Needs a closer look

Unresolved moderate retry-policy and STG-scope issues block approval; the dependency refresh also needs justification.

Review details

Suppressed comments (4)

dev-infrastructure/global-pipeline-stg.yaml:292

  • Adding an explicit automatedRetry here replaces sdp-pipelines' default MSI/connection-failure policy, so mise-identity will stop retrying failed to establish a new connection, failed to get token, and Failed to connect to MSI. The repository documents this replacement in test/e2e-pipeline.yaml:36-40; include those default phrases in this list so the Graph-owner retry does not regress other transient identity failures.
      errorContainsAny:
      - "Failed to update one or more relationships in 'owners'"

dev-infrastructure/global-pipeline-stg.yaml:295

  • This STG V2 step passes configurations/mise-identity-stg.tmpl.bicepparam, which hardcodes miseApplicationDeploy = false; templates/mise-identity.bicep therefore skips the Entra app module that writes the Graph owners relationships. The new retry condition cannot match this step's deployment, so the claimed STG mitigation is not exercised. Please either apply it to the pipeline that actually deploys the MISE app or remove this no-op policy and update the stated scope.
      errorContainsAny:
      - "Failed to update one or more relationships in 'owners'"
      maximumRetryCount: 4
      durationBetweenRetries: 1m
      honorRetryBudgetWhenFailingFast: true

dev-infrastructure/global-pipeline.yaml:234

  • Adding an explicit automatedRetry here replaces sdp-pipelines' default MSI/connection-failure policy, so mise-identity will stop retrying failed to establish a new connection, failed to get token, and Failed to connect to MSI. The repository documents this replacement in test/e2e-pipeline.yaml:36-40; include those default phrases in this list so the Graph-owner retry does not regress other transient identity failures.
      errorContainsAny:
      - "Failed to update one or more relationships in 'owners'"

tooling/templatize/go.mod:19

  • The PR description calls this pipeline-configuration-only, but this change also upgrades azcore, azidentity, and testify across nearly every workspace module (including this module and internal). Those are independent build/runtime dependency changes; please either split this refresh into a separate PR or document why the new ARO-Tools pipeline dependency requires the workspace-wide upgrade and its compatibility/test impact.
  • Files reviewed: 33/64 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@raelga

Copy link
Copy Markdown
Collaborator Author

/test image-updater-images

Retesting image-updater-images: the PR changes only pipeline YAML plus the workspace dependency sync needed by make verify, and the image-updater module build/test path passes locally.

I also reproduced the automation image build path from the CI variant with GOFLAGS=-mod=readonly: make -C tooling/image-updater build, make -C tooling/templatize templatize, make -C tooling/yamlwrap, make all-tidy, and go work vendor. That path succeeds on this branch without producing uncommitted changes.

The Prow artifact endpoint for job 2099512988410056704 returns 500 through gcsweb and AccessDenied through direct GCS from this environment, so I cannot extract a job-local error line here. The same image-updater-images check is passing on nearby open ARO-HCP PRs, so this rerun is the discriminator for a transient CI image-build failure versus a PR-specific issue.

@raelga

Copy link
Copy Markdown
Collaborator Author

/retest

The previous commit accidentally bundled a repo-wide go.mod/go.sum
bump (azcore, azidentity, testify) unrelated to the ev2 retry budget
change. Reverting those files to main's pinned versions; this PR is
scoped to dev-infrastructure/global-pipeline{,-stg}.yaml only.
Copilot AI review requested due to automatic review settings September 14, 2026 16:13
@raelga

Copy link
Copy Markdown
Collaborator Author

Pushed a fix, the previous head accidentally bundled a repo-wide go.mod/go.sum dependency bump (azcore 1.21.1→1.23.0, azidentity 1.13.1→1.14.0, testify 1.11.1→1.12.0 across ~60 modules) alongside the intended pipeline change. That bump is what broke ci/prow/image-updater-images (failed identically on the last 3 runs), it's unrelated to this PR's actual goal of retaining the ev2 retry budgets in global-pipeline.yaml.

Reverted those go.mod/go.sum files back to main's pinned versions, this PR now only touches dev-infrastructure/global-pipeline.yaml and global-pipeline-stg.yaml. Confirmed tooling/image-updater builds clean locally after the revert.

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.

🟢 Approval recommended

No unresolved review issues were identified.

Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@raelga

Copy link
Copy Markdown
Collaborator Author

/lgtm

@openshift-ci

openshift-ci Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Rael Garcia (@raelga): you cannot LGTM your own PR.

Details

In response to this:

/lgtm

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

Copilot AI review requested due to automatic review settings September 15, 2026 11:49

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

Both pipeline files need their retry limits corrected to provide the promised three retries.

Get a fresh assessment by requesting another Copilot review.

Review details

Suppressed comments (3)

dev-infrastructure/global-pipeline-stg.yaml:295

  • maximumRetryCount includes the initial execution (docs/pipeline-concept.md:235), so this setting leaves only two retries. The PR promises three retries after the initial run; please set this retry block to maximumRetryCount: 4.
      honorRetryBudgetWhenFailingFast: true

dev-infrastructure/global-pipeline.yaml:237

  • maximumRetryCount includes the initial execution (docs/pipeline-concept.md:235), so this setting leaves only two retries. The PR promises three retries after the initial run; please set this retry block to maximumRetryCount: 4.
      honorRetryBudgetWhenFailingFast: true

dev-infrastructure/global-pipeline.yaml:223

  • maximumRetryCount includes the initial execution (docs/pipeline-concept.md:235), so this setting leaves only two retries. The PR promises three retries after the initial run; please set this retry block to maximumRetryCount: 4.
      honorRetryBudgetWhenFailingFast: true
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

@raelga

Copy link
Copy Markdown
Collaborator Author

/retest

@raelga

Copy link
Copy Markdown
Collaborator Author

/test e2e-parallel

Fleet-wide flake, ci/prow/e2e-parallel is failing concurrently on several unrelated open PRs right now (#6955, #6954, #6952, #6948), all against the same BaseSHA. Not caused by this PR.

@trevorwilliams2025

Copy link
Copy Markdown
Collaborator

 global-pipeline-stg.yaml  - please double check the params referenced by the  mise-identity nd geneva-identities steps here.
 
geneva-identities-stg.tmpl.bicepparam sets genevaActionApplicationManage = false , and geneva-identities.bicep  gates the Entra app module on that same flag ( module entraApp ... = if (genevaActionApplicationManage) ). Same pattern for  mise-identity-stg.tmpl.bicepparam  -  miseApplicationDeploy = false  -  mise-identity.bicep 's  if (miseApplicationDeploy).

If that's right, doesn't that mean the Entra app/owners module never deploys on these two steps in this file, so the new  automatedRetry  blocks (and their comments about the Graph owners error) can never actually trigger here? Is this intentional (e.g. forward-looking for when V2 takes over app management at decommission), or did the canonical retry get copied over without accounting for the  false flags in the STG V2 params?

Copilot AI review requested due to automatic review settings September 16, 2026 07:07

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

Add the retry policy and fail-fast retry-budget handling to both staging identity steps.

Get a fresh assessment by requesting another Copilot review.

Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

@raelga

Copy link
Copy Markdown
Collaborator Author

Confirmed. The STG V2 parameter files set genevaActionApplicationManage = false and miseApplicationDeploy = false, and both templates gate their Entra app modules on those flags. Those two retry policies could never match in global-pipeline-stg.yaml.

I removed both dead retry blocks in commit 21205e598. The retry policy remains only in the canonical global-pipeline.yaml, which manages the current Stage and Prod applications. make validate-config-pipelines, make verify, and the Global EV2 resolve render pass with this scope.

@trevorwilliams2025

Copy link
Copy Markdown
Collaborator

/test e2e-parallel

@roivaz

Copy link
Copy Markdown
Collaborator

/lgtm
/approve

@openshift-ci

openshift-ci Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: raelga, roivaz

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

The pull request process is described here

Details Needs approval from an approver in each of these files:

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

@raelga

Copy link
Copy Markdown
Collaborator Author

/retest

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 2d31199 and 2 for PR HEAD 21205e5 in total

@raelga

Copy link
Copy Markdown
Collaborator Author

/test e2e-parallel

@raelga

Copy link
Copy Markdown
Collaborator Author

/retest

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD c58dd9a and 1 for PR HEAD 21205e5 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD bcc8264 and 0 for PR HEAD 21205e5 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/hold

Revision 21205e5 was retested 3 times: holding

@raelga

Copy link
Copy Markdown
Collaborator Author

/unhold

@raelga

Copy link
Copy Markdown
Collaborator Author

/test e2e-parallel

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 6d85082 and 2 for PR HEAD 21205e5 in total

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 0662a70 and 1 for PR HEAD 21205e5 in total

@openshift-merge-bot
openshift-merge-bot Bot merged commit b391793 into Azure:main Sep 18, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants