diff --git a/dev-infrastructure/configurations/geneva-identities-stg.tmpl.bicepparam b/dev-infrastructure/configurations/geneva-identities-stg.tmpl.bicepparam index caf7e0ee6e3..41430434dac 100644 --- a/dev-infrastructure/configurations/geneva-identities-stg.tmpl.bicepparam +++ b/dev-infrastructure/configurations/geneva-identities-stg.tmpl.bicepparam @@ -5,6 +5,14 @@ using '../templates/geneva-identities.bicep' param genevaActionsCertificateDomain = '{{ .geneva.actions.certificate.san }}' param genevaActionApplicationUseSNI = {{ .geneva.actions.application.useSNI }} -param genevaActionApplicationManage = {{ .geneva.actions.application.manage }} +// Coexistence: the Geneva Actions Entra app is environment-scoped (arohcp-ga-stg) +// and is managed by both the canonical stg global rollout and this transient V2 +// rollout. Both set the same fixed entraAppOwnerIds, so app ownership races between +// them: whichever ran last owns it, and the other rollout's deploy identity (which +// only holds Application.ReadWrite.OwnedBy) then fails to manage it with +// Authorization_RequestDenied. This regressed the V2 rollout after a run where it +// had briefly owned the app. The V2 global rollout does not consume this app, so +// skip managing it here to end the tug-of-war. Revisit at decommission. +param genevaActionApplicationManage = false param genevaActionApplicationName = '{{ .geneva.actions.application.name }}' param entraAppOwnerIds = '{{ .entraAppOwnerIds }}' diff --git a/dev-infrastructure/configurations/mise-identity-stg.tmpl.bicepparam b/dev-infrastructure/configurations/mise-identity-stg.tmpl.bicepparam new file mode 100644 index 00000000000..6df0d6c9389 --- /dev/null +++ b/dev-infrastructure/configurations/mise-identity-stg.tmpl.bicepparam @@ -0,0 +1,15 @@ +// TRANSIENT: STG-global "V2" copy of mise-identity.tmpl.bicepparam. Removed at decommission. +// +// Coexistence: the MISE Entra app is environment-scoped (arohcp-mise-stg) and is +// managed by both the canonical stg global rollout and this transient V2 rollout. +// Both set the same fixed entraAppOwnerIds, so app ownership races between them: +// whichever ran last owns it, and the other rollout's deploy identity (which only +// holds Application.ReadWrite.OwnedBy) then fails to manage it with +// Authorization_RequestDenied. The V2 global rollout does not consume this app +// (the stg svc rollout looks it up independently), so skip deploying it here to end +// the tug-of-war. Revisit at decommission. +using '../templates/mise-identity.bicep' + +param miseApplicationName = '{{ .mise.applicationName }}' +param entraAppOwnerIds = '{{ .entraAppOwnerIds }}' +param miseApplicationDeploy = false diff --git a/dev-infrastructure/global-pipeline-stg.yaml b/dev-infrastructure/global-pipeline-stg.yaml index 545d7c7fa18..33fdd642c58 100644 --- a/dev-infrastructure/global-pipeline-stg.yaml +++ b/dev-infrastructure/global-pipeline-stg.yaml @@ -279,7 +279,7 @@ resourceGroups: - name: mise-identity action: ARM template: templates/mise-identity.bicep - parameters: configurations/mise-identity.tmpl.bicepparam + parameters: configurations/mise-identity-stg.tmpl.bicepparam deploymentLevel: ResourceGroup - name: housekeeping action: Shell