diff --git a/src/azure-cli/azure/cli/command_modules/resource/_color.py b/src/azure-cli/azure/cli/command_modules/resource/_color.py index c660ed86c65..7999530de7f 100644 --- a/src/azure-cli/azure/cli/command_modules/resource/_color.py +++ b/src/azure-cli/azure/cli/command_modules/resource/_color.py @@ -13,6 +13,8 @@ class Color(Enum): PURPLE = "\033[38;5;141m" BLUE = "\033[38;5;39m" GRAY = "\033[38;5;246m" + RED = "\033[38;5;203m" + DARK_YELLOW = "\033[38;5;136m" RESET = "\033[0m" def __str__(self): diff --git a/src/azure-cli/azure/cli/command_modules/resource/_formatters.py b/src/azure-cli/azure/cli/command_modules/resource/_formatters.py index aa4a5e03d3c..2f43a690609 100644 --- a/src/azure-cli/azure/cli/command_modules/resource/_formatters.py +++ b/src/azure-cli/azure/cli/command_modules/resource/_formatters.py @@ -5,7 +5,7 @@ from itertools import groupby -from azure.mgmt.resource.resources.models import ChangeType, PropertyChangeType +from azure.mgmt.resource.resources.models import ChangeType, PropertyChangeType, Level from ._symbol import Symbol from ._color import Color, ColoredStringBuilder @@ -30,6 +30,12 @@ PropertyChangeType.no_effect: Color.GRAY, } +_diagnostic_level_to_color = { + Level.ERROR: Color.RED, + Level.WARNING: Color.DARK_YELLOW, + Level.INFO: Color.RESET, +} + _change_type_to_symbol = { ChangeType.create: Symbol.PLUS, ChangeType.delete: Symbol.MINUS, @@ -73,8 +79,22 @@ def format_what_if_operation_result(what_if_operation_result, enable_color=True) builder = ColoredStringBuilder(enable_color) _format_noise_notice(builder) _format_change_type_legend(builder, what_if_operation_result.changes) - _format_resource_changes(builder, what_if_operation_result.changes) - _format_resource_changes_stats(builder, what_if_operation_result.changes) + _format_resource_changes(builder, + what_if_operation_result.changes, + definite_changes=True) + _format_resource_changes_stats(builder, + what_if_operation_result.changes, + definite_changes=True) + _format_resource_changes(builder, + what_if_operation_result.potential_changes, + definite_changes=False) + _format_resource_changes_stats(builder, + what_if_operation_result.potential_changes, + definite_changes=False) + _format_diagnostics(builder, + what_if_operation_result.changes, + what_if_operation_result.potential_changes, + what_if_operation_result.diagnostics) return builder.build() @@ -120,20 +140,24 @@ def populate_change_type_set(property_changes): builder.append_line(change_type.title()) -def _format_resource_changes_stats(builder, resource_changes): - builder.append_line().append("Resource changes: ") +def _format_resource_changes_stats(builder, resource_changes, definite_changes=True): + if definite_changes: + builder.append_line().append("Resource changes: ") - if not resource_changes: - builder.append("no change.") - return + if not resource_changes: + builder.append("no change.") + return + elif resource_changes: + builder.append_line().append("Potential changes: ") - sorted_resource_changes = sorted(resource_changes, key=lambda x: _change_type_to_weight[x.change_type]) - resource_changes_by_change_type = groupby(sorted_resource_changes, lambda x: x.change_type) - count_by_change_type = map(lambda x: (x[0], len(list(x[1]))), resource_changes_by_change_type) - count_by_change_type = filter(lambda x: x[1] > 0, count_by_change_type) - change_type_stats = map(lambda x: _format_change_type_count(x[0], x[1]), count_by_change_type) + if resource_changes: + sorted_resource_changes = sorted(resource_changes, key=lambda x: _change_type_to_weight[x.change_type]) + resource_changes_by_change_type = groupby(sorted_resource_changes, lambda x: x.change_type) + count_by_change_type = map(lambda x: (x[0], len(list(x[1]))), resource_changes_by_change_type) + count_by_change_type = filter(lambda x: x[1] > 0, count_by_change_type) + change_type_stats = map(lambda x: _format_change_type_count(x[0], x[1]), count_by_change_type) - builder.append(", ".join(change_type_stats)).append(".") + builder.append(", ".join(change_type_stats)).append(".") def _format_change_type_count(change_type, count): # pylint: disable=too-many-return-statements @@ -155,7 +179,36 @@ def _format_change_type_count(change_type, count): # pylint: disable=too-many-r raise ValueError(f"Invalid ChangeType: {change_type}") -def _format_resource_changes(builder, resource_changes): +def _format_diagnostics(builder, resource_changes, potential_changes, diagnostics): + short_circuited_resources = [r for r in (resource_changes or []) + (potential_changes or []) + if r.change_type == ChangeType.UNSUPPORTED] + + diags = diagnostics or [] + + if len(short_circuited_resources) + len(diags) > 0: + builder.append_line() + builder.append_line() + builder.append(f"Diagnostics ({len(short_circuited_resources) + len(diags)}): ") + builder.append_line() + + for change in short_circuited_resources: + with builder.new_color_scope(_diagnostic_level_to_color[Level.WARNING]): + builder.append(change.resource_id) + builder.append(" (Unsupported) ") + builder.append(change.unsupported_reason) + builder.append_line() + + for diag in diags: + with builder.new_color_scope(_diagnostic_level_to_color[diag.level]): + builder.append(diag.target) + builder.append(" (") + builder.append(diag.code) + builder.append(") ") + builder.append(diag.message) + builder.append_line() + + +def _format_resource_changes(builder, resource_changes, definite_changes=True): if not resource_changes: return @@ -163,7 +216,12 @@ def _format_resource_changes(builder, resource_changes): resource_changes_by_scope = groupby(sorted(resource_changes, key=_get_scope_uppercase), _get_scope_uppercase) builder.append_line() - builder.append_line(f"The deployment will update the following {'scope:' if num_scopes == 1 else 'scopes'}") + if definite_changes: + builder.append("The deployment will update the following ") + else: + builder.append("The following change MAY OR MAY NOT be deployed to the following ") + + builder.append_line('scope:' if num_scopes == 1 else 'scopes:') for _, resource_changes_in_scope in resource_changes_by_scope: resource_changes_in_scope_list = list(resource_changes_in_scope) diff --git a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/policy_definition_deploy_with_short_circuiting.json b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/policy_definition_deploy_with_short_circuiting.json new file mode 100644 index 00000000000..428ea9d0e25 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/policy_definition_deploy_with_short_circuiting.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "random": { + "type": "bool", + "defaultValue": "[greater(int(utcNow('%f')), 4)]" + }, + "denyLocation": { + "type": "string", + "defaultValue": "northeurope" + } + }, + "variables": { + "policyDefinitionName": "policy-for-what-if-test" + }, + "resources": [ + { + "name": "[variables('policyDefinitionName')]", + "type": "Microsoft.Authorization/policyDefinitions", + "apiVersion": "2018-05-01", + "condition": "[parameters('random')]", + "properties": { + "policyType": "Custom", + "policyRule": { + "if": { + "field": "location", + "equals": "[parameters('denyLocation')]" + }, + "then": { + "effect": "deny" + } + } + } + }, + { + "name": "[format('{0}_{1}', variables('policyDefinitionName'), if(parameters('random'), '2', '3'))]", + "type": "Microsoft.Authorization/policyDefinitions", + "apiVersion": "2018-05-01", + "properties": { + "policyType": "Custom", + "policyRule": { + "if": { + "field": "location", + "equals": "[parameters('denyLocation')]" + }, + "then": { + "effect": "deny" + } + } + } + }, + { + "type": "Microsoft.Resources/deployments", + "apiVersion": "2024-11-01", + "name": "nestedDeployment", + "location": "[deployment().location]", + "properties": { + "mode": "Incremental", + "template": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "resources": [], + "variables": { + "undecidable": "[parameters('random')]" + } + } + } + } + ] +} diff --git a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/recordings/test_subscription_level_what_if_with_short_circuiting.yaml b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/recordings/test_subscription_level_what_if_with_short_circuiting.yaml new file mode 100644 index 00000000000..2de8ea237b5 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/recordings/test_subscription_level_what_if_with_short_circuiting.yaml @@ -0,0 +1,650 @@ +interactions: +- request: + body: "{\"location\": \"westus\", \"properties\": {\"parameters\": {}, \"mode\": + \"Incremental\", template:{\r\n \"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"parameters\": {\r\n \"denyLocation\": + {\r\n \"type\": \"string\",\r\n \"defaultValue\": \"northeurope\"\r\n + \ }\r\n },\r\n \"variables\": {\r\n \"policyDefinitionName\": \"policy-for-what-if-test\"\r\n + \ },\r\n \"resources\": [\r\n {\r\n \"name\": \"[variables('policyDefinitionName')]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n + \ \"policyRule\": {\r\n \"if\": {\r\n \"field\": \"location\",\r\n + \ \"equals\": \"[parameters('denyLocation')]\"\r\n },\r\n + \ \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n + \ }\r\n }\r\n }\r\n ],\r\n \"outputs\": {\r\n \"policyDefinitionId\": + {\r\n \"type\": \"string\",\r\n \"value\": \"[resourceId('Microsoft.Authorization/policyDefinitions', + variables('policyDefinitionName'))]\"\r\n }\r\n }\r\n}}}" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub create + Connection: + - keep-alive + Content-Length: + - '1087' + Content-Type: + - application/json + ParameterSetName: + - --location --template-file + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment/validate?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/policy_definition_deploy","name":"policy_definition_deploy","type":"Microsoft.Resources/deployments","location":"westus","properties":{"templateHash":"1669246125929096641","parameters":{"denyLocation":{"type":"String","value":"northeurope"}},"mode":"Incremental","provisioningState":"Succeeded","timestamp":"2025-05-29T21:37:55.2202694Z","duration":"PT0S","correlationId":"f69f3799-706f-4095-be79-c39ea8568153","providers":[{"namespace":"Microsoft.Authorization","resourceTypes":[{"resourceType":"policyDefinitions","locations":[null]}]}],"dependencies":[],"validatedResources":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test"}]}}' + headers: + cache-control: + - no-cache + content-length: + - '819' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:37:55 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 0143CC4B781C48C7993719984F639202 Ref B: MNZ221060609035 Ref C: 2025-05-29T21:37:54Z' + status: + code: 200 + message: OK +- request: + body: "{\"location\": \"westus\", \"properties\": {\"parameters\": {}, \"mode\": + \"Incremental\", template:{\r\n \"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"parameters\": {\r\n \"denyLocation\": + {\r\n \"type\": \"string\",\r\n \"defaultValue\": \"northeurope\"\r\n + \ }\r\n },\r\n \"variables\": {\r\n \"policyDefinitionName\": \"policy-for-what-if-test\"\r\n + \ },\r\n \"resources\": [\r\n {\r\n \"name\": \"[variables('policyDefinitionName')]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n + \ \"policyRule\": {\r\n \"if\": {\r\n \"field\": \"location\",\r\n + \ \"equals\": \"[parameters('denyLocation')]\"\r\n },\r\n + \ \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n + \ }\r\n }\r\n }\r\n ],\r\n \"outputs\": {\r\n \"policyDefinitionId\": + {\r\n \"type\": \"string\",\r\n \"value\": \"[resourceId('Microsoft.Authorization/policyDefinitions', + variables('policyDefinitionName'))]\"\r\n }\r\n }\r\n}}}" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub create + Connection: + - keep-alive + Content-Length: + - '1087' + Content-Type: + - application/json + ParameterSetName: + - --location --template-file + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/policy_definition_deploy","name":"policy_definition_deploy","type":"Microsoft.Resources/deployments","location":"westus","properties":{"templateHash":"1669246125929096641","parameters":{"denyLocation":{"type":"String","value":"northeurope"}},"mode":"Incremental","provisioningState":"Accepted","timestamp":"2025-05-29T21:37:56.9730464Z","duration":"PT0.0008781S","correlationId":"5d818663-a66e-47f7-b162-849f497b3cda","providers":[{"namespace":"Microsoft.Authorization","resourceTypes":[{"resourceType":"policyDefinitions","locations":[null]}]}],"dependencies":[]}}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/policy_definition_deploy/operationStatuses/08584530522084894463?api-version=2024-11-01&t=638841514808794921&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=iPCR432ZNv68E2yjF5i8Sy9GtyNy8BsZ3JpiknnbX8CBDD4vOXv08p3KLw8a1ZqozKUF7U7w48dyLCdMYC5F5CfEWr3Z6j11j-RN-mcYCp-TE_14hPGtURFNPbu6eGPpFU373AzL6zd-qsn9w_xWSOULF05u68vr-rmzh3X4IspjBBrmgZnAbQ6n2ybB6aPtLyqBhLebKOqBwjnhCunsm7Xz1WTqFqfH7VYl65hpAbsyJ5MWzkb_FM6t-A-pMVmlD71sEQUkJOsBTADytxIpN3SZ3au17Pa4m90gUaTtbOTmvPZ1M59fMblR_XdIAUwj93r1XEMavl9wQs7VxN3hoQ&h=TE9ynBGXKaqusT2DCzk4Swag8zLCl3gqFVjT0fxIYX8 + cache-control: + - no-cache + content-length: + - '666' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:38:00 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-deployment-engine-version: + - 1.363.0 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: ACBA15D7B4684BC4AF7A8468D8B9A9FA Ref B: MNZ221060609035 Ref C: 2025-05-29T21:37:56Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub create + Connection: + - keep-alive + ParameterSetName: + - --location --template-file + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment/operationStatuses/08584530522084894463?api-version=2024-11-01&t=638841514808794921&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=iPCR432ZNv68E2yjF5i8Sy9GtyNy8BsZ3JpiknnbX8CBDD4vOXv08p3KLw8a1ZqozKUF7U7w48dyLCdMYC5F5CfEWr3Z6j11j-RN-mcYCp-TE_14hPGtURFNPbu6eGPpFU373AzL6zd-qsn9w_xWSOULF05u68vr-rmzh3X4IspjBBrmgZnAbQ6n2ybB6aPtLyqBhLebKOqBwjnhCunsm7Xz1WTqFqfH7VYl65hpAbsyJ5MWzkb_FM6t-A-pMVmlD71sEQUkJOsBTADytxIpN3SZ3au17Pa4m90gUaTtbOTmvPZ1M59fMblR_XdIAUwj93r1XEMavl9wQs7VxN3hoQ&h=TE9ynBGXKaqusT2DCzk4Swag8zLCl3gqFVjT0fxIYX8 + response: + body: + string: '{"status":"Running"}' + headers: + cache-control: + - no-cache + content-length: + - '20' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:38:00 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5B0E1A438AF64862BC4AA2E9EA14C7C9 Ref B: MNZ221060609035 Ref C: 2025-05-29T21:38:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub create + Connection: + - keep-alive + ParameterSetName: + - --location --template-file + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment/operationStatuses/08584530522084894463?api-version=2024-11-01&t=638841514808794921&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=iPCR432ZNv68E2yjF5i8Sy9GtyNy8BsZ3JpiknnbX8CBDD4vOXv08p3KLw8a1ZqozKUF7U7w48dyLCdMYC5F5CfEWr3Z6j11j-RN-mcYCp-TE_14hPGtURFNPbu6eGPpFU373AzL6zd-qsn9w_xWSOULF05u68vr-rmzh3X4IspjBBrmgZnAbQ6n2ybB6aPtLyqBhLebKOqBwjnhCunsm7Xz1WTqFqfH7VYl65hpAbsyJ5MWzkb_FM6t-A-pMVmlD71sEQUkJOsBTADytxIpN3SZ3au17Pa4m90gUaTtbOTmvPZ1M59fMblR_XdIAUwj93r1XEMavl9wQs7VxN3hoQ&h=TE9ynBGXKaqusT2DCzk4Swag8zLCl3gqFVjT0fxIYX8 + response: + body: + string: '{"status":"Succeeded"}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:38:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: AD0D35E920244116929DCE907F92DF44 Ref B: MNZ221060609035 Ref C: 2025-05-29T21:38:31Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub create + Connection: + - keep-alive + ParameterSetName: + - --location --template-file + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/policy_definition_deploy","name":"policy_definition_deploy","type":"Microsoft.Resources/deployments","location":"westus","properties":{"templateHash":"1669246125929096641","parameters":{"denyLocation":{"type":"String","value":"northeurope"}},"mode":"Incremental","provisioningState":"Succeeded","timestamp":"2025-05-29T21:38:02.005898Z","duration":"PT5.0328516S","correlationId":"5d818663-a66e-47f7-b162-849f497b3cda","providers":[{"namespace":"Microsoft.Authorization","resourceTypes":[{"resourceType":"policyDefinitions","locations":[null]}]}],"dependencies":[],"outputs":{"policyDefinitionId":{"type":"String","value":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test"}},"outputResources":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test"}]}}' + headers: + cache-control: + - no-cache + content-length: + - '1012' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:38:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: D2248B7202E24C488BE311741B94061A Ref B: MNZ221060609035 Ref C: 2025-05-29T21:38:32Z' + status: + code: 200 + message: OK +- request: + body: "{\"location\": \"westus\", \"properties\": {\"parameters\": {\"denyLocation\": + {\"value\": \"westeurope\"}}, \"mode\": \"Incremental\", \"whatIfSettings\": + {\"resultFormat\": \"FullResourcePayloads\"}, template:{\r\n \"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"parameters\": {\r\n \"random\": + {\r\n \"type\": \"bool\",\r\n \"defaultValue\": \"[greater(int(utcNow('%f')), + 4)]\"\r\n },\r\n \"denyLocation\": {\r\n \"type\": \"string\",\r\n + \ \"defaultValue\": \"northeurope\"\r\n }\r\n },\r\n \"variables\": + {\r\n \"policyDefinitionName\": \"policy-for-what-if-test\"\r\n },\r\n + \ \"resources\": [\r\n {\r\n \"name\": \"[variables('policyDefinitionName')]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"condition\": \"[parameters('random')]\",\r\n \"properties\": + {\r\n \"policyType\": \"Custom\",\r\n \"policyRule\": {\r\n \"if\": + {\r\n \"field\": \"location\",\r\n \"equals\": \"[parameters('denyLocation')]\"\r\n + \ },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n + \ }\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"[format('{0}_{1}', + variables('policyDefinitionName'), if(parameters('random'), '2', '3'))]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n + \ \"policyRule\": {\r\n \"if\": {\r\n \"field\": \"location\",\r\n + \ \"equals\": \"[parameters('denyLocation')]\"\r\n },\r\n + \ \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n + \ }\r\n }\r\n },\r\n {\r\n \"type\": \"Microsoft.Resources/deployments\",\r\n + \ \"apiVersion\": \"2024-11-01\",\r\n \"name\": \"nestedDeployment\",\r\n + \ \"location\": \"[deployment().location]\",\r\n \"properties\": + {\r\n \"mode\": \"Incremental\",\r\n \"template\": {\r\n \"$schema\": + \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"resources\": [],\r\n + \ \"variables\": {\r\n \"undecidable\": \"[parameters('random')]\"\r\n + \ }\r\n }\r\n }\r\n }\r\n ]\r\n}\r\n}}" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + Content-Length: + - '2228' + Content-Type: + - application/json + ParameterSetName: + - --location --template-file --parameters + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment/whatIf?api-version=2024-11-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 29 May 2025 21:38:33 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTU5NEJGREZBOjJEOTEwMzoyRDQzMEI6MkRCNzkxOjJEODQwNTVBQUFEOTc1Iiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515141332431&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=s4tbO2IXg0HULPQhSZSGaDk9MlZrRv4dSQeGhwPG8I53f-gOb20MVqXZSQ4TkeBjYKY8uUqGgPwrLgC8T64NemEz_9HtIAl1CewVmttiWwk5buT-gPtm5XJrqCXAuSZkXNyPF6KaDhfypvU6wG54x-VkesrbjLYP42w4K9rzNWEhMcZvFSEwr29TKkU4x_UZ9kLxgXk1rCSdiRWMk8Prv3qPCo6GHmPpbLCghgmthnTwmFJHE4m8-lSP2VUaVYYSAgiwkNDYfpPXv2go3jVeTzniGrgY5DQYTyNJ0iCiqD37bW_qqv1mzHfmuRSZxL_5hKY9G32o79dsbthsUYI3bA&h=gNsTEoQLv9oIVy9MzqmTZvI4sJP2uzaCEdOXtC4LD0Q + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 49D8BC3D7B834223AC9E1B12423DB0CE Ref B: MNZ221060608049 Ref C: 2025-05-29T21:38:33Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + ParameterSetName: + - --location --template-file --parameters + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTU5NEJGREZBOjJEOTEwMzoyRDQzMEI6MkRCNzkxOjJEODQwNTVBQUFEOTc1Iiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515141332431&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=s4tbO2IXg0HULPQhSZSGaDk9MlZrRv4dSQeGhwPG8I53f-gOb20MVqXZSQ4TkeBjYKY8uUqGgPwrLgC8T64NemEz_9HtIAl1CewVmttiWwk5buT-gPtm5XJrqCXAuSZkXNyPF6KaDhfypvU6wG54x-VkesrbjLYP42w4K9rzNWEhMcZvFSEwr29TKkU4x_UZ9kLxgXk1rCSdiRWMk8Prv3qPCo6GHmPpbLCghgmthnTwmFJHE4m8-lSP2VUaVYYSAgiwkNDYfpPXv2go3jVeTzniGrgY5DQYTyNJ0iCiqD37bW_qqv1mzHfmuRSZxL_5hKY9G32o79dsbthsUYI3bA&h=gNsTEoQLv9oIVy9MzqmTZvI4sJP2uzaCEdOXtC4LD0Q + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 29 May 2025 21:38:33 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTU5NEJGREZBOjJEOTEwMzoyRDQzMEI6MkRCNzkxOjJEODQwNTVBQUFEOTc1Iiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515146775188&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=pbJKBjS5pTANbVzi9a_VQY1X3pq79AGaWZ59ESpr-WYH5rUfnw_VQQlv4Pv8x3fD-7_goweZq1EyY0yD53Dbt43qbqUeI33fVxoLhwWXzeEfVrmJcJvU8a8NWXX_DNIjxpjWNNkw5FMnwYgXP15vO0v-z_apNaaUDepmRk_uQlK0QOC9pCeaaaWurvNdTU-KTNvzNSMPjnSSxmykyIB7z5HFGRHeQz6dG2jpHnmRmH-iE0_apTcYtD8TDungX4z9GQWQccamIL5WuLyWq70Q63L3Pt9rjrsXRu-cnLGeqKprcSG5d-g_OdTN2Gr8lJ_Qt66Ex2l8To5ekTLoPogNKQ&h=2_rw0x04zEYJslQrdoBNWxS73aZGoX2DLky68t_EKKc + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 330CB64838D840D0A708745A1875CE9D Ref B: MNZ221060608049 Ref C: 2025-05-29T21:38:34Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + ParameterSetName: + - --location --template-file --parameters + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTU5NEJGREZBOjJEOTEwMzoyRDQzMEI6MkRCNzkxOjJEODQwNTVBQUFEOTc1Iiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515146775188&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=pbJKBjS5pTANbVzi9a_VQY1X3pq79AGaWZ59ESpr-WYH5rUfnw_VQQlv4Pv8x3fD-7_goweZq1EyY0yD53Dbt43qbqUeI33fVxoLhwWXzeEfVrmJcJvU8a8NWXX_DNIjxpjWNNkw5FMnwYgXP15vO0v-z_apNaaUDepmRk_uQlK0QOC9pCeaaaWurvNdTU-KTNvzNSMPjnSSxmykyIB7z5HFGRHeQz6dG2jpHnmRmH-iE0_apTcYtD8TDungX4z9GQWQccamIL5WuLyWq70Q63L3Pt9rjrsXRu-cnLGeqKprcSG5d-g_OdTN2Gr8lJ_Qt66Ex2l8To5ekTLoPogNKQ&h=2_rw0x04zEYJslQrdoBNWxS73aZGoX2DLky68t_EKKc + response: + body: + string: '{"status":"Succeeded","properties":{"correlationId":"594bfdfa-9103-430b-b791-84055aaad975","changes":[{"resourceId":"[format(''/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}'', + concat(''Microsoft.Authorization/policyDefinitions/'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","changeType":"Unsupported","unsupportedReason":"Changes + to the resource declared at ''properties.template.resources[1]'' on line 1 + and column 698 cannot be analyzed because its resource ID or API version cannot + be calculated until the deployment is under way. Please see https://aka.ms/WhatIfUnidentifiableResource + for more guidance.","after":{"id":"[format(''/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}'', + concat(''Microsoft.Authorization/policyDefinitions/'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","type":"{0}'', + concat(''Microsoft.Authorization/policyDefinitions","name":"'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","apiVersion":"2018-05-01","properties":{"policyType":"Custom","policyRule":{"if":{"field":"location","equals":"westeurope"},"then":{"effect":"deny"}}}}}],"potentialChanges":[{"resourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","changeType":"Modify","before":{"apiVersion":"2018-05-01","id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","name":"policy-for-what-if-test","properties":{"mode":"Indexed","policyRule":{"if":{"equals":"northeurope","field":"location"},"then":{"effect":"deny"}},"policyType":"Custom"},"type":"Microsoft.Authorization/policyDefinitions"},"after":{"apiVersion":"2018-05-01","condition":"[greater(int(utcNow(''%f'')), + 4)]","id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","name":"policy-for-what-if-test","properties":{"mode":"Indexed","policyRule":{"if":{"equals":"westeurope","field":"location"},"then":{"effect":"deny"}},"policyType":"Custom"},"type":"Microsoft.Authorization/policyDefinitions"},"delta":[{"path":"properties.policyRule.if.equals","propertyChangeType":"Modify","before":"northeurope","after":"westeurope"},{"path":"condition","propertyChangeType":"Create","after":"[greater(int(utcNow(''%f'')), + 4)]"}]}],"diagnostics":[{"level":"Warning","code":"NestedDeploymentShortCircuited","target":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment","message":"The + nested deployment ''/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment'' + at line ''1'' and column ''1020'' could not be expanded because it uses outer-mode + evaluation and its template contains expressions that could not be evaluated. + Please see https://aka.ms/WhatIfEvalStopped for more guidance."}]}}' + headers: + cache-control: + - no-cache + content-length: + - '3053' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:38:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 704B506E059C47F482C3ADD22E4268B0 Ref B: MNZ221060608049 Ref C: 2025-05-29T21:38:49Z' + status: + code: 200 + message: OK +- request: + body: "{\"location\": \"westus\", \"properties\": {\"parameters\": {\"denyLocation\": + {\"value\": \"westeurope\"}}, \"mode\": \"Incremental\", \"whatIfSettings\": + {\"resultFormat\": \"FullResourcePayloads\"}, template:{\r\n \"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"parameters\": {\r\n \"random\": + {\r\n \"type\": \"bool\",\r\n \"defaultValue\": \"[greater(int(utcNow('%f')), + 4)]\"\r\n },\r\n \"denyLocation\": {\r\n \"type\": \"string\",\r\n + \ \"defaultValue\": \"northeurope\"\r\n }\r\n },\r\n \"variables\": + {\r\n \"policyDefinitionName\": \"policy-for-what-if-test\"\r\n },\r\n + \ \"resources\": [\r\n {\r\n \"name\": \"[variables('policyDefinitionName')]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"condition\": \"[parameters('random')]\",\r\n \"properties\": + {\r\n \"policyType\": \"Custom\",\r\n \"policyRule\": {\r\n \"if\": + {\r\n \"field\": \"location\",\r\n \"equals\": \"[parameters('denyLocation')]\"\r\n + \ },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n + \ }\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"[format('{0}_{1}', + variables('policyDefinitionName'), if(parameters('random'), '2', '3'))]\",\r\n + \ \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"apiVersion\": + \"2018-05-01\",\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n + \ \"policyRule\": {\r\n \"if\": {\r\n \"field\": \"location\",\r\n + \ \"equals\": \"[parameters('denyLocation')]\"\r\n },\r\n + \ \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n + \ }\r\n }\r\n },\r\n {\r\n \"type\": \"Microsoft.Resources/deployments\",\r\n + \ \"apiVersion\": \"2024-11-01\",\r\n \"name\": \"nestedDeployment\",\r\n + \ \"location\": \"[deployment().location]\",\r\n \"properties\": + {\r\n \"mode\": \"Incremental\",\r\n \"template\": {\r\n \"$schema\": + \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\",\r\n + \ \"contentVersion\": \"1.0.0.0\",\r\n \"resources\": [],\r\n + \ \"variables\": {\r\n \"undecidable\": \"[parameters('random')]\"\r\n + \ }\r\n }\r\n }\r\n }\r\n ]\r\n}\r\n}}" + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + Content-Length: + - '2228' + Content-Type: + - application/json + ParameterSetName: + - --location --template-file --parameters --no-pretty-print + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/mock-deployment/whatIf?api-version=2024-11-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 29 May 2025 21:38:52 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTExN0Q3NkFDOjJERUNGNzoyRDRENDc6MkRBMjYxOjJEQTc5ODUzRUJCNjkzIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515325878526&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=TpjOi846-twUbMCRnMHWRI7ySEvlePO2Mj0cqJJPaemtOQJy2mwMx9gtwg3vidITAvxUFjbLDrkWKRBXooAhdmWRX22uZ_gI8x01QvGvWh-GqJRmYIxSv0xW_1TTNF60PWcAOmYOEaRBTgXJxxx6HOaW761JoBsX1cCGm39JeR-NMkTgAYRxSOUAYO2Yz0By_BaJOJLep0D6tu_9rGBIeM4Oygshoeym9FTqbvBwkGidEWhAiqykN9oskk_zvbDqt6MkOl-0LpHN_GWQwqv6hjLhV2RwPzvGZh1xkNuvqkGZetXp6gTMkqOBuX1rlyAE32OmA5gtilR_54f19TF2lA&h=XySHgIrB3U-cUh6fO9ZS4wxhXutiRyAhyUGgf6LKl0o + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: B13DDFF4D40D4AEDB5A04CB4085384CF Ref B: MNZ221060609023 Ref C: 2025-05-29T21:38:51Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + ParameterSetName: + - --location --template-file --parameters --no-pretty-print + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTExN0Q3NkFDOjJERUNGNzoyRDRENDc6MkRBMjYxOjJEQTc5ODUzRUJCNjkzIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515325878526&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=TpjOi846-twUbMCRnMHWRI7ySEvlePO2Mj0cqJJPaemtOQJy2mwMx9gtwg3vidITAvxUFjbLDrkWKRBXooAhdmWRX22uZ_gI8x01QvGvWh-GqJRmYIxSv0xW_1TTNF60PWcAOmYOEaRBTgXJxxx6HOaW761JoBsX1cCGm39JeR-NMkTgAYRxSOUAYO2Yz0By_BaJOJLep0D6tu_9rGBIeM4Oygshoeym9FTqbvBwkGidEWhAiqykN9oskk_zvbDqt6MkOl-0LpHN_GWQwqv6hjLhV2RwPzvGZh1xkNuvqkGZetXp6gTMkqOBuX1rlyAE32OmA5gtilR_54f19TF2lA&h=XySHgIrB3U-cUh6fO9ZS4wxhXutiRyAhyUGgf6LKl0o + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Thu, 29 May 2025 21:38:52 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTExN0Q3NkFDOjJERUNGNzoyRDRENDc6MkRBMjYxOjJEQTc5ODUzRUJCNjkzIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515328764765&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=rREAgLTrggEBxZ0HPPCxM8H5vfvBekzb2nYrCJ5aQKY-PKarYnV-dr4kvKjafvbPOA0zo4ToSkUVwM0k0URy_sCei1x3DD7w9hHhZ97Qv9SdYqEUZ8l025z988QwcfQVehyGBUUlAx3PF5Pc-GVgKjKzTPuWHvb94n7Rar5MT2XzrPckD1wE-R1IZFrMJa3KZZEWL5-trfQqW9yF3-_VEpNPVAuoCSYLw_rVvRXQGVCxpBdMoyzaIF5fjxF6JZLM-WSbgC53fC8Her56ROsgezGQi1Q02jFUbSUebIr4VYAHXmG-zjOMcHrzlyEOfzG0iHc2-DThXMuVWIVc-0EvSQ&h=ayif7IUyL5RP4Lq9xqZqkREm8jTBWOd9QUWvUROKutM + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 3AF1E6E3DDF14638A2A7CCE0CF5D61FA Ref B: MNZ221060609023 Ref C: 2025-05-29T21:38:52Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - deployment sub what-if + Connection: + - keep-alive + ParameterSetName: + - --location --template-file --parameters --no-pretty-print + User-Agent: + - AZURECLI/2.74.0 azsdk-python-core/1.31.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/operationresults/eyJqb2JJZCI6IkRlcGxveW1lbnRXaGF0SWZKb2ItLVBPTElDWTo1RkRFRklOSVRJT046NUZERVBMT1k6NUZXSVRIOjVGU0hPUlQ6NUZDSVJDVUlUSU5HLTExN0Q3NkFDOjJERUNGNzoyRDRENDc6MkRBMjYxOjJEQTc5ODUzRUJCNjkzIiwiam9iTG9jYXRpb24iOiJ3ZXN0dXMifQ?api-version=2024-11-01&t=638841515328764765&c=MIIHhzCCBm-gAwIBAgITHgbIFmDY79XLPJrDjgAABsgWYDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDYwHhcNMjUwNDE3MDcxODAyWhcNMjUxMDE0MDcxODAyWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmXL0h9ESvC4b92QYV7yPeOyC8nGJyORFUoUm7UdBjxDbKTdSt8SfTfQkW5HjszhiwurE_fjCMlYj9_ymGSwiuCaKmitW7pcXF-WPgkAU2dKPUrSPqJAyeDDvG5SbZOmYYKHttoh0ZCPxadX4ljJ_k6BiE0-a-tSIYI__abusYKDqLuE9uYszi2Ra_hhLOH8qi2TBg71Jc7Dasa4RRwHnwfYbhpKL0tyMrBwyvMUGO00Q_Lx0iRvtIyWhp0HLppX7M2gzHCkh37uEJaggrcqn2T1QHSLgt2AuneElzaS8_if-JVZWv8ZdwCW8Oa-9JXQCzDSFKFP-2yMm1KPtualuUCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAyLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA2LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMi5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNi5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDIuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3J0MB0GA1UdDgQWBBSJ3ygYgt4NuGG8mfdBelaS0ABH_DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDYuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBTxRmjG8cPwKy19i2rhsvm-NfzRQTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAI2X3AiLN4s7W-C4ho0tyyAJfaEptV5HLxJHbIHK4awoIyOC8pp8Ay2pGHpXZlTZAhmvEJBKPbB0dVv_cphT1EjWF5rgvvLTBfp9Roo8PqmTQxmvMefBGXnYPmtPgtKMi5nwH1Y4xayGTzvIjIz1ZwYW5_hkF8jKx3e9bGDWPlgyHm3bRRRSgD650gZ7x69myyaDo4tX8FNWbLk-7PYxKiDBeLyle73_kab63klBJc7ep-O2AIxEtxi2DhDGLlGADWVwyYhEhlcFAhxXcOjCETnpsvDfOiK7XD3hnEkdKsChwTT9Gp6wEmn6xu59Qm2DenO3AMiv6vEyP2-7F-bR5G4&s=rREAgLTrggEBxZ0HPPCxM8H5vfvBekzb2nYrCJ5aQKY-PKarYnV-dr4kvKjafvbPOA0zo4ToSkUVwM0k0URy_sCei1x3DD7w9hHhZ97Qv9SdYqEUZ8l025z988QwcfQVehyGBUUlAx3PF5Pc-GVgKjKzTPuWHvb94n7Rar5MT2XzrPckD1wE-R1IZFrMJa3KZZEWL5-trfQqW9yF3-_VEpNPVAuoCSYLw_rVvRXQGVCxpBdMoyzaIF5fjxF6JZLM-WSbgC53fC8Her56ROsgezGQi1Q02jFUbSUebIr4VYAHXmG-zjOMcHrzlyEOfzG0iHc2-DThXMuVWIVc-0EvSQ&h=ayif7IUyL5RP4Lq9xqZqkREm8jTBWOd9QUWvUROKutM + response: + body: + string: '{"status":"Succeeded","properties":{"correlationId":"117d76ac-ecf7-4d47-a261-a79853ebb693","changes":[{"resourceId":"[format(''/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}'', + concat(''Microsoft.Authorization/policyDefinitions/'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","changeType":"Unsupported","unsupportedReason":"Changes + to the resource declared at ''properties.template.resources[1]'' on line 1 + and column 698 cannot be analyzed because its resource ID or API version cannot + be calculated until the deployment is under way. Please see https://aka.ms/WhatIfUnidentifiableResource + for more guidance.","after":{"id":"[format(''/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}'', + concat(''Microsoft.Authorization/policyDefinitions/'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","type":"{0}'', + concat(''Microsoft.Authorization/policyDefinitions","name":"'', format(''{0}_{1}'', + ''policy-for-what-if-test'', if(greater(int(utcNow(''%f'')), 4), ''2'', ''3''))))]","apiVersion":"2018-05-01","properties":{"policyType":"Custom","policyRule":{"if":{"field":"location","equals":"westeurope"},"then":{"effect":"deny"}}}}}],"potentialChanges":[{"resourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","changeType":"Modify","before":{"apiVersion":"2018-05-01","id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","name":"policy-for-what-if-test","properties":{"mode":"Indexed","policyRule":{"if":{"equals":"northeurope","field":"location"},"then":{"effect":"deny"}},"policyType":"Custom"},"type":"Microsoft.Authorization/policyDefinitions"},"after":{"apiVersion":"2018-05-01","condition":"[greater(int(utcNow(''%f'')), + 4)]","id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-for-what-if-test","name":"policy-for-what-if-test","properties":{"mode":"Indexed","policyRule":{"if":{"equals":"westeurope","field":"location"},"then":{"effect":"deny"}},"policyType":"Custom"},"type":"Microsoft.Authorization/policyDefinitions"},"delta":[{"path":"properties.policyRule.if.equals","propertyChangeType":"Modify","before":"northeurope","after":"westeurope"},{"path":"condition","propertyChangeType":"Create","after":"[greater(int(utcNow(''%f'')), + 4)]"}]}],"diagnostics":[{"level":"Warning","code":"NestedDeploymentShortCircuited","target":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment","message":"The + nested deployment ''/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment'' + at line ''1'' and column ''1020'' could not be expanded because it uses outer-mode + evaluation and its template contains expressions that could not be evaluated. + Please see https://aka.ms/WhatIfEvalStopped for more guidance."}]}}' + headers: + cache-control: + - no-cache + content-length: + - '3053' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 29 May 2025 21:39:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: CB138590966643B3B8C9ED417DA26177 Ref B: MNZ221060609023 Ref C: 2025-05-29T21:39:08Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource.py b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource.py index 72850d65e86..f595dd1b2ed 100644 --- a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource.py +++ b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource.py @@ -1968,6 +1968,41 @@ def test_subscription_level_what_if(self): ]) + def test_subscription_level_what_if_with_short_circuiting(self): + curr_dir = os.path.dirname(os.path.realpath(__file__)) + self.kwargs.update({ + 'subscription': self.get_subscription_id(), + 'tf': os.path.join(curr_dir, 'policy_definition_deploy.json').replace('\\', '\\\\'), + 'params': os.path.join(curr_dir, 'policy_definition_deploy_parameters.json').replace('\\', '\\\\'), + }) + + deployment_output = self.cmd('deployment sub create --location westus --template-file "{tf}"').get_output_in_json() + self.kwargs['policy_definition_id'] = deployment_output['properties']['outputs']['policyDefinitionId']['value'] + + self.kwargs.update({ + 'tf': os.path.join(curr_dir, 'policy_definition_deploy_with_short_circuiting.json').replace('\\', '\\\\'), + }) + + # Make sure the formatter works without exception + self.cmd('deployment sub what-if --location westus --template-file "{tf}" --parameters "{params}"') + + self.cmd('deployment sub what-if --location westus --template-file "{tf}" --parameters "{params}" --no-pretty-print', checks=[ + self.check('status', 'Succeeded'), + + self.check("changes[0].changeType", 'Unsupported'), + self.check("changes[0].unsupportedReason", "Changes to the resource declared at 'properties.template.resources[1]' on line 1 and column 698 cannot be analyzed because its resource ID or API version cannot be calculated until the deployment is under way. Please see https://aka.ms/WhatIfUnidentifiableResource for more guidance."), + + self.check("potentialChanges[?resourceId == '{policy_definition_id}'].changeType | [0]", 'Modify'), + self.check("potentialChanges[?resourceId == '{policy_definition_id}'] | [0].delta[?path == 'properties.policyRule.if.equals'] | [0].propertyChangeType", 'Modify'), + self.check("potentialChanges[?resourceId == '{policy_definition_id}'] | [0].delta[?path == 'properties.policyRule.if.equals'] | [0].before", 'northeurope'), + self.check("potentialChanges[?resourceId == '{policy_definition_id}'] | [0].delta[?path == 'properties.policyRule.if.equals'] | [0].after", 'westeurope'), + + self.check("diagnostics[0].code", "NestedDeploymentShortCircuited"), + self.check("diagnostics[0].level", "Warning"), + self.check("diagnostics[0].target", "/subscriptions/{subscription}/providers/Microsoft.Resources/deployments/nestedDeployment"), + ]) + + class DeploymentWhatIfAtManagementGroupTest(ScenarioTest): def test_management_group_level_what_if(self): curr_dir = os.path.dirname(os.path.realpath(__file__)) @@ -5525,7 +5560,7 @@ def test_resource_group_level_deployment_with_bicepparams_and_template_file(self self.cmd('deployment group create --resource-group {rg} --template-file "{tf}" --parameters {params}', checks=[ self.check('properties.provisioningState', 'Succeeded') ]) - + @ResourceGroupPreparer(name_prefix='cli_test_deployment_bicepparam_inline_params') def test_resource_group_level_deployment_with_bicepparams_and_inline_params(self): curr_dir = os.path.dirname(os.path.realpath(__file__)) diff --git a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource_formatters.py b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource_formatters.py index e5ae89267b3..da836449ffe 100644 --- a/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource_formatters.py +++ b/src/azure-cli/azure/cli/command_modules/resource/tests/latest/test_resource_formatters.py @@ -18,8 +18,8 @@ loader = AzCommandsLoader(cli_ctx, resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) cmd = AzCliCommand(loader, "test", None, resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) -WhatIfOperationResult, WhatIfChange, WhatIfPropertyChange, ChangeType, PropertyChangeType = cmd.get_models( - "WhatIfOperationResult", "WhatIfChange", "WhatIfPropertyChange", "ChangeType", "PropertyChangeType", +WhatIfOperationResult, WhatIfChange, WhatIfPropertyChange, ChangeType, PropertyChangeType, DeploymentDiagnosticsDefinition, Level = cmd.get_models( + "WhatIfOperationResult", "WhatIfChange", "WhatIfPropertyChange", "ChangeType", "PropertyChangeType", "DeploymentDiagnosticsDefinition", "Level" ) @@ -182,6 +182,7 @@ def test_resource_changes_stats(self): expected = "\nResource changes: 1 to delete, 2 to create, 1 to modify, 1 to ignore." result = format_what_if_operation_result(WhatIfOperationResult(changes=changes)) + print(result) # For debugging purposes self.assertTrue(result.endswith(expected)) @@ -572,3 +573,25 @@ def test_nested_array_changes(self): result = format_what_if_operation_result(WhatIfOperationResult(changes=changes), False) self.assertIn(expected, result) + + def test_diagnostics(self): + changes = [ + WhatIfChange( + resource_id='''[format('/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}', concat('Microsoft.Authorization/policyDefinitions/', format('{0}_{1}', 'policy-for-what-if-test', if(greater(int(utcNow('%f')), 4), '2', '3'))))]''', + change_type=ChangeType.unsupported, + unsupported_reason="Changes to the resource declared at 'properties.template.resources[1]' on line 1 and column 698 cannot be analyzed because its resource ID or API version cannot be calculated until the deployment is under way. Please see https://aka.ms/WhatIfUnidentifiableResource for more guidance.", + ), + ] + operation_result = WhatIfOperationResult(changes=changes) + diagnostic = DeploymentDiagnosticsDefinition() + diagnostic.code = "NestedDeploymentShortCircuited" + diagnostic.message = "The nested deployment '/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment' at line '1' and column '1020' could not be expanded because it uses outer-mode evaluation and its template contains expressions that could not be evaluated. Please see https://aka.ms/WhatIfEvalStopped for more guidance." + diagnostic.level = Level.WARNING + diagnostic.target = '/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment' + operation_result.diagnostics = [diagnostic] + + result = format_what_if_operation_result(operation_result, True) + + self.assertIn('''[format('/subscriptions/00000000-0000-0000-0000-000000000000/providers/{0}', concat('Microsoft.Authorization/policyDefinitions/', format('{0}_{1}', 'policy-for-what-if-test', if(greater(int(utcNow('%f')), 4), '2', '3'))))] (Unsupported) Changes to the resource declared at 'properties.template.resources[1]' on line 1 and column 698 cannot be analyzed because its resource ID or API version cannot be calculated until the deployment is under way. Please see https://aka.ms/WhatIfUnidentifiableResource for more guidance.''', result) + + self.assertIn('''/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment (NestedDeploymentShortCircuited) The nested deployment '/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Resources/deployments/nestedDeployment' at line '1' and column '1020' could not be expanded because it uses outer-mode evaluation and its template contains expressions that could not be evaluated. Please see https://aka.ms/WhatIfEvalStopped for more guidance.''', result)