From f966880c88cbb7dfc53adea13205cd25813d3e97 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Jun 2026 05:35:16 +0000 Subject: [PATCH 1/7] Initial plan From 60afa8b114b805df59df784f191f0eb81858d78f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Jun 2026 05:47:23 +0000 Subject: [PATCH 2/7] fix: delete-unmatched revisioned API cleanup (Closes #142) --- .github/workflows/integration-test.yml | 17 +++ src/services/publish-service.ts | 138 +++++++++++++---- .../integration/all-resource-types/README.md | 12 ++ .../phases/run-phase6-delete-unmatched.ps1 | 141 ++++++++++++++++++ .../all-resource-types/run-roundtrip-test.ps1 | 24 ++- tests/unit/services/publish-service.test.ts | 80 ++++++++++ 6 files changed, 380 insertions(+), 32 deletions(-) create mode 100644 tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 35948228..77d42403 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -232,6 +232,23 @@ jobs: -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` -LogLevel '${{ steps.settings.outputs.logLevel }}' + - name: Run Round-Trip Phase 6b (Delete Unmatched) + if: success() + shell: pwsh + env: + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + run: | + $extractOutputDir = '${{ steps.phase2.outputs.ExtractOutputDir }}' + + ./tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 ` + -TargetSubscriptionId '${{ steps.phase1.outputs.targetSubscriptionId }}' ` + -TargetResourceGroup '${{ steps.phase1.outputs.targetResourceGroup }}' ` + -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` + -OverrideFile '${{ steps.phase4.outputs.overrideFile }}' ` + -LogLevel '${{ steps.settings.outputs.logLevel }}' ` + -ExtractOutputDir $extractOutputDir + - name: Run Round-Trip Phase 7 (Teardown) if: always() shell: pwsh diff --git a/src/services/publish-service.ts b/src/services/publish-service.ts index 121d5639..bc37716d 100644 --- a/src/services/publish-service.ts +++ b/src/services/publish-service.ts @@ -705,49 +705,127 @@ async function deleteTier( context: ApimServiceContext, descriptors: ResourceDescriptor[] ): Promise { - const tasks = descriptors.map((descriptor) => async () => { - try { - const deleted = await client.deleteResource(context, descriptor); + const apiDescriptors = descriptors.filter((d) => d.type === ResourceType.Api); + const nonApiDescriptors = descriptors.filter((d) => d.type !== ResourceType.Api); - return { - descriptor, - action: 'delete' as const, - status: deleted ? ('success' as const) : ('skipped' as const), - }; - } catch (error) { - logger.error( - `Failed to delete ${buildResourceLabel(descriptor)}:`, - error - ); - return { - descriptor, - action: 'delete' as const, - status: 'failed' as const, - error: error instanceof Error ? error : new Error(String(error)), - }; + const results: PublishActionResult[] = []; + + if (nonApiDescriptors.length > 0) { + const nonApiResults = await deleteDescriptorsInParallel( + client, + context, + nonApiDescriptors + ); + results.push(...nonApiResults); + } + + if (apiDescriptors.length > 0) { + const orderedApiDescriptors = orderApiDescriptorsForDelete(apiDescriptors); + const apiResults = await deleteDescriptorsSequentially( + client, + context, + orderedApiDescriptors + ); + results.push(...apiResults); + } + + return results; +} + +function orderApiDescriptorsForDelete( + descriptors: ResourceDescriptor[] +): ResourceDescriptor[] { + return [...descriptors].sort((a, b) => { + const aName = getNamePart(a.nameParts, 0); + const bName = getNamePart(b.nameParts, 0); + const aRoot = getApiRootName(aName); + const bRoot = getApiRootName(bName); + + if (aRoot !== bRoot) { + return aRoot.localeCompare(bRoot); + } + + const aIsRevision = isApiRevisionName(aName); + const bIsRevision = isApiRevisionName(bName); + + if (aIsRevision === bIsRevision) { + return aName.localeCompare(bName); } + + return aIsRevision ? -1 : 1; }); +} + +async function deleteDescriptorsSequentially( + client: IApimClient, + context: ApimServiceContext, + descriptors: ResourceDescriptor[] +): Promise { + const results: PublishActionResult[] = []; + + for (const descriptor of descriptors) { + results.push(await deleteDescriptor(client, context, descriptor)); + } + + return results; +} + +async function deleteDescriptorsInParallel( + client: IApimClient, + context: ApimServiceContext, + descriptors: ResourceDescriptor[] +): Promise { + const tasks = descriptors.map((descriptor) => async () => + deleteDescriptor(client, context, descriptor) + ); const taskResults = await runParallel(tasks, 5); return taskResults.map((tr, index) => { if (tr.status === 'fulfilled' && tr.value) { return tr.value; - } else { - const descriptor = descriptors[index]; - if (!descriptor) { - throw new Error('No descriptor found for failed task'); - } - return { - descriptor, - action: 'delete' as const, - status: 'failed' as const, - error: tr.reason || new Error('Unknown error'), - }; } + + const descriptor = descriptors[index]; + if (!descriptor) { + throw new Error('No descriptor found for failed task'); + } + return { + descriptor, + action: 'delete' as const, + status: 'failed' as const, + error: tr.reason || new Error('Unknown error'), + }; }); } +async function deleteDescriptor( + client: IApimClient, + context: ApimServiceContext, + descriptor: ResourceDescriptor +): Promise { + try { + const deleted = await client.deleteResource(context, descriptor); + + return { + descriptor, + action: 'delete' as const, + status: deleted ? ('success' as const) : ('skipped' as const), + }; + } catch (error) { + logger.error( + `Failed to delete ${buildResourceLabel(descriptor)}:`, + error + ); + return { + descriptor, + action: 'delete' as const, + status: 'failed' as const, + error: error instanceof Error ? error : new Error(String(error)), + }; + } +} + /** * Convert ResourcePublishResult to PublishActionResult. */ diff --git a/tests/integration/all-resource-types/README.md b/tests/integration/all-resource-types/README.md index b9df649b..31c6aa5c 100644 --- a/tests/integration/all-resource-types/README.md +++ b/tests/integration/all-resource-types/README.md @@ -181,6 +181,18 @@ Compares source and target APIM resources and reports differences or parity. ./phases/run-phase6-compare.ps1 -SourceSubscriptionId 11111111-1111-1111-1111-111111111111 -SourceResourceGroup rg-src -SourceApimName src-apim -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose ``` +**Phase 6b: Delete-unmatched validation** (`phases/run-phase6-delete-unmatched.ps1`). + +Removes a revisioned API from extracted artifacts, runs `apiops publish --delete-unmatched`, and verifies the removed API revisions are deleted from target APIM. + +```powershell +# Minimum parameters +./phases/run-phase6-delete-unmatched.ps1 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -OverrideFile ./phases/extracted-artifacts/.overrides.yaml + +# All parameters +./phases/run-phase6-delete-unmatched.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts +``` + **Phase 7: Teardown** (`phases/run-phase7-teardown.ps1`). Deletes source and target resource groups and purges soft-deleted APIM services. This phase always run, regardless of the success of previous phases, unles `-SkipTeardown` switch is specified. diff --git a/tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 b/tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 new file mode 100644 index 00000000..80c8944a --- /dev/null +++ b/tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 @@ -0,0 +1,141 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +#requires -Version 7.0 +<# +.SYNOPSIS + Phase 6b - Validate publish --delete-unmatched with revisioned APIs. +.DESCRIPTION + Removes a revisioned API from extracted artifacts, runs publish with + --delete-unmatched, and verifies the revisioned API resources are deleted + from the target APIM instance. +#> + +[CmdletBinding()] +param( + [string]$TargetSubscriptionId, + + [Parameter(Mandatory)] + [string]$TargetResourceGroup, + + [Parameter(Mandatory)] + [string]$TargetApimName, + + [ValidateSet('Info', 'Verbose', 'Debug')] + [string]$LogLevel = 'Verbose', + + [Parameter(Mandatory)] + [string]$OverrideFile, + + [string]$ExtractOutputDir = "$PSScriptRoot/extracted-artifacts" +) + +$ErrorActionPreference = 'Stop' +$VerbosePreference = if ($LogLevel -in @('Verbose', 'Debug')) { 'Continue' } else { 'SilentlyContinue' } +$DebugPreference = if ($LogLevel -eq 'Debug') { 'Continue' } else { 'SilentlyContinue' } + +$phaseRoot = Split-Path $PSScriptRoot -Parent +$maskingModule = Join-Path $phaseRoot 'modules/LogMasking.psm1' +$scriptArgModule = Join-Path $phaseRoot 'modules/ScriptRuntime.psm1' +$apiopsCliModule = Join-Path $phaseRoot 'modules/ApiopsCli.psm1' + +foreach ($requiredFile in @($maskingModule, $scriptArgModule, $apiopsCliModule)) { + if (-not (Test-Path $requiredFile)) { + Write-Error "Required file not found: $requiredFile" + exit 2 + } +} + +Import-Module $maskingModule -Force +Import-Module $scriptArgModule -Force +Import-Module $apiopsCliModule -Force + +if (-not (Test-Path $ExtractOutputDir)) { + Write-Error "ExtractOutputDir not found: $ExtractOutputDir" + exit 2 +} + +if (-not (Test-Path $OverrideFile)) { + Write-Error "OverrideFile not found: $OverrideFile" + exit 2 +} + +$targetSubscriptionIdValue = Get-BoundParameterValueOrNull -BoundParameters $PSBoundParameters -Name 'TargetSubscriptionId' +$apiopsLogLevel = Get-ApiopsLogLevel -ScriptLogLevel $LogLevel +$apiopsAuthArgs = Get-ApiopsAuthArgs + +$apiFoldersToRemove = @( + 'src-rest-revisioned', + 'src-rest-revisioned;rev=2' +) + +Write-Host "๐Ÿงช Delete-unmatched โ€” remove revisioned API artifacts" +foreach ($apiFolder in $apiFoldersToRemove) { + $apiDirectory = Join-Path $ExtractOutputDir "apis/$apiFolder" + if (-not (Test-Path $apiDirectory)) { + Write-Error "Expected API artifact directory not found: $apiDirectory" + exit 2 + } + + Remove-Item -Path $apiDirectory -Recurse -Force + Write-Host "Removed artifact directory: $apiDirectory" +} + +Write-Host "๐Ÿงช Delete-unmatched โ€” publish with --delete-unmatched" +$publishArgs = @( + 'publish', + '--resource-group', $TargetResourceGroup, + '--service-name', $TargetApimName, + '--source', $ExtractOutputDir, + '--overrides', $OverrideFile, + '--delete-unmatched', + '--log-level', $apiopsLogLevel +) +if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { + $publishArgs += @('--subscription-id', $targetSubscriptionIdValue) +} +$publishArgs += $apiopsAuthArgs + +$replacements = @{ + $TargetResourceGroup = Protect-ResourceGroupName -Value $TargetResourceGroup + $TargetApimName = Protect-ApimName -Value $TargetApimName + $OverrideFile = '.overrides.yaml' +} +Add-ArgumentIfSet -Hashtable $replacements -Key $targetSubscriptionIdValue -Value (Protect-SubscriptionId -Value $targetSubscriptionIdValue) + +$publishExitCode = Invoke-MaskedApiopsCommand -Replacements $replacements -Arguments $publishArgs +if ($publishExitCode -ne 0) { + Write-Error "Publish with --delete-unmatched failed (exit code $publishExitCode)" + exit 2 +} + +Write-Host "๐Ÿงช Delete-unmatched โ€” verify APIs are deleted from target APIM" +foreach ($apiId in $apiFoldersToRemove) { + $listArgs = @( + 'apim', 'api', 'list', + '--resource-group', $TargetResourceGroup, + '--service-name', $TargetApimName, + '--query', "[?name=='$apiId'].name", + '--output', 'tsv' + ) + if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { + $listArgs += @('--subscription', $targetSubscriptionIdValue) + } + + $existingApiNames = Invoke-MaskedAzCommand -Replacements $replacements -Arguments $listArgs + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to query APIs for validation (api-id: $apiId)" + exit 2 + } + + $apiNameMatches = $existingApiNames -split '[\r\n]+' | + ForEach-Object { $_.Trim() } | + Where-Object { -not [string]::IsNullOrWhiteSpace($_) -and $_ -eq $apiId } + + if ($apiNameMatches) { + Write-Error "API still exists after delete-unmatched publish: $apiId" + exit 2 + } +} + +Write-Host "โœ… Delete-unmatched validation passed for revisioned API cleanup" +exit 0 diff --git a/tests/integration/all-resource-types/run-roundtrip-test.ps1 b/tests/integration/all-resource-types/run-roundtrip-test.ps1 index 689123aa..bab4210d 100644 --- a/tests/integration/all-resource-types/run-roundtrip-test.ps1 +++ b/tests/integration/all-resource-types/run-roundtrip-test.ps1 @@ -2,7 +2,7 @@ # Licensed under the MIT license. <# .SYNOPSIS - Master orchestrator for the 7-phase round-trip integration workflow. + Master orchestrator for the round-trip integration workflow. .DESCRIPTION Single entry point that runs the full round-trip sequence: 1) deploy source + target APIM instances, @@ -11,6 +11,7 @@ 4) generate target environment overrides, 5) publish artifacts to target, 6) compare source and target, + 6b) validate --delete-unmatched behavior, 7) teardown. Works both locally and in CI (writes to GITHUB_OUTPUT when available). @@ -115,9 +116,10 @@ $phase3ValidateExtractScript = Join-Path $PSScriptRoot 'phases/run-phase3-valida $phase4CreateOverridesScript = Join-Path $PSScriptRoot 'phases/run-phase4-create-overrides.ps1' $phase5PublishScript = Join-Path $PSScriptRoot 'phases/run-phase5-publish.ps1' $phase6CompareScript = Join-Path $PSScriptRoot 'phases/run-phase6-compare.ps1' +$phase6bDeleteUnmatchedScript = Join-Path $PSScriptRoot 'phases/run-phase6-delete-unmatched.ps1' $phase7TeardownScript = Join-Path $PSScriptRoot 'phases/run-phase7-teardown.ps1' -foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase7TeardownScript)) { +foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase6bDeleteUnmatchedScript, $phase7TeardownScript)) { if (-not (Test-Path $requiredFile)) { Write-Error "Required file not found: $requiredFile" exit 2 @@ -244,6 +246,24 @@ try { $global:LASTEXITCODE = 0 & $phase6CompareScript @phase6Args + if ($LASTEXITCODE -ne 0) { + $exitCode = $LASTEXITCODE + exit $exitCode + } + + # Phase 6b: Validate delete-unmatched for revisioned APIs + $currentPhase = 'phase6-delete-unmatched' + $phase6bDeleteUnmatchedArgs = @{ + TargetResourceGroup = $TargetResourceGroup + TargetApimName = $TargetApimName + TargetSubscriptionId = $TargetSubscriptionId + OverrideFile = $overrideFile + LogLevel = $LogLevel + } + Add-ArgumentIfSet -Hashtable $phase6bDeleteUnmatchedArgs -Key 'ExtractOutputDir' -Value $extractOutputDirValue + $global:LASTEXITCODE = 0 + & $phase6bDeleteUnmatchedScript @phase6bDeleteUnmatchedArgs + $exitCode = $LASTEXITCODE } catch { diff --git a/tests/unit/services/publish-service.test.ts b/tests/unit/services/publish-service.test.ts index 2f842263..7b9f113c 100644 --- a/tests/unit/services/publish-service.test.ts +++ b/tests/unit/services/publish-service.test.ts @@ -526,6 +526,86 @@ describe('publish-service', () => { expect(result.totalDeletes).toBe(1); }); + it('should delete API revisions before deleting the root API', async () => { + const client = createMockClient(); + const store = createMockStore([]); + + vi.mocked(computeDeleteActions).mockResolvedValue([ + { type: ResourceType.Api, nameParts: ['orders-api'] }, + { type: ResourceType.Api, nameParts: ['orders-api;rev=2'] }, + ]); + + const deleteOrder: string[] = []; + vi.mocked(client.deleteResource).mockImplementation( + async (_ctx, descriptor) => { + const apiName = descriptor.nameParts[0] ?? ''; + deleteOrder.push(apiName); + + if (apiName === 'orders-api') { + const revisionDeleted = deleteOrder.includes('orders-api;rev=2'); + if (!revisionDeleted) { + throw new Error('Cannot delete the current revision of an API.'); + } + } + + return true; + } + ); + + const config: PublishConfig = { + service: testContext, + sourceDir: '/source', + dryRun: false, + deleteUnmatched: true, + logLevel: LogLevel.INFO, + }; + + const result = await runPublish(client, store, config); + + expect(deleteOrder).toEqual(['orders-api;rev=2', 'orders-api']); + expect(result.totalDeletes).toBe(2); + expect(result.totalErrors).toBe(0); + }); + + it('should order API deletes deterministically across API families', async () => { + const client = createMockClient(); + const store = createMockStore([]); + + vi.mocked(computeDeleteActions).mockResolvedValue([ + { type: ResourceType.Api, nameParts: ['products-api'] }, + { type: ResourceType.Api, nameParts: ['orders-api'] }, + { type: ResourceType.Api, nameParts: ['orders-api;rev=2'] }, + { type: ResourceType.Api, nameParts: ['products-api;rev=2'] }, + ]); + + const deleteOrder: string[] = []; + vi.mocked(client.deleteResource).mockImplementation( + async (_ctx, descriptor) => { + deleteOrder.push(descriptor.nameParts[0] ?? ''); + return true; + } + ); + + const config: PublishConfig = { + service: testContext, + sourceDir: '/source', + dryRun: false, + deleteUnmatched: true, + logLevel: LogLevel.INFO, + }; + + const result = await runPublish(client, store, config); + + expect(deleteOrder).toEqual([ + 'orders-api;rev=2', + 'orders-api', + 'products-api;rev=2', + 'products-api', + ]); + expect(result.totalDeletes).toBe(4); + expect(result.totalErrors).toBe(0); + }); + it('should output per-resource status lines', async () => { const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true); From 590a88f90869a0cfa23e9354e78bc81ba503a5af Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Jun 2026 06:23:04 +0000 Subject: [PATCH 3/7] chore: renumber round-trip delete-unmatched and teardown phases --- .github/workflows/integration-test.yml | 8 +++--- .../integration/all-resource-types/README.md | 12 ++++----- ...ed.ps1 => run-phase7-delete-unmatched.ps1} | 2 +- ...7-teardown.ps1 => run-phase8-teardown.ps1} | 6 ++--- .../all-resource-types/run-roundtrip-test.ps1 | 26 +++++++++---------- 5 files changed, 27 insertions(+), 27 deletions(-) rename tests/integration/all-resource-types/phases/{run-phase6-delete-unmatched.ps1 => run-phase7-delete-unmatched.ps1} (98%) rename tests/integration/all-resource-types/phases/{run-phase7-teardown.ps1 => run-phase8-teardown.ps1} (97%) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 77d42403..39ea9f8b 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -232,7 +232,7 @@ jobs: -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` -LogLevel '${{ steps.settings.outputs.logLevel }}' - - name: Run Round-Trip Phase 6b (Delete Unmatched) + - name: Run Round-Trip Phase 7 (Delete Unmatched) if: success() shell: pwsh env: @@ -241,7 +241,7 @@ jobs: run: | $extractOutputDir = '${{ steps.phase2.outputs.ExtractOutputDir }}' - ./tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 ` + ./tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 ` -TargetSubscriptionId '${{ steps.phase1.outputs.targetSubscriptionId }}' ` -TargetResourceGroup '${{ steps.phase1.outputs.targetResourceGroup }}' ` -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` @@ -249,7 +249,7 @@ jobs: -LogLevel '${{ steps.settings.outputs.logLevel }}' ` -ExtractOutputDir $extractOutputDir - - name: Run Round-Trip Phase 7 (Teardown) + - name: Run Round-Trip Phase 8 (Teardown) if: always() shell: pwsh run: | @@ -262,7 +262,7 @@ jobs: $location = '${{ steps.phase1.outputs.location }}' if ([string]::IsNullOrWhiteSpace($location)) { $location = '${{ inputs.location }}' } - ./tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 ` + ./tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 ` -SourceResourceGroup $sourceResourceGroup ` -TargetResourceGroup $targetResourceGroup ` -Location $location diff --git a/tests/integration/all-resource-types/README.md b/tests/integration/all-resource-types/README.md index 31c6aa5c..b4e72a3a 100644 --- a/tests/integration/all-resource-types/README.md +++ b/tests/integration/all-resource-types/README.md @@ -181,28 +181,28 @@ Compares source and target APIM resources and reports differences or parity. ./phases/run-phase6-compare.ps1 -SourceSubscriptionId 11111111-1111-1111-1111-111111111111 -SourceResourceGroup rg-src -SourceApimName src-apim -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose ``` -**Phase 6b: Delete-unmatched validation** (`phases/run-phase6-delete-unmatched.ps1`). +**Phase 7: Delete-unmatched validation** (`phases/run-phase7-delete-unmatched.ps1`). Removes a revisioned API from extracted artifacts, runs `apiops publish --delete-unmatched`, and verifies the removed API revisions are deleted from target APIM. ```powershell # Minimum parameters -./phases/run-phase6-delete-unmatched.ps1 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -OverrideFile ./phases/extracted-artifacts/.overrides.yaml +./phases/run-phase7-delete-unmatched.ps1 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -OverrideFile ./phases/extracted-artifacts/.overrides.yaml # All parameters -./phases/run-phase6-delete-unmatched.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts +./phases/run-phase7-delete-unmatched.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts ``` -**Phase 7: Teardown** (`phases/run-phase7-teardown.ps1`). +**Phase 8: Teardown** (`phases/run-phase8-teardown.ps1`). Deletes source and target resource groups and purges soft-deleted APIM services. This phase always run, regardless of the success of previous phases, unles `-SkipTeardown` switch is specified. ```powershell # Minimum parameters -./phases/run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt +./phases/run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt # All parameters -./phases/run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -Location eastus2 -SkipTeardown +./phases/run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -Location eastus2 -SkipTeardown ``` ## CI diff --git a/tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 b/tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 similarity index 98% rename from tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 rename to tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 index 80c8944a..19b6da58 100644 --- a/tests/integration/all-resource-types/phases/run-phase6-delete-unmatched.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 @@ -3,7 +3,7 @@ #requires -Version 7.0 <# .SYNOPSIS - Phase 6b - Validate publish --delete-unmatched with revisioned APIs. + Phase 7 - Validate publish --delete-unmatched with revisioned APIs. .DESCRIPTION Removes a revisioned API from extracted artifacts, runs publish with --delete-unmatched, and verifies the revisioned API resources are deleted diff --git a/tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 b/tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 similarity index 97% rename from tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 rename to tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 index 60ea771a..58d1b9dd 100644 --- a/tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 @@ -3,7 +3,7 @@ #requires -Version 7.0 <# .SYNOPSIS - Phase 7 โ€” Tear down source and target APIM resource groups. + Phase 8 โ€” Tear down source and target APIM resource groups. .DESCRIPTION Deletes the source and target resource groups, waits for the deletions to complete, and then purges any soft-deleted APIM instances in the specified location. @@ -20,7 +20,7 @@ Skips teardown when specified. .EXAMPLE - .\run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt + .\run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt #> [CmdletBinding()] @@ -52,7 +52,7 @@ if ($SkipTeardown) { exit 0 } -Write-Host "๐Ÿงน PHASE 7 โ€” Teardown" +Write-Host "๐Ÿงน PHASE 8 โ€” Teardown" $sourceApimName = $null $targetApimName = $null diff --git a/tests/integration/all-resource-types/run-roundtrip-test.ps1 b/tests/integration/all-resource-types/run-roundtrip-test.ps1 index bab4210d..c999dee6 100644 --- a/tests/integration/all-resource-types/run-roundtrip-test.ps1 +++ b/tests/integration/all-resource-types/run-roundtrip-test.ps1 @@ -116,10 +116,10 @@ $phase3ValidateExtractScript = Join-Path $PSScriptRoot 'phases/run-phase3-valida $phase4CreateOverridesScript = Join-Path $PSScriptRoot 'phases/run-phase4-create-overrides.ps1' $phase5PublishScript = Join-Path $PSScriptRoot 'phases/run-phase5-publish.ps1' $phase6CompareScript = Join-Path $PSScriptRoot 'phases/run-phase6-compare.ps1' -$phase6bDeleteUnmatchedScript = Join-Path $PSScriptRoot 'phases/run-phase6-delete-unmatched.ps1' -$phase7TeardownScript = Join-Path $PSScriptRoot 'phases/run-phase7-teardown.ps1' +$phase7DeleteUnmatchedScript = Join-Path $PSScriptRoot 'phases/run-phase7-delete-unmatched.ps1' +$phase8TeardownScript = Join-Path $PSScriptRoot 'phases/run-phase8-teardown.ps1' -foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase6bDeleteUnmatchedScript, $phase7TeardownScript)) { +foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase7DeleteUnmatchedScript, $phase8TeardownScript)) { if (-not (Test-Path $requiredFile)) { Write-Error "Required file not found: $requiredFile" exit 2 @@ -251,18 +251,18 @@ try { exit $exitCode } - # Phase 6b: Validate delete-unmatched for revisioned APIs - $currentPhase = 'phase6-delete-unmatched' - $phase6bDeleteUnmatchedArgs = @{ + # Phase 7: Validate delete-unmatched for revisioned APIs + $currentPhase = 'phase7-delete-unmatched' + $phase7DeleteUnmatchedArgs = @{ TargetResourceGroup = $TargetResourceGroup TargetApimName = $TargetApimName TargetSubscriptionId = $TargetSubscriptionId OverrideFile = $overrideFile LogLevel = $LogLevel } - Add-ArgumentIfSet -Hashtable $phase6bDeleteUnmatchedArgs -Key 'ExtractOutputDir' -Value $extractOutputDirValue + Add-ArgumentIfSet -Hashtable $phase7DeleteUnmatchedArgs -Key 'ExtractOutputDir' -Value $extractOutputDirValue $global:LASTEXITCODE = 0 - & $phase6bDeleteUnmatchedScript @phase6bDeleteUnmatchedArgs + & $phase7DeleteUnmatchedScript @phase7DeleteUnmatchedArgs $exitCode = $LASTEXITCODE } @@ -278,17 +278,17 @@ catch { } } finally { - # Phase 7: Teardown apim instances and supporting resources - $phase7Args = @{ + # Phase 8: Teardown apim instances and supporting resources + $phase8Args = @{ SourceResourceGroup = $SourceResourceGroup TargetResourceGroup = $TargetResourceGroup Location = $Location SkipTeardown = $SkipTeardown } - Add-ArgumentIfSet -Hashtable $phase7Args -Key 'SourceSubscriptionId' -Value $SourceSubscriptionId - Add-ArgumentIfSet -Hashtable $phase7Args -Key 'TargetSubscriptionId' -Value $TargetSubscriptionId + Add-ArgumentIfSet -Hashtable $phase8Args -Key 'SourceSubscriptionId' -Value $SourceSubscriptionId + Add-ArgumentIfSet -Hashtable $phase8Args -Key 'TargetSubscriptionId' -Value $TargetSubscriptionId - & $phase7TeardownScript @phase7Args + & $phase8TeardownScript @phase8Args } exit $exitCode From 9c05293d56fdd0c92451782544c5df0c0d5dbede Mon Sep 17 00:00:00 2001 From: Elizabeth Maher Date: Thu, 2 Jul 2026 02:54:58 +0000 Subject: [PATCH 4/7] Refactor integration tests for API management - Updated PowerShell scripts in the integration tests to improve readability and maintainability. - Replaced the use of `Invoke-MaskedApiopsCommand` and `Invoke-MaskedAzCommand` with direct calls to the `apiops` CLI and `az` commands, enhancing error handling and output masking. - Introduced a new teardown phase script to handle resource group deletions and soft-deletion purging of APIM instances. - Removed the phase for validating delete-unmatched behavior and integrated its functionality into the publish phase. - Added support for a `--delete-unmatched` switch in the publish phase to manage unmatched resources during deployment. - Enhanced secret redaction in logs by implementing a `Protect-Secret` function for better handling of sensitive information. - Updated documentation and comments for clarity and consistency across scripts. --- .github/workflows/integration-test.yml | 25 +- .../Compare-ApimInstance.ps1 | 2 +- .../integration/all-resource-types/README.md | 37 ++- .../Test-ExtractedArtifact.ps1 | 2 +- .../bicep/target-apim-unmatched.bicep | 86 +++++++ .../modules/CompareSemantics.psm1 | 2 +- .../modules/DeploymentOps.psm1 | 131 ++++++++-- .../modules/LogMasking.psm1 | 240 +++--------------- .../phases/run-phase1-deploy-source.ps1 | 55 ++-- .../phases/run-phase1-deploy-target.ps1 | 74 ++++-- .../phases/run-phase1-deploy.ps1 | 11 +- .../phases/run-phase2-extract.ps1 | 26 +- .../phases/run-phase3-validate-extract.ps1 | 2 +- .../phases/run-phase4-create-overrides.ps1 | 2 +- .../phases/run-phase5-publish.ps1 | 35 ++- .../phases/run-phase6-compare.ps1 | 2 +- .../phases/run-phase7-delete-unmatched.ps1 | 141 ---------- ...8-teardown.ps1 => run-phase7-teardown.ps1} | 50 +--- .../all-resource-types/run-roundtrip-test.ps1 | 50 ++-- .../phases/run-phase1-deploy.ps1 | 66 +++-- .../phases/run-phase2-extract.ps1 | 25 +- .../phases/run-phase3-validate-redaction.ps1 | 2 +- .../phases/run-phase4-teardown.ps1 | 2 +- .../run-redact-secrets-test.ps1 | 2 +- .../shared/modules/DeploymentOps.psm1 | 39 +-- .../shared/modules/LogMasking.psm1 | 240 +++--------------- 26 files changed, 514 insertions(+), 835 deletions(-) create mode 100644 tests/integration/all-resource-types/bicep/target-apim-unmatched.bicep delete mode 100644 tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 rename tests/integration/all-resource-types/phases/{run-phase8-teardown.ps1 => run-phase7-teardown.ps1} (72%) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 39ea9f8b..999c2180 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -149,6 +149,7 @@ jobs: Location = '${{ inputs.location }}' LogLevel = '${{ steps.settings.outputs.logLevel }}' PublisherEmail = '${{ secrets.APIM_PUBLISHER_EMAIL }}' + TestDeleteUnmatched = $true } ./tests/integration/all-resource-types/phases/run-phase1-deploy.ps1 @params @@ -217,7 +218,8 @@ jobs: -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` -OverrideFile '${{ steps.phase4.outputs.overrideFile }}' ` -LogLevel '${{ steps.settings.outputs.logLevel }}' ` - -ExtractOutputDir $extractOutputDir + -ExtractOutputDir $extractOutputDir ` + -TestDeleteUnmatched - name: Run Round-Trip Phase 6 (Compare) if: success() @@ -232,24 +234,7 @@ jobs: -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` -LogLevel '${{ steps.settings.outputs.logLevel }}' - - name: Run Round-Trip Phase 7 (Delete Unmatched) - if: success() - shell: pwsh - env: - AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} - AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} - run: | - $extractOutputDir = '${{ steps.phase2.outputs.ExtractOutputDir }}' - - ./tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 ` - -TargetSubscriptionId '${{ steps.phase1.outputs.targetSubscriptionId }}' ` - -TargetResourceGroup '${{ steps.phase1.outputs.targetResourceGroup }}' ` - -TargetApimName '${{ steps.phase1.outputs.targetApimName }}' ` - -OverrideFile '${{ steps.phase4.outputs.overrideFile }}' ` - -LogLevel '${{ steps.settings.outputs.logLevel }}' ` - -ExtractOutputDir $extractOutputDir - - - name: Run Round-Trip Phase 8 (Teardown) + - name: Run Round-Trip Phase 7 (Teardown) if: always() shell: pwsh run: | @@ -262,7 +247,7 @@ jobs: $location = '${{ steps.phase1.outputs.location }}' if ([string]::IsNullOrWhiteSpace($location)) { $location = '${{ inputs.location }}' } - ./tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 ` + ./tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 ` -SourceResourceGroup $sourceResourceGroup ` -TargetResourceGroup $targetResourceGroup ` -Location $location diff --git a/tests/integration/all-resource-types/Compare-ApimInstance.ps1 b/tests/integration/all-resource-types/Compare-ApimInstance.ps1 index f7d9ea68..0b56ea83 100644 --- a/tests/integration/all-resource-types/Compare-ApimInstance.ps1 +++ b/tests/integration/all-resource-types/Compare-ApimInstance.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. <# .SYNOPSIS diff --git a/tests/integration/all-resource-types/README.md b/tests/integration/all-resource-types/README.md index b4e72a3a..5ad2e9ce 100644 --- a/tests/integration/all-resource-types/README.md +++ b/tests/integration/all-resource-types/README.md @@ -19,6 +19,15 @@ cd tests/integration/all-resource-types ./run-roundtrip-test.ps1 -PublisherEmail admin@contoso.com ``` +### Run full round trip with delete-unmatched coverage + +Seeds extra "unmatched" resources into the target APIM, publishes with `--delete-unmatched`, and lets the compare phase confirm they were removed. This keeps the default round trip fast while still exercising the delete-unmatched path on demand. + +```powershell +cd tests/integration/all-resource-types +./run-roundtrip-test.ps1 -PublisherEmail admin@contoso.com -TestDeleteUnmatched +``` + ### Run full round trip with log: #### Bash @@ -84,14 +93,14 @@ An apim instance with the following apis **Phase 1: Deploy source + target** (`phases/run-phase1-deploy.ps1`). -Deploys source and target APIM environments in parallel. +Deploys source and target APIM environments in parallel. Add `-TestDeleteUnmatched` to seed extra "unmatched" resources (a revisioned API plus a named value and backend) into the target instance so the `--delete-unmatched` publish path can be exercised. ```powershell # Minimum parameters ./phases/run-phase1-deploy.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -PublisherEmail admin@contoso.com # All parameters -./phases/run-phase1-deploy.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -PublisherEmail admin@contoso.com -SkuName StandardV2 -Location eastus2 -LogLevel Verbose -SourceApimName src-apim -TargetApimName tgt-apim -SourceSubscriptionId 11111111-1111-1111-1111-111111111111 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 +./phases/run-phase1-deploy.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -PublisherEmail admin@contoso.com -SkuName StandardV2 -Location eastus2 -LogLevel Verbose -SourceApimName src-apim -TargetApimName tgt-apim -SourceSubscriptionId 11111111-1111-1111-1111-111111111111 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TestDeleteUnmatched ``` Script returns resolved names, which can be for later phases, especially in the case minimal parameters are passed to the script. Example return value: @@ -159,19 +168,19 @@ Script returns path to created configuration overrides file. Example return valu **Phase 5: Publish** (`phases/run-phase5-publish.ps1`). -Publishes extracted artifacts to the target APIM instance using the generated overrides file. +Publishes extracted artifacts to the target APIM instance using the generated overrides file. Add `-TestDeleteUnmatched` to publish with `--delete-unmatched`, removing resources present in the target but absent from the extracted artifacts. ```powershell # Minimum parameters ./phases/run-phase5-publish.ps1 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -OverrideFile ./phases/extracted-artifacts/.overrides.yaml # All parameters -./phases/run-phase5-publish.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Debug -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts +./phases/run-phase5-publish.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Debug -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts -TestDeleteUnmatched ``` **Phase 6: Compare source and target API Management instances** (`phases/run-phase6-compare.ps1`). -Compares source and target APIM resources and reports differences or parity. +Compares source and target APIM resources and reports differences or parity. When the round trip runs with `-TestDeleteUnmatched`, this phase also confirms the seeded unmatched resources were removed by the `--delete-unmatched` publish. ```powershell # Minimum parameters @@ -181,28 +190,16 @@ Compares source and target APIM resources and reports differences or parity. ./phases/run-phase6-compare.ps1 -SourceSubscriptionId 11111111-1111-1111-1111-111111111111 -SourceResourceGroup rg-src -SourceApimName src-apim -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose ``` -**Phase 7: Delete-unmatched validation** (`phases/run-phase7-delete-unmatched.ps1`). - -Removes a revisioned API from extracted artifacts, runs `apiops publish --delete-unmatched`, and verifies the removed API revisions are deleted from target APIM. - -```powershell -# Minimum parameters -./phases/run-phase7-delete-unmatched.ps1 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -OverrideFile ./phases/extracted-artifacts/.overrides.yaml - -# All parameters -./phases/run-phase7-delete-unmatched.ps1 -TargetSubscriptionId 22222222-2222-2222-2222-222222222222 -TargetResourceGroup rg-tgt -TargetApimName tgt-apim -LogLevel Verbose -OverrideFile ./phases/extracted-artifacts/.overrides.yaml -ExtractOutputDir ./phases/extracted-artifacts -``` - -**Phase 8: Teardown** (`phases/run-phase8-teardown.ps1`). +**Phase 7: Teardown** (`phases/run-phase7-teardown.ps1`). Deletes source and target resource groups and purges soft-deleted APIM services. This phase always run, regardless of the success of previous phases, unles `-SkipTeardown` switch is specified. ```powershell # Minimum parameters -./phases/run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt +./phases/run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt # All parameters -./phases/run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -Location eastus2 -SkipTeardown +./phases/run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt -Location eastus2 -SkipTeardown ``` ## CI diff --git a/tests/integration/all-resource-types/Test-ExtractedArtifact.ps1 b/tests/integration/all-resource-types/Test-ExtractedArtifact.ps1 index 11eb2df7..b9d2cad1 100644 --- a/tests/integration/all-resource-types/Test-ExtractedArtifact.ps1 +++ b/tests/integration/all-resource-types/Test-ExtractedArtifact.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. <# .SYNOPSIS diff --git a/tests/integration/all-resource-types/bicep/target-apim-unmatched.bicep b/tests/integration/all-resource-types/bicep/target-apim-unmatched.bicep new file mode 100644 index 00000000..fbdd1a14 --- /dev/null +++ b/tests/integration/all-resource-types/bicep/target-apim-unmatched.bicep @@ -0,0 +1,86 @@ +// ============================================================================ +// Target APIM โ€” Unmatched Resources (delete-unmatched coverage) +// ============================================================================ +// Seeds extra "unmatched" child resources into an already-deployed target APIM +// instance. These resources do NOT exist in the source instance, so a publish +// run with --delete-unmatched must remove them and the round-trip compare phase +// then confirms the target matches the source. +// +// Deployed only when the round trip runs with -TestDeleteUnmatched. It targets +// the APIM service created by target-apim.bicep (referenced as existing). +// +// Usage: +// az deployment group create -g -f target-apim-unmatched.bicep \ +// -p apimName= +// ============================================================================ + +// --------------------------------------------------------------------------- +// Parameters +// --------------------------------------------------------------------------- + +@description('Name of the existing target APIM instance to seed with unmatched resources.') +param apimName string + +// --------------------------------------------------------------------------- +// Existing APIM instance +// --------------------------------------------------------------------------- + +resource apim 'Microsoft.ApiManagement/service@2025-09-01-preview' existing = { + name: apimName +} + +// --------------------------------------------------------------------------- +// Unmatched resources +// --------------------------------------------------------------------------- + +// 1. Revisioned API (base + second revision) โ€” the core --delete-unmatched +// scenario: an API whose revisions must all be removed together. +resource apiRevisioned 'Microsoft.ApiManagement/service/apis@2025-09-01-preview' = { + parent: apim + name: 'tgt-unmatched-revisioned' + properties: { + displayName: 'TGT Unmatched Revisioned' + description: 'Unmatched revisioned API seeded for delete-unmatched coverage' + path: 'tgt/unmatched-revisioned' + protocols: ['https'] + serviceUrl: 'https://tgt-unmatched-backend.example.com/api' + subscriptionRequired: false + apiType: 'http' + isCurrent: true + } +} + +resource apiRevisionedRev2 'Microsoft.ApiManagement/service/apis@2025-09-01-preview' = { + parent: apim + name: 'tgt-unmatched-revisioned;rev=2' + properties: { + path: 'tgt/unmatched-revisioned' + protocols: ['https'] + serviceUrl: 'https://tgt-unmatched-backend-v2.example.com/api' + apiRevisionDescription: 'Second revision seeded for delete-unmatched coverage' + sourceApiId: apiRevisioned.id + apiType: 'http' + } +} + +// 2. Named value โ€” an unmatched non-API resource type. +resource unmatchedNamedValue 'Microsoft.ApiManagement/service/namedValues@2025-09-01-preview' = { + parent: apim + name: 'tgt-unmatched-nv' + properties: { + displayName: 'tgt-unmatched-nv' + value: 'unmatched-value' + secret: false + } +} + +// 3. Backend โ€” another unmatched resource type. +resource unmatchedBackend 'Microsoft.ApiManagement/service/backends@2025-09-01-preview' = { + parent: apim + name: 'tgt-unmatched-backend' + properties: { + url: 'https://tgt-unmatched-backend.example.com' + protocol: 'http' + description: 'Unmatched backend seeded for delete-unmatched coverage' + } +} diff --git a/tests/integration/all-resource-types/modules/CompareSemantics.psm1 b/tests/integration/all-resource-types/modules/CompareSemantics.psm1 index 273821b5..0485abb9 100644 --- a/tests/integration/all-resource-types/modules/CompareSemantics.psm1 +++ b/tests/integration/all-resource-types/modules/CompareSemantics.psm1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. <# diff --git a/tests/integration/all-resource-types/modules/DeploymentOps.psm1 b/tests/integration/all-resource-types/modules/DeploymentOps.psm1 index 15b786eb..cf62f626 100644 --- a/tests/integration/all-resource-types/modules/DeploymentOps.psm1 +++ b/tests/integration/all-resource-types/modules/DeploymentOps.psm1 @@ -36,13 +36,13 @@ function Write-DeploymentFailureDetails { $query = "[?properties.provisioningState=='Failed'].{resource:properties.targetResource.resourceName, type:properties.targetResource.resourceType, code:properties.statusMessage.error.code, message:properties.statusMessage.error.message, details:properties.statusMessage.error.details}" try { - Invoke-MaskedProcess -FilePath 'az' -Replacements $Replacements -Arguments @( - 'deployment', 'operation', 'group', 'list', - '--resource-group', $ResourceGroupName, - '--name', $DeploymentName, - '--query', $query, - '--output', 'json' - ) + az deployment operation group list ` + --resource-group $ResourceGroupName ` + --name $DeploymentName ` + --query $query ` + --output json 2>&1 | + Protect-Secret -Replacements $Replacements | + Out-Host } catch { $maskedErr = Protect-LogLine -Line ($_.Exception.Message) -Replacements $Replacements Write-Host "Failed to retrieve deployment operations: $maskedErr" -ForegroundColor Red @@ -188,18 +188,23 @@ function Wait-ApimApiQueryable { $apiListUri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.ApiManagement/service/$ApimServiceName/apis?api-version=2025-09-01-preview" $probe = { - $probeArgs = @( - 'rest', - '--method', 'get', - '--uri', $apiListUri, - '--query', "length(value[?name=='$ApiId'])", - '--output', 'tsv' - ) - $probeResult = Invoke-MaskedAzCommand -Replacements $Replacements -Arguments $probeArgs - if ($LASTEXITCODE -eq 0 -and "$probeResult" -eq '1') { - return $true + # Merge stderr into the stream and mask it so probe failures are visible + # (and redacted) instead of being swallowed by a redirect to $null. + $probeOutput = az rest ` + --method get ` + --uri $apiListUri ` + --query "length(value[?name=='$ApiId'])" ` + --output tsv 2>&1 | + Protect-Secret -Replacements $Replacements + if ($LASTEXITCODE -eq 0) { + # The query returns length(value[?name==ApiId]) as a bare count. API + # names are unique, so the result is '0' (not visible yet) or '1' + # (now queryable). -contains tolerates an incidental stderr line + # merged in by 2>&1. + return (@($probeOutput) -contains '1') } + $probeOutput | ForEach-Object { Write-Host " [api-probe] $_" -ForegroundColor DarkYellow } return $false } @@ -210,7 +215,97 @@ function Wait-ApimApiQueryable { -TimeoutMessage "Timed out waiting for API '$ApiId' to be queryable in APIM '$maskedApim' within ${TimeoutSeconds}s" } +<# +.SYNOPSIS +Runs an ARM template/Bicep deployment at resource-group scope, printing masked +failure details and throwing on error. + +.PARAMETER ResourceGroupName +Resource group to deploy into. + +.PARAMETER DeploymentName +Name for the deployment. + +.PARAMETER TemplateFile +Path to the ARM/Bicep template to deploy. + +.PARAMETER Parameters +Deployment parameters as 'key=value' strings. + +.PARAMETER Verbosity +Extra az CLI verbosity flags (e.g. '--verbose', '--debug'). + +.PARAMETER Output +az CLI output format for the deployment ('json' or 'none'). + +.PARAMETER Replacements +Mask replacement map for output. + +.PARAMETER FailureLabel +Human-readable label used in the thrown error message. + +.OUTPUTS +System.String - the raw az CLI output (when Output is 'json'). +#> +function New-ResourceGroupDeployment { + [CmdletBinding(SupportsShouldProcess)] + param( + [Parameter(Mandatory)][string]$ResourceGroupName, + [Parameter(Mandatory)][string]$DeploymentName, + [Parameter(Mandatory)][string]$TemplateFile, + [string[]]$Parameters = @(), + [string[]]$Verbosity = @(), + [ValidateSet('json', 'none')][string]$Output = 'json', + [hashtable]$Replacements = @{}, + [string]$FailureLabel = 'Deployment' + ) + + if (-not (Test-Path $TemplateFile)) { + throw "Template file not found at: $TemplateFile" + } + + $maskedRg = Protect-ResourceGroupName -Value $ResourceGroupName + + if (-not $PSCmdlet.ShouldProcess($maskedRg, "Create deployment '$DeploymentName'")) { + return + } + + # Capture stdout raw so callers can parse the deployment JSON, while + # redirecting stderr to a temp file so it can be masked and shown to the + # host (rather than leaking secrets or being silently discarded). + # Only pass --parameters when there are parameters to supply. + $parametersArg = if ($Parameters.Count -gt 0) { @('--parameters') + $Parameters } else { @() } + $stderrPath = (New-TemporaryFile).FullName + try { + $raw = az deployment group create ` + --resource-group $ResourceGroupName ` + --name $DeploymentName ` + --template-file $TemplateFile ` + --output $Output ` + $parametersArg $Verbosity 2> $stderrPath + $deployExit = $LASTEXITCODE + + Get-Content -LiteralPath $stderrPath -ErrorAction SilentlyContinue | + Protect-Secret -Replacements $Replacements | + Out-Host + } + finally { + Remove-Item -LiteralPath $stderrPath -Force -ErrorAction SilentlyContinue + } + + if ($deployExit -ne 0) { + Write-DeploymentFailureDetails ` + -ResourceGroupName $ResourceGroupName ` + -DeploymentName $DeploymentName ` + -Replacements $Replacements + throw "$FailureLabel failed (deployment '$DeploymentName' in resource group '$maskedRg'). See failed-operation details above." + } + + return ($raw -join "`n") +} + Export-ModuleMember -Function ` Write-DeploymentFailureDetails, ` Wait-ApimActivation, ` - Wait-ApimApiQueryable + Wait-ApimApiQueryable, ` + New-ResourceGroupDeployment diff --git a/tests/integration/all-resource-types/modules/LogMasking.psm1 b/tests/integration/all-resource-types/modules/LogMasking.psm1 index 15e11ef4..b426dc33 100644 --- a/tests/integration/all-resource-types/modules/LogMasking.psm1 +++ b/tests/integration/all-resource-types/modules/LogMasking.psm1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. # MaskingHelpers โ€” secret-redaction utilities for the round-trip integration test scripts. @@ -180,29 +180,36 @@ function Protect-LogLine { <# .SYNOPSIS -Resolves native executable paths, including Windows cmd wrappers. +Masks secrets in pipeline input, emitting redacted lines. -.PARAMETER Name -Command name to resolve. +.DESCRIPTION +Pipeline-friendly wrapper around Protect-LogLine so native command output can be +redacted with a pipe instead of the array-argument Invoke-Masked* helpers, e.g.: -.OUTPUTS -System.Management.Automation.PSCustomObject -#> -function Resolve-NativeExecutable { - param([string]$Name) + az deployment group create ... | Protect-Secret -Replacements $Replacements - $resolved = Get-Command -Name $Name -CommandType Application -ErrorAction Stop | - Select-Object -First 1 +Each line flowing through the pipe is passed through the same literal-replacement +and regex-redaction rules as Protect-LogLine. - $exePath = $resolved.Source - $prefix = @() +.PARAMETER InputObject +Pipeline line to mask. - if ($IsWindows -and ($exePath -like '*.cmd' -or $exePath -like '*.bat')) { - $prefix = @('/c', $exePath) - $exePath = $env:ComSpec - } +.PARAMETER Replacements +Literal replacement map applied before regex redaction. - return [pscustomobject]@{ FilePath = $exePath; Prefix = $prefix } +.OUTPUTS +System.String +#> +function Protect-Secret { + [CmdletBinding()] + param( + [Parameter(ValueFromPipeline)][AllowNull()][AllowEmptyString()][string]$InputObject, + [hashtable]$Replacements + ) + + process { + Protect-LogLine -Line $InputObject -Replacements $Replacements + } } <# @@ -244,194 +251,19 @@ function Resolve-ApiopsInvocation { <# .SYNOPSIS -Runs a process and streams masked output. - -.PARAMETER FilePath -Executable to run. - -.PARAMETER Arguments -Argument list for the executable. - -.PARAMETER Replacements -Mask replacement map for streamed lines. - -.PARAMETER CaptureStdout -Capture and return stdout instead of streaming. - -.OUTPUTS -System.String -#> -function Invoke-MaskedProcess { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string]$FilePath, - [string[]]$Arguments = @(), - [hashtable]$Replacements, - [switch]$CaptureStdout - ) - - $exe = Resolve-NativeExecutable -Name $FilePath - - $psi = [System.Diagnostics.ProcessStartInfo]::new() - $psi.FileName = $exe.FilePath - $psi.WorkingDirectory = $PWD.Path - $psi.RedirectStandardOutput = $true - $psi.RedirectStandardError = $true - $psi.RedirectStandardInput = $true - $psi.UseShellExecute = $false - $psi.CreateNoWindow = $true - $psi.StandardOutputEncoding = [System.Text.Encoding]::UTF8 - $psi.StandardErrorEncoding = [System.Text.Encoding]::UTF8 - - if ($exe.Prefix.Count -ge 2 -and $exe.Prefix[0] -eq '/c') { - # cmd.exe /c has special quoting rules that conflict with ArgumentList. - # Use the Arguments string property with double-quote wrapping so cmd.exe - # preserves the inner quotes around paths that contain spaces. - $cmdTarget = $exe.Prefix[1] - $quotedParts = @("`"$cmdTarget`"") - foreach ($a in $Arguments) { - $s = [string]$a - # Quote every argument individually so cmd.exe treats all content - # (including metacharacters like parentheses) as literals. - $escaped = $s -replace '"', '\"' - $quotedParts += "`"$escaped`"" - } - $psi.Arguments = "/c `"$($quotedParts -join ' ')`"" - } else { - $finalArgs = @() + $exe.Prefix + $Arguments - foreach ($a in $finalArgs) { - [void]$psi.ArgumentList.Add([string]$a) - } - } - - $stdoutQueue = [System.Collections.Concurrent.ConcurrentQueue[string]]::new() - $stderrQueue = [System.Collections.Concurrent.ConcurrentQueue[string]]::new() - - $proc = [System.Diagnostics.Process]::new() - $proc.StartInfo = $psi - - $stdoutBuffer = $null - if ($CaptureStdout) { - $stdoutBuffer = [System.Collections.Generic.List[string]]::new() - } - - $readerScript = { - param([System.IO.StreamReader]$Reader, - [System.Collections.Concurrent.ConcurrentQueue[string]]$Queue) - try { - while ($null -ne ($line = $Reader.ReadLine())) { - [void]$Queue.Enqueue($line) - } - } catch { - # IO errors on process teardown are expected; main thread owns exit. - } - } - - $outJob = $null - $errJob = $null - - try { - [void]$proc.Start() - $proc.StandardInput.Close() - - $outJob = Start-ThreadJob -ScriptBlock $readerScript -ArgumentList $proc.StandardOutput, $stdoutQueue - $errJob = Start-ThreadJob -ScriptBlock $readerScript -ArgumentList $proc.StandardError, $stderrQueue - - $line = $null - while (-not $proc.HasExited -or - $outJob.State -eq 'Running' -or - $errJob.State -eq 'Running') { - Start-Sleep -Milliseconds 100 - while ($stderrQueue.TryDequeue([ref]$line)) { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - while ($stdoutQueue.TryDequeue([ref]$line)) { - if ($CaptureStdout) { - [void]$stdoutBuffer.Add($line) - } else { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - } - } - - Wait-Job -Job $outJob, $errJob | Out-Null - - while ($stderrQueue.TryDequeue([ref]$line)) { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - while ($stdoutQueue.TryDequeue([ref]$line)) { - if ($CaptureStdout) { - [void]$stdoutBuffer.Add($line) - } else { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - } - - $global:LASTEXITCODE = $proc.ExitCode - } - finally { - if ($outJob) { Remove-Job -Job $outJob -Force -ErrorAction SilentlyContinue } - if ($errJob) { Remove-Job -Job $errJob -Force -ErrorAction SilentlyContinue } - $proc.Dispose() - } - - if ($CaptureStdout) { - return ($stdoutBuffer -join "`n") - } -} - -<# -.SYNOPSIS -Runs npx apiops with masked output and returns exit code. +Invokes the apiops CLI directly so scripts can call it like a native command: -.PARAMETER Arguments -Arguments passed to `apiops`. + apiops extract --resource-group $rg ... 2>&1 | Protect-Secret -Replacements $map -.PARAMETER Replacements -Mask replacement map for output. +Resolves the node + dist/cli entrypoint and forwards every argument. $LASTEXITCODE +is set from the CLI process. .OUTPUTS -System.Int32 +The CLI's stdout/stderr stream. #> -function Invoke-MaskedApiopsCommand { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string[]]$Arguments, - [hashtable]$Replacements - ) - - $apiops = Resolve-ApiopsInvocation - Invoke-MaskedProcess -FilePath $apiops.FilePath ` - -Arguments (@($apiops.Prefix) + $Arguments) ` - -Replacements $Replacements - - return $LASTEXITCODE -} - -<# -.SYNOPSIS -Runs az with masked output and returns captured stdout. - -.PARAMETER Arguments -Arguments passed to `az`. - -.PARAMETER Replacements -Mask replacement map for output. - -.OUTPUTS -System.String -#> -function Invoke-MaskedAzCommand { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string[]]$Arguments, - [hashtable]$Replacements - ) - - return Invoke-MaskedProcess -FilePath 'az' ` - -Arguments $Arguments ` - -Replacements $Replacements ` - -CaptureStdout +function apiops { + $invocation = Resolve-ApiopsInvocation + & $invocation.FilePath $invocation.Prefix @args } Export-ModuleMember -Function ` @@ -440,8 +272,6 @@ Export-ModuleMember -Function ` Protect-ResourceGroupName, ` Protect-ApimName, ` Protect-LogLine, ` - Resolve-NativeExecutable, ` + Protect-Secret, ` Resolve-ApiopsInvocation, ` - Invoke-MaskedProcess, ` - Invoke-MaskedApiopsCommand, ` - Invoke-MaskedAzCommand + apiops diff --git a/tests/integration/all-resource-types/phases/run-phase1-deploy-source.ps1 b/tests/integration/all-resource-types/phases/run-phase1-deploy-source.ps1 index bdd3fc48..9c844875 100644 --- a/tests/integration/all-resource-types/phases/run-phase1-deploy-source.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase1-deploy-source.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. <# .SYNOPSIS @@ -173,28 +173,19 @@ $azReplacements = @{ $ResourceGroupName = Protect-ResourceGroupName -Value $ResourceGroupName } -$azArgs = @( - 'deployment', 'group', 'create', - '--resource-group', $ResourceGroupName, - '--name', $deploymentName, - '--template-file', $bicepFile, - '--parameters', "skuName=$SkuName", "location=$Location", "publisherEmail=$PublisherEmail", - '--output', 'json' -) + $azVerbosity - +$deployParameters = @("skuName=$SkuName", "location=$Location", "publisherEmail=$PublisherEmail") if (-not [string]::IsNullOrWhiteSpace($apimNameValue)) { - $azArgs += @('--parameters', "apimName=$apimNameValue") + $deployParameters += "apimName=$apimNameValue" } -$raw = Invoke-MaskedAzCommand -Replacements $azReplacements -Arguments $azArgs - -if ($LASTEXITCODE -ne 0) { - Write-DeploymentFailureDetails ` - -ResourceGroupName $ResourceGroupName ` - -DeploymentName $deploymentName ` - -Replacements $azReplacements - throw "Source APIM deployment failed (deployment '$deploymentName' in resource group '$(Protect-ResourceGroupName -Value $ResourceGroupName)'). See failed-operation details above." -} +$raw = New-ResourceGroupDeployment ` + -ResourceGroupName $ResourceGroupName ` + -DeploymentName $deploymentName ` + -TemplateFile $bicepFile ` + -Parameters $deployParameters ` + -Verbosity $azVerbosity ` + -Replacements $azReplacements ` + -FailureLabel 'Source APIM deployment' $result = $raw | ConvertFrom-Json @@ -221,25 +212,17 @@ Wait-ApimApiQueryable ` -Replacements $postReplacements | Out-Null $postDeploymentName = "source-apim-post-activation-$(Get-Date -Format 'yyyyMMddHHmmss')" -$postArgs = @( - 'deployment', 'group', 'create', - '--resource-group', $ResourceGroupName, - '--name', $postDeploymentName, - '--template-file', $postActivationBicepFile, - '--parameters', "apimName=$apimServiceName", "skuName=$SkuName", - '--output', 'json' -) + $azVerbosity Write-Host "Applying post-activation APIM resources..." -ForegroundColor Cyan # Out-Null โ€” else the az JSON leaks, making the job return an array (breaks strict-mode member access). -Invoke-MaskedAzCommand -Replacements $postReplacements -Arguments $postArgs | Out-Null -if ($LASTEXITCODE -ne 0) { - Write-DeploymentFailureDetails ` - -ResourceGroupName $ResourceGroupName ` - -DeploymentName $postDeploymentName ` - -Replacements $postReplacements - throw "Source post-activation deployment failed (deployment '$postDeploymentName' in resource group '$(Protect-ResourceGroupName -Value $ResourceGroupName)'). See failed-operation details above." -} +New-ResourceGroupDeployment ` + -ResourceGroupName $ResourceGroupName ` + -DeploymentName $postDeploymentName ` + -TemplateFile $postActivationBicepFile ` + -Parameters @("apimName=$apimServiceName", "skuName=$SkuName") ` + -Verbosity $azVerbosity ` + -Replacements $postReplacements ` + -FailureLabel 'Source post-activation deployment' | Out-Null Write-Host "" Write-Host "============================================================" -ForegroundColor Green diff --git a/tests/integration/all-resource-types/phases/run-phase1-deploy-target.ps1 b/tests/integration/all-resource-types/phases/run-phase1-deploy-target.ps1 index 7f44f77e..dd6e8507 100644 --- a/tests/integration/all-resource-types/phases/run-phase1-deploy-target.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase1-deploy-target.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. <# .SYNOPSIS @@ -37,7 +37,12 @@ param( [string]$ApimName, [ValidateSet('Info', 'Verbose', 'Debug')] - [string]$LogLevel = 'Info' + [string]$LogLevel = 'Info', + + # When set, seed extra "unmatched" resources into the target APIM that do + # NOT exist in the source. Phase 5 then publishes with --delete-unmatched + # and phase 6 compare verifies these resources were removed. + [switch]$TestDeleteUnmatched ) $ErrorActionPreference = 'Stop' @@ -85,34 +90,59 @@ $azReplacements = @{ $deploymentName = "target-apim-$(Get-Date -Format 'yyyyMMddHHmmss')" -$azArgs = @( - 'deployment', 'group', 'create', - '--resource-group', $ResourceGroupName, - '--name', $deploymentName, - '--template-file', $bicepFile, - '--parameters', "skuName=$SkuName", "location=$Location", "publisherEmail=$PublisherEmail", - '--output', 'json' -) + $azVerbosity - +$deployParameters = @("skuName=$SkuName", "location=$Location", "publisherEmail=$PublisherEmail") if (-not [string]::IsNullOrWhiteSpace($apimNameValue)) { - $azArgs += @('--parameters', "apimName=$apimNameValue") + $deployParameters += "apimName=$apimNameValue" } -$raw = Invoke-MaskedAzCommand -Replacements $azReplacements -Arguments $azArgs - -if ($LASTEXITCODE -ne 0) { - Write-DeploymentFailureDetails ` - -ResourceGroupName $ResourceGroupName ` - -DeploymentName $deploymentName ` - -Replacements $azReplacements - throw "Target APIM deployment failed (deployment '$deploymentName' in resource group '$(Protect-ResourceGroupName -Value $ResourceGroupName)'). See failed-operation details above." -} +$raw = New-ResourceGroupDeployment ` + -ResourceGroupName $ResourceGroupName ` + -DeploymentName $deploymentName ` + -TemplateFile $bicepFile ` + -Parameters $deployParameters ` + -Verbosity $azVerbosity ` + -Replacements $azReplacements ` + -FailureLabel 'Target APIM deployment' $result = $raw | ConvertFrom-Json if (-not $result.properties.outputs) { throw "Target deployment returned no outputs" } -Write-Host "โœ… Target APIM deployed successfully: $(Protect-ApimName -Value $result.properties.outputs.apimServiceName.value)" +$apimServiceName = $result.properties.outputs.apimServiceName.value +Write-Host "โœ… Target APIM deployed successfully: $(Protect-ApimName -Value $apimServiceName)" + +if ($TestDeleteUnmatched) { + Write-Host "๐ŸŒฑ Seeding unmatched resources into target APIM for --delete-unmatched coverage..." + + $unmatchedBicepFile = Join-Path (Split-Path $PSScriptRoot -Parent) 'bicep/target-apim-unmatched.bicep' + if (-not (Test-Path $unmatchedBicepFile)) { + throw "Unmatched-resources bicep file not found at: $unmatchedBicepFile" + } + + # Seed only after the APIM instance has finished activating โ€” child + # resources cannot be created while the service is still provisioning. + Wait-ApimActivation ` + -ResourceGroupName $ResourceGroupName ` + -ApimName $apimServiceName ` + -TimeoutSeconds 2700 ` + -PollIntervalSeconds 60 | Out-Null + + $seedReplacements = $azReplacements.Clone() + $seedReplacements[$apimServiceName] = Protect-ApimName -Value $apimServiceName + + $seedDeploymentName = "target-apim-unmatched-$(Get-Date -Format 'yyyyMMddHHmmss')" + New-ResourceGroupDeployment ` + -ResourceGroupName $ResourceGroupName ` + -DeploymentName $seedDeploymentName ` + -TemplateFile $unmatchedBicepFile ` + -Parameters @("apimName=$apimServiceName") ` + -Verbosity $azVerbosity ` + -Output 'none' ` + -Replacements $seedReplacements ` + -FailureLabel 'Unmatched-resources deployment' | Out-Null + + Write-Host "โœ… Unmatched resource seeding complete" +} return $result.properties.outputs \ No newline at end of file diff --git a/tests/integration/all-resource-types/phases/run-phase1-deploy.ps1 b/tests/integration/all-resource-types/phases/run-phase1-deploy.ps1 index 7175328d..d6471d89 100644 --- a/tests/integration/all-resource-types/phases/run-phase1-deploy.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase1-deploy.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 @@ -71,7 +71,11 @@ param( [string]$SourceSubscriptionId, - [string]$TargetSubscriptionId + [string]$TargetSubscriptionId, + + # When set, seed extra "unmatched" resources into the target APIM so the + # later publish (--delete-unmatched) and compare phases can verify cleanup. + [switch]$TestDeleteUnmatched ) $ErrorActionPreference = 'Stop' @@ -128,6 +132,9 @@ $targetDeployArgs = @{ LogLevel = $LogLevel } Add-ArgumentIfSet -Hashtable $targetDeployArgs -Key 'ApimName' -Value $TargetApimName +if ($TestDeleteUnmatched) { + $targetDeployArgs['TestDeleteUnmatched'] = $true +} $sourceJob = Start-Job -Name 'DeploySource' -ScriptBlock { param($script, $scriptArgs, $transcriptFile) diff --git a/tests/integration/all-resource-types/phases/run-phase2-extract.ps1 b/tests/integration/all-resource-types/phases/run-phase2-extract.ps1 index 28edde44..61e293eb 100644 --- a/tests/integration/all-resource-types/phases/run-phase2-extract.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase2-extract.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# @@ -73,25 +73,23 @@ if (Test-Path $ExtractOutputDir) { Write-Host " Cleaned previous extract output" } -$extractArgs = @( - 'extract', - '--resource-group', $SourceResourceGroup, - '--service-name', $SourceApimName, - '--output', $ExtractOutputDir, - '--log-level', $apiopsLogLevel -) -if (-not [string]::IsNullOrWhiteSpace($sourceSubscriptionIdValue)) { - $extractArgs += @('--subscription-id', $sourceSubscriptionIdValue) -} -$extractArgs += $apiopsAuthArgs - $replacements = @{ $SourceResourceGroup = Protect-ResourceGroupName -Value $SourceResourceGroup $SourceApimName = Protect-ApimName -Value $SourceApimName } Add-ArgumentIfSet -Hashtable $replacements -Key $sourceSubscriptionIdValue -Value (Protect-SubscriptionId -Value $sourceSubscriptionIdValue) -$extractExitCode = Invoke-MaskedApiopsCommand -Replacements $replacements -Arguments $extractArgs +$subscriptionArg = if (-not [string]::IsNullOrWhiteSpace($sourceSubscriptionIdValue)) { @('--subscription-id', $sourceSubscriptionIdValue) } else { @() } + +apiops extract ` + --resource-group $SourceResourceGroup ` + --service-name $SourceApimName ` + --output $ExtractOutputDir ` + --log-level $apiopsLogLevel ` + @subscriptionArg @apiopsAuthArgs 2>&1 | + Protect-Secret -Replacements $replacements | + Out-Host +$extractExitCode = $LASTEXITCODE if ($extractExitCode -ne 0) { Write-Host "โŒ Extract failed (exit code $extractExitCode)" diff --git a/tests/integration/all-resource-types/phases/run-phase3-validate-extract.ps1 b/tests/integration/all-resource-types/phases/run-phase3-validate-extract.ps1 index 32b844f4..4731a5d4 100644 --- a/tests/integration/all-resource-types/phases/run-phase3-validate-extract.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase3-validate-extract.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# diff --git a/tests/integration/all-resource-types/phases/run-phase4-create-overrides.ps1 b/tests/integration/all-resource-types/phases/run-phase4-create-overrides.ps1 index b09042cc..496396cf 100644 --- a/tests/integration/all-resource-types/phases/run-phase4-create-overrides.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase4-create-overrides.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# diff --git a/tests/integration/all-resource-types/phases/run-phase5-publish.ps1 b/tests/integration/all-resource-types/phases/run-phase5-publish.ps1 index e3b24b5f..0428cd95 100644 --- a/tests/integration/all-resource-types/phases/run-phase5-publish.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase5-publish.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# @@ -45,7 +45,11 @@ param( [string]$OverrideFile, - [string]$ExtractOutputDir = "$PSScriptRoot/extracted-artifacts" + [string]$ExtractOutputDir = "$PSScriptRoot/extracted-artifacts", + + # When set, publish with --delete-unmatched so resources present in the + # target but absent from the extracted artifacts are removed. + [switch]$TestDeleteUnmatched ) $ErrorActionPreference = 'Stop' @@ -90,18 +94,12 @@ if (-not (Test-Path $overrideFileValue)) { $overrideFile = (Resolve-Path $overrideFileValue).Path Write-Host "๐Ÿ“ค Publish โ€” Publish artifacts to target APIM" -$publishArgs = @( - 'publish', - '--resource-group', $TargetResourceGroup, - '--service-name', $TargetApimName, - '--source', $ExtractOutputDir, - '--overrides', $overrideFile, - '--log-level', $apiopsLogLevel -) -if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { - $publishArgs += @('--subscription-id', $targetSubscriptionIdValue) +$deleteUnmatchedArg = @() +if ($TestDeleteUnmatched) { + Write-Host "๐Ÿงน --delete-unmatched enabled โ€” unmatched target resources will be removed" + $deleteUnmatchedArg = @('--delete-unmatched') } -$publishArgs += $apiopsAuthArgs +$subscriptionArg = if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { @('--subscription-id', $targetSubscriptionIdValue) } else { @() } $replacements = @{ $TargetResourceGroup = Protect-ResourceGroupName -Value $TargetResourceGroup @@ -110,7 +108,16 @@ $replacements = @{ Add-ArgumentIfSet -Hashtable $replacements -Key $targetSubscriptionIdValue -Value (Protect-SubscriptionId -Value $targetSubscriptionIdValue) Add-ArgumentIfSet -Hashtable $replacements -Key $overrideFile -Value '.overrides.yaml' -$publishExitCode = Invoke-MaskedApiopsCommand -Replacements $replacements -Arguments $publishArgs +apiops publish ` + --resource-group $TargetResourceGroup ` + --service-name $TargetApimName ` + --source $ExtractOutputDir ` + --overrides $overrideFile ` + --log-level $apiopsLogLevel ` + @deleteUnmatchedArg @subscriptionArg @apiopsAuthArgs 2>&1 | + Protect-Secret -Replacements $replacements | + Out-Host +$publishExitCode = $LASTEXITCODE if ($publishExitCode -ne 0) { Write-Host "โŒ Publish failed (exit code $publishExitCode)" diff --git a/tests/integration/all-resource-types/phases/run-phase6-compare.ps1 b/tests/integration/all-resource-types/phases/run-phase6-compare.ps1 index e01dd80b..475d53b3 100644 --- a/tests/integration/all-resource-types/phases/run-phase6-compare.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase6-compare.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# diff --git a/tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 b/tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 deleted file mode 100644 index 19b6da58..00000000 --- a/tests/integration/all-resource-types/phases/run-phase7-delete-unmatched.ps1 +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -#requires -Version 7.0 -<# -.SYNOPSIS - Phase 7 - Validate publish --delete-unmatched with revisioned APIs. -.DESCRIPTION - Removes a revisioned API from extracted artifacts, runs publish with - --delete-unmatched, and verifies the revisioned API resources are deleted - from the target APIM instance. -#> - -[CmdletBinding()] -param( - [string]$TargetSubscriptionId, - - [Parameter(Mandatory)] - [string]$TargetResourceGroup, - - [Parameter(Mandatory)] - [string]$TargetApimName, - - [ValidateSet('Info', 'Verbose', 'Debug')] - [string]$LogLevel = 'Verbose', - - [Parameter(Mandatory)] - [string]$OverrideFile, - - [string]$ExtractOutputDir = "$PSScriptRoot/extracted-artifacts" -) - -$ErrorActionPreference = 'Stop' -$VerbosePreference = if ($LogLevel -in @('Verbose', 'Debug')) { 'Continue' } else { 'SilentlyContinue' } -$DebugPreference = if ($LogLevel -eq 'Debug') { 'Continue' } else { 'SilentlyContinue' } - -$phaseRoot = Split-Path $PSScriptRoot -Parent -$maskingModule = Join-Path $phaseRoot 'modules/LogMasking.psm1' -$scriptArgModule = Join-Path $phaseRoot 'modules/ScriptRuntime.psm1' -$apiopsCliModule = Join-Path $phaseRoot 'modules/ApiopsCli.psm1' - -foreach ($requiredFile in @($maskingModule, $scriptArgModule, $apiopsCliModule)) { - if (-not (Test-Path $requiredFile)) { - Write-Error "Required file not found: $requiredFile" - exit 2 - } -} - -Import-Module $maskingModule -Force -Import-Module $scriptArgModule -Force -Import-Module $apiopsCliModule -Force - -if (-not (Test-Path $ExtractOutputDir)) { - Write-Error "ExtractOutputDir not found: $ExtractOutputDir" - exit 2 -} - -if (-not (Test-Path $OverrideFile)) { - Write-Error "OverrideFile not found: $OverrideFile" - exit 2 -} - -$targetSubscriptionIdValue = Get-BoundParameterValueOrNull -BoundParameters $PSBoundParameters -Name 'TargetSubscriptionId' -$apiopsLogLevel = Get-ApiopsLogLevel -ScriptLogLevel $LogLevel -$apiopsAuthArgs = Get-ApiopsAuthArgs - -$apiFoldersToRemove = @( - 'src-rest-revisioned', - 'src-rest-revisioned;rev=2' -) - -Write-Host "๐Ÿงช Delete-unmatched โ€” remove revisioned API artifacts" -foreach ($apiFolder in $apiFoldersToRemove) { - $apiDirectory = Join-Path $ExtractOutputDir "apis/$apiFolder" - if (-not (Test-Path $apiDirectory)) { - Write-Error "Expected API artifact directory not found: $apiDirectory" - exit 2 - } - - Remove-Item -Path $apiDirectory -Recurse -Force - Write-Host "Removed artifact directory: $apiDirectory" -} - -Write-Host "๐Ÿงช Delete-unmatched โ€” publish with --delete-unmatched" -$publishArgs = @( - 'publish', - '--resource-group', $TargetResourceGroup, - '--service-name', $TargetApimName, - '--source', $ExtractOutputDir, - '--overrides', $OverrideFile, - '--delete-unmatched', - '--log-level', $apiopsLogLevel -) -if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { - $publishArgs += @('--subscription-id', $targetSubscriptionIdValue) -} -$publishArgs += $apiopsAuthArgs - -$replacements = @{ - $TargetResourceGroup = Protect-ResourceGroupName -Value $TargetResourceGroup - $TargetApimName = Protect-ApimName -Value $TargetApimName - $OverrideFile = '.overrides.yaml' -} -Add-ArgumentIfSet -Hashtable $replacements -Key $targetSubscriptionIdValue -Value (Protect-SubscriptionId -Value $targetSubscriptionIdValue) - -$publishExitCode = Invoke-MaskedApiopsCommand -Replacements $replacements -Arguments $publishArgs -if ($publishExitCode -ne 0) { - Write-Error "Publish with --delete-unmatched failed (exit code $publishExitCode)" - exit 2 -} - -Write-Host "๐Ÿงช Delete-unmatched โ€” verify APIs are deleted from target APIM" -foreach ($apiId in $apiFoldersToRemove) { - $listArgs = @( - 'apim', 'api', 'list', - '--resource-group', $TargetResourceGroup, - '--service-name', $TargetApimName, - '--query', "[?name=='$apiId'].name", - '--output', 'tsv' - ) - if (-not [string]::IsNullOrWhiteSpace($targetSubscriptionIdValue)) { - $listArgs += @('--subscription', $targetSubscriptionIdValue) - } - - $existingApiNames = Invoke-MaskedAzCommand -Replacements $replacements -Arguments $listArgs - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to query APIs for validation (api-id: $apiId)" - exit 2 - } - - $apiNameMatches = $existingApiNames -split '[\r\n]+' | - ForEach-Object { $_.Trim() } | - Where-Object { -not [string]::IsNullOrWhiteSpace($_) -and $_ -eq $apiId } - - if ($apiNameMatches) { - Write-Error "API still exists after delete-unmatched publish: $apiId" - exit 2 - } -} - -Write-Host "โœ… Delete-unmatched validation passed for revisioned API cleanup" -exit 0 diff --git a/tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 b/tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 similarity index 72% rename from tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 rename to tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 index 58d1b9dd..713d582c 100644 --- a/tests/integration/all-resource-types/phases/run-phase8-teardown.ps1 +++ b/tests/integration/all-resource-types/phases/run-phase7-teardown.ps1 @@ -1,9 +1,9 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 <# .SYNOPSIS - Phase 8 โ€” Tear down source and target APIM resource groups. + Phase 7 โ€” Tear down source and target APIM resource groups. .DESCRIPTION Deletes the source and target resource groups, waits for the deletions to complete, and then purges any soft-deleted APIM instances in the specified location. @@ -20,7 +20,7 @@ Skips teardown when specified. .EXAMPLE - .\run-phase8-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt + .\run-phase7-teardown.ps1 -SourceResourceGroup rg-src -TargetResourceGroup rg-tgt #> [CmdletBinding()] @@ -52,7 +52,7 @@ if ($SkipTeardown) { exit 0 } -Write-Host "๐Ÿงน PHASE 8 โ€” Teardown" +Write-Host "๐Ÿงน PHASE 7 โ€” Teardown" $sourceApimName = $null $targetApimName = $null @@ -73,41 +73,6 @@ $targetListArgs = @('apim', 'list', '--resource-group', $TargetResourceGroup, '- $sourceApimName = az @sourceListArgs 2>$null $targetApimName = az @targetListArgs 2>$null -function Wait-ForResourceGroupsDeletion { - param( - [hashtable[]]$Groups, - [int]$TimeoutMinutes = 60, - [int]$IntervalSeconds = 30 - ) - - $waitedSeconds = 0 - $timeoutSeconds = $TimeoutMinutes * 60 - - while ($waitedSeconds -lt $timeoutSeconds) { - $existingGroups = @() - - foreach ($group in $Groups) { - if (Get-GroupExists -ResourceGroup $group.ResourceGroup -SubscriptionId $group.SubscriptionId) { - $existingGroups += $group.ResourceGroup - } - } - - if ($existingGroups.Count -eq 0) { - Write-Host " โœ… Resource groups deleted" - return - } - - $maskedNames = $existingGroups | ForEach-Object { Protect-ResourceGroupName -Value $_ } - Write-Host " ... waiting for resource group deletion (${waitedSeconds}s elapsed): $($maskedNames -join ', ')" - Start-Sleep -Seconds $IntervalSeconds - $waitedSeconds += $IntervalSeconds - } - - $maskedGroups = $Groups | ForEach-Object { Protect-ResourceGroupName -Value $_.ResourceGroup } - throw "Timed out waiting for resource group deletion for: $($maskedGroups -join ', ')." -} - - Write-Host " Deleting $(Protect-ResourceGroupName -Value $SourceResourceGroup)..." if (Get-GroupExists -ResourceGroup $SourceResourceGroup -SubscriptionId $SourceSubscriptionId) { $sourceDeleteArgs = @('group', 'delete', '--name', $SourceResourceGroup, '--yes', '--no-wait') + (Get-SubscriptionArgs -SubscriptionId $SourceSubscriptionId) @@ -133,11 +98,8 @@ else { } Write-Host " โณ Waiting for resource group deletions to complete for hard-delete..." -$groups = @( - @{ ResourceGroup = $SourceResourceGroup; SubscriptionId = $SourceSubscriptionId }, - @{ ResourceGroup = $TargetResourceGroup; SubscriptionId = $TargetSubscriptionId } -) -Wait-ForResourceGroupsDeletion -Groups $groups +Wait-ForResourceGroupDeletion -ResourceGroup $SourceResourceGroup -SubscriptionId $SourceSubscriptionId +Wait-ForResourceGroupDeletion -ResourceGroup $TargetResourceGroup -SubscriptionId $TargetSubscriptionId if ($sourceApimName) { Wait-ForDeletedApimService -ServiceName $sourceApimName -ServiceLocation $Location -SubscriptionId $SourceSubscriptionId diff --git a/tests/integration/all-resource-types/run-roundtrip-test.ps1 b/tests/integration/all-resource-types/run-roundtrip-test.ps1 index c999dee6..cc689aea 100644 --- a/tests/integration/all-resource-types/run-roundtrip-test.ps1 +++ b/tests/integration/all-resource-types/run-roundtrip-test.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. <# .SYNOPSIS @@ -11,9 +11,12 @@ 4) generate target environment overrides, 5) publish artifacts to target, 6) compare source and target, - 6b) validate --delete-unmatched behavior, 7) teardown. + When -TestDeleteUnmatched is set, phase 1 seeds extra "unmatched" resources + into the target APIM, phase 5 publishes with --delete-unmatched, and the + phase 6 compare verifies those resources were removed. + Works both locally and in CI (writes to GITHUB_OUTPUT when available). A unique timestamp + random suffix is auto-generated for resource group and @@ -71,7 +74,11 @@ param( [string]$ExtractOutputDir = "$PSScriptRoot/extracted-artifacts", - [switch]$SkipTeardown + [switch]$SkipTeardown, + + # Seed unmatched resources into the target and publish with + # --delete-unmatched to exercise the delete-unmatched code path. + [switch]$TestDeleteUnmatched ) # Strict mode is inherited by all `&`-invoked phase scripts (child scopes). @@ -107,7 +114,6 @@ if (-not $TargetSubscriptionId) { $extractOutputDirValue = Get-BoundParameterValueOrNull -BoundParameters $PSBoundParameters -Name 'ExtractOutputDir' $skuNameValue = Get-BoundParameterValueOrNull -BoundParameters $PSBoundParameters -Name 'SkuName' -$locationValue = Get-BoundParameterValueOrNull -BoundParameters $PSBoundParameters -Name 'Location' # Verify scripts for all phases available $phase1DeployScript = Join-Path $PSScriptRoot 'phases/run-phase1-deploy.ps1' @@ -116,10 +122,9 @@ $phase3ValidateExtractScript = Join-Path $PSScriptRoot 'phases/run-phase3-valida $phase4CreateOverridesScript = Join-Path $PSScriptRoot 'phases/run-phase4-create-overrides.ps1' $phase5PublishScript = Join-Path $PSScriptRoot 'phases/run-phase5-publish.ps1' $phase6CompareScript = Join-Path $PSScriptRoot 'phases/run-phase6-compare.ps1' -$phase7DeleteUnmatchedScript = Join-Path $PSScriptRoot 'phases/run-phase7-delete-unmatched.ps1' -$phase8TeardownScript = Join-Path $PSScriptRoot 'phases/run-phase8-teardown.ps1' +$phase7TeardownScript = Join-Path $PSScriptRoot 'phases/run-phase7-teardown.ps1' -foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase7DeleteUnmatchedScript, $phase8TeardownScript)) { +foreach ($requiredFile in @($phase1DeployScript, $phase2ExtractScript, $phase3ValidateExtractScript, $phase4CreateOverridesScript, $phase5PublishScript, $phase6CompareScript, $phase7TeardownScript)) { if (-not (Test-Path $requiredFile)) { Write-Error "Required file not found: $requiredFile" exit 2 @@ -143,6 +148,9 @@ try { Add-ArgumentIfSet -Hashtable $phase1Args -Key 'SkuName' -Value $skuNameValue Add-ArgumentIfSet -Hashtable $phase1Args -Key 'SourceSubscriptionId' -Value $SourceSubscriptionId Add-ArgumentIfSet -Hashtable $phase1Args -Key 'TargetSubscriptionId' -Value $TargetSubscriptionId + if ($TestDeleteUnmatched) { + $phase1Args['TestDeleteUnmatched'] = $true + } $global:LASTEXITCODE = 0 $phase1Output = & $phase1DeployScript @phase1Args @@ -224,6 +232,9 @@ try { LogLevel = $LogLevel } Add-ArgumentIfSet -Hashtable $phase5Args -Key 'ExtractOutputDir' -Value $extractOutputDirValue + if ($TestDeleteUnmatched) { + $phase5Args['TestDeleteUnmatched'] = $true + } $global:LASTEXITCODE = 0 & $phase5PublishScript @phase5Args @@ -250,21 +261,6 @@ try { $exitCode = $LASTEXITCODE exit $exitCode } - - # Phase 7: Validate delete-unmatched for revisioned APIs - $currentPhase = 'phase7-delete-unmatched' - $phase7DeleteUnmatchedArgs = @{ - TargetResourceGroup = $TargetResourceGroup - TargetApimName = $TargetApimName - TargetSubscriptionId = $TargetSubscriptionId - OverrideFile = $overrideFile - LogLevel = $LogLevel - } - Add-ArgumentIfSet -Hashtable $phase7DeleteUnmatchedArgs -Key 'ExtractOutputDir' -Value $extractOutputDirValue - $global:LASTEXITCODE = 0 - & $phase7DeleteUnmatchedScript @phase7DeleteUnmatchedArgs - - $exitCode = $LASTEXITCODE } catch { $errorMessage = $_.Exception.Message @@ -278,17 +274,17 @@ catch { } } finally { - # Phase 8: Teardown apim instances and supporting resources - $phase8Args = @{ + # Phase 7: Teardown apim instances and supporting resources + $phase7Args = @{ SourceResourceGroup = $SourceResourceGroup TargetResourceGroup = $TargetResourceGroup Location = $Location SkipTeardown = $SkipTeardown } - Add-ArgumentIfSet -Hashtable $phase8Args -Key 'SourceSubscriptionId' -Value $SourceSubscriptionId - Add-ArgumentIfSet -Hashtable $phase8Args -Key 'TargetSubscriptionId' -Value $TargetSubscriptionId + Add-ArgumentIfSet -Hashtable $phase7Args -Key 'SourceSubscriptionId' -Value $SourceSubscriptionId + Add-ArgumentIfSet -Hashtable $phase7Args -Key 'TargetSubscriptionId' -Value $TargetSubscriptionId - & $phase8TeardownScript @phase8Args + & $phase7TeardownScript @phase7Args } exit $exitCode diff --git a/tests/integration/redact-secrets/phases/run-phase1-deploy.ps1 b/tests/integration/redact-secrets/phases/run-phase1-deploy.ps1 index 84fc7209..b56f0bd0 100644 --- a/tests/integration/redact-secrets/phases/run-phase1-deploy.ps1 +++ b/tests/integration/redact-secrets/phases/run-phase1-deploy.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 @@ -187,21 +187,27 @@ try { $tempCertificate.password = '*** REDACTED ***' } - $deployArgs = @( - 'deployment', 'group', 'create', - '--subscription', $resolvedSubscriptionId, - '--resource-group', $ResourceGroupName, - '--name', $deploymentName, - '--template-file', $bicepFile, - '--parameters', "skuName=$SkuName", "location=$Location", "publisherEmail=$PublisherEmail", - '--output', 'json' - ) - if (-not [string]::IsNullOrWhiteSpace($apimNameValue)) { - $deployArgs += @('--parameters', "apimName=$apimNameValue") - } + $apimNameArg = if (-not [string]::IsNullOrWhiteSpace($apimNameValue)) { @('--parameters', "apimName=$apimNameValue") } else { @() } - $rawDeploy = Invoke-MaskedAzCommand -Replacements $azReplacements -Arguments $deployArgs - if ($LASTEXITCODE -ne 0) { + $deployStderrPath = (New-TemporaryFile).FullName + try { + $rawDeploy = az deployment group create ` + --subscription $resolvedSubscriptionId ` + --resource-group $ResourceGroupName ` + --name $deploymentName ` + --template-file $bicepFile ` + --parameters "skuName=$SkuName" "location=$Location" "publisherEmail=$PublisherEmail" ` + --output json ` + @apimNameArg 2> $deployStderrPath + $deployExit = $LASTEXITCODE + Get-Content -LiteralPath $deployStderrPath -ErrorAction SilentlyContinue | + Protect-Secret -Replacements $azReplacements | + Out-Host + } + finally { + Remove-Item -LiteralPath $deployStderrPath -Force -ErrorAction SilentlyContinue + } + if ($deployExit -ne 0) { Write-DeploymentFailureDetails -ResourceGroupName $ResourceGroupName -DeploymentName $deploymentName -Replacements $azReplacements throw "Source deployment failed in resource group '$(Protect-ResourceGroupName -Value $ResourceGroupName)'." } @@ -235,18 +241,24 @@ try { $postActivationParamsFile = Join-Path ([System.IO.Path]::GetTempPath()) ("source-apim-post-activation-params-$([Guid]::NewGuid().ToString('N')).json") $postParams | ConvertTo-Json -Depth 5 | Set-Content -Path $postActivationParamsFile - $postArgs = @( - 'deployment', 'group', 'create', - '--subscription', $resolvedSubscriptionId, - '--resource-group', $ResourceGroupName, - '--name', $postDeploymentName, - '--template-file', $resolvedPostActivationBicepFile, - '--parameters', "@$postActivationParamsFile", - '--output', 'json' - ) - - Invoke-MaskedAzCommand -Replacements $azReplacements -Arguments $postArgs | Out-Null - if ($LASTEXITCODE -ne 0) { + $postStderrPath = (New-TemporaryFile).FullName + try { + az deployment group create ` + --subscription $resolvedSubscriptionId ` + --resource-group $ResourceGroupName ` + --name $postDeploymentName ` + --template-file $resolvedPostActivationBicepFile ` + --parameters "@$postActivationParamsFile" ` + --output json 2> $postStderrPath | Out-Null + $postExit = $LASTEXITCODE + Get-Content -LiteralPath $postStderrPath -ErrorAction SilentlyContinue | + Protect-Secret -Replacements $azReplacements | + Out-Host + } + finally { + Remove-Item -LiteralPath $postStderrPath -Force -ErrorAction SilentlyContinue + } + if ($postExit -ne 0) { Write-DeploymentFailureDetails -ResourceGroupName $ResourceGroupName -DeploymentName $postDeploymentName -Replacements $azReplacements throw "Post-activation deployment failed in resource group '$(Protect-ResourceGroupName -Value $ResourceGroupName)'." } diff --git a/tests/integration/redact-secrets/phases/run-phase2-extract.ps1 b/tests/integration/redact-secrets/phases/run-phase2-extract.ps1 index d9c0b9cc..769bb58d 100644 --- a/tests/integration/redact-secrets/phases/run-phase2-extract.ps1 +++ b/tests/integration/redact-secrets/phases/run-phase2-extract.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 @@ -60,18 +60,6 @@ if (Test-Path $ExtractOutputDir) { Remove-Item -Path $ExtractOutputDir -Recurse -Force } -$extractArgs = @( - 'extract', - '--resource-group', $SourceResourceGroup, - '--service-name', $SourceApimName, - '--output', $ExtractOutputDir, - '--log-level', $apiopsLogLevel -) -if (-not [string]::IsNullOrWhiteSpace($sourceSubscriptionIdValue)) { - $extractArgs += @('--subscription-id', $sourceSubscriptionIdValue) -} -$extractArgs += $apiopsAuthArgs - $replacements = @{ $SourceResourceGroup = Protect-ResourceGroupName -Value $SourceResourceGroup $SourceApimName = Protect-ApimName -Value $SourceApimName @@ -79,7 +67,16 @@ $replacements = @{ Add-ArgumentIfSet -Hashtable $replacements -Key $sourceSubscriptionIdValue -Value (Protect-SubscriptionId -Value $sourceSubscriptionIdValue) Write-Host " โ†’ Running apiops extract" -$extractExitCode = Invoke-MaskedApiopsCommand -Replacements $replacements -Arguments $extractArgs +$subscriptionArg = if (-not [string]::IsNullOrWhiteSpace($sourceSubscriptionIdValue)) { @('--subscription-id', $sourceSubscriptionIdValue) } else { @() } +apiops extract ` + --resource-group $SourceResourceGroup ` + --service-name $SourceApimName ` + --output $ExtractOutputDir ` + --log-level $apiopsLogLevel ` + @subscriptionArg @apiopsAuthArgs 2>&1 | + Protect-Secret -Replacements $replacements | + Out-Host +$extractExitCode = $LASTEXITCODE if ($extractExitCode -ne 0) { throw "Extract failed with exit code $extractExitCode" } diff --git a/tests/integration/redact-secrets/phases/run-phase3-validate-redaction.ps1 b/tests/integration/redact-secrets/phases/run-phase3-validate-redaction.ps1 index 180a0eb7..36a714cb 100644 --- a/tests/integration/redact-secrets/phases/run-phase3-validate-redaction.ps1 +++ b/tests/integration/redact-secrets/phases/run-phase3-validate-redaction.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 diff --git a/tests/integration/redact-secrets/phases/run-phase4-teardown.ps1 b/tests/integration/redact-secrets/phases/run-phase4-teardown.ps1 index 9500b7ea..42ad2aca 100644 --- a/tests/integration/redact-secrets/phases/run-phase4-teardown.ps1 +++ b/tests/integration/redact-secrets/phases/run-phase4-teardown.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 diff --git a/tests/integration/redact-secrets/run-redact-secrets-test.ps1 b/tests/integration/redact-secrets/run-redact-secrets-test.ps1 index d9511db1..3ee4a6f9 100644 --- a/tests/integration/redact-secrets/run-redact-secrets-test.ps1 +++ b/tests/integration/redact-secrets/run-redact-secrets-test.ps1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. #requires -Version 7.0 diff --git a/tests/integration/shared/modules/DeploymentOps.psm1 b/tests/integration/shared/modules/DeploymentOps.psm1 index fe37f3be..5df0b4bd 100644 --- a/tests/integration/shared/modules/DeploymentOps.psm1 +++ b/tests/integration/shared/modules/DeploymentOps.psm1 @@ -36,13 +36,13 @@ function Write-DeploymentFailureDetails { $query = "[?properties.provisioningState=='Failed'].{resource:properties.targetResource.resourceName, type:properties.targetResource.resourceType, code:properties.statusMessage.error.code, message:properties.statusMessage.error.message, details:properties.statusMessage.error.details}" try { - Invoke-MaskedProcess -FilePath 'az' -Replacements $Replacements -Arguments @( - 'deployment', 'operation', 'group', 'list', - '--resource-group', $ResourceGroupName, - '--name', $DeploymentName, - '--query', $query, - '--output', 'json' - ) + az deployment operation group list ` + --resource-group $ResourceGroupName ` + --name $DeploymentName ` + --query $query ` + --output json 2>&1 | + Protect-Secret -Replacements $Replacements | + Out-Host } catch { $maskedErr = Protect-LogLine -Line ($_.Exception.Message) -Replacements $Replacements Write-Host "Failed to retrieve deployment operations: $maskedErr" -ForegroundColor Red @@ -188,18 +188,23 @@ function Wait-ApimApiQueryable { $apiListUri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.ApiManagement/service/$ApimServiceName/apis?api-version=2025-09-01-preview" $probe = { - $probeArgs = @( - 'rest', - '--method', 'get', - '--uri', $apiListUri, - '--query', "length(value[?name=='$ApiId'])", - '--output', 'tsv' - ) - $probeResult = Invoke-MaskedAzCommand -Replacements $Replacements -Arguments $probeArgs - if ($LASTEXITCODE -eq 0 -and "$probeResult" -eq '1') { - return $true + # Merge stderr into the stream and mask it so probe failures are visible + # (and redacted) instead of being swallowed by a redirect to $null. + $probeOutput = az rest ` + --method get ` + --uri $apiListUri ` + --query "length(value[?name=='$ApiId'])" ` + --output tsv 2>&1 | + Protect-Secret -Replacements $Replacements + if ($LASTEXITCODE -eq 0) { + # The query returns length(value[?name==ApiId]) as a bare count. API + # names are unique, so the result is '0' (not visible yet) or '1' + # (now queryable). -contains tolerates an incidental stderr line + # merged in by 2>&1. + return (@($probeOutput) -contains '1') } + $probeOutput | ForEach-Object { Write-Host " [api-probe] $_" -ForegroundColor DarkYellow } return $false } diff --git a/tests/integration/shared/modules/LogMasking.psm1 b/tests/integration/shared/modules/LogMasking.psm1 index 15e11ef4..b426dc33 100644 --- a/tests/integration/shared/modules/LogMasking.psm1 +++ b/tests/integration/shared/modules/LogMasking.psm1 @@ -1,4 +1,4 @@ -# Copyright (c) Microsoft Corporation. +๏ปฟ# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. # MaskingHelpers โ€” secret-redaction utilities for the round-trip integration test scripts. @@ -180,29 +180,36 @@ function Protect-LogLine { <# .SYNOPSIS -Resolves native executable paths, including Windows cmd wrappers. +Masks secrets in pipeline input, emitting redacted lines. -.PARAMETER Name -Command name to resolve. +.DESCRIPTION +Pipeline-friendly wrapper around Protect-LogLine so native command output can be +redacted with a pipe instead of the array-argument Invoke-Masked* helpers, e.g.: -.OUTPUTS -System.Management.Automation.PSCustomObject -#> -function Resolve-NativeExecutable { - param([string]$Name) + az deployment group create ... | Protect-Secret -Replacements $Replacements - $resolved = Get-Command -Name $Name -CommandType Application -ErrorAction Stop | - Select-Object -First 1 +Each line flowing through the pipe is passed through the same literal-replacement +and regex-redaction rules as Protect-LogLine. - $exePath = $resolved.Source - $prefix = @() +.PARAMETER InputObject +Pipeline line to mask. - if ($IsWindows -and ($exePath -like '*.cmd' -or $exePath -like '*.bat')) { - $prefix = @('/c', $exePath) - $exePath = $env:ComSpec - } +.PARAMETER Replacements +Literal replacement map applied before regex redaction. - return [pscustomobject]@{ FilePath = $exePath; Prefix = $prefix } +.OUTPUTS +System.String +#> +function Protect-Secret { + [CmdletBinding()] + param( + [Parameter(ValueFromPipeline)][AllowNull()][AllowEmptyString()][string]$InputObject, + [hashtable]$Replacements + ) + + process { + Protect-LogLine -Line $InputObject -Replacements $Replacements + } } <# @@ -244,194 +251,19 @@ function Resolve-ApiopsInvocation { <# .SYNOPSIS -Runs a process and streams masked output. - -.PARAMETER FilePath -Executable to run. - -.PARAMETER Arguments -Argument list for the executable. - -.PARAMETER Replacements -Mask replacement map for streamed lines. - -.PARAMETER CaptureStdout -Capture and return stdout instead of streaming. - -.OUTPUTS -System.String -#> -function Invoke-MaskedProcess { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string]$FilePath, - [string[]]$Arguments = @(), - [hashtable]$Replacements, - [switch]$CaptureStdout - ) - - $exe = Resolve-NativeExecutable -Name $FilePath - - $psi = [System.Diagnostics.ProcessStartInfo]::new() - $psi.FileName = $exe.FilePath - $psi.WorkingDirectory = $PWD.Path - $psi.RedirectStandardOutput = $true - $psi.RedirectStandardError = $true - $psi.RedirectStandardInput = $true - $psi.UseShellExecute = $false - $psi.CreateNoWindow = $true - $psi.StandardOutputEncoding = [System.Text.Encoding]::UTF8 - $psi.StandardErrorEncoding = [System.Text.Encoding]::UTF8 - - if ($exe.Prefix.Count -ge 2 -and $exe.Prefix[0] -eq '/c') { - # cmd.exe /c has special quoting rules that conflict with ArgumentList. - # Use the Arguments string property with double-quote wrapping so cmd.exe - # preserves the inner quotes around paths that contain spaces. - $cmdTarget = $exe.Prefix[1] - $quotedParts = @("`"$cmdTarget`"") - foreach ($a in $Arguments) { - $s = [string]$a - # Quote every argument individually so cmd.exe treats all content - # (including metacharacters like parentheses) as literals. - $escaped = $s -replace '"', '\"' - $quotedParts += "`"$escaped`"" - } - $psi.Arguments = "/c `"$($quotedParts -join ' ')`"" - } else { - $finalArgs = @() + $exe.Prefix + $Arguments - foreach ($a in $finalArgs) { - [void]$psi.ArgumentList.Add([string]$a) - } - } - - $stdoutQueue = [System.Collections.Concurrent.ConcurrentQueue[string]]::new() - $stderrQueue = [System.Collections.Concurrent.ConcurrentQueue[string]]::new() - - $proc = [System.Diagnostics.Process]::new() - $proc.StartInfo = $psi - - $stdoutBuffer = $null - if ($CaptureStdout) { - $stdoutBuffer = [System.Collections.Generic.List[string]]::new() - } - - $readerScript = { - param([System.IO.StreamReader]$Reader, - [System.Collections.Concurrent.ConcurrentQueue[string]]$Queue) - try { - while ($null -ne ($line = $Reader.ReadLine())) { - [void]$Queue.Enqueue($line) - } - } catch { - # IO errors on process teardown are expected; main thread owns exit. - } - } - - $outJob = $null - $errJob = $null - - try { - [void]$proc.Start() - $proc.StandardInput.Close() - - $outJob = Start-ThreadJob -ScriptBlock $readerScript -ArgumentList $proc.StandardOutput, $stdoutQueue - $errJob = Start-ThreadJob -ScriptBlock $readerScript -ArgumentList $proc.StandardError, $stderrQueue - - $line = $null - while (-not $proc.HasExited -or - $outJob.State -eq 'Running' -or - $errJob.State -eq 'Running') { - Start-Sleep -Milliseconds 100 - while ($stderrQueue.TryDequeue([ref]$line)) { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - while ($stdoutQueue.TryDequeue([ref]$line)) { - if ($CaptureStdout) { - [void]$stdoutBuffer.Add($line) - } else { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - } - } - - Wait-Job -Job $outJob, $errJob | Out-Null - - while ($stderrQueue.TryDequeue([ref]$line)) { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - while ($stdoutQueue.TryDequeue([ref]$line)) { - if ($CaptureStdout) { - [void]$stdoutBuffer.Add($line) - } else { - Write-Host (Protect-LogLine -Line $line -Replacements $Replacements) - } - } - - $global:LASTEXITCODE = $proc.ExitCode - } - finally { - if ($outJob) { Remove-Job -Job $outJob -Force -ErrorAction SilentlyContinue } - if ($errJob) { Remove-Job -Job $errJob -Force -ErrorAction SilentlyContinue } - $proc.Dispose() - } - - if ($CaptureStdout) { - return ($stdoutBuffer -join "`n") - } -} - -<# -.SYNOPSIS -Runs npx apiops with masked output and returns exit code. +Invokes the apiops CLI directly so scripts can call it like a native command: -.PARAMETER Arguments -Arguments passed to `apiops`. + apiops extract --resource-group $rg ... 2>&1 | Protect-Secret -Replacements $map -.PARAMETER Replacements -Mask replacement map for output. +Resolves the node + dist/cli entrypoint and forwards every argument. $LASTEXITCODE +is set from the CLI process. .OUTPUTS -System.Int32 +The CLI's stdout/stderr stream. #> -function Invoke-MaskedApiopsCommand { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string[]]$Arguments, - [hashtable]$Replacements - ) - - $apiops = Resolve-ApiopsInvocation - Invoke-MaskedProcess -FilePath $apiops.FilePath ` - -Arguments (@($apiops.Prefix) + $Arguments) ` - -Replacements $Replacements - - return $LASTEXITCODE -} - -<# -.SYNOPSIS -Runs az with masked output and returns captured stdout. - -.PARAMETER Arguments -Arguments passed to `az`. - -.PARAMETER Replacements -Mask replacement map for output. - -.OUTPUTS -System.String -#> -function Invoke-MaskedAzCommand { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string[]]$Arguments, - [hashtable]$Replacements - ) - - return Invoke-MaskedProcess -FilePath 'az' ` - -Arguments $Arguments ` - -Replacements $Replacements ` - -CaptureStdout +function apiops { + $invocation = Resolve-ApiopsInvocation + & $invocation.FilePath $invocation.Prefix @args } Export-ModuleMember -Function ` @@ -440,8 +272,6 @@ Export-ModuleMember -Function ` Protect-ResourceGroupName, ` Protect-ApimName, ` Protect-LogLine, ` - Resolve-NativeExecutable, ` + Protect-Secret, ` Resolve-ApiopsInvocation, ` - Invoke-MaskedProcess, ` - Invoke-MaskedApiopsCommand, ` - Invoke-MaskedAzCommand + apiops From f0894aa25488dfcd53597a42017d28129059b5d4 Mon Sep 17 00:00:00 2001 From: Elizabeth Maher Date: Thu, 2 Jul 2026 16:54:22 +0000 Subject: [PATCH 5/7] feat: implement hasNamedValueOverride function and update related logic in redaction guard tests --- src/services/override-merger.ts | 12 +++++ src/services/publish-service.ts | 13 +---- src/services/secret-redaction-guard.ts | 14 +++++- .../services/secret-redaction-guard.test.ts | 49 +++++++++++++++++++ 4 files changed, 75 insertions(+), 13 deletions(-) diff --git a/src/services/override-merger.ts b/src/services/override-merger.ts index 53a91cdc..5bc4e25e 100644 --- a/src/services/override-merger.ts +++ b/src/services/override-merger.ts @@ -58,6 +58,18 @@ const GRANDCHILD_OVERRIDE_MAP: Partial key.toLowerCase() === lowerName + ); +} + /** * Apply environment overrides from OverrideConfig to a resource JSON payload. * Deep-merges matching override properties using case-insensitive key matching. diff --git a/src/services/publish-service.ts b/src/services/publish-service.ts index bc37716d..39740388 100644 --- a/src/services/publish-service.ts +++ b/src/services/publish-service.ts @@ -27,6 +27,7 @@ import { generateDryRunReport, DryRunReport } from './dry-run-reporter.js'; import { computeDeleteActions } from './delete-unmatched-service.js'; import { computeGitDiff } from './git-diff-service.js'; import { scanForRedactionMarkers } from './secret-redaction-guard.js'; +import { hasNamedValueOverride } from './override-merger.js'; import { REDACTION_MARKER } from './secret-redactor.js'; /** @@ -446,18 +447,6 @@ function splitNamedValues( return { namedValues, otherTier1 }; } -/** - * Check whether a named value has an explicit override entry. - * Uses case-insensitive matching to align with override-merger behavior. - */ -function hasNamedValueOverride(name: string, overrides?: OverrideConfig): boolean { - if (!overrides?.namedValues) return false; - const lowerName = name.toLowerCase(); - return Object.keys(overrides.namedValues).some( - (key) => key.toLowerCase() === lowerName - ); -} - /** * Separates Backend descriptors that are pool backends (properties.type === "Pool") * from all other descriptors in the supplied list. diff --git a/src/services/secret-redaction-guard.ts b/src/services/secret-redaction-guard.ts index cad1351a..ba1a8442 100644 --- a/src/services/secret-redaction-guard.ts +++ b/src/services/secret-redaction-guard.ts @@ -22,10 +22,12 @@ import type { IArtifactStore } from '../clients/iartifact-store.js'; import type { PublishConfig } from '../models/config.js'; import type { ResourceDescriptor } from '../models/types.js'; import { ResourceType } from '../models/resource-types.js'; -import { applyOverrides } from './override-merger.js'; +import { applyOverrides, hasNamedValueOverride } from './override-merger.js'; import { POLICY_TYPES } from './resource-publisher.js'; import { REDACTION_MARKER } from './secret-redactor.js'; import { buildResourceLabel } from '../lib/resource-uri.js'; +import { getNamePart } from '../lib/resource-path.js'; +import { isAutoGeneratedId } from '../lib/auto-generated.js'; /** * A single artifact that still contains a redaction marker after overrides. @@ -103,6 +105,16 @@ async function scanNamedValue( config: PublishConfig, descriptor: ResourceDescriptor ): Promise { + // Auto-generated named values (e.g. Logger-Credentials--) are skipped + // during publish because APIM recreates them when the referencing resource + // (Logger, etc.) is published. splitNamedValues() drops them unless the user + // supplies an explicit override, so scanning them here would flag markers in + // artifacts that are never sent to APIM. Mirror the publish filter exactly. + const name = getNamePart(descriptor.nameParts, 0); + if (isAutoGeneratedId(name) && !hasNamedValueOverride(name, config.overrides)) { + return undefined; + } + const json = await store.readResource(config.sourceDir, descriptor); if (!json) { return undefined; diff --git a/tests/unit/services/secret-redaction-guard.test.ts b/tests/unit/services/secret-redaction-guard.test.ts index cc58e81a..381bb9aa 100644 --- a/tests/unit/services/secret-redaction-guard.test.ts +++ b/tests/unit/services/secret-redaction-guard.test.ts @@ -123,6 +123,55 @@ describe('secret-redaction-guard', () => { expect(findings).toEqual([]); }); + it('ignores an auto-generated named value (logger credential) with no override', async () => { + const store = createMockStore(); + store.readResource.mockResolvedValue({ + properties: { secret: true, value: REDACTION_MARKER }, + }); + + const autoGeneratedDescriptor: ResourceDescriptor = { + type: ResourceType.NamedValue, + nameParts: ['6a46928afa1f751d044d805e'], + }; + + const findings = await scanForRedactionMarkers(store, testConfig, [autoGeneratedDescriptor]); + + // APIM recreates these when the referencing logger publishes, so publish + // skips them and the guard must not flag them. It should skip before any read. + expect(findings).toEqual([]); + expect(store.readResource).not.toHaveBeenCalled(); + }); + + it('scans an auto-generated named value when an explicit override exists', async () => { + const store = createMockStore(); + store.readResource.mockResolvedValue({ + properties: { secret: true, value: REDACTION_MARKER }, + }); + + const autoGeneratedDescriptor: ResourceDescriptor = { + type: ResourceType.NamedValue, + nameParts: ['6a46928afa1f751d044d805e'], + }; + + // Override targets the auto-generated name but does not replace the value, + // so the marker remains and the resource is published โ€” it must be scanned. + const configWithOverride: PublishConfig = { + ...testConfig, + overrides: { + namedValues: { + '6a46928afa1f751d044d805e': { properties: { tags: ['keep'] } }, + }, + }, + }; + + const findings = await scanForRedactionMarkers(store, configWithOverride, [ + autoGeneratedDescriptor, + ]); + + expect(findings).toHaveLength(1); + expect(findings[0].location).toBe('properties.value'); + }); + it('does not flag a marker that an override replaces with clean content', async () => { const store = createMockStore(); store.readContent.mockResolvedValue({ From 68463d4946480ea24f774cc9fd2a2463bcecca4b Mon Sep 17 00:00:00 2001 From: Elizabeth Maher Date: Thu, 2 Jul 2026 17:51:12 +0000 Subject: [PATCH 6/7] fix: skip deletion of auto-generated named values in computeDeleteActions --- src/services/delete-unmatched-service.ts | 9 +++++++ .../services/delete-unmatched-service.test.ts | 24 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/services/delete-unmatched-service.ts b/src/services/delete-unmatched-service.ts index 7980a871..268503a1 100644 --- a/src/services/delete-unmatched-service.ts +++ b/src/services/delete-unmatched-service.ts @@ -14,6 +14,7 @@ import type { PublishConfig } from '../models/config.js'; import { ResourceType } from '../models/resource-types.js'; import { getTopologicalOrder } from '../lib/dependency-graph.js'; import { getNameFromNameParts } from '../lib/resource-path.js'; +import { isAutoGeneratedId } from '../lib/auto-generated.js'; /** * Built-in groups that should never be deleted @@ -171,6 +172,14 @@ function isSystemResource(descriptor: ResourceDescriptor): boolean { } } + // Auto-generated named values (e.g. Logger-Credentials--) are managed by + // APIM and referenced by loggers. They cannot be deleted directly โ€” APIM returns + // HTTP 400 while the logger still references them โ€” and are recreated with their + // parent logger, so they must never be treated as unmatched deletions. + if (descriptor.type === ResourceType.NamedValue && isAutoGeneratedId(ownName)) { + return true; + } + // Check if group name starts with built-in prefix if (descriptor.type === ResourceType.Group) { if (ownName.startsWith('built-in')) { diff --git a/tests/unit/services/delete-unmatched-service.test.ts b/tests/unit/services/delete-unmatched-service.test.ts index b09e2964..4732f6be 100644 --- a/tests/unit/services/delete-unmatched-service.test.ts +++ b/tests/unit/services/delete-unmatched-service.test.ts @@ -163,6 +163,30 @@ describe('delete-unmatched-service', () => { expect(apis).toContain('custom-api'); }); + it('should skip auto-generated named values (logger credentials) but delete user-named ones', async () => { + const apimResources = new Map[]>([ + [ResourceType.NamedValue, [ + // Auto-generated 24-char hex logger credentials โ€” APIM-managed, in use by loggers. + { name: '6a469e80e15d3120e035315f', id: '/namedValues/6a469e80e15d3120e035315f' }, + { name: '6a469e80c3c8a82b4430066f', id: '/namedValues/6a469e80c3c8a82b4430066f' }, + // User-named unmatched named value โ€” should still be deleted. + { name: 'tgt-unmatched-nv', id: '/namedValues/tgt-unmatched-nv' }, + ]], + ]); + + const client = createMockClient(apimResources); + const store = createMockStore([]); + + const result = await computeDeleteActions(client, store, testContext, testConfig); + + const namedValues = result + .filter((d) => d.type === ResourceType.NamedValue) + .map((d) => d.nameParts[0]); + expect(namedValues).not.toContain('6a469e80e15d3120e035315f'); + expect(namedValues).not.toContain('6a469e80c3c8a82b4430066f'); + expect(namedValues).toContain('tgt-unmatched-nv'); + }); + it('should handle empty artifact store (nothing to delete)', async () => { const apimResources = new Map[]>([ [ResourceType.NamedValue, []], From 735639cdce36d5d3042fa32e11f4cf23d8aeee51 Mon Sep 17 00:00:00 2001 From: Elizabeth Maher Date: Thu, 2 Jul 2026 19:17:20 +0000 Subject: [PATCH 7/7] saving work --- .../_runlogs/run1-no-delete.log | 2130 ++++++++++++++++ .../_runlogs/run2-delete-unmatched.log | 692 ++++++ .../_runlogs/seq-delete-unmatched.log | 2131 +++++++++++++++++ .../modules/DeploymentOps.psm1 | 311 --- .../modules/LogMasking.psm1 | 277 --- .../modules/ScriptRuntime.psm1 | 111 - .../phases/run-phase1-deploy-source.ps1 | 13 +- .../phases/run-phase1-deploy-target.ps1 | 9 +- .../phases/run-phase1-deploy.ps1 | 4 +- .../phases/run-phase2-extract.ps1 | 4 +- .../phases/run-phase3-validate-extract.ps1 | 2 +- .../phases/run-phase4-create-overrides.ps1 | 4 +- .../phases/run-phase5-publish.ps1 | 4 +- .../phases/run-phase6-compare.ps1 | 2 +- .../phases/run-phase7-teardown.ps1 | 62 +- .../all-resource-types/run-roundtrip-test.ps1 | 2 +- .../phases/run-phase1-deploy.ps1 | 66 +- .../phases/run-phase4-teardown.ps1 | 36 +- .../shared/modules/DeploymentOps.psm1 | 165 +- 19 files changed, 5161 insertions(+), 864 deletions(-) create mode 100644 tests/integration/all-resource-types/_runlogs/run1-no-delete.log create mode 100644 tests/integration/all-resource-types/_runlogs/run2-delete-unmatched.log create mode 100644 tests/integration/all-resource-types/_runlogs/seq-delete-unmatched.log delete mode 100644 tests/integration/all-resource-types/modules/DeploymentOps.psm1 delete mode 100644 tests/integration/all-resource-types/modules/LogMasking.psm1 delete mode 100644 tests/integration/all-resource-types/modules/ScriptRuntime.psm1 diff --git a/tests/integration/all-resource-types/_runlogs/run1-no-delete.log b/tests/integration/all-resource-types/_runlogs/run1-no-delete.log new file mode 100644 index 00000000..3d4c30fb --- /dev/null +++ b/tests/integration/all-resource-types/_runlogs/run1-no-delete.log @@ -0,0 +1,2130 @@ +nohup: ignoring input +๐Ÿ” Azure CLI authenticated: Adhoc Testing Subscription () +๐Ÿš€ PHASE 1 โ€” Deploy source and target APIM instances (parallel) + [SRC] ********************** + [SRC] PowerShell transcript start + [SRC] Start time: 20260702171732 + [SRC] ********************** + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [SRC] VERBOSE: Importing function 'apiops'. + [SRC] VERBOSE: Importing function 'Protect-ApimName'. + [SRC] VERBOSE: Importing function 'Protect-Identifier'. + [SRC] VERBOSE: Importing function 'Protect-LogLine'. + [SRC] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [SRC] VERBOSE: Importing function 'Protect-Secret'. + [SRC] VERBOSE: Importing function 'Protect-SubscriptionId'. + [SRC] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [SRC] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [SRC] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [SRC] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [SRC] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [SRC] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [SRC] VERBOSE: Importing function 'Wait-ApimActivation'. + [SRC] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [SRC] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [SRC] ๐Ÿ” Verifying Azure CLI authentication... + [SRC] Subscription: Adhoc Testing Subscription () + [SRC] ๐Ÿ“‹ Registering required resource providers... + [TGT] ********************** + [TGT] PowerShell transcript start + [TGT] Start time: 20260702171733 + [TGT] ********************** + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [TGT] VERBOSE: Importing function 'apiops'. + [TGT] VERBOSE: Importing function 'Protect-ApimName'. + [TGT] VERBOSE: Importing function 'Protect-Identifier'. + [TGT] VERBOSE: Importing function 'Protect-LogLine'. + [TGT] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [TGT] VERBOSE: Importing function 'Protect-Secret'. + [TGT] VERBOSE: Importing function 'Protect-SubscriptionId'. + [TGT] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [TGT] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [TGT] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [TGT] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [TGT] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [TGT] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [TGT] VERBOSE: Importing function 'Wait-ApimActivation'. + [TGT] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [TGT] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [TGT] Starting target APIM deployment... + [TGT] Subscription: Adhoc Testing Subscription () + [TGT] Resource Group: bvt-...-onq-tgt-rg + [TGT] SKU: StandardV2 + [TGT] Location: centralus + [TGT] Log Level: Verbose + [TGT] Creating resource group... + [SRC] Microsoft.ApiManagement already registered + [TGT] Deploying target-apim.bicep (this takes 30-45 minutes)... + [SRC] Microsoft.Insights already registered + [SRC] Microsoft.OperationalInsights already registered + [SRC] Microsoft.EventHub already registered + [SRC] Microsoft.KeyVault already registered + [SRC] Microsoft.AlertsManagement already registered + [SRC] Waiting for provider registration to complete... + [SRC] โœ… Resource providers ready + [SRC] ๐Ÿ“ฆ Ensuring resource group 'bvt-...-onq-src-rg' exists in 'centralus'... + [SRC] ๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + [SRC] APIM Name: (auto-generated from resource group) + [SRC] SKU: StandardV2 + [TGT] INFO: Command ran in 126.554 seconds (init: 0.684, invoke: 125.870) + [TGT] INFO: Command ran in 126.554 seconds (init: 0.684, invoke: 125.870) + [TGT] โœ… Target APIM deployed successfully: bvt...tgt-apim + [TGT] ********************** + [TGT] PowerShell transcript end + [TGT] End time: 20260702171948 + [TGT] ********************** + [SRC] INFO: Command ran in 169.570 seconds (init: 0.362, invoke: 169.209) + [SRC] INFO: Command ran in 169.570 seconds (init: 0.362, invoke: 169.209) + [SRC] Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + [SRC] provisioningState: Succeeded + [SRC] Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... + [SRC] Applying post-activation APIM resources... +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +๐Ÿ” Verifying Azure CLI authentication... + Subscription: Adhoc Testing Subscription () +๐Ÿ“‹ Registering required resource providers... + Microsoft.ApiManagement already registered + Microsoft.Insights already registered + Microsoft.OperationalInsights already registered + Microsoft.EventHub already registered + Microsoft.KeyVault already registered + Microsoft.AlertsManagement already registered + Waiting for provider registration to complete... + โœ… Resource providers ready +๐Ÿ“ฆ Ensuring resource group 'bvt-...-onq-src-rg' exists in 'centralus'... +๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + APIM Name: (auto-generated from resource group) + SKU: StandardV2 + +INFO: Command ran in 169.570 seconds (init: 0.362, invoke: 169.209) +Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + provisioningState: Succeeded +Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... +Applying post-activation APIM resources... +INFO: Command ran in 38.587 seconds (init: 0.113, invoke: 38.474) + +============================================================ +โœ… Kitchen Sink APIM deployed successfully! +============================================================ + +APIOps CLI extract command: + + npx apiops extract \ + --subscription-id \ + --resource-group bvt-...-onq-src-rg \ + --service-name bvt...src-apim \ + --output-dir ./extracted \ + --log-level warn + +Gateway URL: https://bvt-20260702-171731onq-src-apim.azure-api.net +Workspace deployed: True +Gateway deployed: False +SKU: StandardV2 + + โœ… Source deployed: bvt...src-apim +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +Starting target APIM deployment... +Subscription: Adhoc Testing Subscription () +Resource Group: bvt-...-onq-tgt-rg +SKU: StandardV2 +Location: centralus +Log Level: Verbose +Creating resource group... +Deploying target-apim.bicep (this takes 30-45 minutes)... +INFO: Command ran in 126.554 seconds (init: 0.684, invoke: 125.870) +โœ… Target APIM deployed successfully: bvt...tgt-apim + โœ… Target deployed: bvt...tgt-apim + โœ… source-apim-post-activation deployment confirmed +โœ… PHASE 1 complete +๐Ÿ“ฅ Extract โ€” Extract artifacts from source APIM + Cleaned previous extract output +Extracted 1 Workspace(s) +Extracted 5 NamedValue(s) +Extracted 5 Tag(s) +Extracted 1 VersionSet(s) +Extracted 6 Backend(s) +Extracted 3 Logger(s) +Extracted 4 Group(s) +Extracted 2 PolicyFragment(s) +Extracted 1 GlobalSchema(s) +Extracted 2 Diagnostic(s) +Extracted 2 Product(s) +Extracted 15 Api(s) +Extracted 3 Subscription(s) + API "src-a2a-runtime-mock": spec, 3 ops + API "src-rest-openapi": spec, 4 ops + API "src-rest-swagger": spec, 20 ops + API "src-rest-petstore-v3": spec, 19 ops + API "src-rest-revisioned": spec, 4 ops, 1 revisions + API "src-rest-revisioned;rev=2": spec, 4 ops + API "src-rest-versioned-v1": spec, 1 ops + API "src-soap-passthrough": spec, 1 ops + API "src-websocket": 1 ops +Workspace "src-workspace": 9 resources + +Total: 159 resources extracted, 0 errors +/workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +๐Ÿ”Ž Extract โ€” Validate extracted artifact structure +๐Ÿ”Ž Artifact Structure Validation +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +ExtractedDir: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +ManifestFile: /workspaces/apiops-cli/tests/integration/all-resource-types/expected-structure.json +SkuName: StandardV2 + +๐Ÿ“ Section 1: Service-Level Artifacts + +โœ… Service artifact: policy.xml +โœ… Content [service/policy.xml]: contains 'cors' +โœ… Content [service/policy.xml]: contains 'allowed-origins' +โœ… Content [service/policy.xml]: contains 'developer.contoso.com' + +๐Ÿ“‚ Section 2: Resource Directories + +โœ… Directory: namedValues +โœ… Count: namedValues >= 3 +โœ… Resource: namedValues/src-nv-plain +โœ… File: namedValues/src-nv-plain/namedValueInformation.json +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.displayName = src-nv-plain +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.value = plain-text-value +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.tags = [all-resources, plain] +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.secret = False +โœ… Resource: namedValues/src-nv-secret +โœ… File: namedValues/src-nv-secret/namedValueInformation.json +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.displayName = src-nv-secret +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.tags = [all-resources, secret] +โœ… Resource: namedValues/src-nv-keyvault +โœ… File: namedValues/src-nv-keyvault/namedValueInformation.json +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.displayName = src-nv-keyvault +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.keyVault.secretIdentifier exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.tags = [all-resources, keyvault] +โœ… Directory: tags +โœ… Count: tags >= 2 +โœ… Resource: tags/src-tag-env +โœ… File: tags/src-tag-env/tagInformation.json +โœ… Field [tags/src-tag-env/tagInformation.json]: properties.displayName = src-tag-env +โœ… Resource: tags/src-tag-team +โœ… File: tags/src-tag-team/tagInformation.json +โœ… Field [tags/src-tag-team/tagInformation.json]: properties.displayName = src-tag-team + โญ๏ธ Skipping gateways (SKU: supported in Developer, Premium) +โœ… Directory: versionSets +โœ… Count: versionSets >= 1 +โœ… Resource: versionSets/src-versionset-urlpath +โœ… File: versionSets/src-versionset-urlpath/versionSetInformation.json +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.displayName = Kitchen Sink Versioned API +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.versioningScheme = Segment +โœ… Directory: backends +โœ… Count: backends >= 6 +โœ… Resource: backends/src-backend-http +โœ… File: backends/src-backend-http/backendInformation.json +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.url = https://src-backend.example.com/api +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.tls.validateCertificateChain exists +โœ… Resource: backends/src-backend-function +โœ… File: backends/src-backend-function/backendInformation.json +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.url = https://src-func-app.azurewebsites.net/api +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-logicapp +โœ… File: backends/src-backend-logicapp/backendInformation.json +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.url = https://src-logic-app.azurewebsites.net/api +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-circuit-breaker +โœ… File: backends/src-backend-circuit-breaker/backendInformation.json +โœ… Field [backends/src-backend-circuit-breaker/backendInformation.json]: properties.circuitBreaker.rules exists +โœ… Resource: backends/src-backend-pool +โœ… File: backends/src-backend-pool/backendInformation.json +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.type = Pool +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.pool.services exists +โœ… Directory: loggers +โœ… Count: loggers >= 2 +โœ… Resource: loggers/src-logger-appinsights +โœ… File: loggers/src-logger-appinsights/loggerInformation.json +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.loggerType = applicationInsights +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.credentials.instrumentationKey exists +โœ… Resource: loggers/src-logger-eventhub +โœ… File: loggers/src-logger-eventhub/loggerInformation.json +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.loggerType = azureEventHub +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.credentials.name = src-apim-logs +โœ… Directory: groups +โœ… Count: groups >= 1 +โœ… Resource: groups/src-group-internal +โœ… File: groups/src-group-internal/groupInformation.json +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Internal Group +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: diagnostics +โœ… Count: diagnostics >= 1 +โœ… Resource: diagnostics/applicationinsights +โœ… File: diagnostics/applicationinsights/diagnosticInformation.json +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.loggerId exists +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.alwaysLog = allErrors +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.sampling.samplingType = fixed +โœ… Directory: policyFragments +โœ… Count: policyFragments >= 2 +โœ… Resource: policyFragments/src-fragment-cors +โœ… File: policyFragments/src-fragment-cors/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-cors/policyFragmentInformation.json]: properties.description = CORS policy fragment +โœ… Resource: policyFragments/src-fragment-ratelimit +โœ… File: policyFragments/src-fragment-ratelimit/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-ratelimit/policyFragmentInformation.json]: properties.description = Rate limit policy fragment +โœ… Directory: schemas +โœ… Count: schemas >= 1 +โœ… Resource: schemas/src-schema-json +โœ… File: schemas/src-schema-json/schemaInformation.json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.schemaType = json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.description = Kitchen sink JSON schema + โญ๏ธ Skipping policyRestrictions (SKU: supported in Developer, Premium) +โœ… Directory: products +โœ… Count: products >= 2 +โœ… Resource: products/src-product-starter +โœ… File: products/src-product-starter/productInformation.json +โœ… File: products/src-product-starter/apis.json +โœ… File: products/src-product-starter/groups.json +โœ… Field [products/src-product-starter/productInformation.json]: properties.displayName = Kitchen Sink Starter +โœ… Field [products/src-product-starter/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-starter/productInformation.json]: properties.approvalRequired = False +โœ… Field [products/src-product-starter/productInformation.json]: properties.state = published +โœ… Array length [products/src-product-starter/apis.json]: >= 2 +โœ… Array contains [products/src-product-starter/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-starter/apis.json]: 'src-soap-passthrough' +โœ… Array length [products/src-product-starter/groups.json]: >= 1 +โœ… Array contains [products/src-product-starter/groups.json]: 'developers' + [info] products/src-product-starter/tags: ProductTag is embedded in productInformation.json, not separate files +โœ… Resource: products/src-product-premium +โœ… File: products/src-product-premium/productInformation.json +โœ… File: products/src-product-premium/policy.xml +โœ… File: products/src-product-premium/apis.json +โœ… File: products/src-product-premium/groups.json +โœ… Field [products/src-product-premium/productInformation.json]: properties.displayName = Kitchen Sink Premium +โœ… Field [products/src-product-premium/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.approvalRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.state = published +โœ… Content [products/src-product-premium/policy.xml]: contains 'rate-limit' +โœ… Content [products/src-product-premium/policy.xml]: contains '1000' +โœ… Array length [products/src-product-premium/apis.json]: >= 2 +โœ… Array contains [products/src-product-premium/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-premium/apis.json]: 'src-graphql-synthetic' +โœ… Array length [products/src-product-premium/groups.json]: >= 1 +โœ… Array contains [products/src-product-premium/groups.json]: 'src-group-internal' +โœ… Directory: apis +โœ… Count: apis >= 13 +โœ… Resource: apis/src-rest-openapi +โœ… File: apis/src-rest-openapi/apiInformation.json +โœ… File: apis/src-rest-openapi/policy.xml +โœ… File: apis/src-rest-openapi/specification.yaml +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.displayName = KS REST OpenAPI +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.path = ks/rest +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'set-header' +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'X-all-resources' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'KS REST OpenAPI' +โœ… Directory: apis/src-rest-openapi/operations +โœ… Count: apis/src-rest-openapi/operations >= 1 +โœ… Directory: apis/src-rest-openapi/tags +โœ… Count: apis/src-rest-openapi/tags >= 2 +โœ… Resource: apis/src-rest-openapi/tags/src-tag-env +โœ… File: apis/src-rest-openapi/tags/src-tag-env/tagInformation.json +โœ… Resource: apis/src-rest-openapi/tags/src-tag-team +โœ… File: apis/src-rest-openapi/tags/src-tag-team/tagInformation.json +โœ… Directory: apis/src-rest-openapi/diagnostics +โœ… Count: apis/src-rest-openapi/diagnostics >= 1 +โœ… Resource: apis/src-rest-openapi/diagnostics/applicationinsights +โœ… File: apis/src-rest-openapi/diagnostics/applicationinsights/diagnosticInformation.json +โœ… Directory: apis/src-rest-openapi/schemas +โœ… Count: apis/src-rest-openapi/schemas >= 1 +โœ… Resource: apis/src-rest-openapi/schemas/src-rest-schema-item +โœ… File: apis/src-rest-openapi/schemas/src-rest-schema-item/schemaInformation.json +โœ… Directory: apis/src-rest-openapi/tagDescriptions +โœ… Count: apis/src-rest-openapi/tagDescriptions >= 1 +โœ… Resource: apis/src-rest-openapi/tagDescriptions/src-tag-env +โœ… File: apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json +โœ… Field [apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json]: properties.description = Environment tag โ€” indicates deployment environment +โœ… Resource: apis/src-rest-swagger +โœ… File: apis/src-rest-swagger/apiInformation.json +โœ… File: apis/src-rest-swagger/specification.json +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.displayName = KS REST Petstore v2 +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.path = ks/rest-swagger +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'swagger' +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'Petstore' +โœ… Resource: apis/src-rest-petstore-v3 +โœ… File: apis/src-rest-petstore-v3/apiInformation.json +โœ… File: apis/src-rest-petstore-v3/specification.yaml +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.displayName = KS REST Petstore v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.path = ks/rest-petstore-v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'Petstore' +โœ… Resource: apis/src-soap-passthrough +โœ… File: apis/src-soap-passthrough/apiInformation.json +โœ… File: apis/src-soap-passthrough/specification.wsdl +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.displayName = KS SOAP Pass-Through +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.path = ks/soap +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.type = soap +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'tempuri.org' +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'wsdl' +โœ… Resource: apis/src-graphql-synthetic +โœ… File: apis/src-graphql-synthetic/apiInformation.json +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.displayName = KS GraphQL Synthetic +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.path = ks/graphql +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-synthetic/schemas +โœ… Count: apis/src-graphql-synthetic/schemas >= 1 +โœ… Directory: apis/src-graphql-synthetic/resolvers +โœ… Count: apis/src-graphql-synthetic/resolvers >= 1 +โœ… Resource: apis/src-graphql-synthetic/resolvers/src-resolver-hero +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml +โœ… Field [apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json]: properties.path = Query/hero +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-data-source' +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-request' +โœ… Resource: apis/src-graphql-passthrough +โœ… File: apis/src-graphql-passthrough/apiInformation.json +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.displayName = KS GraphQL Pass-Through +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.path = ks/graphql-pt +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-passthrough/schemas +โœ… Count: apis/src-graphql-passthrough/schemas >= 1 +โœ… Resource: apis/src-websocket +โœ… File: apis/src-websocket/apiInformation.json +โœ… Field [apis/src-websocket/apiInformation.json]: properties.displayName = KS WebSocket +โœ… Field [apis/src-websocket/apiInformation.json]: properties.path = ks/ws +โœ… Field [apis/src-websocket/apiInformation.json]: properties.protocols = [wss] +โœ… Field [apis/src-websocket/apiInformation.json]: properties.type = websocket +โœ… Resource: apis/src-rest-versioned-v1 +โœ… File: apis/src-rest-versioned-v1/apiInformation.json +โœ… File: apis/src-rest-versioned-v1/specification.yaml +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.displayName = KS REST Versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.path = ks/versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersion = v1 +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersionSetId exists +โœ… Resource: apis/src-rest-revisioned +โœ… File: apis/src-rest-revisioned/apiInformation.json +โœ… File: apis/src-rest-revisioned/specification.yaml +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.path = ks/revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.isCurrent exists +โœ… Directory: apis/src-rest-revisioned/releases +โœ… Count: apis/src-rest-revisioned/releases >= 1 +โœ… Resource: apis/src-rest-revisioned/releases/src-release-1 +โœ… File: apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json +โœ… Field [apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json]: properties.notes = Initial release for BVT testing +โœ… Resource: apis/src-rest-revisioned;rev=2 +โœ… File: apis/src-rest-revisioned;rev=2/apiInformation.json +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.apiRevisionDescription = Second revision for BVT testing +โœ… Resource: apis/src-mcp-from-api +โœ… File: apis/src-mcp-from-api/apiInformation.json +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.displayName = KS MCP from Existing API +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.path = ks/mcp-from-api +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-mcp-existing-server +โœ… File: apis/src-mcp-existing-server/apiInformation.json +โœ… File: apis/src-mcp-existing-server/policy.xml +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.displayName = KS MCP Existing Server Demo +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.path = ks/mcp-existing +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.backendId = src-backend-mcp-learn +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Resource: apis/src-mcp-todos +โœ… File: apis/src-mcp-todos/apiInformation.json +โœ… File: apis/src-mcp-todos/policy.xml +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.displayName = KS MCP Todos Server +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.path = ks/mcp-todos +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-a2a-weather-agent +โœ… File: apis/src-a2a-weather-agent/apiInformation.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.displayName = KS A2A Weather Agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.path = ks/a2a-managed +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.type = a2a +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.agent.id = src-a2a-weather-agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.a2aProperties.agentCardPath = /.well-known/agent-card.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.jsonRpcProperties.path = /ks/a2a-weather +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionRequired exists +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.header = Ocp-Apim-Subscription-Key +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.query = subscription-key +โœ… Directory: subscriptions +โœ… Count: subscriptions >= 2 +โœ… Resource: subscriptions/src-sub-all-apis +โœ… File: subscriptions/src-sub-all-apis/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.displayName = Kitchen Sink All APIs Subscription +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.state = active +โœ… Resource: subscriptions/src-sub-product +โœ… File: subscriptions/src-sub-product/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.displayName = Kitchen Sink Product Subscription +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.state = active + +๐Ÿข Section 3: Workspaces + +โœ… Workspace: src-workspace +โœ… Directory: workspaces/src-workspace/namedValues +โœ… Count: workspaces/src-workspace/namedValues >= 1 +โœ… Resource: workspaces/src-workspace/namedValues/src-ws-nv-plain +โœ… File: workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.displayName = src-ws-nv-plain +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.value = workspace-scoped-value +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.tags = [workspace] +โœ… Directory: workspaces/src-workspace/tags +โœ… Count: workspaces/src-workspace/tags >= 1 +โœ… Resource: workspaces/src-workspace/tags/src-ws-tag +โœ… File: workspaces/src-workspace/tags/src-ws-tag/tagInformation.json +โœ… Field [workspaces/src-workspace/tags/src-ws-tag/tagInformation.json]: properties.displayName = src-ws-tag +โœ… Directory: workspaces/src-workspace/groups +โœ… Count: workspaces/src-workspace/groups >= 1 +โœ… Resource: workspaces/src-workspace/groups/src-ws-group-internal +โœ… File: workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Workspace Group +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: workspaces/src-workspace/backends +โœ… Count: workspaces/src-workspace/backends >= 1 +โœ… Resource: workspaces/src-workspace/backends/src-ws-backend-http +โœ… File: workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.description = Workspace-scoped HTTP backend +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.url = https://src-ws-backend.example.com/api +โœ… Directory: workspaces/src-workspace/products +โœ… Count: workspaces/src-workspace/products >= 1 +โœ… Resource: workspaces/src-workspace/products/src-ws-product +โœ… File: workspaces/src-workspace/products/src-ws-product/productInformation.json +โœ… File: workspaces/src-workspace/products/src-ws-product/apis.json +โœ… File: workspaces/src-workspace/products/src-ws-product/tags.json +โœ… File: workspaces/src-workspace/products/src-ws-product/groups.json +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.displayName = Workspace Product +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.subscriptionRequired = False +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.state = published +โœ… Array length [workspaces/src-workspace/products/src-ws-product/groups.json]: >= 2 +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'administrators' +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'src-ws-group-internal' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='administrators' scope='service' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='src-ws-group-internal' scope='workspace' +โœ… Directory: workspaces/src-workspace/apis +โœ… Count: workspaces/src-workspace/apis >= 1 +โœ… Resource: workspaces/src-workspace/apis/src-ws-api-rest +โœ… File: workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.displayName = Workspace REST API +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.path = ks/ws/rest + +๐Ÿ”’ Section 4: Secret Leak Scan + +โœ… No leaked secrets found + +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +Summary: 334/334 checks passed, 0 failures +๐Ÿ”ง Override โ€” Generate target environment override file +โœ… Override file written: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts/.overrides.yaml +VERBOSE: Removing the imported "Resolve-ApiopsInvocation" function. +VERBOSE: Removing the imported "Protect-SubscriptionId" function. +VERBOSE: Removing the imported "Protect-Secret" function. +VERBOSE: Removing the imported "Protect-ResourceGroupName" function. +VERBOSE: Removing the imported "Protect-LogLine" function. +VERBOSE: Removing the imported "Protect-Identifier" function. +VERBOSE: Removing the imported "Protect-ApimName" function. +VERBOSE: Removing the imported "apiops" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Removing the imported "Set-ScriptLogPreferences" function. +VERBOSE: Removing the imported "Get-BoundParameterValueOrNull" function. +VERBOSE: Removing the imported "Assert-AzCliLoggedIn" function. +VERBOSE: Removing the imported "Add-ArgumentIfSet" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Removing the imported "Get-ApiopsAuthArgs" function. +VERBOSE: Removing the imported "Get-ApiopsLogLevel" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ApiopsCli.psm1'. +VERBOSE: Importing function 'Get-ApiopsAuthArgs'. +VERBOSE: Importing function 'Get-ApiopsLogLevel'. +๐Ÿ“ค Publish โ€” Publish artifacts to target APIM +PUT workspace/src-workspace +PUT namedvalue/src-nv-keyvault +PUT namedvalue/src-nv-plain +PUT namedvalue/src-nv-secret +PUT namedvalue/workspace:src-workspace/src-ws-nv-plain +PUT backend/src-backend-circuit-breaker +PUT backend/src-backend-function +PUT backend/src-backend-http +PUT backend/src-backend-logicapp +PUT backend/src-backend-mcp-learn +PUT group/administrators +PUT group/developers +PUT group/guests +PUT group/src-group-internal +PUT logger/azuremonitor +PUT logger/src-logger-appinsights +PUT logger/src-logger-eventhub +PUT policyfragment/src-fragment-cors +PUT policyfragment/src-fragment-ratelimit +PUT globalschema/src-schema-json +PUT tag/pet +PUT tag/src-tag-env +PUT tag/src-tag-team +PUT tag/store +PUT tag/user +PUT versionset/src-versionset-urlpath +PUT backend/workspace:src-workspace/src-ws-backend-http +PUT group/workspace:src-workspace/src-ws-group-internal +PUT tag/workspace:src-workspace/src-ws-tag +PUT backend/src-backend-pool +PUT api/src-a2a-runtime-mock +PUT api/src-a2a-weather-agent +PUT api/src-graphql-passthrough +PUT api/src-graphql-synthetic +PUT api/src-mcp-existing-server +PUT api/src-rest-openapi +PUT api/src-rest-petstore-v3 +PUT api/src-rest-revisioned +PUT api/src-rest-swagger +PUT api/src-rest-versioned-v1 +PUT api/src-soap-passthrough +PUT api/src-websocket +PUT diagnostic/applicationinsights +PUT diagnostic/azuremonitor +PUT servicepolicy +PUT product/src-product-premium +PUT product/src-product-starter +PUT api/workspace:src-workspace/src-ws-api-rest +PUT product/workspace:src-workspace/src-ws-product +PUT api/src-mcp-from-api +PUT api/src-mcp-todos +SKIP subscription/master +PUT subscription/src-sub-all-apis +PUT subscription/src-sub-product + +--- Summary --- +54 creates/updates, 0 deletes, 1 skipped +๐Ÿ” Compare โ€” Compare source and target APIM instances +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/CompareSemantics.psm1'. +VERBOSE: Importing function 'Add-RepresentationSchemaSemantics'. +VERBOSE: Importing function 'Build-ResourceMap'. +VERBOSE: Importing function 'Compare-NormalizedResources'. +VERBOSE: Importing function 'ConvertTo-NormalizedPropertyValue'. +VERBOSE: Importing function 'ConvertTo-NormalizedResource'. +VERBOSE: Importing function 'Get-ApiNameFromOperationResourceId'. +VERBOSE: Importing function 'New-CompareNormalizationContext'. +VERBOSE: Importing function 'Test-IsApiOperationResource'. + +โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +โ•‘ APIM Instance Comparison โ•‘ +โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + Source: bvt-20260702-171731onq-src-apim (bvt-20260702-171731-onq-src-rg) + Target: bvt-20260702-171731onq-tgt-apim (bvt-20260702-171731-onq-tgt-rg) + +โ”€โ”€ Top-level resources โ”€โ”€ + Comparing Named Values ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/namedValues?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/namedValues?api-version=2025-09-01-preview +[5 src, 5 tgt] VERBOSE: Named Values โ€” fetched 5 source, 5 target +VERBOSE: Named Values โ€” comparing 5 source vs 5 target (after exclusions) +VERBOSE: Comparing: src-nv-keyvault +VERBOSE: Skipping secret value for: src-nv-keyvault +VERBOSE: โœ“ src-nv-keyvault matches +VERBOSE: Comparing: src-nv-plain +VERBOSE: โœ“ src-nv-plain matches +VERBOSE: Comparing: src-nv-secret +VERBOSE: Skipping secret value for: src-nv-secret +VERBOSE: โœ“ src-nv-secret matches +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: Skipping secret value for: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +VERBOSE: Comparing: {{auto-id-1}} +VERBOSE: Skipping secret value for: {{auto-id-1}} +VERBOSE: โœ“ {{auto-id-1}} matches +โœ… (5 resources) + Comparing Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/tags?api-version=2025-09-01-preview +[5 src, 5 tgt] VERBOSE: Tags โ€” fetched 5 source, 5 target +VERBOSE: Tags โ€” comparing 5 source vs 5 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +VERBOSE: Comparing: src-tag-team +VERBOSE: โœ“ src-tag-team matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (5 resources) + Comparing Gateways ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/gateways?api-version=2025-09-01-preview +โš ๏ธ SKIPPED + source query failed: ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) +VERBOSE: Source query error for Gateways โ€” ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + Comparing API Version Sets ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apiVersionSets?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apiVersionSets?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API Version Sets โ€” fetched 1 source, 1 target +VERBOSE: API Version Sets โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-versionset-urlpath +VERBOSE: โœ“ src-versionset-urlpath matches +โœ… (1 resources) + Comparing Backends ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/backends?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/backends?api-version=2025-09-01-preview +[6 src, 6 tgt] VERBOSE: Backends โ€” fetched 6 source, 6 target +VERBOSE: Backends โ€” comparing 6 source vs 6 target (after exclusions) +VERBOSE: Comparing: src-backend-circuit-breaker +VERBOSE: โœ“ src-backend-circuit-breaker matches +VERBOSE: Comparing: src-backend-function +VERBOSE: Found 1 diff(s) in: src-backend-function +VERBOSE: Comparing: src-backend-http +VERBOSE: โœ“ src-backend-http matches +VERBOSE: Comparing: src-backend-logicapp +VERBOSE: Found 1 diff(s) in: src-backend-logicapp +VERBOSE: Comparing: src-backend-mcp-learn +VERBOSE: โœ“ src-backend-mcp-learn matches +VERBOSE: Comparing: src-backend-pool +VERBOSE: โœ“ src-backend-pool matches +โŒ 2 difference(s) + โŒ src-backend-function + DIFF at properties.resourceId + source: "https://management.azure.com/subscriptions/{{sub}}/resourceGroups/{{rg}}/providers/Microsoft.Web/sites/src-func-app" + target: "https://management.azure.com/subscriptions/{{sub}}/resourceGroups/bvt-20260702-171739-wrc-src-rg/providers/Microsoft.Web/sites/src-func-app" + โŒ src-backend-logicapp + DIFF at properties.resourceId + source: "https://management.azure.com/subscriptions/{{sub}}/resourceGroups/{{rg}}/providers/Microsoft.Logic/workflows/src-logic-app" + target: "https://management.azure.com/subscriptions/{{sub}}/resourceGroups/bvt-20260702-171739-wrc-src-rg/providers/Microsoft.Logic/workflows/src-logic-app" + Comparing Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/groups?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: Groups โ€” fetched 4 source, 4 target +VERBOSE: Groups โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-group-internal +VERBOSE: โœ“ src-group-internal matches +โœ… (1 resources) + Comparing Policy Fragments ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/policyFragments?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/policyFragments?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Policy Fragments โ€” fetched 2 source, 2 target +VERBOSE: Policy Fragments โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-fragment-cors +VERBOSE: โœ“ src-fragment-cors matches +VERBOSE: Comparing: src-fragment-ratelimit +VERBOSE: โœ“ src-fragment-ratelimit matches +โœ… (2 resources) + Comparing Global Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Global Schemas โ€” fetched 1 source, 1 target +VERBOSE: Global Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-schema-json +VERBOSE: โœ“ src-schema-json matches +โœ… (1 resources) + Comparing Loggers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/loggers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/loggers?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: Loggers โ€” fetched 3 source, 3 target +VERBOSE: Loggers โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: azuremonitor +VERBOSE: โœ“ azuremonitor matches +VERBOSE: Comparing: src-logger-eventhub +VERBOSE: Skipping logger credentials for: src-logger-eventhub +VERBOSE: โœ“ src-logger-eventhub matches +VERBOSE: Comparing: src-logger-appinsights +VERBOSE: Skipping logger credentials for: src-logger-appinsights +VERBOSE: โœ“ src-logger-appinsights matches +โœ… (3 resources) + Comparing Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/diagnostics?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Diagnostics โ€” fetched 2 source, 2 target +VERBOSE: Diagnostics โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: applicationinsights +VERBOSE: โœ“ applicationinsights matches +VERBOSE: Comparing: azuremonitor +VERBOSE: โœ“ azuremonitor matches +โœ… (2 resources) + Comparing Service Policy ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Service Policy โ€” fetched 1 source, 1 target +VERBOSE: Service Policy โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing Subscriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/subscriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/subscriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: Subscriptions โ€” fetched 3 source, 3 target +VERBOSE: Subscriptions โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-sub-all-apis +VERBOSE: โœ“ src-sub-all-apis matches +VERBOSE: Comparing: src-sub-product +VERBOSE: โœ“ src-sub-product matches +โœ… (2 resources) + Comparing Workspaces ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspaces โ€” fetched 1 source, 1 target +VERBOSE: Workspaces โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-workspace +VERBOSE: โœ“ src-workspace matches +โœ… (1 resources) + Comparing Documentations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/documentations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/documentations?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/documentations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/documentations?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Documentations โ€” fetched 0 source, 0 target + + Comparing Policy Restrictions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/policyRestrictions?api-version=2025-09-01-preview +โš ๏ธ SKIPPED + source query failed: ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/policyRestrictions?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) +VERBOSE: Source query error for Policy Restrictions โ€” ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/policyRestrictions?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + +โ”€โ”€ APIs โ”€โ”€ + Comparing APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis?api-version=2025-09-01-preview +[15 src, 15 tgt] VERBOSE: APIs โ€” fetched 15 source, 15 target +VERBOSE: APIs โ€” comparing 15 source vs 15 target (after exclusions) +VERBOSE: Comparing: src-a2a-runtime-mock +VERBOSE: โœ“ src-a2a-runtime-mock matches +VERBOSE: Comparing: src-a2a-weather-agent +VERBOSE: Found 2 diff(s) in: src-a2a-weather-agent +VERBOSE: Comparing: src-graphql-passthrough +VERBOSE: โœ“ src-graphql-passthrough matches +VERBOSE: Comparing: src-graphql-synthetic +VERBOSE: โœ“ src-graphql-synthetic matches +VERBOSE: Comparing: src-mcp-existing-server +VERBOSE: โœ“ src-mcp-existing-server matches +VERBOSE: Comparing: src-mcp-from-api +VERBOSE: โœ“ src-mcp-from-api matches +VERBOSE: Comparing: src-mcp-todos +VERBOSE: โœ“ src-mcp-todos matches +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +VERBOSE: Comparing: src-rest-swagger +VERBOSE: โœ“ src-rest-swagger matches +VERBOSE: Comparing: src-rest-petstore-v3 +VERBOSE: โœ“ src-rest-petstore-v3 matches +VERBOSE: Comparing: src-rest-revisioned +VERBOSE: โœ“ src-rest-revisioned matches +VERBOSE: Comparing: src-rest-revisioned;rev=2 +VERBOSE: โœ“ src-rest-revisioned;rev=2 matches +VERBOSE: Comparing: src-rest-versioned-v1 +VERBOSE: โœ“ src-rest-versioned-v1 matches +VERBOSE: Comparing: src-soap-passthrough +VERBOSE: โœ“ src-soap-passthrough matches +VERBOSE: Comparing: src-websocket +VERBOSE: โœ“ src-websocket matches +โŒ 1 difference(s) + โŒ src-a2a-weather-agent + DIFF at properties.a2aProperties.agentCardBackendUrl + source: "https://{{apim-name}}.azure-api.net/ks/a2a-weather/.well-known/agent-card.json" + target: "https://bvt-20260702-171739wrc-src-apim.azure-api.net/ks/a2a-weather/.well-known/agent-card.json" + DIFF at properties.jsonRpcProperties.BackendUrl + source: "https://{{apim-name}}.azure-api.net" + target: "https://bvt-20260702-171739wrc-src-apim.azure-api.net" +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis?api-version=2025-09-01-preview + API: src-a2a-runtime-mock + Comparing API/src-a2a-runtime-mock/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-a2a-runtime-mock/Operations โ€” fetched 3 source, 3 target +VERBOSE: API/src-a2a-runtime-mock/Operations โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: get-agent-card +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ get-agent-card matches +VERBOSE: Comparing: get-agent-card-legacy +VERBOSE: โœ“ get-agent-card-legacy matches +VERBOSE: Comparing: post-jsonrpc +VERBOSE: โœ“ post-jsonrpc matches +โœ… (3 resources) + Comparing API/src-a2a-runtime-mock/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview + Comparing API/src-a2a-runtime-mock/operations/get-agent-card/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/operations/get-agent-card/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/operations/get-agent-card/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/operations/get-agent-card-legacy/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/operations/get-agent-card-legacy/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/operations/post-jsonrpc/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-runtime-mock/operations/post-jsonrpc/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview + API: src-a2a-weather-agent + Comparing API/src-a2a-weather-agent/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-a2a-weather-agent/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview + API: src-graphql-passthrough + Comparing API/src-graphql-passthrough/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-passthrough/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-passthrough/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: graphql +VERBOSE: โœ“ graphql matches +โœ… (1 resources) + Comparing API/src-graphql-passthrough/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-passthrough/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview + API: src-graphql-synthetic + Comparing API/src-graphql-synthetic/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: graphql +VERBOSE: โœ“ graphql matches +โœ… (1 resources) + Comparing API/src-graphql-synthetic/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/Resolvers โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/Resolvers โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-resolver-hero +VERBOSE: โœ“ src-resolver-hero matches +โœ… (1 resources) + Comparing API/src-graphql-synthetic/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview + Comparing API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-graphql-synthetic/resolvers/src-resolver-hero/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-graphql-synthetic/resolvers/src-resolver-hero/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + API: src-mcp-existing-server + Comparing API/src-mcp-existing-server/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-existing-server/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-existing-server/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-existing-server/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-existing-server/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview + API: src-mcp-from-api + Comparing API/src-mcp-from-api/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-from-api/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-from-api/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-from-api/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-from-api/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview + API: src-mcp-todos + Comparing API/src-mcp-todos/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-todos/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-todos/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-todos/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-mcp-todos/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview + API: src-rest-openapi + Comparing API/src-rest-openapi/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-openapi/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-openapi/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-openapi/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-rest-openapi/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: API/src-rest-openapi/Schemas โ€” fetched 2 source, 2 target +VERBOSE: API/src-rest-openapi/Schemas โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-rest-schema-item +VERBOSE: โœ“ src-rest-schema-item matches +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (2 resources) + Comparing API/src-rest-openapi/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/tags?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: API/src-rest-openapi/Tags โ€” fetched 2 source, 2 target +VERBOSE: API/src-rest-openapi/Tags โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +VERBOSE: Comparing: src-tag-team +VERBOSE: โœ“ src-tag-team matches +โœ… (2 resources) + Comparing API/src-rest-openapi/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/diagnostics?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Diagnostics โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Diagnostics โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: applicationinsights +VERBOSE: โœ“ applicationinsights matches +โœ… (1 resources) + Comparing API/src-rest-openapi/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/tagDescriptions?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Tag Descriptions โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Tag Descriptions โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +โœ… (1 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview + Comparing API/src-rest-openapi/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/operations/healthCheck/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/operations/healthCheck/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/operations/healthCheck/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-rest-openapi/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-openapi/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview + API: src-rest-swagger + Comparing API/src-rest-swagger/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview +[20 src, 20 tgt] VERBOSE: API/src-rest-swagger/Operations โ€” fetched 20 source, 20 target +VERBOSE: API/src-rest-swagger/Operations โ€” comparing 20 source vs 20 target (after exclusions) +VERBOSE: Comparing: addPet +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ addPet matches +VERBOSE: Comparing: createUser +VERBOSE: โœ“ createUser matches +VERBOSE: Comparing: createUsersWithArrayInput +VERBOSE: โœ“ createUsersWithArrayInput matches +VERBOSE: Comparing: createUsersWithListInput +VERBOSE: โœ“ createUsersWithListInput matches +VERBOSE: Comparing: deleteOrder +VERBOSE: โœ“ deleteOrder matches +VERBOSE: Comparing: deleteUser +VERBOSE: โœ“ deleteUser matches +VERBOSE: Comparing: deletePet +VERBOSE: โœ“ deletePet matches +VERBOSE: Comparing: getPetById +VERBOSE: โœ“ getPetById matches +VERBOSE: Comparing: getOrderById +VERBOSE: โœ“ getOrderById matches +VERBOSE: Comparing: findPetsByStatus +VERBOSE: โœ“ findPetsByStatus matches +VERBOSE: Comparing: findPetsByTags +VERBOSE: โœ“ findPetsByTags matches +VERBOSE: Comparing: getUserByName +VERBOSE: โœ“ getUserByName matches +VERBOSE: Comparing: logoutUser +VERBOSE: โœ“ logoutUser matches +VERBOSE: Comparing: loginUser +VERBOSE: โœ“ loginUser matches +VERBOSE: Comparing: placeOrder +VERBOSE: โœ“ placeOrder matches +VERBOSE: Comparing: getInventory +VERBOSE: โœ“ getInventory matches +VERBOSE: Comparing: updatePet +VERBOSE: โœ“ updatePet matches +VERBOSE: Comparing: updateUser +VERBOSE: โœ“ updateUser matches +VERBOSE: Comparing: updatePetWithForm +VERBOSE: โœ“ updatePetWithForm matches +VERBOSE: Comparing: uploadFile +VERBOSE: โœ“ uploadFile matches +โœ… (20 resources) + Comparing API/src-rest-swagger/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-swagger/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-swagger/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-swagger/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/tagDescriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-rest-swagger/Tag Descriptions โ€” fetched 3 source, 3 target +VERBOSE: API/src-rest-swagger/Tag Descriptions โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (3 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview + Comparing API/src-rest-swagger/operations/addPet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/addPet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/addPet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/addPet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/createUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/createUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUsersWithArrayInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/createUsersWithArrayInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/createUsersWithArrayInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUsersWithArrayInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUsersWithListInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUsersWithListInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deleteOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/deleteOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/deleteOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deleteOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deleteUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/deleteUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/deleteUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deleteUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deletePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/deletePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/deletePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deletePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getPetById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/getPetById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/getPetById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getPetById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getOrderById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/getOrderById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/getOrderById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getOrderById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/findPetsByStatus/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/findPetsByStatus/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/findPetsByTags/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/findPetsByTags/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/findPetsByTags/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/findPetsByTags/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getUserByName/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/getUserByName/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/getUserByName/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getUserByName/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/logoutUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/logoutUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/logoutUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/logoutUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/loginUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/loginUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/loginUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/loginUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/placeOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/placeOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/placeOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/placeOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getInventory/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/getInventory/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/getInventory/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getInventory/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updatePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/updatePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/updatePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updatePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updateUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/updateUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/updateUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updateUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updatePetWithForm/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updatePetWithForm/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/uploadFile/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/operations/uploadFile/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-swagger/operations/uploadFile/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/uploadFile/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview + API: src-rest-petstore-v3 + Comparing API/src-rest-petstore-v3/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview +[19 src, 19 tgt] VERBOSE: API/src-rest-petstore-v3/Operations โ€” fetched 19 source, 19 target +VERBOSE: API/src-rest-petstore-v3/Operations โ€” comparing 19 source vs 19 target (after exclusions) +VERBOSE: Comparing: addPet +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ addPet matches +VERBOSE: Comparing: createUser +VERBOSE: โœ“ createUser matches +VERBOSE: Comparing: createUsersWithListInput +VERBOSE: โœ“ createUsersWithListInput matches +VERBOSE: Comparing: deleteOrder +VERBOSE: โœ“ deleteOrder matches +VERBOSE: Comparing: deleteUser +VERBOSE: โœ“ deleteUser matches +VERBOSE: Comparing: deletePet +VERBOSE: โœ“ deletePet matches +VERBOSE: Comparing: getPetById +VERBOSE: โœ“ getPetById matches +VERBOSE: Comparing: getOrderById +VERBOSE: โœ“ getOrderById matches +VERBOSE: Comparing: findPetsByStatus +VERBOSE: โœ“ findPetsByStatus matches +VERBOSE: Comparing: findPetsByTags +VERBOSE: โœ“ findPetsByTags matches +VERBOSE: Comparing: getUserByName +VERBOSE: โœ“ getUserByName matches +VERBOSE: Comparing: logoutUser +VERBOSE: โœ“ logoutUser matches +VERBOSE: Comparing: loginUser +VERBOSE: โœ“ loginUser matches +VERBOSE: Comparing: placeOrder +VERBOSE: โœ“ placeOrder matches +VERBOSE: Comparing: getInventory +VERBOSE: โœ“ getInventory matches +VERBOSE: Comparing: updatePet +VERBOSE: โœ“ updatePet matches +VERBOSE: Comparing: updateUser +VERBOSE: โœ“ updateUser matches +VERBOSE: Comparing: updatePetWithForm +VERBOSE: โœ“ updatePetWithForm matches +VERBOSE: Comparing: uploadFile +VERBOSE: โœ“ uploadFile matches +โœ… (19 resources) + Comparing API/src-rest-petstore-v3/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-petstore-v3/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-petstore-v3/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-petstore-v3/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/tagDescriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-rest-petstore-v3/Tag Descriptions โ€” fetched 3 source, 3 target +VERBOSE: API/src-rest-petstore-v3/Tag Descriptions โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (3 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview + Comparing API/src-rest-petstore-v3/operations/addPet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/addPet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/addPet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/addPet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/createUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/createUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/createUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/createUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/createUsersWithListInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/createUsersWithListInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deleteOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/deleteOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/deleteOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deleteOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deleteUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/deleteUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/deleteUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deleteUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deletePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/deletePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/deletePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deletePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getPetById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/getPetById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/getPetById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getPetById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getOrderById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/getOrderById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/getOrderById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getOrderById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/findPetsByStatus/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/findPetsByStatus/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/findPetsByTags/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/findPetsByTags/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/findPetsByTags/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/findPetsByTags/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getUserByName/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/getUserByName/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/getUserByName/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getUserByName/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/logoutUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/logoutUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/logoutUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/logoutUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/loginUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/loginUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/loginUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/loginUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/placeOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/placeOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/placeOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/placeOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getInventory/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/getInventory/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/getInventory/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getInventory/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updatePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/updatePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/updatePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updatePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updateUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/updateUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/updateUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updateUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updatePetWithForm/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updatePetWithForm/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/uploadFile/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/operations/uploadFile/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-petstore-v3/operations/uploadFile/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/uploadFile/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview + API: src-rest-revisioned + Comparing API/src-rest-revisioned/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-revisioned/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-revisioned/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-revisioned/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-revisioned/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/releases?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned/Releases โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned/Releases โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-release-1 +VERBOSE: โœ“ src-release-1 matches +โœ… (1 resources) + Comparing API/src-rest-revisioned/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview + Comparing API/src-rest-revisioned/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/operations/healthCheck/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/healthCheck/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview + API: src-rest-revisioned;rev=2 + Comparing API/src-rest-revisioned;rev=2/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-revisioned;rev=2/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-revisioned;rev=2/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned;rev=2/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-revisioned;rev=2/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/releases?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Releases โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned;rev=2/Releases โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-release-1 +VERBOSE: โœ“ src-release-1 matches +โœ… (1 resources) + Comparing API/src-rest-revisioned;rev=2/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview + Comparing API/src-rest-revisioned;rev=2/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/operations/healthCheck/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/healthCheck/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-revisioned;rev=2/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview + API: src-rest-versioned-v1 + Comparing API/src-rest-versioned-v1/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-versioned-v1/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-versioned-v1/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: getStatus-v1 +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ getStatus-v1 matches +โœ… (1 resources) + Comparing API/src-rest-versioned-v1/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview + Comparing API/src-rest-versioned-v1/operations/getStatus-v1/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/operations/getStatus-v1/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-rest-versioned-v1/operations/getStatus-v1/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/operations/getStatus-v1/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview + API: src-soap-passthrough + Comparing API/src-soap-passthrough/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-soap-passthrough/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-soap-passthrough/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-soap-passthrough/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-soap-passthrough/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-soap-passthrough/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-soap-passthrough/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview + Comparing API/src-soap-passthrough/operations/6a469dcee15d3120e0353033/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/operations/6a469dcee15d3120e0353033/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-soap-passthrough/operations/6a469dcee15d3120e0353033/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/operations/6a469dcee15d3120e0353033/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview + API: src-websocket + Comparing API/src-websocket/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-websocket/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-websocket/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: onHandshake +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ onHandshake matches +โœ… (1 resources) + Comparing API/src-websocket/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-websocket/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/operations?api-version=2025-09-01-preview + Comparing API/src-websocket/operations/onHandshake/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/operations/onHandshake/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/apis/src-websocket/operations/onHandshake/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/operations/onHandshake/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview + +โ”€โ”€ Products โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products?api-version=2025-09-01-preview + Product: src-product-premium + Comparing Product/src-product-premium/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Product/src-product-premium/Policies โ€” fetched 1 source, 1 target +VERBOSE: Product/src-product-premium/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing Product/src-product-premium/APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/apis?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-premium/APIs โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-premium/APIs โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-graphql-synthetic +VERBOSE: โœ“ src-graphql-synthetic matches +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +โœ… (2 resources) + Comparing Product/src-product-premium/Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/groups?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-premium/Groups โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-premium/Groups โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: administrators +VERBOSE: โœ“ administrators matches +VERBOSE: Comparing: src-group-internal +VERBOSE: โœ“ src-group-internal matches +โœ… (2 resources) + Comparing Product/src-product-premium/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Product/src-product-premium/Tags โ€” fetched 0 source, 0 target + + Comparing Product/src-product-premium/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Product/src-product-premium/Wikis โ€” fetched 0 source, 0 target + + Product: src-product-starter + Comparing Product/src-product-starter/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Product/src-product-starter/Policies โ€” fetched 0 source, 0 target + + Comparing Product/src-product-starter/APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/apis?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-starter/APIs โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-starter/APIs โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +VERBOSE: Comparing: src-soap-passthrough +VERBOSE: โœ“ src-soap-passthrough matches +โœ… (2 resources) + Comparing Product/src-product-starter/Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/groups?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-starter/Groups โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-starter/Groups โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: administrators +VERBOSE: โœ“ administrators matches +VERBOSE: Comparing: developers +VERBOSE: โœ“ developers matches +โœ… (2 resources) + Comparing Product/src-product-starter/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/tags?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Product/src-product-starter/Tags โ€” fetched 1 source, 1 target +VERBOSE: Product/src-product-starter/Tags โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +โœ… (1 resources) + Comparing Product/src-product-starter/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Product/src-product-starter/Wikis โ€” fetched 0 source, 0 target + + +โ”€โ”€ Gateway APIs โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/gateways?api-version=2025-09-01-preview + โš ๏ธ Gateways not available (v2 SKU?): ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + +โ”€โ”€ Workspace children โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces?api-version=2025-09-01-preview + Workspace: src-workspace + Comparing Workspace/src-workspace/apis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/apis?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/apis โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/apis โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-api-rest +VERBOSE: โœ“ src-ws-api-rest matches +โœ… (1 resources) + Comparing Workspace/src-workspace/products ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/products โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/products โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-product +VERBOSE: โœ“ src-ws-product matches +โœ… (1 resources) + Comparing Workspace/src-workspace/backends ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/backends?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/backends?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/backends โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/backends โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-backend-http +VERBOSE: โœ“ src-ws-backend-http matches +โœ… (1 resources) + Comparing Workspace/src-workspace/namedValues ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/namedValues?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/namedValues?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/namedValues โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/namedValues โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-nv-plain +VERBOSE: โœ“ src-ws-nv-plain matches +โœ… (1 resources) + Comparing Workspace/src-workspace/tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/tags โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/tags โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-tag +VERBOSE: โœ“ src-ws-tag matches +โœ… (1 resources) + Comparing Workspace/src-workspace/groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/groups?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/groups โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/groups โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-group-internal +VERBOSE: โœ“ src-ws-group-internal matches +โœ… (1 resources) + Comparing Workspace/src-workspace/policyFragments ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/policyFragments?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/policyFragments?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/policyFragments โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/schemas โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/loggers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/loggers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/loggers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/loggers โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/diagnostics โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/policies โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/subscriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/subscriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/subscriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/subscriptions โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/apiVersionSets ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/apiVersionSets?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/apiVersionSets?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/apiVersionSets โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview + Workspace/src-workspace/Product: src-ws-product + Comparing Workspace/src-workspace/Product/src-ws-product/apiLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/products/src-ws-product/apiLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/products/src-ws-product/apiLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + Comparing Workspace/src-workspace/Product/src-ws-product/groupLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/products/src-ws-product/groupLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/products/src-ws-product/groupLinks?api-version=2025-09-01-preview +[2 src, 2 tgt] โœ… match +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview + Workspace/src-workspace/Tag: src-ws-tag + Comparing Workspace/src-workspace/Tag/src-ws-tag/productLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/tags/src-ws-tag/productLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/tags/src-ws-tag/productLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + Comparing Workspace/src-workspace/Tag/src-ws-tag/apiLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-src-apim/workspaces/src-workspace/tags/src-ws-tag/apiLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-171731-onq-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-171731onq-tgt-apim/workspaces/src-workspace/tags/src-ws-tag/apiLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + +โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• +โŒ FAIL โ€” 3 difference(s) found across 236 resource types (154 resources compared) + (2 type(s) skipped due to query failures) +โŒ Verification found differences +๐Ÿงน PHASE 7 โ€” Teardown + Deleting bvt-...-onq-src-rg... + Deleting bvt-...-onq-tgt-rg... + โณ Waiting for resource group deletions to complete for hard-delete... + ... waiting for deletion of bvt-...-onq-src-rg (0s elapsed) + ... waiting for deletion of bvt-...-onq-src-rg (30s elapsed) + ... waiting for deletion of bvt-...-onq-src-rg (60s elapsed) + ... waiting for deletion of bvt-...-onq-src-rg (90s elapsed) +True +True +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...src-apim... +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...tgt-apim... +๐Ÿงน Teardown complete (hard-delete) diff --git a/tests/integration/all-resource-types/_runlogs/run2-delete-unmatched.log b/tests/integration/all-resource-types/_runlogs/run2-delete-unmatched.log new file mode 100644 index 00000000..41c0e9d8 --- /dev/null +++ b/tests/integration/all-resource-types/_runlogs/run2-delete-unmatched.log @@ -0,0 +1,692 @@ +nohup: ignoring input +๐Ÿ” Azure CLI authenticated: Adhoc Testing Subscription () +๐Ÿš€ PHASE 1 โ€” Deploy source and target APIM instances (parallel) + [SRC] ********************** + [SRC] PowerShell transcript start + [SRC] Start time: 20260702171744 + [SRC] ********************** + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [SRC] VERBOSE: Importing function 'apiops'. + [SRC] VERBOSE: Importing function 'Protect-ApimName'. + [SRC] VERBOSE: Importing function 'Protect-Identifier'. + [SRC] VERBOSE: Importing function 'Protect-LogLine'. + [SRC] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [SRC] VERBOSE: Importing function 'Protect-Secret'. + [SRC] VERBOSE: Importing function 'Protect-SubscriptionId'. + [SRC] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [SRC] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [SRC] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [SRC] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [SRC] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [SRC] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [SRC] VERBOSE: Importing function 'Wait-ApimActivation'. + [SRC] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [SRC] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [SRC] ๐Ÿ” Verifying Azure CLI authentication... + [TGT] ********************** + [TGT] PowerShell transcript start + [TGT] Start time: 20260702171744 + [TGT] ********************** + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [TGT] VERBOSE: Importing function 'apiops'. + [TGT] VERBOSE: Importing function 'Protect-ApimName'. + [TGT] VERBOSE: Importing function 'Protect-Identifier'. + [TGT] VERBOSE: Importing function 'Protect-LogLine'. + [TGT] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [TGT] VERBOSE: Importing function 'Protect-Secret'. + [TGT] VERBOSE: Importing function 'Protect-SubscriptionId'. + [TGT] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [TGT] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [TGT] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [TGT] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [TGT] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [TGT] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [TGT] VERBOSE: Importing function 'Wait-ApimActivation'. + [TGT] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [TGT] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [TGT] Starting target APIM deployment... + [SRC] Subscription: Adhoc Testing Subscription () + [SRC] ๐Ÿ“‹ Registering required resource providers... + [TGT] Subscription: Adhoc Testing Subscription () + [TGT] Resource Group: bvt-...-wrc-tgt-rg + [TGT] SKU: StandardV2 + [TGT] Location: centralus + [TGT] Log Level: Verbose + [TGT] Creating resource group... + [SRC] Microsoft.ApiManagement already registered + [TGT] Deploying target-apim.bicep (this takes 30-45 minutes)... + [SRC] Microsoft.Insights already registered + [SRC] Microsoft.OperationalInsights already registered + [SRC] Microsoft.EventHub already registered + [SRC] Microsoft.KeyVault already registered + [SRC] Microsoft.AlertsManagement already registered + [SRC] Waiting for provider registration to complete... + [SRC] โœ… Resource providers ready + [SRC] ๐Ÿ“ฆ Ensuring resource group 'bvt-...-wrc-src-rg' exists in 'centralus'... + [SRC] ๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + [SRC] APIM Name: (auto-generated from resource group) + [SRC] SKU: StandardV2 + [TGT] INFO: Command ran in 147.363 seconds (init: 0.504, invoke: 146.859) + [TGT] INFO: Command ran in 147.363 seconds (init: 0.504, invoke: 146.859) + [TGT] โœ… Target APIM deployed successfully: bvt...tgt-apim + [TGT] ๐ŸŒฑ Seeding unmatched resources into target APIM for --delete-unmatched coverage... + [TGT] Waiting for APIM 'bvt...tgt-apim' to finish Activating (timeout 2700s)... + [TGT] provisioningState: Succeeded + [TGT] INFO: Command ran in 39.433 seconds (init: 0.101, invoke: 39.332) + [TGT] INFO: Command ran in 39.433 seconds (init: 0.101, invoke: 39.332) + [TGT] โœ… Unmatched resource seeding complete + [TGT] ********************** + [TGT] PowerShell transcript end + [TGT] End time: 20260702172105 + [TGT] ********************** + [SRC] INFO: Command ran in 195.533 seconds (init: 0.260, invoke: 195.273) + [SRC] INFO: Command ran in 195.533 seconds (init: 0.260, invoke: 195.273) + [SRC] Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + [SRC] provisioningState: Succeeded + [SRC] Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... + [SRC] Applying post-activation APIM resources... +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +๐Ÿ” Verifying Azure CLI authentication... + Subscription: Adhoc Testing Subscription () +๐Ÿ“‹ Registering required resource providers... + Microsoft.ApiManagement already registered + Microsoft.Insights already registered + Microsoft.OperationalInsights already registered + Microsoft.EventHub already registered + Microsoft.KeyVault already registered + Microsoft.AlertsManagement already registered + Waiting for provider registration to complete... + โœ… Resource providers ready +๐Ÿ“ฆ Ensuring resource group 'bvt-...-wrc-src-rg' exists in 'centralus'... +๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + APIM Name: (auto-generated from resource group) + SKU: StandardV2 + +INFO: Command ran in 195.533 seconds (init: 0.260, invoke: 195.273) +Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + provisioningState: Succeeded +Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... +Applying post-activation APIM resources... +INFO: Command ran in 39.843 seconds (init: 0.145, invoke: 39.697) + +============================================================ +โœ… Kitchen Sink APIM deployed successfully! +============================================================ + +APIOps CLI extract command: + + npx apiops extract \ + --subscription-id \ + --resource-group bvt-...-wrc-src-rg \ + --service-name bvt...src-apim \ + --output-dir ./extracted \ + --log-level warn + +Gateway URL: https://bvt-20260702-171739wrc-src-apim.azure-api.net +Workspace deployed: True +Gateway deployed: False +SKU: StandardV2 + + โœ… Source deployed: bvt...src-apim +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +Starting target APIM deployment... +Subscription: Adhoc Testing Subscription () +Resource Group: bvt-...-wrc-tgt-rg +SKU: StandardV2 +Location: centralus +Log Level: Verbose +Creating resource group... +Deploying target-apim.bicep (this takes 30-45 minutes)... +INFO: Command ran in 147.363 seconds (init: 0.504, invoke: 146.859) +โœ… Target APIM deployed successfully: bvt...tgt-apim +๐ŸŒฑ Seeding unmatched resources into target APIM for --delete-unmatched coverage... +Waiting for APIM 'bvt...tgt-apim' to finish Activating (timeout 2700s)... + provisioningState: Succeeded +INFO: Command ran in 39.433 seconds (init: 0.101, invoke: 39.332) +โœ… Unmatched resource seeding complete + โœ… Target deployed: bvt...tgt-apim + โœ… source-apim-post-activation deployment confirmed +โœ… PHASE 1 complete +๐Ÿ“ฅ Extract โ€” Extract artifacts from source APIM + Cleaned previous extract output +Extracted 1 Workspace(s) +Extracted 5 NamedValue(s) +Extracted 5 Tag(s) +Extracted 1 VersionSet(s) +Extracted 6 Backend(s) +Extracted 3 Logger(s) +Extracted 4 Group(s) +Extracted 2 PolicyFragment(s) +Extracted 1 GlobalSchema(s) +Extracted 2 Diagnostic(s) +Extracted 2 Product(s) +Extracted 15 Api(s) +Extracted 3 Subscription(s) + API "src-a2a-runtime-mock": spec, 3 ops + API "src-rest-openapi": spec, 4 ops + API "src-rest-swagger": spec, 20 ops + API "src-rest-petstore-v3": spec, 19 ops + API "src-rest-revisioned": spec, 4 ops, 1 revisions + API "src-rest-revisioned;rev=2": spec, 4 ops + API "src-rest-versioned-v1": spec, 1 ops + API "src-soap-passthrough": spec, 1 ops + API "src-websocket": 1 ops +Workspace "src-workspace": 9 resources + +Total: 159 resources extracted, 0 errors +/workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +๐Ÿ”Ž Extract โ€” Validate extracted artifact structure +๐Ÿ”Ž Artifact Structure Validation +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +ExtractedDir: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +ManifestFile: /workspaces/apiops-cli/tests/integration/all-resource-types/expected-structure.json +SkuName: StandardV2 + +๐Ÿ“ Section 1: Service-Level Artifacts + +โœ… Service artifact: policy.xml +โœ… Content [service/policy.xml]: contains 'cors' +โœ… Content [service/policy.xml]: contains 'allowed-origins' +โœ… Content [service/policy.xml]: contains 'developer.contoso.com' + +๐Ÿ“‚ Section 2: Resource Directories + +โœ… Directory: namedValues +โœ… Count: namedValues >= 3 +โœ… Resource: namedValues/src-nv-plain +โœ… File: namedValues/src-nv-plain/namedValueInformation.json +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.displayName = src-nv-plain +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.value = plain-text-value +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.tags = [all-resources, plain] +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.secret = False +โœ… Resource: namedValues/src-nv-secret +โœ… File: namedValues/src-nv-secret/namedValueInformation.json +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.displayName = src-nv-secret +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.tags = [all-resources, secret] +โœ… Resource: namedValues/src-nv-keyvault +โœ… File: namedValues/src-nv-keyvault/namedValueInformation.json +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.displayName = src-nv-keyvault +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.keyVault.secretIdentifier exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.tags = [all-resources, keyvault] +โœ… Directory: tags +โœ… Count: tags >= 2 +โœ… Resource: tags/src-tag-env +โœ… File: tags/src-tag-env/tagInformation.json +โœ… Field [tags/src-tag-env/tagInformation.json]: properties.displayName = src-tag-env +โœ… Resource: tags/src-tag-team +โœ… File: tags/src-tag-team/tagInformation.json +โœ… Field [tags/src-tag-team/tagInformation.json]: properties.displayName = src-tag-team + โญ๏ธ Skipping gateways (SKU: supported in Developer, Premium) +โœ… Directory: versionSets +โœ… Count: versionSets >= 1 +โœ… Resource: versionSets/src-versionset-urlpath +โœ… File: versionSets/src-versionset-urlpath/versionSetInformation.json +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.displayName = Kitchen Sink Versioned API +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.versioningScheme = Segment +โœ… Directory: backends +โœ… Count: backends >= 6 +โœ… Resource: backends/src-backend-http +โœ… File: backends/src-backend-http/backendInformation.json +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.url = https://src-backend.example.com/api +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.tls.validateCertificateChain exists +โœ… Resource: backends/src-backend-function +โœ… File: backends/src-backend-function/backendInformation.json +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.url = https://src-func-app.azurewebsites.net/api +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-logicapp +โœ… File: backends/src-backend-logicapp/backendInformation.json +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.url = https://src-logic-app.azurewebsites.net/api +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-circuit-breaker +โœ… File: backends/src-backend-circuit-breaker/backendInformation.json +โœ… Field [backends/src-backend-circuit-breaker/backendInformation.json]: properties.circuitBreaker.rules exists +โœ… Resource: backends/src-backend-pool +โœ… File: backends/src-backend-pool/backendInformation.json +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.type = Pool +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.pool.services exists +โœ… Directory: loggers +โœ… Count: loggers >= 2 +โœ… Resource: loggers/src-logger-appinsights +โœ… File: loggers/src-logger-appinsights/loggerInformation.json +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.loggerType = applicationInsights +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.credentials.instrumentationKey exists +โœ… Resource: loggers/src-logger-eventhub +โœ… File: loggers/src-logger-eventhub/loggerInformation.json +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.loggerType = azureEventHub +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.credentials.name = src-apim-logs +โœ… Directory: groups +โœ… Count: groups >= 1 +โœ… Resource: groups/src-group-internal +โœ… File: groups/src-group-internal/groupInformation.json +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Internal Group +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: diagnostics +โœ… Count: diagnostics >= 1 +โœ… Resource: diagnostics/applicationinsights +โœ… File: diagnostics/applicationinsights/diagnosticInformation.json +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.loggerId exists +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.alwaysLog = allErrors +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.sampling.samplingType = fixed +โœ… Directory: policyFragments +โœ… Count: policyFragments >= 2 +โœ… Resource: policyFragments/src-fragment-cors +โœ… File: policyFragments/src-fragment-cors/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-cors/policyFragmentInformation.json]: properties.description = CORS policy fragment +โœ… Resource: policyFragments/src-fragment-ratelimit +โœ… File: policyFragments/src-fragment-ratelimit/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-ratelimit/policyFragmentInformation.json]: properties.description = Rate limit policy fragment +โœ… Directory: schemas +โœ… Count: schemas >= 1 +โœ… Resource: schemas/src-schema-json +โœ… File: schemas/src-schema-json/schemaInformation.json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.schemaType = json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.description = Kitchen sink JSON schema + โญ๏ธ Skipping policyRestrictions (SKU: supported in Developer, Premium) +โœ… Directory: products +โœ… Count: products >= 2 +โœ… Resource: products/src-product-starter +โœ… File: products/src-product-starter/productInformation.json +โœ… File: products/src-product-starter/apis.json +โœ… File: products/src-product-starter/groups.json +โœ… Field [products/src-product-starter/productInformation.json]: properties.displayName = Kitchen Sink Starter +โœ… Field [products/src-product-starter/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-starter/productInformation.json]: properties.approvalRequired = False +โœ… Field [products/src-product-starter/productInformation.json]: properties.state = published +โœ… Array length [products/src-product-starter/apis.json]: >= 2 +โœ… Array contains [products/src-product-starter/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-starter/apis.json]: 'src-soap-passthrough' +โœ… Array length [products/src-product-starter/groups.json]: >= 1 +โœ… Array contains [products/src-product-starter/groups.json]: 'developers' + [info] products/src-product-starter/tags: ProductTag is embedded in productInformation.json, not separate files +โœ… Resource: products/src-product-premium +โœ… File: products/src-product-premium/productInformation.json +โœ… File: products/src-product-premium/policy.xml +โœ… File: products/src-product-premium/apis.json +โœ… File: products/src-product-premium/groups.json +โœ… Field [products/src-product-premium/productInformation.json]: properties.displayName = Kitchen Sink Premium +โœ… Field [products/src-product-premium/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.approvalRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.state = published +โœ… Content [products/src-product-premium/policy.xml]: contains 'rate-limit' +โœ… Content [products/src-product-premium/policy.xml]: contains '1000' +โœ… Array length [products/src-product-premium/apis.json]: >= 2 +โœ… Array contains [products/src-product-premium/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-premium/apis.json]: 'src-graphql-synthetic' +โœ… Array length [products/src-product-premium/groups.json]: >= 1 +โœ… Array contains [products/src-product-premium/groups.json]: 'src-group-internal' +โœ… Directory: apis +โœ… Count: apis >= 13 +โœ… Resource: apis/src-rest-openapi +โœ… File: apis/src-rest-openapi/apiInformation.json +โœ… File: apis/src-rest-openapi/policy.xml +โœ… File: apis/src-rest-openapi/specification.yaml +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.displayName = KS REST OpenAPI +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.path = ks/rest +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'set-header' +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'X-all-resources' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'KS REST OpenAPI' +โœ… Directory: apis/src-rest-openapi/operations +โœ… Count: apis/src-rest-openapi/operations >= 1 +โœ… Directory: apis/src-rest-openapi/tags +โœ… Count: apis/src-rest-openapi/tags >= 2 +โœ… Resource: apis/src-rest-openapi/tags/src-tag-env +โœ… File: apis/src-rest-openapi/tags/src-tag-env/tagInformation.json +โœ… Resource: apis/src-rest-openapi/tags/src-tag-team +โœ… File: apis/src-rest-openapi/tags/src-tag-team/tagInformation.json +โœ… Directory: apis/src-rest-openapi/diagnostics +โœ… Count: apis/src-rest-openapi/diagnostics >= 1 +โœ… Resource: apis/src-rest-openapi/diagnostics/applicationinsights +โœ… File: apis/src-rest-openapi/diagnostics/applicationinsights/diagnosticInformation.json +โœ… Directory: apis/src-rest-openapi/schemas +โœ… Count: apis/src-rest-openapi/schemas >= 1 +โœ… Resource: apis/src-rest-openapi/schemas/src-rest-schema-item +โœ… File: apis/src-rest-openapi/schemas/src-rest-schema-item/schemaInformation.json +โœ… Directory: apis/src-rest-openapi/tagDescriptions +โœ… Count: apis/src-rest-openapi/tagDescriptions >= 1 +โœ… Resource: apis/src-rest-openapi/tagDescriptions/src-tag-env +โœ… File: apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json +โœ… Field [apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json]: properties.description = Environment tag โ€” indicates deployment environment +โœ… Resource: apis/src-rest-swagger +โœ… File: apis/src-rest-swagger/apiInformation.json +โœ… File: apis/src-rest-swagger/specification.json +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.displayName = KS REST Petstore v2 +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.path = ks/rest-swagger +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'swagger' +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'Petstore' +โœ… Resource: apis/src-rest-petstore-v3 +โœ… File: apis/src-rest-petstore-v3/apiInformation.json +โœ… File: apis/src-rest-petstore-v3/specification.yaml +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.displayName = KS REST Petstore v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.path = ks/rest-petstore-v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'Petstore' +โœ… Resource: apis/src-soap-passthrough +โœ… File: apis/src-soap-passthrough/apiInformation.json +โœ… File: apis/src-soap-passthrough/specification.wsdl +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.displayName = KS SOAP Pass-Through +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.path = ks/soap +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.type = soap +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'tempuri.org' +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'wsdl' +โœ… Resource: apis/src-graphql-synthetic +โœ… File: apis/src-graphql-synthetic/apiInformation.json +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.displayName = KS GraphQL Synthetic +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.path = ks/graphql +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-synthetic/schemas +โœ… Count: apis/src-graphql-synthetic/schemas >= 1 +โœ… Directory: apis/src-graphql-synthetic/resolvers +โœ… Count: apis/src-graphql-synthetic/resolvers >= 1 +โœ… Resource: apis/src-graphql-synthetic/resolvers/src-resolver-hero +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml +โœ… Field [apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json]: properties.path = Query/hero +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-data-source' +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-request' +โœ… Resource: apis/src-graphql-passthrough +โœ… File: apis/src-graphql-passthrough/apiInformation.json +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.displayName = KS GraphQL Pass-Through +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.path = ks/graphql-pt +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-passthrough/schemas +โœ… Count: apis/src-graphql-passthrough/schemas >= 1 +โœ… Resource: apis/src-websocket +โœ… File: apis/src-websocket/apiInformation.json +โœ… Field [apis/src-websocket/apiInformation.json]: properties.displayName = KS WebSocket +โœ… Field [apis/src-websocket/apiInformation.json]: properties.path = ks/ws +โœ… Field [apis/src-websocket/apiInformation.json]: properties.protocols = [wss] +โœ… Field [apis/src-websocket/apiInformation.json]: properties.type = websocket +โœ… Resource: apis/src-rest-versioned-v1 +โœ… File: apis/src-rest-versioned-v1/apiInformation.json +โœ… File: apis/src-rest-versioned-v1/specification.yaml +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.displayName = KS REST Versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.path = ks/versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersion = v1 +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersionSetId exists +โœ… Resource: apis/src-rest-revisioned +โœ… File: apis/src-rest-revisioned/apiInformation.json +โœ… File: apis/src-rest-revisioned/specification.yaml +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.path = ks/revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.isCurrent exists +โœ… Directory: apis/src-rest-revisioned/releases +โœ… Count: apis/src-rest-revisioned/releases >= 1 +โœ… Resource: apis/src-rest-revisioned/releases/src-release-1 +โœ… File: apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json +โœ… Field [apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json]: properties.notes = Initial release for BVT testing +โœ… Resource: apis/src-rest-revisioned;rev=2 +โœ… File: apis/src-rest-revisioned;rev=2/apiInformation.json +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.apiRevisionDescription = Second revision for BVT testing +โœ… Resource: apis/src-mcp-from-api +โœ… File: apis/src-mcp-from-api/apiInformation.json +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.displayName = KS MCP from Existing API +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.path = ks/mcp-from-api +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-mcp-existing-server +โœ… File: apis/src-mcp-existing-server/apiInformation.json +โœ… File: apis/src-mcp-existing-server/policy.xml +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.displayName = KS MCP Existing Server Demo +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.path = ks/mcp-existing +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.backendId = src-backend-mcp-learn +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Resource: apis/src-mcp-todos +โœ… File: apis/src-mcp-todos/apiInformation.json +โœ… File: apis/src-mcp-todos/policy.xml +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.displayName = KS MCP Todos Server +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.path = ks/mcp-todos +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-a2a-weather-agent +โœ… File: apis/src-a2a-weather-agent/apiInformation.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.displayName = KS A2A Weather Agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.path = ks/a2a-managed +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.type = a2a +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.agent.id = src-a2a-weather-agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.a2aProperties.agentCardPath = /.well-known/agent-card.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.jsonRpcProperties.path = /ks/a2a-weather +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionRequired exists +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.header = Ocp-Apim-Subscription-Key +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.query = subscription-key +โœ… Directory: subscriptions +โœ… Count: subscriptions >= 2 +โœ… Resource: subscriptions/src-sub-all-apis +โœ… File: subscriptions/src-sub-all-apis/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.displayName = Kitchen Sink All APIs Subscription +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.state = active +โœ… Resource: subscriptions/src-sub-product +โœ… File: subscriptions/src-sub-product/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.displayName = Kitchen Sink Product Subscription +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.state = active + +๐Ÿข Section 3: Workspaces + +โœ… Workspace: src-workspace +โœ… Directory: workspaces/src-workspace/namedValues +โœ… Count: workspaces/src-workspace/namedValues >= 1 +โœ… Resource: workspaces/src-workspace/namedValues/src-ws-nv-plain +โœ… File: workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.displayName = src-ws-nv-plain +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.value = workspace-scoped-value +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.tags = [workspace] +โœ… Directory: workspaces/src-workspace/tags +โœ… Count: workspaces/src-workspace/tags >= 1 +โœ… Resource: workspaces/src-workspace/tags/src-ws-tag +โœ… File: workspaces/src-workspace/tags/src-ws-tag/tagInformation.json +โœ… Field [workspaces/src-workspace/tags/src-ws-tag/tagInformation.json]: properties.displayName = src-ws-tag +โœ… Directory: workspaces/src-workspace/groups +โœ… Count: workspaces/src-workspace/groups >= 1 +โœ… Resource: workspaces/src-workspace/groups/src-ws-group-internal +โœ… File: workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Workspace Group +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: workspaces/src-workspace/backends +โœ… Count: workspaces/src-workspace/backends >= 1 +โœ… Resource: workspaces/src-workspace/backends/src-ws-backend-http +โœ… File: workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.description = Workspace-scoped HTTP backend +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.url = https://src-ws-backend.example.com/api +โœ… Directory: workspaces/src-workspace/products +โœ… Count: workspaces/src-workspace/products >= 1 +โœ… Resource: workspaces/src-workspace/products/src-ws-product +โœ… File: workspaces/src-workspace/products/src-ws-product/productInformation.json +โœ… File: workspaces/src-workspace/products/src-ws-product/apis.json +โœ… File: workspaces/src-workspace/products/src-ws-product/tags.json +โœ… File: workspaces/src-workspace/products/src-ws-product/groups.json +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.displayName = Workspace Product +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.subscriptionRequired = False +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.state = published +โœ… Array length [workspaces/src-workspace/products/src-ws-product/groups.json]: >= 2 +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'administrators' +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'src-ws-group-internal' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='administrators' scope='service' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='src-ws-group-internal' scope='workspace' +โœ… Directory: workspaces/src-workspace/apis +โœ… Count: workspaces/src-workspace/apis >= 1 +โœ… Resource: workspaces/src-workspace/apis/src-ws-api-rest +โœ… File: workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.displayName = Workspace REST API +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.path = ks/ws/rest + +๐Ÿ”’ Section 4: Secret Leak Scan + +โœ… No leaked secrets found + +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +Summary: 334/334 checks passed, 0 failures +๐Ÿ”ง Override โ€” Generate target environment override file +โœ… Override file written: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts/.overrides.yaml +VERBOSE: Removing the imported "Resolve-ApiopsInvocation" function. +VERBOSE: Removing the imported "Protect-SubscriptionId" function. +VERBOSE: Removing the imported "Protect-Secret" function. +VERBOSE: Removing the imported "Protect-ResourceGroupName" function. +VERBOSE: Removing the imported "Protect-LogLine" function. +VERBOSE: Removing the imported "Protect-Identifier" function. +VERBOSE: Removing the imported "Protect-ApimName" function. +VERBOSE: Removing the imported "apiops" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Removing the imported "Set-ScriptLogPreferences" function. +VERBOSE: Removing the imported "Get-BoundParameterValueOrNull" function. +VERBOSE: Removing the imported "Assert-AzCliLoggedIn" function. +VERBOSE: Removing the imported "Add-ArgumentIfSet" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Removing the imported "Get-ApiopsAuthArgs" function. +VERBOSE: Removing the imported "Get-ApiopsLogLevel" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ApiopsCli.psm1'. +VERBOSE: Importing function 'Get-ApiopsAuthArgs'. +VERBOSE: Importing function 'Get-ApiopsLogLevel'. +๐Ÿ“ค Publish โ€” Publish artifacts to target APIM +๐Ÿงน --delete-unmatched enabled โ€” unmatched target resources will be removed +PUT workspace/src-workspace +PUT namedvalue/src-nv-keyvault +PUT namedvalue/src-nv-plain +PUT namedvalue/src-nv-secret +PUT namedvalue/workspace:src-workspace/src-ws-nv-plain +PUT backend/src-backend-circuit-breaker +PUT backend/src-backend-function +PUT backend/src-backend-http +PUT backend/src-backend-logicapp +PUT backend/src-backend-mcp-learn +PUT group/administrators +PUT group/developers +PUT group/guests +PUT group/src-group-internal +PUT logger/azuremonitor +PUT logger/src-logger-appinsights +PUT logger/src-logger-eventhub +PUT policyfragment/src-fragment-cors +PUT policyfragment/src-fragment-ratelimit +PUT globalschema/src-schema-json +PUT tag/pet +PUT tag/src-tag-env +PUT tag/src-tag-team +PUT tag/store +PUT tag/user +PUT versionset/src-versionset-urlpath +PUT backend/workspace:src-workspace/src-ws-backend-http +PUT group/workspace:src-workspace/src-ws-group-internal +PUT tag/workspace:src-workspace/src-ws-tag +PUT backend/src-backend-pool +PUT api/src-a2a-runtime-mock +PUT api/src-a2a-weather-agent +PUT api/src-graphql-passthrough +PUT api/src-graphql-synthetic +PUT api/src-mcp-existing-server +PUT api/src-rest-openapi +PUT api/src-rest-petstore-v3 +PUT api/src-rest-revisioned +PUT api/src-rest-swagger +PUT api/src-rest-versioned-v1 +PUT api/src-soap-passthrough +PUT api/src-websocket +PUT diagnostic/applicationinsights +PUT diagnostic/azuremonitor +PUT servicepolicy +PUT product/src-product-premium +PUT product/src-product-starter +PUT api/workspace:src-workspace/src-ws-api-rest +PUT product/workspace:src-workspace/src-ws-product +PUT api/src-mcp-from-api +PUT api/src-mcp-todos +SKIP subscription/master +PUT subscription/src-sub-all-apis +PUT subscription/src-sub-product +DELETE api/tgt-unmatched-revisioned;rev=2 +DELETE api/tgt-unmatched-revisioned +2026-07-02T17:24:14.927Z [ERROR] Failed to delete namedValues/6a469e80e15d3120e035315f: [{"name":"HttpError","message":"HTTP 400: {\"error\":{\"code\":\"ValidationError\",\"message\":\"The Api Management Property '6a469e80e15d3120e035315f' is used by the following entities:\\r\\n/loggers/src-logger-appinsights\\r\\n\",\"details\":null}}","stack":"HttpError: HTTP 400: {\"error\":{\"code\":\"ValidationError\",\"message\":\"The Api Management Property '6a469e80e15d3120e035315f' is used by the following entities:\\r\\n/loggers/src-logger-appinsights\\r\\n\",\"details\":null}}\n at ApimClient.request (file:///workspaces/apiops-cli/dist/clients/apim-client.js:176:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async ApimClient.deleteResource (file:///workspaces/apiops-cli/dist/clients/apim-client.js:379:30)\n at async deleteDescriptor (file:///workspaces/apiops-cli/dist/services/publish-service.js:548:25)\n at async ParallelRunner.executeTask (file:///workspaces/apiops-cli/dist/lib/parallel-runner.js:54:27)\n at async Promise.allSettled (index 2)\n at async ParallelRunner.runAll (file:///workspaces/apiops-cli/dist/lib/parallel-runner.js:49:9)\n at async deleteDescriptorsInParallel (file:///workspaces/apiops-cli/dist/services/publish-service.js:529:25)\n at async deleteTier (file:///workspaces/apiops-cli/dist/services/publish-service.js:493:31)\n at async executeDeletesForDescriptors (file:///workspaces/apiops-cli/dist/services/publish-service.js:476:29)"}] +2026-07-02T17:24:14.959Z [ERROR] Failed to delete namedValues/6a469e80c3c8a82b4430066f: [{"name":"HttpError","message":"HTTP 400: {\"error\":{\"code\":\"ValidationError\",\"message\":\"The Api Management Property '6a469e80c3c8a82b4430066f' is used by the following entities:\\r\\n/loggers/src-logger-eventhub\\r\\n\",\"details\":null}}","stack":"HttpError: HTTP 400: {\"error\":{\"code\":\"ValidationError\",\"message\":\"The Api Management Property '6a469e80c3c8a82b4430066f' is used by the following entities:\\r\\n/loggers/src-logger-eventhub\\r\\n\",\"details\":null}}\n at ApimClient.request (file:///workspaces/apiops-cli/dist/clients/apim-client.js:176:27)\n at process.processTicksAndRejections (node:internal/process/task_queues:105:5)\n at async ApimClient.deleteResource (file:///workspaces/apiops-cli/dist/clients/apim-client.js:379:30)\n at async deleteDescriptor (file:///workspaces/apiops-cli/dist/services/publish-service.js:548:25)\n at async ParallelRunner.executeTask (file:///workspaces/apiops-cli/dist/lib/parallel-runner.js:54:27)\n at async Promise.allSettled (index 1)\n at async ParallelRunner.runAll (file:///workspaces/apiops-cli/dist/lib/parallel-runner.js:49:9)\n at async deleteDescriptorsInParallel (file:///workspaces/apiops-cli/dist/services/publish-service.js:529:25)\n at async deleteTier (file:///workspaces/apiops-cli/dist/services/publish-service.js:493:31)\n at async executeDeletesForDescriptors (file:///workspaces/apiops-cli/dist/services/publish-service.js:476:29)"}] +DELETE backend/tgt-unmatched-backend +DELETE namedvalue/tgt-unmatched-nv +ERROR DELETE namedvalue/6a469e80c3c8a82b4430066f: HTTP 400: {"error":{"code":"ValidationError","message":"The Api Management Property '6a469e80c3c8a82b4430066f' is used by the following entities:\r\n/loggers/src-logger-eventhub\r\n","details":null}} +ERROR DELETE namedvalue/6a469e80e15d3120e035315f: HTTP 400: {"error":{"code":"ValidationError","message":"The Api Management Property '6a469e80e15d3120e035315f' is used by the following entities:\r\n/loggers/src-logger-appinsights\r\n","details":null}} + +--- Summary --- +54 creates/updates, 6 deletes, 1 skipped +2 errors +โŒ Publish failed (exit code 1) +๐Ÿงน PHASE 7 โ€” Teardown + Deleting bvt-...-wrc-src-rg... + Deleting bvt-...-wrc-tgt-rg... + โณ Waiting for resource group deletions to complete for hard-delete... + ... waiting for deletion of bvt-...-wrc-src-rg (0s elapsed) + ... waiting for deletion of bvt-...-wrc-src-rg (30s elapsed) + ... waiting for deletion of bvt-...-wrc-src-rg (60s elapsed) + ... waiting for deletion of bvt-...-wrc-src-rg (90s elapsed) +True +True +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...src-apim... +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...tgt-apim... +๐Ÿงน Teardown complete (hard-delete) diff --git a/tests/integration/all-resource-types/_runlogs/seq-delete-unmatched.log b/tests/integration/all-resource-types/_runlogs/seq-delete-unmatched.log new file mode 100644 index 00000000..4f911f4c --- /dev/null +++ b/tests/integration/all-resource-types/_runlogs/seq-delete-unmatched.log @@ -0,0 +1,2131 @@ +nohup: ignoring input +๐Ÿ” Azure CLI authenticated: Adhoc Testing Subscription () +๐Ÿš€ PHASE 1 โ€” Deploy source and target APIM instances (parallel) + [SRC] ********************** + [SRC] PowerShell transcript start + [SRC] Start time: 20260702173510 + [SRC] ********************** + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [SRC] VERBOSE: Importing function 'apiops'. + [SRC] VERBOSE: Importing function 'Protect-ApimName'. + [SRC] VERBOSE: Importing function 'Protect-Identifier'. + [SRC] VERBOSE: Importing function 'Protect-LogLine'. + [SRC] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [SRC] VERBOSE: Importing function 'Protect-Secret'. + [SRC] VERBOSE: Importing function 'Protect-SubscriptionId'. + [SRC] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [SRC] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [SRC] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [SRC] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [SRC] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [SRC] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [SRC] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [SRC] VERBOSE: Importing function 'Wait-ApimActivation'. + [SRC] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [SRC] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [SRC] ๐Ÿ” Verifying Azure CLI authentication... + [SRC] Subscription: Adhoc Testing Subscription () + [SRC] ๐Ÿ“‹ Registering required resource providers... + [TGT] ********************** + [TGT] PowerShell transcript start + [TGT] Start time: 20260702173510 + [TGT] ********************** + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. + [TGT] VERBOSE: Importing function 'apiops'. + [TGT] VERBOSE: Importing function 'Protect-ApimName'. + [TGT] VERBOSE: Importing function 'Protect-Identifier'. + [TGT] VERBOSE: Importing function 'Protect-LogLine'. + [TGT] VERBOSE: Importing function 'Protect-ResourceGroupName'. + [TGT] VERBOSE: Importing function 'Protect-Secret'. + [TGT] VERBOSE: Importing function 'Protect-SubscriptionId'. + [TGT] VERBOSE: Importing function 'Resolve-ApiopsInvocation'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. + [TGT] VERBOSE: Importing function 'Add-ArgumentIfSet'. + [TGT] VERBOSE: Importing function 'Assert-AzCliLoggedIn'. + [TGT] VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. + [TGT] VERBOSE: Importing function 'Set-ScriptLogPreferences'. + [TGT] VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. + [TGT] VERBOSE: Importing function 'New-ResourceGroupDeployment'. + [TGT] VERBOSE: Importing function 'Wait-ApimActivation'. + [TGT] VERBOSE: Importing function 'Wait-ApimApiQueryable'. + [TGT] VERBOSE: Importing function 'Write-DeploymentFailureDetails'. + [TGT] Starting target APIM deployment... + [TGT] Subscription: Adhoc Testing Subscription () + [TGT] Resource Group: bvt-...-yau-tgt-rg + [TGT] SKU: StandardV2 + [TGT] Location: centralus + [TGT] Log Level: Verbose + [TGT] Creating resource group... + [SRC] Microsoft.ApiManagement already registered + [SRC] Microsoft.Insights already registered + [SRC] Microsoft.OperationalInsights already registered + [TGT] Deploying target-apim.bicep (this takes 30-45 minutes)... + [SRC] Microsoft.EventHub already registered + [SRC] Microsoft.KeyVault already registered + [SRC] Microsoft.AlertsManagement already registered + [SRC] Waiting for provider registration to complete... + [SRC] โœ… Resource providers ready + [SRC] ๐Ÿ“ฆ Ensuring resource group 'bvt-...-yau-src-rg' exists in 'centralus'... + [SRC] ๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + [SRC] APIM Name: (auto-generated from resource group) + [SRC] SKU: StandardV2 + [TGT] INFO: Command ran in 105.524 seconds (init: 0.449, invoke: 105.075) + [TGT] INFO: Command ran in 105.524 seconds (init: 0.449, invoke: 105.075) + [TGT] โœ… Target APIM deployed successfully: bvt...tgt-apim + [TGT] ๐ŸŒฑ Seeding unmatched resources into target APIM for --delete-unmatched coverage... + [TGT] Waiting for APIM 'bvt...tgt-apim' to finish Activating (timeout 2700s)... + [TGT] provisioningState: Succeeded + [TGT] INFO: Command ran in 38.777 seconds (init: 0.117, invoke: 38.660) + [TGT] INFO: Command ran in 38.777 seconds (init: 0.117, invoke: 38.660) + [TGT] โœ… Unmatched resource seeding complete + [TGT] ********************** + [TGT] PowerShell transcript end + [TGT] End time: 20260702173744 + [TGT] ********************** + [SRC] INFO: Command ran in 166.127 seconds (init: 0.080, invoke: 166.047) + [SRC] INFO: Command ran in 166.127 seconds (init: 0.080, invoke: 166.047) + [SRC] Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + [SRC] provisioningState: Succeeded + [SRC] Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... + [SRC] Applying post-activation APIM resources... +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +๐Ÿ” Verifying Azure CLI authentication... + Subscription: Adhoc Testing Subscription () +๐Ÿ“‹ Registering required resource providers... + Microsoft.ApiManagement already registered + Microsoft.Insights already registered + Microsoft.OperationalInsights already registered + Microsoft.EventHub already registered + Microsoft.KeyVault already registered + Microsoft.AlertsManagement already registered + Waiting for provider registration to complete... + โœ… Resource providers ready +๐Ÿ“ฆ Ensuring resource group 'bvt-...-yau-src-rg' exists in 'centralus'... +๐Ÿš€ Deploying source-apim.bicep (this takes 30-45 minutes for APIM)... + APIM Name: (auto-generated from resource group) + SKU: StandardV2 + +INFO: Command ran in 166.127 seconds (init: 0.080, invoke: 166.047) +Waiting for APIM 'bvt...src-apim' to finish Activating (timeout 2700s)... + provisioningState: Succeeded +Waiting for APIM API 'src-mcp-existing-server' to become queryable in 'bvt...src-apim' (timeout 300s)... +Applying post-activation APIM resources... +INFO: Command ran in 39.832 seconds (init: 0.109, invoke: 39.723) + +============================================================ +โœ… Kitchen Sink APIM deployed successfully! +============================================================ + +APIOps CLI extract command: + + npx apiops extract \ + --subscription-id \ + --resource-group bvt-...-yau-src-rg \ + --service-name bvt...src-apim \ + --output-dir ./extracted \ + --log-level warn + +Gateway URL: https://bvt-20260702-173508yau-src-apim.azure-api.net +Workspace deployed: True +Gateway deployed: False +SKU: StandardV2 + + โœ… Source deployed: bvt...src-apim +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/DeploymentOps.psm1'. +VERBOSE: Importing function 'New-ResourceGroupDeployment'. +VERBOSE: Importing function 'Wait-ApimActivation'. +VERBOSE: Importing function 'Wait-ApimApiQueryable'. +VERBOSE: Importing function 'Write-DeploymentFailureDetails'. +Starting target APIM deployment... +Subscription: Adhoc Testing Subscription () +Resource Group: bvt-...-yau-tgt-rg +SKU: StandardV2 +Location: centralus +Log Level: Verbose +Creating resource group... +Deploying target-apim.bicep (this takes 30-45 minutes)... +INFO: Command ran in 105.524 seconds (init: 0.449, invoke: 105.075) +โœ… Target APIM deployed successfully: bvt...tgt-apim +๐ŸŒฑ Seeding unmatched resources into target APIM for --delete-unmatched coverage... +Waiting for APIM 'bvt...tgt-apim' to finish Activating (timeout 2700s)... + provisioningState: Succeeded +INFO: Command ran in 38.777 seconds (init: 0.117, invoke: 38.660) +โœ… Unmatched resource seeding complete + โœ… Target deployed: bvt...tgt-apim + โœ… source-apim-post-activation deployment confirmed +โœ… PHASE 1 complete +๐Ÿ“ฅ Extract โ€” Extract artifacts from source APIM + Cleaned previous extract output +Extracted 1 Workspace(s) +Extracted 5 NamedValue(s) +Extracted 5 Tag(s) +Extracted 1 VersionSet(s) +Extracted 6 Backend(s) +Extracted 3 Logger(s) +Extracted 4 Group(s) +Extracted 2 PolicyFragment(s) +Extracted 1 GlobalSchema(s) +Extracted 2 Diagnostic(s) +Extracted 2 Product(s) +Extracted 15 Api(s) +Extracted 3 Subscription(s) + API "src-a2a-runtime-mock": spec, 3 ops + API "src-rest-openapi": spec, 4 ops + API "src-rest-swagger": spec, 20 ops + API "src-rest-petstore-v3": spec, 19 ops + API "src-rest-revisioned": spec, 4 ops, 1 revisions + API "src-rest-revisioned;rev=2": spec, 4 ops + API "src-rest-versioned-v1": spec, 1 ops + API "src-soap-passthrough": spec, 1 ops + API "src-websocket": 1 ops +Workspace "src-workspace": 9 resources + +Total: 159 resources extracted, 0 errors +/workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +๐Ÿ”Ž Extract โ€” Validate extracted artifact structure +๐Ÿ”Ž Artifact Structure Validation +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +ExtractedDir: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts +ManifestFile: /workspaces/apiops-cli/tests/integration/all-resource-types/expected-structure.json +SkuName: StandardV2 + +๐Ÿ“ Section 1: Service-Level Artifacts + +โœ… Service artifact: policy.xml +โœ… Content [service/policy.xml]: contains 'cors' +โœ… Content [service/policy.xml]: contains 'allowed-origins' +โœ… Content [service/policy.xml]: contains 'developer.contoso.com' + +๐Ÿ“‚ Section 2: Resource Directories + +โœ… Directory: namedValues +โœ… Count: namedValues >= 3 +โœ… Resource: namedValues/src-nv-plain +โœ… File: namedValues/src-nv-plain/namedValueInformation.json +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.displayName = src-nv-plain +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.value = plain-text-value +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.tags = [all-resources, plain] +โœ… Field [namedValues/src-nv-plain/namedValueInformation.json]: properties.secret = False +โœ… Resource: namedValues/src-nv-secret +โœ… File: namedValues/src-nv-secret/namedValueInformation.json +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.displayName = src-nv-secret +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-secret/namedValueInformation.json]: properties.tags = [all-resources, secret] +โœ… Resource: namedValues/src-nv-keyvault +โœ… File: namedValues/src-nv-keyvault/namedValueInformation.json +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.displayName = src-nv-keyvault +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.secret exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.keyVault.secretIdentifier exists +โœ… Field [namedValues/src-nv-keyvault/namedValueInformation.json]: properties.tags = [all-resources, keyvault] +โœ… Directory: tags +โœ… Count: tags >= 2 +โœ… Resource: tags/src-tag-env +โœ… File: tags/src-tag-env/tagInformation.json +โœ… Field [tags/src-tag-env/tagInformation.json]: properties.displayName = src-tag-env +โœ… Resource: tags/src-tag-team +โœ… File: tags/src-tag-team/tagInformation.json +โœ… Field [tags/src-tag-team/tagInformation.json]: properties.displayName = src-tag-team + โญ๏ธ Skipping gateways (SKU: supported in Developer, Premium) +โœ… Directory: versionSets +โœ… Count: versionSets >= 1 +โœ… Resource: versionSets/src-versionset-urlpath +โœ… File: versionSets/src-versionset-urlpath/versionSetInformation.json +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.displayName = Kitchen Sink Versioned API +โœ… Field [versionSets/src-versionset-urlpath/versionSetInformation.json]: properties.versioningScheme = Segment +โœ… Directory: backends +โœ… Count: backends >= 6 +โœ… Resource: backends/src-backend-http +โœ… File: backends/src-backend-http/backendInformation.json +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.url = https://src-backend.example.com/api +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-http/backendInformation.json]: properties.tls.validateCertificateChain exists +โœ… Resource: backends/src-backend-function +โœ… File: backends/src-backend-function/backendInformation.json +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.url = https://src-func-app.azurewebsites.net/api +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.protocol = http +โœ… Field [backends/src-backend-function/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-logicapp +โœ… File: backends/src-backend-logicapp/backendInformation.json +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.url = https://src-logic-app.azurewebsites.net/api +โœ… Field [backends/src-backend-logicapp/backendInformation.json]: properties.resourceId exists +โœ… Resource: backends/src-backend-circuit-breaker +โœ… File: backends/src-backend-circuit-breaker/backendInformation.json +โœ… Field [backends/src-backend-circuit-breaker/backendInformation.json]: properties.circuitBreaker.rules exists +โœ… Resource: backends/src-backend-pool +โœ… File: backends/src-backend-pool/backendInformation.json +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.type = Pool +โœ… Field [backends/src-backend-pool/backendInformation.json]: properties.pool.services exists +โœ… Directory: loggers +โœ… Count: loggers >= 2 +โœ… Resource: loggers/src-logger-appinsights +โœ… File: loggers/src-logger-appinsights/loggerInformation.json +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.loggerType = applicationInsights +โœ… Field [loggers/src-logger-appinsights/loggerInformation.json]: properties.credentials.instrumentationKey exists +โœ… Resource: loggers/src-logger-eventhub +โœ… File: loggers/src-logger-eventhub/loggerInformation.json +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.loggerType = azureEventHub +โœ… Field [loggers/src-logger-eventhub/loggerInformation.json]: properties.credentials.name = src-apim-logs +โœ… Directory: groups +โœ… Count: groups >= 1 +โœ… Resource: groups/src-group-internal +โœ… File: groups/src-group-internal/groupInformation.json +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Internal Group +โœ… Field [groups/src-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: diagnostics +โœ… Count: diagnostics >= 1 +โœ… Resource: diagnostics/applicationinsights +โœ… File: diagnostics/applicationinsights/diagnosticInformation.json +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.loggerId exists +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.alwaysLog = allErrors +โœ… Field [diagnostics/applicationinsights/diagnosticInformation.json]: properties.sampling.samplingType = fixed +โœ… Directory: policyFragments +โœ… Count: policyFragments >= 2 +โœ… Resource: policyFragments/src-fragment-cors +โœ… File: policyFragments/src-fragment-cors/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-cors/policyFragmentInformation.json]: properties.description = CORS policy fragment +โœ… Resource: policyFragments/src-fragment-ratelimit +โœ… File: policyFragments/src-fragment-ratelimit/policyFragmentInformation.json +โœ… Field [policyFragments/src-fragment-ratelimit/policyFragmentInformation.json]: properties.description = Rate limit policy fragment +โœ… Directory: schemas +โœ… Count: schemas >= 1 +โœ… Resource: schemas/src-schema-json +โœ… File: schemas/src-schema-json/schemaInformation.json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.schemaType = json +โœ… Field [schemas/src-schema-json/schemaInformation.json]: properties.description = Kitchen sink JSON schema + โญ๏ธ Skipping policyRestrictions (SKU: supported in Developer, Premium) +โœ… Directory: products +โœ… Count: products >= 2 +โœ… Resource: products/src-product-starter +โœ… File: products/src-product-starter/productInformation.json +โœ… File: products/src-product-starter/apis.json +โœ… File: products/src-product-starter/groups.json +โœ… Field [products/src-product-starter/productInformation.json]: properties.displayName = Kitchen Sink Starter +โœ… Field [products/src-product-starter/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-starter/productInformation.json]: properties.approvalRequired = False +โœ… Field [products/src-product-starter/productInformation.json]: properties.state = published +โœ… Array length [products/src-product-starter/apis.json]: >= 2 +โœ… Array contains [products/src-product-starter/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-starter/apis.json]: 'src-soap-passthrough' +โœ… Array length [products/src-product-starter/groups.json]: >= 1 +โœ… Array contains [products/src-product-starter/groups.json]: 'developers' + [info] products/src-product-starter/tags: ProductTag is embedded in productInformation.json, not separate files +โœ… Resource: products/src-product-premium +โœ… File: products/src-product-premium/productInformation.json +โœ… File: products/src-product-premium/policy.xml +โœ… File: products/src-product-premium/apis.json +โœ… File: products/src-product-premium/groups.json +โœ… Field [products/src-product-premium/productInformation.json]: properties.displayName = Kitchen Sink Premium +โœ… Field [products/src-product-premium/productInformation.json]: properties.subscriptionRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.approvalRequired exists +โœ… Field [products/src-product-premium/productInformation.json]: properties.state = published +โœ… Content [products/src-product-premium/policy.xml]: contains 'rate-limit' +โœ… Content [products/src-product-premium/policy.xml]: contains '1000' +โœ… Array length [products/src-product-premium/apis.json]: >= 2 +โœ… Array contains [products/src-product-premium/apis.json]: 'src-rest-openapi' +โœ… Array contains [products/src-product-premium/apis.json]: 'src-graphql-synthetic' +โœ… Array length [products/src-product-premium/groups.json]: >= 1 +โœ… Array contains [products/src-product-premium/groups.json]: 'src-group-internal' +โœ… Directory: apis +โœ… Count: apis >= 13 +โœ… Resource: apis/src-rest-openapi +โœ… File: apis/src-rest-openapi/apiInformation.json +โœ… File: apis/src-rest-openapi/policy.xml +โœ… File: apis/src-rest-openapi/specification.yaml +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.displayName = KS REST OpenAPI +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.path = ks/rest +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-openapi/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'set-header' +โœ… Content [apis/src-rest-openapi/policy.xml]: contains 'X-all-resources' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-openapi/specification.yaml]: contains 'KS REST OpenAPI' +โœ… Directory: apis/src-rest-openapi/operations +โœ… Count: apis/src-rest-openapi/operations >= 1 +โœ… Directory: apis/src-rest-openapi/tags +โœ… Count: apis/src-rest-openapi/tags >= 2 +โœ… Resource: apis/src-rest-openapi/tags/src-tag-env +โœ… File: apis/src-rest-openapi/tags/src-tag-env/tagInformation.json +โœ… Resource: apis/src-rest-openapi/tags/src-tag-team +โœ… File: apis/src-rest-openapi/tags/src-tag-team/tagInformation.json +โœ… Directory: apis/src-rest-openapi/diagnostics +โœ… Count: apis/src-rest-openapi/diagnostics >= 1 +โœ… Resource: apis/src-rest-openapi/diagnostics/applicationinsights +โœ… File: apis/src-rest-openapi/diagnostics/applicationinsights/diagnosticInformation.json +โœ… Directory: apis/src-rest-openapi/schemas +โœ… Count: apis/src-rest-openapi/schemas >= 1 +โœ… Resource: apis/src-rest-openapi/schemas/src-rest-schema-item +โœ… File: apis/src-rest-openapi/schemas/src-rest-schema-item/schemaInformation.json +โœ… Directory: apis/src-rest-openapi/tagDescriptions +โœ… Count: apis/src-rest-openapi/tagDescriptions >= 1 +โœ… Resource: apis/src-rest-openapi/tagDescriptions/src-tag-env +โœ… File: apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json +โœ… Field [apis/src-rest-openapi/tagDescriptions/src-tag-env/tagDescriptionInformation.json]: properties.description = Environment tag โ€” indicates deployment environment +โœ… Resource: apis/src-rest-swagger +โœ… File: apis/src-rest-swagger/apiInformation.json +โœ… File: apis/src-rest-swagger/specification.json +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.displayName = KS REST Petstore v2 +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.path = ks/rest-swagger +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-swagger/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'swagger' +โœ… Content [apis/src-rest-swagger/specification.json]: contains 'Petstore' +โœ… Resource: apis/src-rest-petstore-v3 +โœ… File: apis/src-rest-petstore-v3/apiInformation.json +โœ… File: apis/src-rest-petstore-v3/specification.yaml +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.displayName = KS REST Petstore v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.path = ks/rest-petstore-v3 +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-rest-petstore-v3/apiInformation.json]: properties.subscriptionRequired = False +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'openapi:' +โœ… Content [apis/src-rest-petstore-v3/specification.yaml]: contains 'Petstore' +โœ… Resource: apis/src-soap-passthrough +โœ… File: apis/src-soap-passthrough/apiInformation.json +โœ… File: apis/src-soap-passthrough/specification.wsdl +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.displayName = KS SOAP Pass-Through +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.path = ks/soap +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-soap-passthrough/apiInformation.json]: properties.type = soap +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'tempuri.org' +โœ… Content [apis/src-soap-passthrough/specification.wsdl]: contains 'wsdl' +โœ… Resource: apis/src-graphql-synthetic +โœ… File: apis/src-graphql-synthetic/apiInformation.json +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.displayName = KS GraphQL Synthetic +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.path = ks/graphql +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.protocols = [https] +โœ… Field [apis/src-graphql-synthetic/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-synthetic/schemas +โœ… Count: apis/src-graphql-synthetic/schemas >= 1 +โœ… Directory: apis/src-graphql-synthetic/resolvers +โœ… Count: apis/src-graphql-synthetic/resolvers >= 1 +โœ… Resource: apis/src-graphql-synthetic/resolvers/src-resolver-hero +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json +โœ… File: apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml +โœ… Field [apis/src-graphql-synthetic/resolvers/src-resolver-hero/resolverInformation.json]: properties.path = Query/hero +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-data-source' +โœ… Content [apis/src-graphql-synthetic/resolvers/src-resolver-hero/policy.xml]: contains 'http-request' +โœ… Resource: apis/src-graphql-passthrough +โœ… File: apis/src-graphql-passthrough/apiInformation.json +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.displayName = KS GraphQL Pass-Through +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.path = ks/graphql-pt +โœ… Field [apis/src-graphql-passthrough/apiInformation.json]: properties.type = graphql +โœ… Directory: apis/src-graphql-passthrough/schemas +โœ… Count: apis/src-graphql-passthrough/schemas >= 1 +โœ… Resource: apis/src-websocket +โœ… File: apis/src-websocket/apiInformation.json +โœ… Field [apis/src-websocket/apiInformation.json]: properties.displayName = KS WebSocket +โœ… Field [apis/src-websocket/apiInformation.json]: properties.path = ks/ws +โœ… Field [apis/src-websocket/apiInformation.json]: properties.protocols = [wss] +โœ… Field [apis/src-websocket/apiInformation.json]: properties.type = websocket +โœ… Resource: apis/src-rest-versioned-v1 +โœ… File: apis/src-rest-versioned-v1/apiInformation.json +โœ… File: apis/src-rest-versioned-v1/specification.yaml +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.displayName = KS REST Versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.path = ks/versioned +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersion = v1 +โœ… Field [apis/src-rest-versioned-v1/apiInformation.json]: properties.apiVersionSetId exists +โœ… Resource: apis/src-rest-revisioned +โœ… File: apis/src-rest-revisioned/apiInformation.json +โœ… File: apis/src-rest-revisioned/specification.yaml +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.path = ks/revisioned +โœ… Field [apis/src-rest-revisioned/apiInformation.json]: properties.isCurrent exists +โœ… Directory: apis/src-rest-revisioned/releases +โœ… Count: apis/src-rest-revisioned/releases >= 1 +โœ… Resource: apis/src-rest-revisioned/releases/src-release-1 +โœ… File: apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json +โœ… Field [apis/src-rest-revisioned/releases/src-release-1/releaseInformation.json]: properties.notes = Initial release for BVT testing +โœ… Resource: apis/src-rest-revisioned;rev=2 +โœ… File: apis/src-rest-revisioned;rev=2/apiInformation.json +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.displayName = KS REST Revisioned +โœ… Field [apis/src-rest-revisioned;rev=2/apiInformation.json]: properties.apiRevisionDescription = Second revision for BVT testing +โœ… Resource: apis/src-mcp-from-api +โœ… File: apis/src-mcp-from-api/apiInformation.json +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.displayName = KS MCP from Existing API +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.path = ks/mcp-from-api +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-from-api/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-mcp-existing-server +โœ… File: apis/src-mcp-existing-server/apiInformation.json +โœ… File: apis/src-mcp-existing-server/policy.xml +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.displayName = KS MCP Existing Server Demo +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.path = ks/mcp-existing +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.backendId = src-backend-mcp-learn +โœ… Field [apis/src-mcp-existing-server/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Resource: apis/src-mcp-todos +โœ… File: apis/src-mcp-todos/apiInformation.json +โœ… File: apis/src-mcp-todos/policy.xml +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.displayName = KS MCP Todos Server +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.path = ks/mcp-todos +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.type = mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.subscriptionRequired = False +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpProperties.endpoints.mcp.uriTemplate = /mcp +โœ… Field [apis/src-mcp-todos/apiInformation.json]: properties.mcpTools exists +โœ… Resource: apis/src-a2a-weather-agent +โœ… File: apis/src-a2a-weather-agent/apiInformation.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.displayName = KS A2A Weather Agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.path = ks/a2a-managed +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.type = a2a +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.agent.id = src-a2a-weather-agent +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.a2aProperties.agentCardPath = /.well-known/agent-card.json +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.jsonRpcProperties.path = /ks/a2a-weather +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionRequired exists +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.header = Ocp-Apim-Subscription-Key +โœ… Field [apis/src-a2a-weather-agent/apiInformation.json]: properties.subscriptionKeyParameterNames.query = subscription-key +โœ… Directory: subscriptions +โœ… Count: subscriptions >= 2 +โœ… Resource: subscriptions/src-sub-all-apis +โœ… File: subscriptions/src-sub-all-apis/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.displayName = Kitchen Sink All APIs Subscription +โœ… Field [subscriptions/src-sub-all-apis/subscriptionInformation.json]: properties.state = active +โœ… Resource: subscriptions/src-sub-product +โœ… File: subscriptions/src-sub-product/subscriptionInformation.json +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.displayName = Kitchen Sink Product Subscription +โœ… Field [subscriptions/src-sub-product/subscriptionInformation.json]: properties.state = active + +๐Ÿข Section 3: Workspaces + +โœ… Workspace: src-workspace +โœ… Directory: workspaces/src-workspace/namedValues +โœ… Count: workspaces/src-workspace/namedValues >= 1 +โœ… Resource: workspaces/src-workspace/namedValues/src-ws-nv-plain +โœ… File: workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.displayName = src-ws-nv-plain +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.value = workspace-scoped-value +โœ… Field [workspaces/src-workspace/namedValues/src-ws-nv-plain/namedValueInformation.json]: properties.tags = [workspace] +โœ… Directory: workspaces/src-workspace/tags +โœ… Count: workspaces/src-workspace/tags >= 1 +โœ… Resource: workspaces/src-workspace/tags/src-ws-tag +โœ… File: workspaces/src-workspace/tags/src-ws-tag/tagInformation.json +โœ… Field [workspaces/src-workspace/tags/src-ws-tag/tagInformation.json]: properties.displayName = src-ws-tag +โœ… Directory: workspaces/src-workspace/groups +โœ… Count: workspaces/src-workspace/groups >= 1 +โœ… Resource: workspaces/src-workspace/groups/src-ws-group-internal +โœ… File: workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.displayName = Kitchen Sink Workspace Group +โœ… Field [workspaces/src-workspace/groups/src-ws-group-internal/groupInformation.json]: properties.type = custom +โœ… Directory: workspaces/src-workspace/backends +โœ… Count: workspaces/src-workspace/backends >= 1 +โœ… Resource: workspaces/src-workspace/backends/src-ws-backend-http +โœ… File: workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.description = Workspace-scoped HTTP backend +โœ… Field [workspaces/src-workspace/backends/src-ws-backend-http/backendInformation.json]: properties.url = https://src-ws-backend.example.com/api +โœ… Directory: workspaces/src-workspace/products +โœ… Count: workspaces/src-workspace/products >= 1 +โœ… Resource: workspaces/src-workspace/products/src-ws-product +โœ… File: workspaces/src-workspace/products/src-ws-product/productInformation.json +โœ… File: workspaces/src-workspace/products/src-ws-product/apis.json +โœ… File: workspaces/src-workspace/products/src-ws-product/tags.json +โœ… File: workspaces/src-workspace/products/src-ws-product/groups.json +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.displayName = Workspace Product +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.subscriptionRequired = False +โœ… Field [workspaces/src-workspace/products/src-ws-product/productInformation.json]: properties.state = published +โœ… Array length [workspaces/src-workspace/products/src-ws-product/groups.json]: >= 2 +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'administrators' +โœ… Array contains [workspaces/src-workspace/products/src-ws-product/groups.json]: 'src-ws-group-internal' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='administrators' scope='service' +โœ… Array entry [workspaces/src-workspace/products/src-ws-product/groups.json]: name='src-ws-group-internal' scope='workspace' +โœ… Directory: workspaces/src-workspace/apis +โœ… Count: workspaces/src-workspace/apis >= 1 +โœ… Resource: workspaces/src-workspace/apis/src-ws-api-rest +โœ… File: workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.displayName = Workspace REST API +โœ… Field [workspaces/src-workspace/apis/src-ws-api-rest/apiInformation.json]: properties.path = ks/ws/rest + +๐Ÿ”’ Section 4: Secret Leak Scan + +โœ… No leaked secrets found + +โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ” +Summary: 334/334 checks passed, 0 failures +๐Ÿ”ง Override โ€” Generate target environment override file +โœ… Override file written: /workspaces/apiops-cli/tests/integration/all-resource-types/phases/extracted-artifacts/.overrides.yaml +VERBOSE: Removing the imported "Resolve-ApiopsInvocation" function. +VERBOSE: Removing the imported "Protect-SubscriptionId" function. +VERBOSE: Removing the imported "Protect-Secret" function. +VERBOSE: Removing the imported "Protect-ResourceGroupName" function. +VERBOSE: Removing the imported "Protect-LogLine" function. +VERBOSE: Removing the imported "Protect-Identifier" function. +VERBOSE: Removing the imported "Protect-ApimName" function. +VERBOSE: Removing the imported "apiops" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/LogMasking.psm1'. +VERBOSE: Importing function 'apiops'. +VERBOSE: Importing function 'Protect-ApimName'. +VERBOSE: Importing function 'Protect-Identifier'. +VERBOSE: Importing function 'Protect-LogLine'. +VERBOSE: Importing function 'Protect-ResourceGroupName'. +VERBOSE: Importing function 'Protect-Secret'. +VERBOSE: Importing function 'Protect-SubscriptionId'. +VERBOSE: Importing function 'Resolve-ApiopsInvocation'. +VERBOSE: Removing the imported "Set-ScriptLogPreferences" function. +VERBOSE: Removing the imported "Get-BoundParameterValueOrNull" function. +VERBOSE: Removing the imported "Assert-AzCliLoggedIn" function. +VERBOSE: Removing the imported "Add-ArgumentIfSet" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ScriptRuntime.psm1'. +VERBOSE: Importing function 'Add-ArgumentIfSet'. +VERBOSE: Importing function 'Assert-AzCliLoggedIn'. +VERBOSE: Importing function 'Get-BoundParameterValueOrNull'. +VERBOSE: Importing function 'Set-ScriptLogPreferences'. +VERBOSE: Removing the imported "Get-ApiopsAuthArgs" function. +VERBOSE: Removing the imported "Get-ApiopsLogLevel" function. +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/ApiopsCli.psm1'. +VERBOSE: Importing function 'Get-ApiopsAuthArgs'. +VERBOSE: Importing function 'Get-ApiopsLogLevel'. +๐Ÿ“ค Publish โ€” Publish artifacts to target APIM +๐Ÿงน --delete-unmatched enabled โ€” unmatched target resources will be removed +PUT workspace/src-workspace +PUT namedvalue/src-nv-keyvault +PUT namedvalue/src-nv-plain +PUT namedvalue/src-nv-secret +PUT namedvalue/workspace:src-workspace/src-ws-nv-plain +PUT backend/src-backend-circuit-breaker +PUT backend/src-backend-function +PUT backend/src-backend-http +PUT backend/src-backend-logicapp +PUT backend/src-backend-mcp-learn +PUT group/administrators +PUT group/developers +PUT group/guests +PUT group/src-group-internal +PUT logger/azuremonitor +PUT logger/src-logger-appinsights +PUT logger/src-logger-eventhub +PUT policyfragment/src-fragment-cors +PUT policyfragment/src-fragment-ratelimit +PUT globalschema/src-schema-json +PUT tag/pet +PUT tag/src-tag-env +PUT tag/src-tag-team +PUT tag/store +PUT tag/user +PUT versionset/src-versionset-urlpath +PUT backend/workspace:src-workspace/src-ws-backend-http +PUT group/workspace:src-workspace/src-ws-group-internal +PUT tag/workspace:src-workspace/src-ws-tag +PUT backend/src-backend-pool +PUT api/src-a2a-runtime-mock +PUT api/src-a2a-weather-agent +PUT api/src-graphql-passthrough +PUT api/src-graphql-synthetic +PUT api/src-mcp-existing-server +PUT api/src-rest-openapi +PUT api/src-rest-petstore-v3 +PUT api/src-rest-revisioned +PUT api/src-rest-swagger +PUT api/src-rest-versioned-v1 +PUT api/src-soap-passthrough +PUT api/src-websocket +PUT diagnostic/applicationinsights +PUT diagnostic/azuremonitor +PUT servicepolicy +PUT product/src-product-premium +PUT product/src-product-starter +PUT api/workspace:src-workspace/src-ws-api-rest +PUT product/workspace:src-workspace/src-ws-product +PUT api/src-mcp-from-api +PUT api/src-mcp-todos +SKIP subscription/master +PUT subscription/src-sub-all-apis +PUT subscription/src-sub-product +DELETE api/tgt-unmatched-revisioned;rev=2 +DELETE api/tgt-unmatched-revisioned +DELETE backend/tgt-unmatched-backend +DELETE namedvalue/tgt-unmatched-nv + +--- Summary --- +54 creates/updates, 4 deletes, 1 skipped +๐Ÿ” Compare โ€” Compare source and target APIM instances +VERBOSE: Loading module from path '/workspaces/apiops-cli/tests/integration/all-resource-types/modules/CompareSemantics.psm1'. +VERBOSE: Importing function 'Add-RepresentationSchemaSemantics'. +VERBOSE: Importing function 'Build-ResourceMap'. +VERBOSE: Importing function 'Compare-NormalizedResources'. +VERBOSE: Importing function 'ConvertTo-NormalizedPropertyValue'. +VERBOSE: Importing function 'ConvertTo-NormalizedResource'. +VERBOSE: Importing function 'Get-ApiNameFromOperationResourceId'. +VERBOSE: Importing function 'New-CompareNormalizationContext'. +VERBOSE: Importing function 'Test-IsApiOperationResource'. + +โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— +โ•‘ APIM Instance Comparison โ•‘ +โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + Source: bvt-20260702-173508yau-src-apim (bvt-20260702-173508-yau-src-rg) + Target: bvt-20260702-173508yau-tgt-apim (bvt-20260702-173508-yau-tgt-rg) + +โ”€โ”€ Top-level resources โ”€โ”€ + Comparing Named Values ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/namedValues?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/namedValues?api-version=2025-09-01-preview +[5 src, 5 tgt] VERBOSE: Named Values โ€” fetched 5 source, 5 target +VERBOSE: Named Values โ€” comparing 5 source vs 5 target (after exclusions) +VERBOSE: Comparing: src-nv-keyvault +VERBOSE: Skipping secret value for: src-nv-keyvault +VERBOSE: โœ“ src-nv-keyvault matches +VERBOSE: Comparing: src-nv-plain +VERBOSE: โœ“ src-nv-plain matches +VERBOSE: Comparing: src-nv-secret +VERBOSE: Skipping secret value for: src-nv-secret +VERBOSE: โœ“ src-nv-secret matches +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: Skipping secret value for: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +VERBOSE: Comparing: {{auto-id-1}} +VERBOSE: Skipping secret value for: {{auto-id-1}} +VERBOSE: โœ“ {{auto-id-1}} matches +โœ… (5 resources) + Comparing Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/tags?api-version=2025-09-01-preview +[5 src, 5 tgt] VERBOSE: Tags โ€” fetched 5 source, 5 target +VERBOSE: Tags โ€” comparing 5 source vs 5 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +VERBOSE: Comparing: src-tag-team +VERBOSE: โœ“ src-tag-team matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (5 resources) + Comparing Gateways ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/gateways?api-version=2025-09-01-preview +โš ๏ธ SKIPPED + source query failed: ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) +VERBOSE: Source query error for Gateways โ€” ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + Comparing API Version Sets ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apiVersionSets?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apiVersionSets?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API Version Sets โ€” fetched 1 source, 1 target +VERBOSE: API Version Sets โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-versionset-urlpath +VERBOSE: โœ“ src-versionset-urlpath matches +โœ… (1 resources) + Comparing Backends ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/backends?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/backends?api-version=2025-09-01-preview +[6 src, 6 tgt] VERBOSE: Backends โ€” fetched 6 source, 6 target +VERBOSE: Backends โ€” comparing 6 source vs 6 target (after exclusions) +VERBOSE: Comparing: src-backend-circuit-breaker +VERBOSE: โœ“ src-backend-circuit-breaker matches +VERBOSE: Comparing: src-backend-function +VERBOSE: โœ“ src-backend-function matches +VERBOSE: Comparing: src-backend-http +VERBOSE: โœ“ src-backend-http matches +VERBOSE: Comparing: src-backend-logicapp +VERBOSE: โœ“ src-backend-logicapp matches +VERBOSE: Comparing: src-backend-mcp-learn +VERBOSE: โœ“ src-backend-mcp-learn matches +VERBOSE: Comparing: src-backend-pool +VERBOSE: โœ“ src-backend-pool matches +โœ… (6 resources) + Comparing Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/groups?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: Groups โ€” fetched 4 source, 4 target +VERBOSE: Groups โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-group-internal +VERBOSE: โœ“ src-group-internal matches +โœ… (1 resources) + Comparing Policy Fragments ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/policyFragments?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/policyFragments?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Policy Fragments โ€” fetched 2 source, 2 target +VERBOSE: Policy Fragments โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-fragment-cors +VERBOSE: โœ“ src-fragment-cors matches +VERBOSE: Comparing: src-fragment-ratelimit +VERBOSE: โœ“ src-fragment-ratelimit matches +โœ… (2 resources) + Comparing Global Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Global Schemas โ€” fetched 1 source, 1 target +VERBOSE: Global Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-schema-json +VERBOSE: โœ“ src-schema-json matches +โœ… (1 resources) + Comparing Loggers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/loggers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/loggers?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: Loggers โ€” fetched 3 source, 3 target +VERBOSE: Loggers โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: azuremonitor +VERBOSE: โœ“ azuremonitor matches +VERBOSE: Comparing: src-logger-appinsights +VERBOSE: Skipping logger credentials for: src-logger-appinsights +VERBOSE: โœ“ src-logger-appinsights matches +VERBOSE: Comparing: src-logger-eventhub +VERBOSE: Skipping logger credentials for: src-logger-eventhub +VERBOSE: โœ“ src-logger-eventhub matches +โœ… (3 resources) + Comparing Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/diagnostics?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Diagnostics โ€” fetched 2 source, 2 target +VERBOSE: Diagnostics โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: applicationinsights +VERBOSE: โœ“ applicationinsights matches +VERBOSE: Comparing: azuremonitor +VERBOSE: โœ“ azuremonitor matches +โœ… (2 resources) + Comparing Service Policy ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Service Policy โ€” fetched 1 source, 1 target +VERBOSE: Service Policy โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing Subscriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/subscriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/subscriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: Subscriptions โ€” fetched 3 source, 3 target +VERBOSE: Subscriptions โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-sub-all-apis +VERBOSE: โœ“ src-sub-all-apis matches +VERBOSE: Comparing: src-sub-product +VERBOSE: โœ“ src-sub-product matches +โœ… (2 resources) + Comparing Workspaces ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspaces โ€” fetched 1 source, 1 target +VERBOSE: Workspaces โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-workspace +VERBOSE: โœ“ src-workspace matches +โœ… (1 resources) + Comparing Documentations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/documentations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/documentations?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/documentations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/documentations?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Documentations โ€” fetched 0 source, 0 target + + Comparing Policy Restrictions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/policyRestrictions?api-version=2025-09-01-preview +โš ๏ธ SKIPPED + source query failed: ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/policyRestrictions?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) +VERBOSE: Source query error for Policy Restrictions โ€” ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/policyRestrictions?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + +โ”€โ”€ APIs โ”€โ”€ + Comparing APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis?api-version=2025-09-01-preview +[15 src, 15 tgt] VERBOSE: APIs โ€” fetched 15 source, 15 target +VERBOSE: APIs โ€” comparing 15 source vs 15 target (after exclusions) +VERBOSE: Comparing: src-a2a-runtime-mock +VERBOSE: โœ“ src-a2a-runtime-mock matches +VERBOSE: Comparing: src-a2a-weather-agent +VERBOSE: โœ“ src-a2a-weather-agent matches +VERBOSE: Comparing: src-graphql-passthrough +VERBOSE: โœ“ src-graphql-passthrough matches +VERBOSE: Comparing: src-graphql-synthetic +VERBOSE: โœ“ src-graphql-synthetic matches +VERBOSE: Comparing: src-mcp-existing-server +VERBOSE: โœ“ src-mcp-existing-server matches +VERBOSE: Comparing: src-mcp-from-api +VERBOSE: โœ“ src-mcp-from-api matches +VERBOSE: Comparing: src-mcp-todos +VERBOSE: โœ“ src-mcp-todos matches +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +VERBOSE: Comparing: src-rest-swagger +VERBOSE: โœ“ src-rest-swagger matches +VERBOSE: Comparing: src-rest-petstore-v3 +VERBOSE: โœ“ src-rest-petstore-v3 matches +VERBOSE: Comparing: src-rest-revisioned +VERBOSE: โœ“ src-rest-revisioned matches +VERBOSE: Comparing: src-rest-revisioned;rev=2 +VERBOSE: โœ“ src-rest-revisioned;rev=2 matches +VERBOSE: Comparing: src-rest-versioned-v1 +VERBOSE: โœ“ src-rest-versioned-v1 matches +VERBOSE: Comparing: src-soap-passthrough +VERBOSE: โœ“ src-soap-passthrough matches +VERBOSE: Comparing: src-websocket +VERBOSE: โœ“ src-websocket matches +โœ… (15 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis?api-version=2025-09-01-preview + API: src-a2a-runtime-mock + Comparing API/src-a2a-runtime-mock/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-a2a-runtime-mock/Operations โ€” fetched 3 source, 3 target +VERBOSE: API/src-a2a-runtime-mock/Operations โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: get-agent-card +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ get-agent-card matches +VERBOSE: Comparing: get-agent-card-legacy +VERBOSE: โœ“ get-agent-card-legacy matches +VERBOSE: Comparing: post-jsonrpc +VERBOSE: โœ“ post-jsonrpc matches +โœ… (3 resources) + Comparing API/src-a2a-runtime-mock/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-runtime-mock/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-runtime-mock/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/operations?api-version=2025-09-01-preview + Comparing API/src-a2a-runtime-mock/operations/get-agent-card/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/operations/get-agent-card/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/operations/get-agent-card/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/operations/get-agent-card-legacy/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/operations/get-agent-card-legacy/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/get-agent-card-legacy/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/operations/post-jsonrpc/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-runtime-mock/operations/post-jsonrpc/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-a2a-runtime-mock/operations/post-jsonrpc/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-runtime-mock/resolvers?api-version=2025-09-01-preview + API: src-a2a-weather-agent + Comparing API/src-a2a-weather-agent/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-a2a-weather-agent/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-a2a-weather-agent/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-a2a-weather-agent/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-a2a-weather-agent/resolvers?api-version=2025-09-01-preview + API: src-graphql-passthrough + Comparing API/src-graphql-passthrough/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-passthrough/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-passthrough/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: graphql +VERBOSE: โœ“ graphql matches +โœ… (1 resources) + Comparing API/src-graphql-passthrough/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-passthrough/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-passthrough/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-passthrough/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-passthrough/resolvers?api-version=2025-09-01-preview + API: src-graphql-synthetic + Comparing API/src-graphql-synthetic/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: graphql +VERBOSE: โœ“ graphql matches +โœ… (1 resources) + Comparing API/src-graphql-synthetic/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/Resolvers โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/Resolvers โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-resolver-hero +VERBOSE: โœ“ src-resolver-hero matches +โœ… (1 resources) + Comparing API/src-graphql-synthetic/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-graphql-synthetic/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-graphql-synthetic/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/resolvers?api-version=2025-09-01-preview + Comparing API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-graphql-synthetic/resolvers/src-resolver-hero/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-graphql-synthetic/resolvers/src-resolver-hero/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-graphql-synthetic/resolvers/src-resolver-hero/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + API: src-mcp-existing-server + Comparing API/src-mcp-existing-server/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-existing-server/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-existing-server/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-existing-server/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-existing-server/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-existing-server/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-existing-server/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-existing-server/resolvers?api-version=2025-09-01-preview + API: src-mcp-from-api + Comparing API/src-mcp-from-api/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-from-api/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-from-api/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-from-api/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-from-api/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-from-api/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-from-api/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-from-api/resolvers?api-version=2025-09-01-preview + API: src-mcp-todos + Comparing API/src-mcp-todos/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Operations โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-mcp-todos/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-mcp-todos/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-mcp-todos/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-mcp-todos/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-mcp-todos/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-mcp-todos/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-mcp-todos/resolvers?api-version=2025-09-01-preview + API: src-rest-openapi + Comparing API/src-rest-openapi/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-openapi/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-openapi/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-openapi/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-rest-openapi/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/schemas?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: API/src-rest-openapi/Schemas โ€” fetched 2 source, 2 target +VERBOSE: API/src-rest-openapi/Schemas โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-rest-schema-item +VERBOSE: โœ“ src-rest-schema-item matches +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (2 resources) + Comparing API/src-rest-openapi/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/tags?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: API/src-rest-openapi/Tags โ€” fetched 2 source, 2 target +VERBOSE: API/src-rest-openapi/Tags โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +VERBOSE: Comparing: src-tag-team +VERBOSE: โœ“ src-tag-team matches +โœ… (2 resources) + Comparing API/src-rest-openapi/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/diagnostics?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Diagnostics โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Diagnostics โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: applicationinsights +VERBOSE: โœ“ applicationinsights matches +โœ… (1 resources) + Comparing API/src-rest-openapi/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/tagDescriptions?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/Tag Descriptions โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/Tag Descriptions โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +โœ… (1 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations?api-version=2025-09-01-preview + Comparing API/src-rest-openapi/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-openapi/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/operations/healthCheck/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-openapi/operations/healthCheck/Policies โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-openapi/operations/healthCheck/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing API/src-rest-openapi/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-openapi/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-openapi/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-openapi/resolvers?api-version=2025-09-01-preview + API: src-rest-swagger + Comparing API/src-rest-swagger/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview +[20 src, 20 tgt] VERBOSE: API/src-rest-swagger/Operations โ€” fetched 20 source, 20 target +VERBOSE: API/src-rest-swagger/Operations โ€” comparing 20 source vs 20 target (after exclusions) +VERBOSE: Comparing: addPet +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ addPet matches +VERBOSE: Comparing: createUser +VERBOSE: โœ“ createUser matches +VERBOSE: Comparing: createUsersWithArrayInput +VERBOSE: โœ“ createUsersWithArrayInput matches +VERBOSE: Comparing: createUsersWithListInput +VERBOSE: โœ“ createUsersWithListInput matches +VERBOSE: Comparing: deleteOrder +VERBOSE: โœ“ deleteOrder matches +VERBOSE: Comparing: deleteUser +VERBOSE: โœ“ deleteUser matches +VERBOSE: Comparing: deletePet +VERBOSE: โœ“ deletePet matches +VERBOSE: Comparing: getPetById +VERBOSE: โœ“ getPetById matches +VERBOSE: Comparing: getOrderById +VERBOSE: โœ“ getOrderById matches +VERBOSE: Comparing: findPetsByStatus +VERBOSE: โœ“ findPetsByStatus matches +VERBOSE: Comparing: findPetsByTags +VERBOSE: โœ“ findPetsByTags matches +VERBOSE: Comparing: getUserByName +VERBOSE: โœ“ getUserByName matches +VERBOSE: Comparing: logoutUser +VERBOSE: โœ“ logoutUser matches +VERBOSE: Comparing: loginUser +VERBOSE: โœ“ loginUser matches +VERBOSE: Comparing: placeOrder +VERBOSE: โœ“ placeOrder matches +VERBOSE: Comparing: getInventory +VERBOSE: โœ“ getInventory matches +VERBOSE: Comparing: updatePet +VERBOSE: โœ“ updatePet matches +VERBOSE: Comparing: updateUser +VERBOSE: โœ“ updateUser matches +VERBOSE: Comparing: updatePetWithForm +VERBOSE: โœ“ updatePetWithForm matches +VERBOSE: Comparing: uploadFile +VERBOSE: โœ“ uploadFile matches +โœ… (20 resources) + Comparing API/src-rest-swagger/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-swagger/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-swagger/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-swagger/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/tagDescriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-rest-swagger/Tag Descriptions โ€” fetched 3 source, 3 target +VERBOSE: API/src-rest-swagger/Tag Descriptions โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (3 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations?api-version=2025-09-01-preview + Comparing API/src-rest-swagger/operations/addPet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/addPet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/addPet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/addPet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/createUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/createUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUsersWithArrayInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/createUsersWithArrayInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/createUsersWithArrayInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUsersWithArrayInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/createUsersWithListInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/createUsersWithListInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deleteOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/deleteOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/deleteOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deleteOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deleteUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/deleteUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/deleteUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deleteUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/deletePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/deletePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/deletePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/deletePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getPetById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/getPetById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/getPetById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getPetById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getOrderById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/getOrderById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/getOrderById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getOrderById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/findPetsByStatus/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/findPetsByStatus/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/findPetsByTags/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/findPetsByTags/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/findPetsByTags/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/findPetsByTags/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getUserByName/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/getUserByName/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/getUserByName/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getUserByName/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/logoutUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/logoutUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/logoutUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/logoutUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/loginUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/loginUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/loginUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/loginUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/placeOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/placeOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/placeOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/placeOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/getInventory/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/getInventory/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/getInventory/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/getInventory/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updatePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/updatePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/updatePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updatePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updateUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/updateUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/updateUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updateUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/updatePetWithForm/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/updatePetWithForm/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-swagger/operations/uploadFile/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/operations/uploadFile/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-swagger/operations/uploadFile/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-swagger/operations/uploadFile/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-swagger/resolvers?api-version=2025-09-01-preview + API: src-rest-petstore-v3 + Comparing API/src-rest-petstore-v3/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview +[19 src, 19 tgt] VERBOSE: API/src-rest-petstore-v3/Operations โ€” fetched 19 source, 19 target +VERBOSE: API/src-rest-petstore-v3/Operations โ€” comparing 19 source vs 19 target (after exclusions) +VERBOSE: Comparing: addPet +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ addPet matches +VERBOSE: Comparing: createUser +VERBOSE: โœ“ createUser matches +VERBOSE: Comparing: createUsersWithListInput +VERBOSE: โœ“ createUsersWithListInput matches +VERBOSE: Comparing: deleteOrder +VERBOSE: โœ“ deleteOrder matches +VERBOSE: Comparing: deleteUser +VERBOSE: โœ“ deleteUser matches +VERBOSE: Comparing: deletePet +VERBOSE: โœ“ deletePet matches +VERBOSE: Comparing: getPetById +VERBOSE: โœ“ getPetById matches +VERBOSE: Comparing: getOrderById +VERBOSE: โœ“ getOrderById matches +VERBOSE: Comparing: findPetsByStatus +VERBOSE: โœ“ findPetsByStatus matches +VERBOSE: Comparing: findPetsByTags +VERBOSE: โœ“ findPetsByTags matches +VERBOSE: Comparing: getUserByName +VERBOSE: โœ“ getUserByName matches +VERBOSE: Comparing: logoutUser +VERBOSE: โœ“ logoutUser matches +VERBOSE: Comparing: loginUser +VERBOSE: โœ“ loginUser matches +VERBOSE: Comparing: placeOrder +VERBOSE: โœ“ placeOrder matches +VERBOSE: Comparing: getInventory +VERBOSE: โœ“ getInventory matches +VERBOSE: Comparing: updatePet +VERBOSE: โœ“ updatePet matches +VERBOSE: Comparing: updateUser +VERBOSE: โœ“ updateUser matches +VERBOSE: Comparing: updatePetWithForm +VERBOSE: โœ“ updatePetWithForm matches +VERBOSE: Comparing: uploadFile +VERBOSE: โœ“ uploadFile matches +โœ… (19 resources) + Comparing API/src-rest-petstore-v3/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-petstore-v3/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-petstore-v3/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-petstore-v3/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/tagDescriptions?api-version=2025-09-01-preview +[3 src, 3 tgt] VERBOSE: API/src-rest-petstore-v3/Tag Descriptions โ€” fetched 3 source, 3 target +VERBOSE: API/src-rest-petstore-v3/Tag Descriptions โ€” comparing 3 source vs 3 target (after exclusions) +VERBOSE: Comparing: pet +VERBOSE: โœ“ pet matches +VERBOSE: Comparing: store +VERBOSE: โœ“ store matches +VERBOSE: Comparing: user +VERBOSE: โœ“ user matches +โœ… (3 resources) +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations?api-version=2025-09-01-preview + Comparing API/src-rest-petstore-v3/operations/addPet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/addPet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/addPet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/addPet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/createUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/createUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/createUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/createUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/createUsersWithListInput/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/createUsersWithListInput/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/createUsersWithListInput/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deleteOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/deleteOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/deleteOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deleteOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deleteUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/deleteUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/deleteUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deleteUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/deletePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/deletePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/deletePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/deletePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getPetById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/getPetById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/getPetById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getPetById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getOrderById/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/getOrderById/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/getOrderById/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getOrderById/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/findPetsByStatus/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/findPetsByStatus/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/findPetsByStatus/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/findPetsByTags/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/findPetsByTags/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/findPetsByTags/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/findPetsByTags/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getUserByName/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/getUserByName/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/getUserByName/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getUserByName/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/logoutUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/logoutUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/logoutUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/logoutUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/loginUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/loginUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/loginUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/loginUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/placeOrder/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/placeOrder/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/placeOrder/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/placeOrder/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/getInventory/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/getInventory/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/getInventory/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/getInventory/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updatePet/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/updatePet/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/updatePet/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updatePet/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updateUser/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/updateUser/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/updateUser/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updateUser/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/updatePetWithForm/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/updatePetWithForm/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/updatePetWithForm/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-petstore-v3/operations/uploadFile/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/operations/uploadFile/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-petstore-v3/operations/uploadFile/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-petstore-v3/operations/uploadFile/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-petstore-v3/resolvers?api-version=2025-09-01-preview + API: src-rest-revisioned + Comparing API/src-rest-revisioned/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-revisioned/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-revisioned/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-revisioned/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-revisioned/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/releases?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned/Releases โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned/Releases โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-release-1 +VERBOSE: โœ“ src-release-1 matches +โœ… (1 resources) + Comparing API/src-rest-revisioned/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations?api-version=2025-09-01-preview + Comparing API/src-rest-revisioned/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/operations/healthCheck/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/healthCheck/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned/resolvers?api-version=2025-09-01-preview + API: src-rest-revisioned;rev=2 + Comparing API/src-rest-revisioned;rev=2/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview +[4 src, 4 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Operations โ€” fetched 4 source, 4 target +VERBOSE: API/src-rest-revisioned;rev=2/Operations โ€” comparing 4 source vs 4 target (after exclusions) +VERBOSE: Comparing: createItem +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ createItem matches +VERBOSE: Comparing: getItem +VERBOSE: โœ“ getItem matches +VERBOSE: Comparing: healthCheck +VERBOSE: โœ“ healthCheck matches +VERBOSE: Comparing: listItems +VERBOSE: โœ“ listItems matches +โœ… (4 resources) + Comparing API/src-rest-revisioned;rev=2/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned;rev=2/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-rest-revisioned;rev=2/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/releases?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Releases โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-revisioned;rev=2/Releases โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-release-1 +VERBOSE: โœ“ src-release-1 matches +โœ… (1 resources) + Comparing API/src-rest-revisioned;rev=2/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations?api-version=2025-09-01-preview + Comparing API/src-rest-revisioned;rev=2/operations/createItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations/createItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/operations/createItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/createItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/getItem/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations/getItem/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/operations/getItem/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/getItem/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/healthCheck/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations/healthCheck/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/operations/healthCheck/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/healthCheck/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-revisioned;rev=2/operations/listItems/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/operations/listItems/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-revisioned;rev=2/operations/listItems/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-revisioned;rev=2/operations/listItems/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-revisioned;rev=2/resolvers?api-version=2025-09-01-preview + API: src-rest-versioned-v1 + Comparing API/src-rest-versioned-v1/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-rest-versioned-v1/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-rest-versioned-v1/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: getStatus-v1 +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ getStatus-v1 matches +โœ… (1 resources) + Comparing API/src-rest-versioned-v1/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-rest-versioned-v1/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/operations?api-version=2025-09-01-preview + Comparing API/src-rest-versioned-v1/operations/getStatus-v1/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/operations/getStatus-v1/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-rest-versioned-v1/operations/getStatus-v1/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-rest-versioned-v1/operations/getStatus-v1/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-rest-versioned-v1/resolvers?api-version=2025-09-01-preview + API: src-soap-passthrough + Comparing API/src-soap-passthrough/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-soap-passthrough/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-soap-passthrough/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-soap-passthrough/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/schemas?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-soap-passthrough/Schemas โ€” fetched 1 source, 1 target +VERBOSE: API/src-soap-passthrough/Schemas โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: {{auto-id-0}} +VERBOSE: โœ“ {{auto-id-0}} matches +โœ… (1 resources) + Comparing API/src-soap-passthrough/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-soap-passthrough/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/operations?api-version=2025-09-01-preview + Comparing API/src-soap-passthrough/operations/6a46a1e664dd480b286e7d4a/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/operations/6a46a1e664dd480b286e7d4a/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-soap-passthrough/operations/6a46a1e664dd480b286e7d4a/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-soap-passthrough/operations/6a46a1e664dd480b286e7d4a/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-soap-passthrough/resolvers?api-version=2025-09-01-preview + API: src-websocket + Comparing API/src-websocket/Operations ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/operations?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/operations?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: API/src-websocket/Operations โ€” fetched 1 source, 1 target +VERBOSE: API/src-websocket/Operations โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: onHandshake +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: โœ“ onHandshake matches +โœ… (1 resources) + Comparing API/src-websocket/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Policies โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Schemas โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Tags โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Diagnostics โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Resolvers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Resolvers โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Releases ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/releases?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/releases?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Releases โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: API/src-websocket/Wikis โ€” fetched 0 source, 0 target + + Comparing API/src-websocket/Tag Descriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/tagDescriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/tagDescriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/Tag Descriptions โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/operations?api-version=2025-09-01-preview + Comparing API/src-websocket/operations/onHandshake/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/operations/onHandshake/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/apis/src-websocket/operations/onHandshake/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: API/src-websocket/operations/onHandshake/Policies โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/apis/src-websocket/resolvers?api-version=2025-09-01-preview + +โ”€โ”€ Products โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products?api-version=2025-09-01-preview + Product: src-product-premium + Comparing Product/src-product-premium/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/policies?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Product/src-product-premium/Policies โ€” fetched 1 source, 1 target +VERBOSE: Product/src-product-premium/Policies โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: policy +VERBOSE: โœ“ policy matches +โœ… (1 resources) + Comparing Product/src-product-premium/APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/apis?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-premium/APIs โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-premium/APIs โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-graphql-synthetic +VERBOSE: โœ“ src-graphql-synthetic matches +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +โœ… (2 resources) + Comparing Product/src-product-premium/Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/groups?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-premium/Groups โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-premium/Groups โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: administrators +VERBOSE: โœ“ administrators matches +VERBOSE: Comparing: src-group-internal +VERBOSE: โœ“ src-group-internal matches +โœ… (2 resources) + Comparing Product/src-product-premium/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/tags?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Product/src-product-premium/Tags โ€” fetched 0 source, 0 target + + Comparing Product/src-product-premium/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-premium/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Product/src-product-premium/Wikis โ€” fetched 0 source, 0 target + + Product: src-product-starter + Comparing Product/src-product-starter/Policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Product/src-product-starter/Policies โ€” fetched 0 source, 0 target + + Comparing Product/src-product-starter/APIs ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/apis?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-starter/APIs โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-starter/APIs โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: src-rest-openapi +VERBOSE: โœ“ src-rest-openapi matches +VERBOSE: Comparing: src-soap-passthrough +VERBOSE: โœ“ src-soap-passthrough matches +โœ… (2 resources) + Comparing Product/src-product-starter/Groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/groups?api-version=2025-09-01-preview +[2 src, 2 tgt] VERBOSE: Product/src-product-starter/Groups โ€” fetched 2 source, 2 target +VERBOSE: Product/src-product-starter/Groups โ€” comparing 2 source vs 2 target (after exclusions) +VERBOSE: Comparing: administrators +VERBOSE: โœ“ administrators matches +VERBOSE: Comparing: developers +VERBOSE: โœ“ developers matches +โœ… (2 resources) + Comparing Product/src-product-starter/Tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/tags?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Product/src-product-starter/Tags โ€” fetched 1 source, 1 target +VERBOSE: Product/src-product-starter/Tags โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-tag-env +VERBOSE: โœ“ src-tag-env matches +โœ… (1 resources) + Comparing Product/src-product-starter/Wikis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/products/src-product-starter/wikis?api-version=2025-09-01-preview returned Not Found โ€” treating as empty +[0 src, 0 tgt] VERBOSE: Product/src-product-starter/Wikis โ€” fetched 0 source, 0 target + + +โ”€โ”€ Gateway APIs โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/gateways?api-version=2025-09-01-preview + โš ๏ธ Gateways not available (v2 SKU?): ARM GET failed for https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/gateways?api-version=2025-09-01-preview โ€” az rest failed (exit 1): ERROR: Bad Request({"error":{"code":"MethodNotAllowedInPricingTier","message":"Method not allowed in StandardV2 pricing tier","details":null}}) + +โ”€โ”€ Workspace children โ”€โ”€ +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces?api-version=2025-09-01-preview + Workspace: src-workspace + Comparing Workspace/src-workspace/apis ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/apis?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/apis?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/apis โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/apis โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-api-rest +VERBOSE: โœ“ src-ws-api-rest matches +โœ… (1 resources) + Comparing Workspace/src-workspace/products ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/products โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/products โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-product +VERBOSE: โœ“ src-ws-product matches +โœ… (1 resources) + Comparing Workspace/src-workspace/backends ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/backends?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/backends?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/backends โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/backends โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-backend-http +VERBOSE: โœ“ src-ws-backend-http matches +โœ… (1 resources) + Comparing Workspace/src-workspace/namedValues ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/namedValues?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/namedValues?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/namedValues โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/namedValues โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-nv-plain +VERBOSE: โœ“ src-ws-nv-plain matches +โœ… (1 resources) + Comparing Workspace/src-workspace/tags ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/tags โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/tags โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-tag +VERBOSE: โœ“ src-ws-tag matches +โœ… (1 resources) + Comparing Workspace/src-workspace/groups ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/groups?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/groups?api-version=2025-09-01-preview +[1 src, 1 tgt] VERBOSE: Workspace/src-workspace/groups โ€” fetched 1 source, 1 target +VERBOSE: Workspace/src-workspace/groups โ€” comparing 1 source vs 1 target (after exclusions) +VERBOSE: Comparing: src-ws-group-internal +VERBOSE: โœ“ src-ws-group-internal matches +โœ… (1 resources) + Comparing Workspace/src-workspace/policyFragments ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/policyFragments?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/policyFragments?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/policyFragments โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/schemas ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/schemas?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/schemas?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/schemas โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/loggers ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/loggers?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/loggers?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/loggers โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/diagnostics ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/diagnostics?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/diagnostics?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/diagnostics โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/policies ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/policies?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/policies?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/policies โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/subscriptions ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/subscriptions?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/subscriptions?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/subscriptions โ€” fetched 0 source, 0 target + + Comparing Workspace/src-workspace/apiVersionSets ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/apiVersionSets?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/apiVersionSets?api-version=2025-09-01-preview +[0 src, 0 tgt] VERBOSE: Workspace/src-workspace/apiVersionSets โ€” fetched 0 source, 0 target + +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/products?api-version=2025-09-01-preview + Workspace/src-workspace/Product: src-ws-product + Comparing Workspace/src-workspace/Product/src-ws-product/apiLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/products/src-ws-product/apiLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/products/src-ws-product/apiLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + Comparing Workspace/src-workspace/Product/src-ws-product/groupLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/products/src-ws-product/groupLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/products/src-ws-product/groupLinks?api-version=2025-09-01-preview +[2 src, 2 tgt] โœ… match +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/tags?api-version=2025-09-01-preview + Workspace/src-workspace/Tag: src-ws-tag + Comparing Workspace/src-workspace/Tag/src-ws-tag/productLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/tags/src-ws-tag/productLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/tags/src-ws-tag/productLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + Comparing Workspace/src-workspace/Tag/src-ws-tag/apiLinks ... VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-src-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-src-apim/workspaces/src-workspace/tags/src-ws-tag/apiLinks?api-version=2025-09-01-preview +VERBOSE: GET https://management.azure.com/subscriptions/afe84d3a-ed30-42c7-b5d9-5c9a87af53ae/resourceGroups/bvt-20260702-173508-yau-tgt-rg/providers/Microsoft.ApiManagement/service/bvt-20260702-173508yau-tgt-apim/workspaces/src-workspace/tags/src-ws-tag/apiLinks?api-version=2025-09-01-preview +[1 src, 1 tgt] โœ… match + +โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• +โœ… PASS โ€” 236 resource types compared, 154 total resources matched + (2 type(s) skipped due to query failures) +โœ… Verification complete โ€” instances match +๐Ÿงน PHASE 7 โ€” Teardown + Deleting bvt-...-yau-src-rg... + Deleting bvt-...-yau-tgt-rg... + โณ Waiting for resource group deletions to complete for hard-delete... + ... waiting for deletion of bvt-...-yau-src-rg (0s elapsed) + ... waiting for deletion of bvt-...-yau-src-rg (30s elapsed) + ... waiting for deletion of bvt-...-yau-src-rg (60s elapsed) + ... waiting for deletion of bvt-...-yau-src-rg (90s elapsed) +True +True +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...src-apim... +True + ๐Ÿ—‘๏ธ Purging soft-deleted APIM: bvt...tgt-apim... +๐Ÿงน Teardown complete (hard-delete) diff --git a/tests/integration/all-resource-types/modules/DeploymentOps.psm1 b/tests/integration/all-resource-types/modules/DeploymentOps.psm1 deleted file mode 100644 index cf62f626..00000000 --- a/tests/integration/all-resource-types/modules/DeploymentOps.psm1 +++ /dev/null @@ -1,311 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -Import-Module (Join-Path $PSScriptRoot 'LogMasking.psm1') - -<# -.SYNOPSIS -Prints masked details for failed ARM deployment operations. - -.PARAMETER ResourceGroupName -Resource group that contains the deployment. - -.PARAMETER DeploymentName -Deployment name to inspect. - -.PARAMETER Replacements -Mask replacement map for output. - -.OUTPUTS -None -#> -function Write-DeploymentFailureDetails { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string]$ResourceGroupName, - [Parameter(Mandatory)][string]$DeploymentName, - [hashtable]$Replacements = @{} - ) - - $maskedRg = Protect-ResourceGroupName -Value $ResourceGroupName - Write-Host "" - Write-Host "========== Deployment failure details ==========" -ForegroundColor Yellow - Write-Host "Resource group: $maskedRg" -ForegroundColor Yellow - Write-Host "Deployment: $DeploymentName" -ForegroundColor Yellow - Write-Host "Querying failed deployment operations (before teardown)..." -ForegroundColor Yellow - - $query = "[?properties.provisioningState=='Failed'].{resource:properties.targetResource.resourceName, type:properties.targetResource.resourceType, code:properties.statusMessage.error.code, message:properties.statusMessage.error.message, details:properties.statusMessage.error.details}" - - try { - az deployment operation group list ` - --resource-group $ResourceGroupName ` - --name $DeploymentName ` - --query $query ` - --output json 2>&1 | - Protect-Secret -Replacements $Replacements | - Out-Host - } catch { - $maskedErr = Protect-LogLine -Line ($_.Exception.Message) -Replacements $Replacements - Write-Host "Failed to retrieve deployment operations: $maskedErr" -ForegroundColor Red - } - - Write-Host "================================================" -ForegroundColor Yellow -} - -<# - .SYNOPSIS - Polls a condition until it succeeds or times out. - - .PARAMETER Probe - Scriptblock invoked on each poll. Return $true when the condition is met. - - .PARAMETER TimeoutSeconds - Maximum wait time in seconds. - - .PARAMETER PollIntervalSeconds - Polling interval in seconds. - - .PARAMETER TimeoutMessage - Error message thrown when the timeout is reached. - - .OUTPUTS - System.Boolean - #> - function Invoke-PolledWait { - [CmdletBinding()] - param( - [Parameter(Mandatory)][scriptblock]$Probe, - [int]$TimeoutSeconds = 300, - [int]$PollIntervalSeconds = 10, - [Parameter(Mandatory)][string]$TimeoutMessage - ) - - $deadline = (Get-Date).AddSeconds($TimeoutSeconds) - while ((Get-Date) -lt $deadline) { - if (& $Probe) { - return $true - } - - Start-Sleep -Seconds $PollIntervalSeconds - } - - throw $TimeoutMessage - } - - <# -.SYNOPSIS -Waits for an APIM instance to reach Succeeded provisioning. - -.PARAMETER ResourceGroupName -Resource group containing the APIM instance. - -.PARAMETER ApimName -APIM service name. - -.PARAMETER TimeoutSeconds -Maximum wait time in seconds. - -.PARAMETER PollIntervalSeconds -Polling interval in seconds. - -.OUTPUTS -System.Boolean -#> -function Wait-ApimActivation { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string]$ResourceGroupName, - [Parameter(Mandatory)][string]$ApimName, - [int]$TimeoutSeconds = 1800, - [int]$PollIntervalSeconds = 20 - ) - - $maskedApim = Protect-ApimName -Value $ApimName - Write-Host "Waiting for APIM '$maskedApim' to finish Activating (timeout ${TimeoutSeconds}s)..." -ForegroundColor Cyan - - $activationState = @{ LastState = $null } - $probe = { - $state = az apim show --resource-group $ResourceGroupName --name $ApimName --query provisioningState --output tsv 2>$null - if ($state -ne $activationState.LastState) { - Write-Host " provisioningState: $state" -ForegroundColor Gray - $activationState.LastState = $state - } - if ($state -eq 'Succeeded') { return $true } - if ($state -eq 'Failed') { throw "APIM '$maskedApim' entered Failed state during activation wait" } - return $false - } - - Invoke-PolledWait ` - -Probe $probe ` - -TimeoutSeconds $TimeoutSeconds ` - -PollIntervalSeconds $PollIntervalSeconds ` - -TimeoutMessage "APIM '$maskedApim' did not reach Succeeded within ${TimeoutSeconds}s (last state: $($activationState.LastState))" -} - -<# -.SYNOPSIS -Waits for an APIM API to become queryable via az CLI. - -.PARAMETER ResourceGroupName -Resource group containing the APIM instance. - -.PARAMETER ApimServiceName -APIM service name. - -.PARAMETER ApiId -The API ID to query. - -.PARAMETER Replacements -Mask replacement map for output. - -.PARAMETER TimeoutSeconds -Maximum wait time in seconds. - -.PARAMETER PollIntervalSeconds -Polling interval in seconds. - -.OUTPUTS -System.Boolean -#> -function Wait-ApimApiQueryable { - [CmdletBinding()] - param( - [Parameter(Mandatory)][string]$ResourceGroupName, - [Parameter(Mandatory)][string]$ApimServiceName, - [Parameter(Mandatory)][string]$ApiId, - [hashtable]$Replacements = @{}, - [int]$TimeoutSeconds = 300, - [int]$PollIntervalSeconds = 10 - ) - - $maskedApim = Protect-ApimName -Value $ApimServiceName - Write-Host "Waiting for APIM API '$ApiId' to become queryable in '$maskedApim' (timeout ${TimeoutSeconds}s)..." -ForegroundColor Cyan - - $subscriptionId = az account show --query id --output tsv 2>$null - if ([string]::IsNullOrWhiteSpace($subscriptionId)) { - throw "Could not resolve active Azure subscription while waiting for API '$ApiId'" - } - - $apiListUri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.ApiManagement/service/$ApimServiceName/apis?api-version=2025-09-01-preview" - - $probe = { - # Merge stderr into the stream and mask it so probe failures are visible - # (and redacted) instead of being swallowed by a redirect to $null. - $probeOutput = az rest ` - --method get ` - --uri $apiListUri ` - --query "length(value[?name=='$ApiId'])" ` - --output tsv 2>&1 | - Protect-Secret -Replacements $Replacements - if ($LASTEXITCODE -eq 0) { - # The query returns length(value[?name==ApiId]) as a bare count. API - # names are unique, so the result is '0' (not visible yet) or '1' - # (now queryable). -contains tolerates an incidental stderr line - # merged in by 2>&1. - return (@($probeOutput) -contains '1') - } - - $probeOutput | ForEach-Object { Write-Host " [api-probe] $_" -ForegroundColor DarkYellow } - return $false - } - - Invoke-PolledWait ` - -Probe $probe ` - -TimeoutSeconds $TimeoutSeconds ` - -PollIntervalSeconds $PollIntervalSeconds ` - -TimeoutMessage "Timed out waiting for API '$ApiId' to be queryable in APIM '$maskedApim' within ${TimeoutSeconds}s" -} - -<# -.SYNOPSIS -Runs an ARM template/Bicep deployment at resource-group scope, printing masked -failure details and throwing on error. - -.PARAMETER ResourceGroupName -Resource group to deploy into. - -.PARAMETER DeploymentName -Name for the deployment. - -.PARAMETER TemplateFile -Path to the ARM/Bicep template to deploy. - -.PARAMETER Parameters -Deployment parameters as 'key=value' strings. - -.PARAMETER Verbosity -Extra az CLI verbosity flags (e.g. '--verbose', '--debug'). - -.PARAMETER Output -az CLI output format for the deployment ('json' or 'none'). - -.PARAMETER Replacements -Mask replacement map for output. - -.PARAMETER FailureLabel -Human-readable label used in the thrown error message. - -.OUTPUTS -System.String - the raw az CLI output (when Output is 'json'). -#> -function New-ResourceGroupDeployment { - [CmdletBinding(SupportsShouldProcess)] - param( - [Parameter(Mandatory)][string]$ResourceGroupName, - [Parameter(Mandatory)][string]$DeploymentName, - [Parameter(Mandatory)][string]$TemplateFile, - [string[]]$Parameters = @(), - [string[]]$Verbosity = @(), - [ValidateSet('json', 'none')][string]$Output = 'json', - [hashtable]$Replacements = @{}, - [string]$FailureLabel = 'Deployment' - ) - - if (-not (Test-Path $TemplateFile)) { - throw "Template file not found at: $TemplateFile" - } - - $maskedRg = Protect-ResourceGroupName -Value $ResourceGroupName - - if (-not $PSCmdlet.ShouldProcess($maskedRg, "Create deployment '$DeploymentName'")) { - return - } - - # Capture stdout raw so callers can parse the deployment JSON, while - # redirecting stderr to a temp file so it can be masked and shown to the - # host (rather than leaking secrets or being silently discarded). - # Only pass --parameters when there are parameters to supply. - $parametersArg = if ($Parameters.Count -gt 0) { @('--parameters') + $Parameters } else { @() } - $stderrPath = (New-TemporaryFile).FullName - try { - $raw = az deployment group create ` - --resource-group $ResourceGroupName ` - --name $DeploymentName ` - --template-file $TemplateFile ` - --output $Output ` - $parametersArg $Verbosity 2> $stderrPath - $deployExit = $LASTEXITCODE - - Get-Content -LiteralPath $stderrPath -ErrorAction SilentlyContinue | - Protect-Secret -Replacements $Replacements | - Out-Host - } - finally { - Remove-Item -LiteralPath $stderrPath -Force -ErrorAction SilentlyContinue - } - - if ($deployExit -ne 0) { - Write-DeploymentFailureDetails ` - -ResourceGroupName $ResourceGroupName ` - -DeploymentName $DeploymentName ` - -Replacements $Replacements - throw "$FailureLabel failed (deployment '$DeploymentName' in resource group '$maskedRg'). See failed-operation details above." - } - - return ($raw -join "`n") -} - -Export-ModuleMember -Function ` - Write-DeploymentFailureDetails, ` - Wait-ApimActivation, ` - Wait-ApimApiQueryable, ` - New-ResourceGroupDeployment diff --git a/tests/integration/all-resource-types/modules/LogMasking.psm1 b/tests/integration/all-resource-types/modules/LogMasking.psm1 deleted file mode 100644 index b426dc33..00000000 --- a/tests/integration/all-resource-types/modules/LogMasking.psm1 +++ /dev/null @@ -1,277 +0,0 @@ -๏ปฟ# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# MaskingHelpers โ€” secret-redaction utilities for the round-trip integration test scripts. - -$script:EnableMasking = $true - -$script:BuiltinRedactions = @( - @{ Pattern = '([?&])(t|c|s|h)=[^&''"\s]+' - Replacement = '$1$2=' } - - @{ Pattern = '/subscriptions/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' - Replacement = '/subscriptions/' } - - @{ Pattern = '/(operationStatuses|operationResults)/[A-Za-z0-9._-]{10,}' - Replacement = '/$1/' } - - @{ Pattern = "(?i)(['""]?x-ms-(?:correlation-)?(?:request|client-request)-id['""]?\s*[:=]\s*['""]?)[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" - Replacement = '$1' } - - @{ Pattern = "(?i)(['""]?x-ms-routing-request-id['""]?\s*[:=]\s*['""]?)[A-Z0-9]+:\d{8}T\d{6}Z:[0-9a-fA-F-]{36}" - Replacement = '$1' } - - @{ Pattern = "(?i)(authorization[:\s=]+bearer\s+)[A-Za-z0-9._\-+/=]+" - Replacement = '$1' } - - @{ Pattern = '\beyJ[A-Za-z0-9_\-]{8,}\.[A-Za-z0-9_\-]{8,}\.[A-Za-z0-9_\-]{8,}' - Replacement = '' } - - @{ Pattern = '[A-Za-z0-9](?:[A-Za-z0-9._%+\-]*[A-Za-z0-9])?@[A-Za-z0-9](?:[A-Za-z0-9.\-]*[A-Za-z0-9])?\.[A-Za-z]{2,}' - Replacement = '' } -) - -<# -.SYNOPSIS -Masks generic identifiers while preserving short prefix/suffix. - -.PARAMETER Value -Input string to mask. - -.PARAMETER Prefix -Visible prefix length. - -.PARAMETER Suffix -Visible suffix length. - -.OUTPUTS -System.String -#> -function Protect-Identifier { - param( - [string]$Value, - [int]$Prefix = 6, - [int]$Suffix = 4 - ) - - if (-not $script:EnableMasking) { - return $Value - } - - if ([string]::IsNullOrWhiteSpace($Value)) { - return '' - } - - if ($Value.Length -le ($Prefix + $Suffix)) { - return '' - } - - return "{0}...{1}" -f $Value.Substring(0, $Prefix), $Value.Substring($Value.Length - $Suffix) -} - -<# -.SYNOPSIS -Replaces subscription IDs with a stable redaction token. - -.PARAMETER Value -Subscription ID value. - -.OUTPUTS -System.String -#> -function Protect-SubscriptionId { - param([string]$Value) - if (-not $script:EnableMasking) { return $Value } - return '' -} - -<# -.SYNOPSIS -Masks resource group names with minimal context retained. - -.PARAMETER Value -Resource group name. - -.OUTPUTS -System.String -#> -function Protect-ResourceGroupName { - param([string]$Value) - - if (-not $script:EnableMasking) { return $Value } - if ([string]::IsNullOrWhiteSpace($Value)) { return '' } - - # Preserve the generated suffix for round-trip RGs: --