From 65f71f24db0773d696c18a1be126a179142fba48 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 9 Mar 2026 17:40:46 +0530 Subject: [PATCH 1/8] vwan failover and resiliency commands added --- .../express_route_gateway/__cmd_group.py | 23 ++ .../network/express_route_gateway/__init__.py | 17 ++ .../_get_failover_all_tests_detail.py | 267 +++++++++++++++++ .../_get_failover_single_test_detail.py | 271 ++++++++++++++++++ .../_get_resiliency_information.py | 253 ++++++++++++++++ .../_get_routes_information.py | 241 ++++++++++++++++ .../_start_site_failover_test.py | 191 ++++++++++++ .../_stop_site_failover_test.py | 247 ++++++++++++++++ 8 files changed, 1510 insertions(+) create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py create mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py new file mode 100644 index 00000000000..0ee958b1ebf --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py @@ -0,0 +1,23 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command_group( + "network express-route-gateway", +) +class __CMDGroup(AAZCommandGroup): + """Manage Express Route Gateway + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py new file mode 100644 index 00000000000..b2d3b30d925 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py @@ -0,0 +1,17 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from .__cmd_group import * +from ._get_failover_all_tests_detail import * +from ._get_failover_single_test_detail import * +from ._get_resiliency_information import * +from ._get_routes_information import * +from ._start_site_failover_test import * +from ._stop_site_failover_test import * diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py new file mode 100644 index 00000000000..8afb705abcc --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py @@ -0,0 +1,267 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway get-failover-all-tests-detail", +) +class GetFailoverAllTestsDetail(AAZCommand): + """This operation retrieves the details of all the failover tests performed on the Virtual Wan ExpressRoute gateways for different peering locations + + :example: VwanExpressRouteGatewayFailoverAllTestsDetails + az network express-route-gateway get-failover-all-tests-detail --resource-group ExpressRouteVWan_ResiliencyValidation_Playwright_Tests --express-route-gateway-name b982dc4450f5406ba6d4344e15575138-eastus-er-gw --type SingleSiteFailover --fetch-latest True + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/getfailoveralltestsdetails", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the vwan express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.fetch_latest = AAZBoolArg( + options=["--fetch-latest"], + help="Fetch only the latest tests for each peering location", + required=True, + ) + _args_schema.type = AAZStrArg( + options=["--type"], + help="The type of failover test", + required=True, + enum={"All": "All", "LinkFailover": "LinkFailover", "MultiSiteFailover": "MultiSiteFailover", "SingleSiteFailover": "SingleSiteFailover"}, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysGetFailoverAllTestsDetails(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class ExpressRouteGatewaysGetFailoverAllTestsDetails(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/getFailoverAllTestsDetails", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "fetchLatest", self.ctx.args.fetch_latest, + required=True, + ), + **self.serialize_query_param( + "type", self.ctx.args.type, + required=True, + ), + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZListType() + + _schema_on_200 = cls._schema_on_200 + _schema_on_200.Element = AAZObjectType() + + _element = cls._schema_on_200.Element + _element.circuits = AAZListType( + flags={"read_only": True}, + ) + _element.connections = AAZListType( + flags={"read_only": True}, + ) + _element.end_time = AAZStrType( + serialized_name="endTime", + flags={"read_only": True}, + ) + _element.issues = AAZListType( + flags={"read_only": True}, + ) + _element.peering_location = AAZStrType( + serialized_name="peeringLocation", + flags={"read_only": True}, + ) + _element.start_time = AAZStrType( + serialized_name="startTime", + flags={"read_only": True}, + ) + _element.status = AAZStrType( + flags={"read_only": True}, + ) + _element.test_guid = AAZStrType( + serialized_name="testGuid", + flags={"read_only": True}, + ) + _element.test_type = AAZStrType( + serialized_name="testType", + flags={"read_only": True}, + ) + + circuits = cls._schema_on_200.Element.circuits + circuits.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.circuits.Element + _element.connection_name = AAZStrType( + serialized_name="connectionName", + ) + _element.name = AAZStrType() + _element.nrp_resource_uri = AAZStrType( + serialized_name="nrpResourceUri", + ) + + connections = cls._schema_on_200.Element.connections + connections.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.connections.Element + _element.last_updated_time = AAZStrType( + serialized_name="lastUpdatedTime", + flags={"read_only": True}, + ) + _element.name = AAZStrType() + _element.nrp_resource_uri = AAZStrType( + serialized_name="nrpResourceUri", + ) + _element.status = AAZStrType() + + issues = cls._schema_on_200.Element.issues + issues.Element = AAZStrType() + + return cls._schema_on_200 + + +class _GetFailoverAllTestsDetailHelper: + """Helper class for GetFailoverAllTestsDetail""" + + +__all__ = ["GetFailoverAllTestsDetail"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py new file mode 100644 index 00000000000..c14f03a38a2 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py @@ -0,0 +1,271 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway get-failover-single-test-detail", +) +class GetFailoverSingleTestDetail(AAZCommand): + """This operation retrieves the details of a particular failover test performed on the vwan expressRouteGateway based on the test Guid + + :example: VwanExpressRouteGatewayFailoverSingleTestDetails + az network express-route-gateway get-failover-single-test-detail --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver --failover-test-id fe458ae8-d2ae-4520-a104-44bc233bde7e + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/getfailoversingletestdetails", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the vwan express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.failover_test_id = AAZStrArg( + options=["--failover-test-id"], + help="The unique Guid value which identifies the test", + required=True, + ) + _args_schema.peering_location = AAZStrArg( + options=["--peering-location"], + help="Peering location of the test", + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysGetFailoverSingleTestDetails(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class ExpressRouteGatewaysGetFailoverSingleTestDetails(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/getFailoverSingleTestDetails", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "failoverTestId", self.ctx.args.failover_test_id, + required=True, + ), + **self.serialize_query_param( + "peeringLocation", self.ctx.args.peering_location, + required=True, + ), + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZListType() + + _schema_on_200 = cls._schema_on_200 + _schema_on_200.Element = AAZObjectType() + + _element = cls._schema_on_200.Element + _element.attestation = AAZBoolType( + flags={"read_only": True}, + ) + _element.end_time = AAZStrType( + serialized_name="endTime", + flags={"read_only": True}, + ) + _element.failover_connection_details = AAZListType( + serialized_name="failoverConnectionDetails", + flags={"read_only": True}, + ) + _element.non_redundant_routes = AAZListType( + serialized_name="nonRedundantRoutes", + flags={"read_only": True}, + ) + _element.peering_location = AAZStrType( + serialized_name="peeringLocation", + flags={"read_only": True}, + ) + _element.redundant_routes = AAZListType( + serialized_name="redundantRoutes", + flags={"read_only": True}, + ) + _element.start_time = AAZStrType( + serialized_name="startTime", + flags={"read_only": True}, + ) + _element.status = AAZStrType( + flags={"read_only": True}, + ) + _element.was_simulation_successful = AAZBoolType( + serialized_name="wasSimulationSuccessful", + flags={"read_only": True}, + ) + + failover_connection_details = cls._schema_on_200.Element.failover_connection_details + failover_connection_details.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.failover_connection_details.Element + _element.failover_connection_name = AAZStrType( + serialized_name="failoverConnectionName", + ) + _element.failover_location = AAZStrType( + serialized_name="failoverLocation", + ) + _element.is_verified = AAZBoolType( + serialized_name="isVerified", + ) + + non_redundant_routes = cls._schema_on_200.Element.non_redundant_routes + non_redundant_routes.Element = AAZStrType() + + redundant_routes = cls._schema_on_200.Element.redundant_routes + redundant_routes.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.redundant_routes.Element + _element.peering_locations = AAZListType( + serialized_name="peeringLocations", + ) + _element.routes = AAZListType() + + peering_locations = cls._schema_on_200.Element.redundant_routes.Element.peering_locations + peering_locations.Element = AAZStrType() + + routes = cls._schema_on_200.Element.redundant_routes.Element.routes + routes.Element = AAZStrType() + + return cls._schema_on_200 + + +class _GetFailoverSingleTestDetailHelper: + """Helper class for GetFailoverSingleTestDetail""" + + +__all__ = ["GetFailoverSingleTestDetail"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py new file mode 100644 index 00000000000..ac79442e358 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py @@ -0,0 +1,253 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway get-resiliency-information", +) +class GetResiliencyInformation(AAZCommand): + """This operation retrieves the resiliency information for VWAN ExpressRoute Gateway, including the gateway's current resiliency score and recommendations to further improve the score + + :example: VwanExpressRouteGatewayGetResiliencyInformation + az network express-route-gateway get-resiliency-information --resource-group rg1 --express-route-gateway-name ergw --attempt-refresh True + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/getresiliencyinformation", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the vwan express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.attempt_refresh = AAZBoolArg( + options=["--attempt-refresh"], + help="Attempt to recalculate the Resiliency Information for the gateway", + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysGetResiliencyInformation(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class ExpressRouteGatewaysGetResiliencyInformation(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/getResiliencyInformation", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "attemptRefresh", self.ctx.args.attempt_refresh, + ), + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZObjectType() + + _schema_on_200 = cls._schema_on_200 + _schema_on_200.components = AAZListType( + flags={"read_only": True}, + ) + _schema_on_200.last_computed_time = AAZStrType( + serialized_name="lastComputedTime", + flags={"read_only": True}, + ) + _schema_on_200.max_score_from_recommendations = AAZStrType( + serialized_name="maxScoreFromRecommendations", + flags={"read_only": True}, + ) + _schema_on_200.min_score_from_recommendations = AAZStrType( + serialized_name="minScoreFromRecommendations", + flags={"read_only": True}, + ) + _schema_on_200.next_eligible_compute_time = AAZStrType( + serialized_name="nextEligibleComputeTime", + flags={"read_only": True}, + ) + _schema_on_200.overall_score = AAZStrType( + serialized_name="overallScore", + flags={"read_only": True}, + ) + _schema_on_200.score_change = AAZStrType( + serialized_name="scoreChange", + flags={"read_only": True}, + ) + + components = cls._schema_on_200.components + components.Element = AAZObjectType() + + _element = cls._schema_on_200.components.Element + _element.current_score = AAZStrType( + serialized_name="currentScore", + ) + _element.max_score = AAZStrType( + serialized_name="maxScore", + ) + _element.name = AAZStrType() + _element.recommendations = AAZListType() + + recommendations = cls._schema_on_200.components.Element.recommendations + recommendations.Element = AAZObjectType() + + _element = cls._schema_on_200.components.Element.recommendations.Element + _element.call_to_action_link = AAZStrType( + serialized_name="callToActionLink", + ) + _element.call_to_action_text = AAZStrType( + serialized_name="callToActionText", + ) + _element.details = AAZStrType() + _element.recommendation_id = AAZStrType( + serialized_name="recommendationId", + ) + _element.recommendation_text = AAZStrType( + serialized_name="recommendationText", + ) + _element.recommendation_title = AAZStrType( + serialized_name="recommendationTitle", + ) + _element.severity = AAZStrType() + + return cls._schema_on_200 + + +class _GetResiliencyInformationHelper: + """Helper class for GetResiliencyInformation""" + + +__all__ = ["GetResiliencyInformation"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py new file mode 100644 index 00000000000..dff3facc1b3 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py @@ -0,0 +1,241 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway get-routes-information", +) +class GetRoutesInformation(AAZCommand): + """This operation retrieves the route set information for Vwan Express Route Gateway based on their resiliency + + :example: VwanExpressRouteGatewayGetRoutesInformation + az network express-route-gateway get-routes-information --resource-group rg1 --express-route-gateway-name ergw --attempt-refresh False + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/getroutesinformation", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the vwan express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.attempt_refresh = AAZBoolArg( + options=["--attempt-refresh"], + help="Attempt to recalculate the Route Sets Information for the gateway", + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysGetRoutesInformation(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class ExpressRouteGatewaysGetRoutesInformation(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/getRoutesInformation", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "attemptRefresh", self.ctx.args.attempt_refresh, + ), + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZObjectType() + + _schema_on_200 = cls._schema_on_200 + _schema_on_200.circuits_metadata_map = AAZDictType( + serialized_name="circuitsMetadataMap", + flags={"read_only": True}, + ) + _schema_on_200.last_computed_time = AAZStrType( + serialized_name="lastComputedTime", + flags={"read_only": True}, + ) + _schema_on_200.next_eligible_compute_time = AAZStrType( + serialized_name="nextEligibleComputeTime", + flags={"read_only": True}, + ) + _schema_on_200.route_set_version = AAZStrType( + serialized_name="routeSetVersion", + flags={"read_only": True}, + ) + _schema_on_200.route_sets = AAZListType( + serialized_name="routeSets", + flags={"read_only": True}, + ) + + circuits_metadata_map = cls._schema_on_200.circuits_metadata_map + circuits_metadata_map.Element = AAZObjectType() + + _element = cls._schema_on_200.circuits_metadata_map.Element + _element.link = AAZStrType() + _element.location = AAZStrType() + _element.name = AAZStrType() + + route_sets = cls._schema_on_200.route_sets + route_sets.Element = AAZObjectType() + + _element = cls._schema_on_200.route_sets.Element + _element.details = AAZDictType() + _element.locations = AAZListType() + _element.name = AAZStrType() + + details = cls._schema_on_200.route_sets.Element.details + details.Element = AAZListType() + + _element = cls._schema_on_200.route_sets.Element.details.Element + _element.Element = AAZObjectType() + + _element = cls._schema_on_200.route_sets.Element.details.Element.Element + _element.circuit = AAZStrType() + _element.pri = AAZStrType() + _element.sec = AAZStrType() + + locations = cls._schema_on_200.route_sets.Element.locations + locations.Element = AAZStrType() + + return cls._schema_on_200 + + +class _GetRoutesInformationHelper: + """Helper class for GetRoutesInformation""" + + +__all__ = ["GetRoutesInformation"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py new file mode 100644 index 00000000000..6cbbf0009d9 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py @@ -0,0 +1,191 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway start-site-failover-test", +) +class StartSiteFailoverTest(AAZCommand): + """This operation starts failover simulation on the vwan expressRouteGateway for the specified peering location + + :example: VwanExpressRouteGatewayStartSiteFailoverSimulation + az network express-route-gateway start-site-failover-test --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/startsitefailovertest", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.peering_location = AAZStrArg( + options=["--peering-location"], + help="Peering location of the test", + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysStartSiteFailoverTest(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=False) + return result + + class ExpressRouteGatewaysStartSiteFailoverTest(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/startSiteFailoverTest", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "peeringLocation", self.ctx.args.peering_location, + required=True, + ), + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZStrType() + + return cls._schema_on_200 + + +class _StartSiteFailoverTestHelper: + """Helper class for StartSiteFailoverTest""" + + +__all__ = ["StartSiteFailoverTest"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py new file mode 100644 index 00000000000..19b2d68dcfb --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py @@ -0,0 +1,247 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "network express-route-gateway stop-site-failover-test", +) +class StopSiteFailoverTest(AAZCommand): + """This operation stops an ongoing failover simulation on the vwan expressRouteGateway for the specified peering location + + :example: VwanExpressRouteGatewayStopSiteFailoverSimulation + az network express-route-gateway stop-site-failover-test --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver --was-simulation-successful True --details "[{failover-connection-name:conn1,failover-location:Denver,is-verified:False},{failover-connection-name:conn2,failover-location:Amsterdam,is-verified:True}]" + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutegateways/{}/stopsitefailovertest", "2025-07-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, self._output) + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.express_route_gateway_name = AAZStrArg( + options=["--express-route-gateway-name"], + help="The name of the express route gateway.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + + # define Arg Group "StopParameters" + + _args_schema = cls._args_schema + _args_schema.details = AAZListArg( + options=["--details"], + arg_group="StopParameters", + help="List of all the failover connections for this peering location", + required=True, + ) + _args_schema.peering_location = AAZStrArg( + options=["--peering-location"], + arg_group="StopParameters", + help="Peering location of the test", + required=True, + ) + _args_schema.was_simulation_successful = AAZBoolArg( + options=["--was-simulation-successful"], + arg_group="StopParameters", + help="Whether the failover simulation was successful or not", + required=True, + ) + + details = cls._args_schema.details + details.Element = AAZObjectArg() + + _element = cls._args_schema.details.Element + _element.failover_connection_name = AAZStrArg( + options=["failover-connection-name"], + help="Name of the failover connection", + ) + _element.failover_location = AAZStrArg( + options=["failover-location"], + help="Location of the failover connection", + ) + _element.is_verified = AAZBoolArg( + options=["is-verified"], + help="Whether the customer was able to establish connectivity through this failover connection or not", + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteGatewaysStopSiteFailoverTest(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=False) + return result + + class ExpressRouteGatewaysStopSiteFailoverTest(AAZHttpOperation): + CLIENT_TYPE = "MgmtClient" + + def __call__(self, *args, **kwargs): + request = self.make_request() + session = self.client.send_request(request=request, stream=False, **kwargs) + if session.http_response.status_code in [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/expressRouteGateways/{expressRouteGatewayName}/stopSiteFailoverTest", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + required=True, + ), + **self.serialize_url_param( + "subscriptionId", self.ctx.subscription_id, + required=True, + ), + } + return parameters + + @property + def query_parameters(self): + parameters = { + **self.serialize_query_param( + "api-version", "2025-07-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Content-Type", "application/json", + ), + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + @property + def content(self): + _content_value, _builder = self.new_content_builder( + self.ctx.args, + typ=AAZObjectType, + typ_kwargs={"flags": {"required": True, "client_flatten": True}} + ) + _builder.set_prop("details", AAZListType, ".details", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("peeringLocation", AAZStrType, ".peering_location", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("wasSimulationSuccessful", AAZBoolType, ".was_simulation_successful", typ_kwargs={"flags": {"required": True}}) + + details = _builder.get(".details") + if details is not None: + details.set_elements(AAZObjectType, ".") + + _elements = _builder.get(".details[]") + if _elements is not None: + _elements.set_prop("failoverConnectionName", AAZStrType, ".failover_connection_name") + _elements.set_prop("failoverLocation", AAZStrType, ".failover_location") + _elements.set_prop("isVerified", AAZBoolType, ".is_verified") + + return self.serialize_content(_content_value) + + def on_200(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200 + ) + + _schema_on_200 = None + + @classmethod + def _build_schema_on_200(cls): + if cls._schema_on_200 is not None: + return cls._schema_on_200 + + cls._schema_on_200 = AAZStrType() + + return cls._schema_on_200 + + +class _StopSiteFailoverTestHelper: + """Helper class for StopSiteFailoverTest""" + + +__all__ = ["StopSiteFailoverTest"] From 9024b8d2e6248722620fb82074315c289a8ab9e0 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 16 Mar 2026 15:02:46 +0530 Subject: [PATCH 2/8] parameter names fixed --- .../express_route_gateway/_get_failover_all_tests_detail.py | 4 ++-- .../express_route_gateway/_get_failover_single_test_detail.py | 4 ++-- .../express_route_gateway/_get_resiliency_information.py | 4 ++-- .../network/express_route_gateway/_get_routes_information.py | 4 ++-- .../express_route_gateway/_start_site_failover_test.py | 4 ++-- .../network/express_route_gateway/_stop_site_failover_test.py | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py index 8afb705abcc..29a33afc194 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py @@ -18,7 +18,7 @@ class GetFailoverAllTestsDetail(AAZCommand): """This operation retrieves the details of all the failover tests performed on the Virtual Wan ExpressRoute gateways for different peering locations :example: VwanExpressRouteGatewayFailoverAllTestsDetails - az network express-route-gateway get-failover-all-tests-detail --resource-group ExpressRouteVWan_ResiliencyValidation_Playwright_Tests --express-route-gateway-name b982dc4450f5406ba6d4344e15575138-eastus-er-gw --type SingleSiteFailover --fetch-latest True + az network express-route-gateway get-failover-all-tests-detail --resource-group rg1 --name ergw1 --type SingleSiteFailover --fetch-latest True """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py index c14f03a38a2..d1ed38f614a 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py @@ -18,7 +18,7 @@ class GetFailoverSingleTestDetail(AAZCommand): """This operation retrieves the details of a particular failover test performed on the vwan expressRouteGateway based on the test Guid :example: VwanExpressRouteGatewayFailoverSingleTestDetails - az network express-route-gateway get-failover-single-test-detail --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver --failover-test-id fe458ae8-d2ae-4520-a104-44bc233bde7e + az network express-route-gateway get-failover-single-test-detail --resource-group rg1 --name ergw --peering-location Vancouver --failover-test-id fe458ae8-d2ae-4520-a104-44bc233bde7e """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py index ac79442e358..f44d970db48 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py @@ -18,7 +18,7 @@ class GetResiliencyInformation(AAZCommand): """This operation retrieves the resiliency information for VWAN ExpressRoute Gateway, including the gateway's current resiliency score and recommendations to further improve the score :example: VwanExpressRouteGatewayGetResiliencyInformation - az network express-route-gateway get-resiliency-information --resource-group rg1 --express-route-gateway-name ergw --attempt-refresh True + az network express-route-gateway get-resiliency-information --resource-group rg1 --name ergw --attempt-refresh True """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py index dff3facc1b3..cf3fd84e6da 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py @@ -18,7 +18,7 @@ class GetRoutesInformation(AAZCommand): """This operation retrieves the route set information for Vwan Express Route Gateway based on their resiliency :example: VwanExpressRouteGatewayGetRoutesInformation - az network express-route-gateway get-routes-information --resource-group rg1 --express-route-gateway-name ergw --attempt-refresh False + az network express-route-gateway get-routes-information --resource-group rg1 --name ergw --attempt-refresh False """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py index 6cbbf0009d9..62596306ec3 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py @@ -18,7 +18,7 @@ class StartSiteFailoverTest(AAZCommand): """This operation starts failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStartSiteFailoverSimulation - az network express-route-gateway start-site-failover-test --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver + az network express-route-gateway start-site-failover-test --resource-group rg1 --name ergw --peering-location Vancouver """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the express route gateway.", required=True, id_part="name", diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py index 19b2d68dcfb..4f4bc58b242 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py @@ -18,7 +18,7 @@ class StopSiteFailoverTest(AAZCommand): """This operation stops an ongoing failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStopSiteFailoverSimulation - az network express-route-gateway stop-site-failover-test --resource-group rg1 --express-route-gateway-name ergw --peering-location Vancouver --was-simulation-successful True --details "[{failover-connection-name:conn1,failover-location:Denver,is-verified:False},{failover-connection-name:conn2,failover-location:Amsterdam,is-verified:True}]" + az network express-route-gateway stop-site-failover-test --resource-group rg1 --name ergw --peering-location Vancouver --simulation-successful True --details "[{failover-connection-name:conn1,failover-location:Denver,is-verified:False},{failover-connection-name:conn2,failover-location:Amsterdam,is-verified:True}]" """ _aaz_info = { @@ -46,7 +46,7 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.express_route_gateway_name = AAZStrArg( - options=["--express-route-gateway-name"], + options=["--name"], help="The name of the express route gateway.", required=True, id_part="name", From fd2ebea216e82e9d88b1a586418cbba3206e64e9 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 16 Mar 2026 15:38:58 +0530 Subject: [PATCH 3/8] parameter names fixed --- .../network/express_route_gateway/_stop_site_failover_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py index 4f4bc58b242..c59aa9efb5b 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py @@ -74,7 +74,7 @@ def _build_arguments_schema(cls, *args, **kwargs): required=True, ) _args_schema.was_simulation_successful = AAZBoolArg( - options=["--was-simulation-successful"], + options=["--simulation-successful"], arg_group="StopParameters", help="Whether the failover simulation was successful or not", required=True, From 4362874d971374f87b3db80625bed9055f9ae9fa Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 30 Mar 2026 20:15:09 +0530 Subject: [PATCH 4/8] Updated APIs after swagger change --- .../_get_failover_all_tests_detail.py | 27 +++++++++------- .../_get_failover_single_test_detail.py | 31 ++++++++++--------- .../_get_resiliency_information.py | 8 ++--- .../_get_routes_information.py | 12 +++---- .../_start_site_failover_test.py | 10 +++--- .../_stop_site_failover_test.py | 14 ++++----- 6 files changed, 54 insertions(+), 48 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py index 29a33afc194..60182d6ce39 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py @@ -18,7 +18,7 @@ class GetFailoverAllTestsDetail(AAZCommand): """This operation retrieves the details of all the failover tests performed on the Virtual Wan ExpressRoute gateways for different peering locations :example: VwanExpressRouteGatewayFailoverAllTestsDetails - az network express-route-gateway get-failover-all-tests-detail --resource-group rg1 --name ergw1 --type SingleSiteFailover --fetch-latest True + az network express-route-gateway get-failover-all-tests-detail --resource-group "rg1" --name "ergw1" --type "SingleSiteFailover" --fetch-latest True """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -133,7 +133,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( @@ -189,12 +189,15 @@ def _build_schema_on_200(cls): if cls._schema_on_200 is not None: return cls._schema_on_200 - cls._schema_on_200 = AAZListType() + cls._schema_on_200 = AAZObjectType() _schema_on_200 = cls._schema_on_200 - _schema_on_200.Element = AAZObjectType() + _schema_on_200.value = AAZListType() - _element = cls._schema_on_200.Element + value = cls._schema_on_200.value + value.Element = AAZObjectType() + + _element = cls._schema_on_200.value.Element _element.circuits = AAZListType( flags={"read_only": True}, ) @@ -228,10 +231,10 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - circuits = cls._schema_on_200.Element.circuits + circuits = cls._schema_on_200.value.Element.circuits circuits.Element = AAZObjectType() - _element = cls._schema_on_200.Element.circuits.Element + _element = cls._schema_on_200.value.Element.circuits.Element _element.connection_name = AAZStrType( serialized_name="connectionName", ) @@ -240,10 +243,10 @@ def _build_schema_on_200(cls): serialized_name="nrpResourceUri", ) - connections = cls._schema_on_200.Element.connections + connections = cls._schema_on_200.value.Element.connections connections.Element = AAZObjectType() - _element = cls._schema_on_200.Element.connections.Element + _element = cls._schema_on_200.value.Element.connections.Element _element.last_updated_time = AAZStrType( serialized_name="lastUpdatedTime", flags={"read_only": True}, @@ -254,7 +257,7 @@ def _build_schema_on_200(cls): ) _element.status = AAZStrType() - issues = cls._schema_on_200.Element.issues + issues = cls._schema_on_200.value.Element.issues issues.Element = AAZStrType() return cls._schema_on_200 diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py index d1ed38f614a..671a355eb20 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py @@ -18,7 +18,7 @@ class GetFailoverSingleTestDetail(AAZCommand): """This operation retrieves the details of a particular failover test performed on the vwan expressRouteGateway based on the test Guid :example: VwanExpressRouteGatewayFailoverSingleTestDetails - az network express-route-gateway get-failover-single-test-detail --resource-group rg1 --name ergw --peering-location Vancouver --failover-test-id fe458ae8-d2ae-4520-a104-44bc233bde7e + az network express-route-gateway get-failover-single-test-detail --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --failover-test-id "fe458ae8-d2ae-4520-a104-44bc233bde7e" """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -132,7 +132,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( @@ -188,12 +188,15 @@ def _build_schema_on_200(cls): if cls._schema_on_200 is not None: return cls._schema_on_200 - cls._schema_on_200 = AAZListType() + cls._schema_on_200 = AAZObjectType() _schema_on_200 = cls._schema_on_200 - _schema_on_200.Element = AAZObjectType() + _schema_on_200.value = AAZListType() - _element = cls._schema_on_200.Element + value = cls._schema_on_200.value + value.Element = AAZObjectType() + + _element = cls._schema_on_200.value.Element _element.attestation = AAZBoolType( flags={"read_only": True}, ) @@ -229,10 +232,10 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - failover_connection_details = cls._schema_on_200.Element.failover_connection_details + failover_connection_details = cls._schema_on_200.value.Element.failover_connection_details failover_connection_details.Element = AAZObjectType() - _element = cls._schema_on_200.Element.failover_connection_details.Element + _element = cls._schema_on_200.value.Element.failover_connection_details.Element _element.failover_connection_name = AAZStrType( serialized_name="failoverConnectionName", ) @@ -243,22 +246,22 @@ def _build_schema_on_200(cls): serialized_name="isVerified", ) - non_redundant_routes = cls._schema_on_200.Element.non_redundant_routes + non_redundant_routes = cls._schema_on_200.value.Element.non_redundant_routes non_redundant_routes.Element = AAZStrType() - redundant_routes = cls._schema_on_200.Element.redundant_routes + redundant_routes = cls._schema_on_200.value.Element.redundant_routes redundant_routes.Element = AAZObjectType() - _element = cls._schema_on_200.Element.redundant_routes.Element + _element = cls._schema_on_200.value.Element.redundant_routes.Element _element.peering_locations = AAZListType( serialized_name="peeringLocations", ) _element.routes = AAZListType() - peering_locations = cls._schema_on_200.Element.redundant_routes.Element.peering_locations + peering_locations = cls._schema_on_200.value.Element.redundant_routes.Element.peering_locations peering_locations.Element = AAZStrType() - routes = cls._schema_on_200.Element.redundant_routes.Element.routes + routes = cls._schema_on_200.value.Element.redundant_routes.Element.routes routes.Element = AAZStrType() return cls._schema_on_200 diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py index f44d970db48..b686a4ffc6b 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py @@ -18,7 +18,7 @@ class GetResiliencyInformation(AAZCommand): """This operation retrieves the resiliency information for VWAN ExpressRoute Gateway, including the gateway's current resiliency score and recommendations to further improve the score :example: VwanExpressRouteGatewayGetResiliencyInformation - az network express-route-gateway get-resiliency-information --resource-group rg1 --name ergw --attempt-refresh True + az network express-route-gateway get-resiliency-information --resource-group "rg1" --name "ergw" --attempt-refresh True """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -126,7 +126,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py index cf3fd84e6da..30fe36b0fe0 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py @@ -18,7 +18,7 @@ class GetRoutesInformation(AAZCommand): """This operation retrieves the route set information for Vwan Express Route Gateway based on their resiliency :example: VwanExpressRouteGatewayGetRoutesInformation - az network express-route-gateway get-routes-information --resource-group rg1 --name ergw --attempt-refresh False + az network express-route-gateway get-routes-information --resource-group "rg1" --name "ergw" --attempt-refresh False """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -126,7 +126,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( @@ -225,8 +225,8 @@ def _build_schema_on_200(cls): _element = cls._schema_on_200.route_sets.Element.details.Element.Element _element.circuit = AAZStrType() - _element.pri = AAZStrType() - _element.sec = AAZStrType() + _element.pri = AAZIntType() + _element.sec = AAZIntType() locations = cls._schema_on_200.route_sets.Element.locations locations.Element = AAZStrType() diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py index 62596306ec3..defb4d6cf08 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py @@ -18,7 +18,7 @@ class StartSiteFailoverTest(AAZCommand): """This operation starts failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStartSiteFailoverSimulation - az network express-route-gateway start-site-failover-test --resource-group rg1 --name ergw --peering-location Vancouver + az network express-route-gateway start-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], - help="The name of the express route gateway.", + help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -127,7 +127,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py index c59aa9efb5b..d8231302115 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py @@ -18,7 +18,7 @@ class StopSiteFailoverTest(AAZCommand): """This operation stops an ongoing failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStopSiteFailoverSimulation - az network express-route-gateway stop-site-failover-test --resource-group rg1 --name ergw --peering-location Vancouver --simulation-successful True --details "[{failover-connection-name:conn1,failover-location:Denver,is-verified:False},{failover-connection-name:conn2,failover-location:Amsterdam,is-verified:True}]" + az network express-route-gateway stop-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --simulation-successful True --details "[{failover-connection-name:'conn1',failover-location:'Denver',is-verified:False},{failover-connection-name:'conn2',failover-location:'Amsterdam',is-verified:True}]" """ _aaz_info = { @@ -45,13 +45,13 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.express_route_gateway_name = AAZStrArg( + _args_schema.name = AAZStrArg( options=["--name"], - help="The name of the express route gateway.", + help="The name of the vwan express route gateway.", required=True, id_part="name", fmt=AAZStrArgFormat( - pattern="^[A-Za-z0-9_]+", + pattern="^[A-Za-z0-9_-]+", ), ) _args_schema.resource_group = AAZResourceGroupNameArg( @@ -73,7 +73,7 @@ def _build_arguments_schema(cls, *args, **kwargs): help="Peering location of the test", required=True, ) - _args_schema.was_simulation_successful = AAZBoolArg( + _args_schema.simulation_successful = AAZBoolArg( options=["--simulation-successful"], arg_group="StopParameters", help="Whether the failover simulation was successful or not", @@ -161,7 +161,7 @@ def error_format(self): def url_parameters(self): parameters = { **self.serialize_url_param( - "expressRouteGatewayName", self.ctx.args.express_route_gateway_name, + "expressRouteGatewayName", self.ctx.args.name, required=True, ), **self.serialize_url_param( @@ -206,7 +206,7 @@ def content(self): ) _builder.set_prop("details", AAZListType, ".details", typ_kwargs={"flags": {"required": True}}) _builder.set_prop("peeringLocation", AAZStrType, ".peering_location", typ_kwargs={"flags": {"required": True}}) - _builder.set_prop("wasSimulationSuccessful", AAZBoolType, ".was_simulation_successful", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("wasSimulationSuccessful", AAZBoolType, ".simulation_successful", typ_kwargs={"flags": {"required": True}}) details = _builder.get(".details") if details is not None: From f4b34fe250188ecf46c837b341b533f2520d307d Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Tue, 31 Mar 2026 16:42:17 +0530 Subject: [PATCH 5/8] Scenario Tests added --- ...ess_route_gateway_failover_operations.yaml | 2020 ++++ ...s_route_gateway_routes_and_resiliency.yaml | 2244 ++++ .../tests/latest/test_network_commands.py | 9005 +---------------- 3 files changed, 4393 insertions(+), 8876 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover_operations.yaml create mode 100644 src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover_operations.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover_operations.yaml new file mode 100644 index 00000000000..82e8889cd83 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover_operations.yaml @@ -0,0 +1,2020 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_failover000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001","name":"test_express_route_gateway_failover000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_failover_operations","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.4453851Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '484' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:44 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: 10D40B2008994623BDEB85D3E1F0F0D7 Ref B: PNQ231110906054 Ref C: 2026-03-31T09:00:44Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan?api-version=2022-07-01 + response: + body: + string: '{"name":"test-vwan","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan","etag":"W/\"f1ebd7de-31c8-444c-9e89-5060f997a629\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Updating","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/a15f2a85-077a-437a-b89f-257952ca1e35?api-version=2022-07-01&t=639105444456779423&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=VMD_ydmbkUf9q99Dd3WmsKXGR_-jBtOhQf6Eh5PM9NQAmoFhC5ZCqmflaYNeNKcu5u9ppzQvdTVEhAo8SwrjLEFmZzmR99kAtRPYkd-iLH9gk9gCTjyBbhyjxNdS1_8IzN1fNsFi5fG8Zt_mqzF6PSd3JSiHuozVhy55G6HlrkLTVcL39BkqIgity3K2ymv0uXLveAH7RKKuuGGOkG1DX3v0s2bKr4RbZlOzhP1wou3eATeUJWsgUqwJNV7jftGS_3msn34uniPLgmvMRy7gTkDiEei7_38z3HhDYDgahQhNBV7Iey64Kr4P15mypQcx2asR6JMbK8zL_sRP0E0wzQ&h=VJFT6iAw8y1Vu3sjV6G-kBOVZ2n4Z8qZJFzEgi64beE + cache-control: + - no-cache + content-length: + - '464' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:44 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 991147ed-77fe-4c0c-afee-08b6aca781b0 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/3d066c0f-a222-4a6b-b5ba-30e2b12144d0 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: A48A72F77280490FBFB055E6AA0BC73E Ref B: PNQ231110907054 Ref C: 2026-03-31T09:00:45Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/a15f2a85-077a-437a-b89f-257952ca1e35?api-version=2022-07-01&t=639105444456779423&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=VMD_ydmbkUf9q99Dd3WmsKXGR_-jBtOhQf6Eh5PM9NQAmoFhC5ZCqmflaYNeNKcu5u9ppzQvdTVEhAo8SwrjLEFmZzmR99kAtRPYkd-iLH9gk9gCTjyBbhyjxNdS1_8IzN1fNsFi5fG8Zt_mqzF6PSd3JSiHuozVhy55G6HlrkLTVcL39BkqIgity3K2ymv0uXLveAH7RKKuuGGOkG1DX3v0s2bKr4RbZlOzhP1wou3eATeUJWsgUqwJNV7jftGS_3msn34uniPLgmvMRy7gTkDiEei7_38z3HhDYDgahQhNBV7Iey64Kr4P15mypQcx2asR6JMbK8zL_sRP0E0wzQ&h=VJFT6iAw8y1Vu3sjV6G-kBOVZ2n4Z8qZJFzEgi64beE + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:45 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f7d4177c-a865-498e-bc84-cfbbbf197bda + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/c49d325c-1dcf-4809-8ac7-b4a3b14664ec + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 89C7F085823A4AADB7C2A8A6D6F7B6B7 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:00:45Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/a15f2a85-077a-437a-b89f-257952ca1e35?api-version=2022-07-01&t=639105444456779423&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=VMD_ydmbkUf9q99Dd3WmsKXGR_-jBtOhQf6Eh5PM9NQAmoFhC5ZCqmflaYNeNKcu5u9ppzQvdTVEhAo8SwrjLEFmZzmR99kAtRPYkd-iLH9gk9gCTjyBbhyjxNdS1_8IzN1fNsFi5fG8Zt_mqzF6PSd3JSiHuozVhy55G6HlrkLTVcL39BkqIgity3K2ymv0uXLveAH7RKKuuGGOkG1DX3v0s2bKr4RbZlOzhP1wou3eATeUJWsgUqwJNV7jftGS_3msn34uniPLgmvMRy7gTkDiEei7_38z3HhDYDgahQhNBV7Iey64Kr4P15mypQcx2asR6JMbK8zL_sRP0E0wzQ&h=VJFT6iAw8y1Vu3sjV6G-kBOVZ2n4Z8qZJFzEgi64beE + response: + body: + string: '{"status":"Succeeded"}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:56 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - db980551-e29e-4066-a1ed-33911e7f205b + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/73459e11-34b6-457d-8486-bed604fbd009 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C6083A676EB243F19D343762EB4B55D5 Ref B: PNQ231110908060 Ref C: 2026-03-31T09:00:56Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan?api-version=2022-07-01 + response: + body: + string: '{"name":"test-vwan","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan","etag":"W/\"00afe9ac-a40c-4dc3-9f64-557a7e19c02d\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Succeeded","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '465' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:57 GMT + etag: + - W/"00afe9ac-a40c-4dc3-9f64-557a7e19c02d" + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f3464058-c768-4191-ac1c-97fd4ff9ed6b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 648AB739121448B98671D79931AF7B3F Ref B: PNQ231110906054 Ref C: 2026-03-31T09:00:57Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_failover000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001","name":"test_express_route_gateway_failover000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_failover_operations","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.4453851Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '484' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:57 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: D05EEA162A264E5FA1D1AE3CE54F1E92 Ref B: PNQ231110909031 Ref C: 2026-03-31T09:00:58Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus", "properties": {"addressPrefix": "10.5.0.0/16", "sku": + "Standard", "virtualWan": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/json + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub","etag":"W/\"4c2f40e7-32d2-4fa0-aba2-6eb820c861c9\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Updating","virtualHubRouteTableV2s":[],"addressPrefix":"10.5.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"None","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + cache-control: + - no-cache + content-length: + - '855' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01: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-arm-service-request-id: + - c1200d7e-906b-41df-b453-6242c3878e94 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/39e3c56f-f63f-4236-99c0-e68f41ede23d + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 17B8A6686CFE4A00B61B0B6E5E85BBDE Ref B: PNQ231110909054 Ref C: 2026-03-31T09:00:58Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01: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-arm-service-request-id: + - fd6b0c4b-edaf-4b27-849c-cb9a0c3e8ce2 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/44df4139-253d-44e8-aba8-1d4ce3c29b3c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E3953B3435C9410F9AB60F421E52B431 Ref B: PNQ231110908062 Ref C: 2026-03-31T09:01:00Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:10 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 08f5bce1-3aea-4ec9-8200-e4724e75c62c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/54625c0c-c389-4f50-8e68-c95b7f3eb358 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2C0D259DF634430EB899EB422E4FEE12 Ref B: PNQ231110907062 Ref C: 2026-03-31T09:01:11Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01: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-arm-service-request-id: + - 9b427dbc-76e9-45fe-893d-3902dbd8ee57 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/208a28c3-ca69-4db3-9dce-f7a32b6228d9 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C0B6937C985447BC894443FF65C56CF8 Ref B: PNQ231110909034 Ref C: 2026-03-31T09:01:31Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 14624e43-1592-492b-aa5f-f024a7e42b60 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/af85785e-52c9-4d25-8a14-6719a17f3902 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 21A3AC76C97C4DA4A4633D7DD9CB5859 Ref B: PNQ231110906040 Ref C: 2026-03-31T09:01:52Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:02:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - db5ae3ae-6807-4375-aa96-db077d0d0e66 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/717d4657-8ede-428b-a75e-c5ed75d1547b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 1C223B8732DC4989BD2324CAF2D0B9AB Ref B: PNQ231110908042 Ref C: 2026-03-31T09:02:33Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:03:14 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 6f60401e-37a1-4ccd-a989-46c0e07c38e3 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/55a6a89b-b679-4ebd-ae04-ebf3e22129e0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 10FE25EC959D46CAA8872D2C1727F13C Ref B: PNQ231110908031 Ref C: 2026-03-31T09:03:14Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:04:35 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 86726620-d651-4166-a4f3-063fb76c4602 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/c78f24b6-3c9b-4a62-a469-27f2735e33fe + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 367B53AE0F18433F9B476E9992E28BB4 Ref B: PNQ231110907042 Ref C: 2026-03-31T09:04:35Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/75a780ce-7dea-4020-a250-827ae7943639?api-version=2022-05-01&t=639105444603893629&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=yY2Y9cuROo3yLwby2HAOHrdyVsquoUTNLldKD2W0jHK6cIdYYxo7AZUzaepssGdi7WK0eYoEUrNgAZyjBWt0yVq98eFYfQBrttFi4Wz4wfOAbUe96Il9y_wOZ4RgmlPoHowoRM2jYT2KCIPs3sLahu-iT6D3LhcvdYC64ILVrClCpukPn2lx__orTB7kjuxvP5Ojl9gbSdo70F3avGNIMlSlK73FFwf-GsXRrpVVFn8AYiaerVt7nDAUCqYw0kfKtUBxRCdXErGxwNcaeMrZ2nuu3Dw3co8Vt7EGbFpiAl6XB9kdSvJw07Wm4sX5Wad5cKug4g3QgnHmYWH29OKXzA&h=8DEA-T4PggXotXaHxM2YxVJpVO2MMn1TCnMf6UABBQs + response: + body: + string: '{"status":"Succeeded"}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7a678554-dd2a-473f-a752-6a9a54b06e1f + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/d2494bde-66fc-468d-8d8d-8e4ef7869b6c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C2193B6BBD894F76B53D30F3C9B9B83B Ref B: PNQ231110907034 Ref C: 2026-03-31T09:07:16Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub","etag":"W/\"56852c34-bef3-4eb1-8f71-9a8a4224d6af\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.5.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualWans/test-vwan"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '864' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - b59a8c20-eecf-424c-b38b-3940ed7a7ff1 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 69A8754C8BA54EEBB1F8F9EC3D534E47 Ref B: PNQ231110908034 Ref C: 2026-03-31T09:07:17Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_failover000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001","name":"test_express_route_gateway_failover000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_failover_operations","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.4453851Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '484' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:18 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: 2AFFB6D97601424C9D3FB55B8BAC556C Ref B: PNQ231110906040 Ref C: 2026-03-31T09:07:18Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus", "properties": {"autoScaleConfiguration": {"bounds": + {"min": 2}}, "virtualHub": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + Content-Length: + - '272' + Content-Type: + - application/json + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/expressRouteGateways/test-ergw?api-version=2023-09-01 + response: + body: + string: '{"name":"test-ergw","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/expressRouteGateways/test-ergw","etag":"W/\"3796f5cc-39ab-425d-ba72-858a39bf49e7\"","type":"Microsoft.Network/expressRouteGateways","location":"eastus","properties":{"provisioningState":"Updating","resourceGuid":"3d9dbc79-d5b7-4dc1-93ff-6371ccb76109","virtualHub":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_failover000001/providers/Microsoft.Network/virtualHubs/test-vhub"},"expressRouteConnections":[],"allowNonVirtualWanTraffic":false,"autoScaleConfiguration":{"bounds":{"min":2}}}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + cache-control: + - no-cache + content-length: + - '705' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - ad07d98d-6565-4725-b3d4-1f4d549c4250 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/0a76d38a-d893-4bb9-9bff-cfe36b476c79 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 74FF53B4E84F479386BE35332739AA31 Ref B: PNQ231110906034 Ref C: 2026-03-31T09:07:18Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:21 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7ff48d2e-c911-43f0-b75e-c0207eff3f85 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/08b2077f-500a-45fd-906a-75c00cd865f8 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 46199DF183B54E37845CAB2FC46DC473 Ref B: PNQ231110906031 Ref C: 2026-03-31T09:07:21Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - b2b65cce-9059-46dd-b7e5-9b051af02703 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/c1a9e6dc-d6c5-4680-8944-0ff9a83e6efa + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: D3FE3239B1E34E90A50E62D94EC8FF6F Ref B: PNQ231110906029 Ref C: 2026-03-31T09:07:31Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a67840ad-1632-4f87-b107-5e7f3c9813d8 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/5fb1c9cc-6cdb-4e42-8504-e5a71aa2ce81 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F700D68D0F8641DB9C0C14BBABAD1DBF Ref B: PNQ231110906036 Ref C: 2026-03-31T09:07:52Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:08:13 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 5d4155fd-d5cb-4385-b52f-eb931ad2211c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/ca7d000f-9711-43a0-aa5f-e7031ac8f6ec + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5C6E2563F4BD44BE9D609A218BE6A51B Ref B: PNQ231110909052 Ref C: 2026-03-31T09:08:13Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:08:54 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a5d1c65a-6ef4-4269-aa04-ed77ebc1b319 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/f5610b6b-950d-4793-bb30-c7c5dfd855b9 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E7BC4CB3B7CC416C96B806FF7BF217CB Ref B: PNQ231110906025 Ref C: 2026-03-31T09:08:54Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:09:34 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - fef6c6da-0954-4fd2-a24c-dc5f4871fce4 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/a12f1855-92cc-4098-98e7-26939c154edb + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: DA886E9B898D4AAA8D06661CFC1D8700 Ref B: PNQ231110906036 Ref C: 2026-03-31T09:09:34Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:10:54 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 9d283ce1-2191-487e-a01c-df2b3f5f0704 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/5a4bae38-956e-42e5-b1b8-940a931fc305 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F0B205F1569C4D869501082223C9855F Ref B: PNQ231110908036 Ref C: 2026-03-31T09:10:55Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:13:35 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7aa09381-da67-4b7b-aa4a-57b574392cbd + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/77e8cc44-5dab-4ed9-955a-948e497655e8 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C7EDCE982FE94A58A6BF1FCF60BA17D7 Ref B: PNQ231110907036 Ref C: 2026-03-31T09:13:35Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:15:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 3563d101-b21d-4c59-a113-25c3992fec57 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/6bae8347-4666-4ba6-97ab-e41b23c47c4c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 6B0B78AD0E7C4A2DBFB2574BB59EB434 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:15:16Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:16:57 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - d76ad9aa-a46b-4c56-a105-2e7247339f7e + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/1883149c-f2eb-4df3-aeeb-9fd0c12c71fd + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 1337DCBB411E4C858129D88EB7CBE5BB Ref B: PNQ231110908052 Ref C: 2026-03-31T09:16:57Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:18:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a359d239-ba19-450c-83df-0291c0036749 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/d82dadd3-ff74-4a0f-9cd3-631308cc1605 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 9D975C4251A74CFAABC760ECD1AE5451 Ref B: PNQ231110909054 Ref C: 2026-03-31T09:18:38Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:20:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a96205a4-34b8-41a4-a394-8c1aee540cca + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/9b531cd0-d420-4f31-a7b1-d3df7af1294f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 922CFDFDD3DE47D6BA373A9E0E165A7E Ref B: PNQ231110907034 Ref C: 2026-03-31T09:20:19Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:22: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-arm-service-request-id: + - c1dd6426-0dfd-49ca-b965-281bb3c3d0e9 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/1af9eb8c-192f-41a2-ab37-9773f3a50ad9 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 35A8B4FF5042483B8C7ECA11AF9645DA Ref B: PNQ231110909034 Ref C: 2026-03-31T09:22:00Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:23:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 5c6aa045-a21c-4f3a-858d-87670bfcd330 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/24d6b400-2c1c-4c41-9309-f4a1329af2a4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2D8111AE739D428E956BF8F6B6E52813 Ref B: PNQ231110908025 Ref C: 2026-03-31T09:23:40Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:25:22 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 42d6458a-de35-4934-a53b-a03ca93a36fb + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/cea78418-80cf-47e2-a85d-588567b7755d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 9C2B6A6278A14B43B0C89B781F4BCE64 Ref B: PNQ231110909029 Ref C: 2026-03-31T09:25:21Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:27:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - caa54d6f-1ab8-459d-965b-3b0f9200e8c1 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/20a95fc8-5877-4781-9c85-860db5b53d4a + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 76C0CE396D124C9D89A4EA9B95AD9E2E Ref B: PNQ231110907034 Ref C: 2026-03-31T09:27:02Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:28:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f8f7ebba-1ab9-4df5-941c-f2d7dcaed8e4 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/f1177009-1320-4801-b596-f3e335630f9e + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B3B369AEC1304FC9BD7D3D0068994FDB Ref B: PNQ231110909029 Ref C: 2026-03-31T09:28:43Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:30:23 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 619d71b8-d2de-4eb3-90a8-9574286d3fc3 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/da6b38ee-2f3f-4833-a310-74a7cde28ace + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 969AE00D406C49B2BD0BC4C5DC4EFD5B Ref B: PNQ231110907036 Ref C: 2026-03-31T09:30:23Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:32:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - d1d07e48-0fdf-476f-bd00-a71b7fe23222 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/88b4d328-799e-488d-af24-f73dd80b096f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 4F21A24004EA462AA87A5221F12B52E1 Ref B: PNQ231110909029 Ref C: 2026-03-31T09:32:04Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:33:45 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f54642d3-5ab6-4cf5-9233-fe1f522afbda + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/5db62737-f339-411f-bf69-368c9b98d9df + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 26E725521C61404EABAF80F9872DBC7F Ref B: PNQ231110908040 Ref C: 2026-03-31T09:33:44Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:35:25 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7fe3132b-7ef0-483c-a047-7a0e77c6950a + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/814f3b07-c0ba-4e6d-88ae-46f3d67a0e1a + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A58E1E4F99BE4B478CC80A0846A1AC12 Ref B: PNQ231110907034 Ref C: 2026-03-31T09:35:25Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/71a2779a-8a49-4a6d-a09a-ff29be5d4b1b?api-version=2023-09-01&t=639105448409269508&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=b3Wo9a5KvjB-HN7fKpBLqrLUXzIIR41apl1QM_iB14GoWaoBmsPkrj7USf2fZb3s0GWFgwieY1ukP3ksJi5NrOwyjI4_EV9LgKv0w8k0aBwEGaJPmE0Cw7vGzYfd_FGArrQ8FB9ZcKWkDY1fYu_SWCoutt-4jxIohIj3Yhppa12_Br7kPtqTE_0i93YaLel0AN5mJ6eHaqK5R5oEDPSVMS80uRltQteNKJJoUJqSznQMtMcjuxFhjlrDl6jEZg_x_rGP45xBPizTuyBtJAKlCLwvPpq8s1ulvVIncvB5kUsV0G5D8uBMI_I-mmR1JtNTvQCpCd1OvrU9rULhlLeGSQ&h=QTno-Pb0QWWkJZl-AP-w-n_KP7569n7xkdsUsJm1w3w + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:37:06 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - c5b16d46-831e-4cc0-ba37-965dece486c6 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/56413ef6-feb7-4d49-968c-897a675db881 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 1FA07C1CF59A44CA8DD766D5D129D9C5 Ref B: PNQ231110909062 Ref C: 2026-03-31T09:37:06Z' + status: + code: 200 + message: '' +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml new file mode 100644 index 00000000000..c2cebdb9074 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml @@ -0,0 +1,2244 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '482' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:45 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: C9A4D950DD854E55814ED7C1E0D22D01 Ref B: PNQ231110907023 Ref C: 2026-03-31T09:00:46Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes?api-version=2022-07-01 + response: + body: + string: '{"name":"test-vwan-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes","etag":"W/\"6cb14740-e5dc-4074-a080-c26e775f0a66\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Updating","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc + cache-control: + - no-cache + content-length: + - '476' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:46 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e30ec6c3-0fb4-40a8-9f52-9bb7f3627320 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/0def7273-0a77-4548-b5d4-e05d7f26d943 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 63ACE98945C44E6CBAB76EDCBF4039C7 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:00:46Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 127911f5-f36d-4e43-a327-02c4b073616f + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/44cb66ef-ba21-4d4b-b8c1-dc561f6a8b0f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: D9B0751510CB403198D3E4CDC910F1FC Ref B: PNQ231110906052 Ref C: 2026-03-31T09:00:47Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc + response: + body: + string: '{"status":"Succeeded"}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:57 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 9b2a5c27-002d-41ce-a4c7-370d9f99f72f + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/5c14e957-ef1b-4f1c-85c0-127d0cb299fa + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 0C153E87F42C4DD7B8322D6D40559866 Ref B: PNQ231110907054 Ref C: 2026-03-31T09:00:58Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vwan create + Connection: + - keep-alive + ParameterSetName: + - -n -g --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes?api-version=2022-07-01 + response: + body: + string: '{"name":"test-vwan-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes","etag":"W/\"698baab2-d1bc-442d-94af-dec17a04fc5b\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Succeeded","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '477' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:58 GMT + etag: + - W/"698baab2-d1bc-442d-94af-dec17a04fc5b" + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a3c459bf-9b9d-408a-bf91-5f284d39c17b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B98CB3D27CF24E5FB83CE26BC8049FC3 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:00:58Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '482' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:00:58 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: 3AF64766083A4B858E6F9F8059A3C28B Ref B: PNQ231110909034 Ref C: 2026-03-31T09:00:59Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus", "properties": {"addressPrefix": "10.6.0.0/16", "sku": + "Standard", "virtualWan": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + Content-Length: + - '278' + Content-Type: + - application/json + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"d2202c87-cffa-4db7-97d3-68d57c9e9622\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Updating","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"None","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + cache-control: + - no-cache + content-length: + - '872' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01: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-arm-service-request-id: + - c20d081d-2039-4d12-96fb-80a5c658baac + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/29186ff0-84b0-4ef1-9075-3703be931e7f + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: E358732BD25D444A9473EA6B576226F8 Ref B: PNQ231110906034 Ref C: 2026-03-31T09:00:59Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f0f46c79-a4dd-46bb-b547-9d90d7d9277c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/3f797f4b-103b-4e03-b6e1-92f8a81ae599 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 6119FAB8E99F44C3BFFAB090F0CA183E Ref B: PNQ231110909029 Ref C: 2026-03-31T09:01:00Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:12 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 52b850ff-a22f-4a3a-ad07-5046aa86ba1a + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/f6fca8e3-2c5c-4653-a267-168522a4c915 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 19777E413299409993A601B70BD457A1 Ref B: PNQ231110909040 Ref C: 2026-03-31T09:01:11Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7d00cb19-ada5-4abb-a38a-87a11d2a92ee + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/49ac1455-2715-4f0d-9659-636eaf15d726 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2F52E2F7B01549BFB19FEF05411A0C43 Ref B: PNQ231110906034 Ref C: 2026-03-31T09:01:32Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:01:53 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e6c9cf99-b7c2-497d-bf87-367962e2f9ea + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/6262ba43-483b-416e-b99a-df3704368ac4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A1FE970DDCB74344A582FC46533199B2 Ref B: PNQ231110906060 Ref C: 2026-03-31T09:01:53Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:02:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - ab3693ff-8d04-4cd7-b422-cd52eb2375ec + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/131df3d2-162e-44bd-99f3-94e776561c8b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 8E5E98E550184A75A0EEAB074983EBB5 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:02:34Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:03:15 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 21cfc591-de49-473d-a3d5-935e85d4d226 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/7a43b709-bd81-4c8b-87e9-2c6a9555ccd6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 118BD87D830F4362868B57D3BC326482 Ref B: PNQ231110909025 Ref C: 2026-03-31T09:03:14Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:04:37 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 00469500-0f37-4beb-be18-40cfdef76b35 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/6d418efc-0cf9-4b91-8953-73d23336f1d6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C718BD6F19C84D01BB6A0B70BCF51CFD Ref B: PNQ231110909023 Ref C: 2026-03-31T09:04:35Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + response: + body: + string: '{"status":"Succeeded"}' + headers: + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 305812cb-ce7c-4a76-b81e-aad703b03696 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/d7c251a0-0a38-4fdc-85f6-a26b6f57b3fe + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: CDED7D4EA59844F098C8C9E3F5EDE01A Ref B: PNQ231110909029 Ref C: 2026-03-31T09:07:17Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub create + Connection: + - keep-alive + ParameterSetName: + - -g -n --vwan --address-prefix --sku + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f3c49ddc-07b2-4f68-a9a6-40a489854e63 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 7FF482302D334300BA3E4F7BD3A253DD Ref B: PNQ231110907062 Ref C: 2026-03-31T09:07:18Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:07:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 68424f0b-87c5-4531-a722-ff9805b4c71d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: CF1B512D2BF6437EA5525D76D3048D3E Ref B: PNQ231110908034 Ref C: 2026-03-31T09:07:19Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:08:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - f65ed8a8-736b-45a9-a1e0-6c6ca73c7797 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 58E40B19F68041699B9F58099381EBE6 Ref B: PNQ231110909062 Ref C: 2026-03-31T09:08:19Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:09:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 3a13f26e-d2b9-4299-802c-f8324f8bf09d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: CF46C4B9B0934C52AF89E037964B7CE9 Ref B: PNQ231110907040 Ref C: 2026-03-31T09:09:20Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:10:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 1a7043bc-b1e4-4588-989a-797fc76a7683 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 322CD70AE9F9462EA6FCD508BC548955 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:10:20Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:11:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 4ae09c0e-030e-4fae-b543-98c5ee3ab346 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: FB2CE04D21CB4340BAC84B407015C5E2 Ref B: PNQ231110909031 Ref C: 2026-03-31T09:11:21Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:12:21 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 63cfce62-23b7-402f-a538-9c4a84bd896d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A7A0D01B5C054F878197A8FE55EFF862 Ref B: PNQ231110906042 Ref C: 2026-03-31T09:12:22Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:13:22 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 89e50da6-d7fb-45ef-9a94-7e67b91871f8 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 68A2B49D8F3F4E3ABA92F37892289977 Ref B: PNQ231110906025 Ref C: 2026-03-31T09:13:22Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:14:22 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 13b82d48-925a-41b5-b8e9-5d55000fd0ad + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5CA8C9DCC5024108A46FB295DE3C023D Ref B: PNQ231110908062 Ref C: 2026-03-31T09:14:23Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:15:23 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - c42a6954-2f3e-4b50-b4f5-52f951997478 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 30C18C48F8E548ED8EE537FFAB72B8BF Ref B: PNQ231110906054 Ref C: 2026-03-31T09:15:23Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:16:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7d281ef3-c248-4f6a-8e3b-b5527ac47152 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E5FAB84147E04F8ABCA811A21D38022F Ref B: PNQ231110906060 Ref C: 2026-03-31T09:16:24Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:17:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 55390a2f-4e14-4950-bb6b-143dff6c0bef + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: BD1C0EB47C6248CCBA1C1AA48E3152A2 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:17:25Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '881' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:18:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - b49e0942-a091-4faa-92f3-a2afc3c68295 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: AD976674E4BD4FF0BB430E7E650709DF Ref B: PNQ231110909052 Ref C: 2026-03-31T09:18:25Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vhub show + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + response: + body: + string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"2bf802de-e8f4-4d2c-a2db-e1b67d156236\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":["10.6.32.5","10.6.32.6"],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioned","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + headers: + cache-control: + - no-cache + content-length: + - '903' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:19:26 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 3ba7bda2-477c-4c1e-89dc-d3a6a6893e9d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5C940B2BCD5D4B12B13EF9A90B7DB537 Ref B: PNQ231110907052 Ref C: 2026-03-31T09:19:26Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '482' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:19:27 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: E4F905CEF6A146069D1A8FFCB7F36611 Ref B: PNQ231110906025 Ref C: 2026-03-31T09:19:27Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus", "properties": {"autoScaleConfiguration": {"bounds": + {"min": 2}}, "virtualHub": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + Content-Length: + - '277' + Content-Type: + - application/json + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/expressRouteGateways/test-ergw-routes?api-version=2023-09-01 + response: + body: + string: '{"name":"test-ergw-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/expressRouteGateways/test-ergw-routes","etag":"W/\"36110844-361a-4aef-bb23-f1a86f00e794\"","type":"Microsoft.Network/expressRouteGateways","location":"eastus","properties":{"provisioningState":"Updating","resourceGuid":"f166be7d-ffea-4f97-b94a-693e9c2fb352","virtualHub":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes"},"expressRouteConnections":[],"allowNonVirtualWanTraffic":false,"autoScaleConfiguration":{"bounds":{"min":2}}}}' + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + cache-control: + - no-cache + content-length: + - '722' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:19:28 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 562e0cb6-13e6-46fc-8ed8-0ad9a593570e + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/cca5eeb6-332b-4ee2-892e-9f8ad34ff749 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: F13CEA103CDF4BA38B0AD2DFBEC79911 Ref B: PNQ231110908052 Ref C: 2026-03-31T09:19:27Z' + status: + code: 201 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:19:29 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 9cac06d9-5246-4da6-8859-3326a774e65f + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/e57a8842-b6fe-42e5-b655-580250d40646 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: BFD4584FE54B4EB29E174C3C82E13B8F Ref B: PNQ231110907052 Ref C: 2026-03-31T09:19:29Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:19:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 33b6b11b-94c0-4e9b-bfb7-ff740a2dd920 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/2f1a6896-231e-41ac-a598-950ec59a8b46 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 1C24CD2AF8634F1580ED2D2664B38B9C Ref B: PNQ231110909042 Ref C: 2026-03-31T09:19:40Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:20: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-arm-service-request-id: + - babf7505-7623-4f26-951e-72138ea12375 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/68f20a62-5b8d-45de-a362-b9670f60f258 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: DCF5E130392444B7B95A275D4FA05461 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:20:00Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:20:21 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 72c3eabc-1839-4dc4-b4cb-0fd6001def22 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/f526fada-89b2-4011-9f8a-a292b81163f8 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E9FAF605E9A148B78BBB74E94074B870 Ref B: PNQ231110906040 Ref C: 2026-03-31T09:20:21Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:21:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a741d237-b3d7-42bd-9ee9-3429f0deb923 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/76a6558c-c70e-4488-ba18-ca851de99541 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 56A5119FF30E48F5ABFC71F6925C56B6 Ref B: PNQ231110909054 Ref C: 2026-03-31T09:21:02Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:21:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 4cf439d1-7ee2-4ca6-9194-dc64c82caad2 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/cbbed05d-6fd7-45e2-8ef4-a3e2c4865cfe + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E4CE6CB491374CF484DFDBB61659C4D5 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:21:42Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:23:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 81fd3c5d-7f03-492e-9e38-5d89db681a46 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/d82dd656-da55-40b1-b23a-e42b4ec10e5c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 35FBECAB4517419F8CC1FA5B1EBC5971 Ref B: PNQ231110907040 Ref C: 2026-03-31T09:23:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:25:44 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 3167ec08-0bdd-4c84-b0ba-680fafe97d66 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/65c48b7e-d95e-46b5-9719-bf6c3479e984 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 4E3435696CC24E468F5560C7E04EC7AA Ref B: PNQ231110906040 Ref C: 2026-03-31T09:25:44Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:27:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 4213463a-60ca-4226-b12e-b1939702fce1 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/7c08c53f-9a94-4757-a71e-57eb720bd3f4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 0643596B849B4DF7B38138FE8A73B388 Ref B: PNQ231110906060 Ref C: 2026-03-31T09:27:24Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:29:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 5ddea5f4-85d7-4a33-a78e-1b1bdf45311b + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/127c259a-2333-4887-b8c6-3f8a0c809c46 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E15A51818F0B465A9D82B6206B423860 Ref B: PNQ231110909062 Ref C: 2026-03-31T09:29:05Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:30:45 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 3820baa3-b770-4fe6-9e5d-fd5c2f3a1d84 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/be9a8a1b-d075-42b4-8d82-e1d2235e23d1 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 572D4974E1474780AE272EAB39B455D6 Ref B: PNQ231110909036 Ref C: 2026-03-31T09:30:46Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:32:26 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - acd6f949-b3f5-4d5a-a601-145b34449639 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/9c878880-5537-4e4f-be84-2280f42bd229 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: FA8046AD425540F9B7873A749AC0200B Ref B: PNQ231110908060 Ref C: 2026-03-31T09:32:26Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:34:08 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - fd3afc55-45aa-466d-93a4-e061195d7993 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/fe595611-2540-46ea-b6e5-4278030f2fa1 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 0391A1CAB53A406DB337375158FE0D19 Ref B: PNQ231110906031 Ref C: 2026-03-31T09:34:07Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway create + Connection: + - keep-alive + ParameterSetName: + - -g -n --virtual-hub --min-val + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o + response: + body: + string: '{"status":"InProgress"}' + headers: + cache-control: + - no-cache + content-length: + - '23' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 31 Mar 2026 09:35:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - ea8e2215-9a5b-445f-b5df-fd0c9a0ff695 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/0a266c61-5811-4f96-a381-98f97e0901ec + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F75E3A3517654FBAA6E96490F9F04117 Ref B: PNQ231110908029 Ref C: 2026-03-31T09:35:48Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py index 33045322887..7cbc83e0c02 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py @@ -1,10 +1,4 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -------------------------------------------------------------------------------------------- -# pylint: disable=line-too-long -# pylint: disable=too-many-lines -import os +import os import unittest import tempfile @@ -27,8779 +21,6 @@ TEST_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__), '..')) CERTS_DIR = os.path.join(TEST_DIR, 'certs') - -class NetworkApplicationSecurityGroupScenario(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_network_asg') - def test_network_asg(self, resource_group): - - self.kwargs.update({ - 'asg': 'asg1' - }) - - count1 = len(self.cmd('network asg list').get_output_in_json()) - self.cmd('network asg create -g {rg} -n {asg} --tags foo=doo', - checks=self.check('tags.foo', 'doo')) - self.cmd('network asg update -g {rg} -n {asg} --tags foo=bar', - checks=self.check('tags.foo', 'bar')) - count2 = len(self.cmd('network asg list').get_output_in_json()) - self.assertTrue(count2 == count1 + 1) - self.cmd('network asg show -g {rg} -n {asg}', checks=[ - self.check('name', '{asg}'), - self.check('resourceGroup', '{rg}'), - self.check('tags.foo', 'bar') - ]) - self.cmd('network asg delete -g {rg} -n {asg}') - count3 = len(self.cmd('network asg list').get_output_in_json()) - self.assertTrue(count3 == count1) - - -class NetworkLoadBalancerWithSku(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_network_lb_sku') - def test_network_lb_sku(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb1', - 'sku': 'standard', - 'location': 'eastus2', - 'ip': 'pubip1' - }) - - self.cmd('network lb create -g {rg} -l {location} -n {lb} --sku {sku} --public-ip-address {ip}') - self.cmd('network lb show -g {rg} -n {lb}', checks=[ - self.check('sku.name', 'Standard') - ]) - - # test network lb update command - self.cmd('network lb update -g {rg} -n {lb} --set tags.label=1544 --force-string') - self.cmd('network lb update -g {rg} -n {lb} --tags CostCenter=MyTestGroup') - self.cmd('network lb show -g {rg} -n {lb}', checks=[ - self.check('tags.CostCenter', 'MyTestGroup') - ]) - - self.cmd('network public-ip show -g {rg} -n {ip}', checks=[ - self.check('sku.name', 'Standard'), - self.check('publicIPAllocationMethod', 'Static') - ]) - - -class NetworkPrivateEndpoints(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_network_private_endpoints') - def test_network_private_endpoints(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb1', - 'sku': 'Standard', - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'location': 'centralus', - 'ip': 'pubip1', - 'lks1': 'lks1', - 'lks2': 'lks2', - 'pe': 'pe1', - 'rg': resource_group, - 'nic': 'nic1', - }) - - # Create PLS - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} -l {location}') - self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-address {ip} --sku {sku}') - self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies') - self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} --address-prefixes 10.0.2.0/24 --default-outbound false') - self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} --disable-private-endpoint-network-policies') - pls1 = self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location}', checks=[ - self.check('type', 'Microsoft.Network/privateLinkServices'), - self.check('provisioningState', 'Succeeded'), - self.check('name', self.kwargs['lks1']) - ]).get_output_in_json() - self.kwargs['pls_id'] = pls1['id'] - self.cmd('network private-endpoint list-types -l {location}') - - self.cmd('network private-endpoint create -g {rg} -n {pe} --vnet-name {vnet} --subnet {subnet2} --private-connection-resource-id {pls_id} --connection-name tttt -l {location} --nic-name {nic}', checks=[ - self.check('name', 'pe1'), - self.check('provisioningState', 'Succeeded'), - self.check('customNetworkInterfaceName', self.kwargs['nic']), - ]) - - # temporarily disable the test - ''' - self.cmd('network private-endpoint update -g {rg} -n {pe} --request-message "test"', checks=[ - self.check('privateLinkServiceConnections[0].requestMessage', 'test') - ]) - ''' - - self.cmd('network private-endpoint list') - self.cmd('network private-endpoint list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - - pe_connection_name = self.cmd('network private-link-service show -g {rg} -n {lks1}').get_output_in_json()['privateEndpointConnections'][0]['name'] - self.kwargs['pe_connect'] = pe_connection_name - self.cmd('network private-link-service connection update -g {rg} -n {pe_connect} --service-name {lks1} --connection-status Rejected --action-required "need action"') - self.cmd('network private-endpoint show -g {rg} -n {pe}', checks=[ - self.check('privateLinkServiceConnections[0].privateLinkServiceConnectionState.status', 'Rejected'), - self.check('privateLinkServiceConnections[0].privateLinkServiceConnectionState.actionsRequired', "need action") - ]) - self.cmd('network private-link-service connection delete -g {rg} -n {pe_connect} --service-name {lks1}') - self.cmd('network private-link-service show -g {rg} -n {lks1}', checks=[ - self.check('length(privateEndpointConnections)', 0) - ]) - self.cmd('network private-endpoint delete -g {rg} -n {pe}') - - @ResourceGroupPreparer(name_prefix="cli_test_network_private_endpoint_", location="eastus") - @StorageAccountPreparer(name_prefix="ipconfig", kind="StorageV2") - def test_network_private_endpoint_ip_config(self, storage_account): - self.kwargs.update({ - "sa": storage_account, - "loc": "eastus", - "vnet": self.create_random_name("vnet-", 24), - "subnet": self.create_random_name("subnet-", 24), - "pe": self.create_random_name("pe-", 24), - "connection": self.create_random_name("connection-", 24), - "ipconfig1": "ipconfig1", - "ipconfig2": "ipconfig2", - }) - - # prepare network - self.cmd("network vnet create -n {vnet} -l {loc} -g {rg} --address-prefixes 10.0.0.0/16 --subnet-name {subnet} --subnet-prefixes 10.0.0.0/24") - self.cmd("network vnet subnet update -n {subnet} -g {rg} --vnet-name {vnet} --disable-private-endpoint-network-policies true") - - # create private endpoint connection - pl_resources = self.cmd("storage account private-link-resource list --account-name {sa} -g {rg}").get_output_in_json() - self.kwargs["group_id"] = pl_resources[0]["groupId"] - self.kwargs["sa_id"] = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json()["id"] - self.cmd( - "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " - "--ip-config name={ipconfig1} group-id={group_id} member-name=blob private-ip-address=10.0.0.4 " - "--ip-config name={ipconfig2} private-ip-address=10.0.0.6", - checks=[ - self.check("length(ipConfigurations)", 2), - self.check("ipConfigurations[0].name", self.kwargs["ipconfig1"]), - self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), - ] - ) - - # check ip configuration operations - self.cmd("network private-endpoint ip-config remove -n {ipconfig2} -g {rg} --endpoint-name {pe}") - self.cmd( - "network private-endpoint ip-config add -n {ipconfig2} -g {rg} --endpoint-name {pe} --group-id {group_id} --member-name blob2 --private-ip-address 10.0.0.6", - checks=[ - self.check("length(ipConfigurations)", 2), - self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), - ] - ) - self.cmd( - "network private-endpoint ip-config list -g {rg} --endpoint-name {pe}", - checks=[ - self.check("length(@)", 2), - self.check("@[0].name", self.kwargs["ipconfig1"]), - self.check("@[1].name", self.kwargs["ipconfig2"]), - ] - ) - - self.cmd("network private-endpoint delete -n {pe} -g {rg}") - self.cmd("network private-endpoint list -g {rg}", checks=[self.check("length(@)", 0)]) - - # create private endpoint connection with --ip-configs - self.cmd( - "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " - "--ip-configs [{{name:{ipconfig1},group-id:{group_id},member-name:blob,private-ip-address:10.0.0.4}},{{name:{ipconfig2},private-ip-address:10.0.0.6}}]", - checks=[ - self.check("length(ipConfigurations)", 2), - self.check("ipConfigurations[0].name", self.kwargs["ipconfig1"]), - self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), - ] - ) - - @ResourceGroupPreparer(name_prefix="cli_test_network_private_endpoint_", location="eastus") - @StorageAccountPreparer(name_prefix="asg", kind="StorageV2") - def test_network_private_endpoint_asg(self, storage_account): - self.kwargs.update({ - "sa": storage_account, - "loc": "eastus", - "vnet": self.create_random_name("vnet-", 24), - "subnet": self.create_random_name("subnet-", 24), - "pe": self.create_random_name("pe-", 24), - "connection": self.create_random_name("connection-", 24), - "asg1": "asg1", - "asg2": "asg2", - }) - - # prepare network - self.cmd("network vnet create -n {vnet} -l {loc} -g {rg} --address-prefixes 10.0.0.0/16 --subnet-name {subnet} --subnet-prefixes 10.0.0.0/24") - self.cmd("network vnet subnet update -n {subnet} -g {rg} --vnet-name {vnet} --disable-private-endpoint-network-policies true") - - # create private endpoint connection - pl_resources = self.cmd("storage account private-link-resource list --account-name {sa} -g {rg}").get_output_in_json() - self.kwargs["group_id"] = pl_resources[0]["groupId"] - self.kwargs["sa_id"] = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json()["id"] - self.kwargs["id1"] = self.cmd("network asg create -n {asg1} -g {rg}").get_output_in_json()["id"] - self.kwargs["id2"] = self.cmd("network asg create -n {asg2} -g {rg}").get_output_in_json()["id"] - self.cmd( - "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " - "--asg id={id1} " - "--asg id={id2}", - checks=[ - self.check("length(applicationSecurityGroups)", 2), - self.check("applicationSecurityGroups[0].id", self.kwargs["id1"]), - self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), - ] - ) - - # check application security group operations - self.cmd("network private-endpoint asg remove -g {rg} --endpoint-name {pe} --asg-id {id2}") - self.cmd( - "network private-endpoint asg add -g {rg} --endpoint-name {pe} --asg-id {id2}", - checks=[ - self.check("length(applicationSecurityGroups)", 2), - self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), - ] - ) - self.cmd( - "network private-endpoint asg list -g {rg} --endpoint-name {pe}", - checks=[ - self.check("length(@)", 2), - self.check("@[0].id", self.kwargs["id1"]), - self.check("@[1].id", self.kwargs["id2"]), - ] - ) - - self.cmd("network private-endpoint delete -n {pe} -g {rg}") - self.cmd("network private-endpoint list -g {rg}", checks=[self.check("length(@)", 0)]) - - # create private endpoint connection with --asgs - self.cmd( - "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " - "--asgs [{{id:{id1}}},{{id:{id2}}}]", - checks=[ - self.check("length(applicationSecurityGroups)", 2), - self.check("applicationSecurityGroups[0].id", self.kwargs["id1"]), - self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), - ] - ) - - @ResourceGroupPreparer(name_prefix='fanqiu_cli_test_network_private_endpoints', location='CentralUSEuap') - @StorageAccountPreparer(name_prefix='saplr', kind='StorageV2') - def test_network_private_endpoint_private_dns_zone_group(self, resource_group, storage_account): - self.kwargs.update({ - 'sa': storage_account, - 'loc': 'CentralUSEuap', - 'vnet': self.create_random_name('cli-vnet-', 24), - 'subnet': self.create_random_name('cli-subnet-', 24), - 'pe': self.create_random_name('cli-pe-', 24), - 'pe_connection': self.create_random_name('cli-pec-', 24), - 'zone_name1': 'www.clizone1.com', - 'zone_name2': 'www.clizone2.com', - 'private_dns_zone_group_name': 'clidnsgroup', - 'private_zone_name1': 'clizone1', - 'private_zone_name2': 'clizone2' - }) - - # Prepare network - self.cmd('network vnet create -n {vnet} -g {rg} -l {loc} --subnet-name {subnet}', - checks=self.check('length(newVNet.subnets)', 1)) - self.cmd('network vnet subnet update -n {subnet} --vnet-name {vnet} -g {rg} ' - '--disable-private-endpoint-network-policies true', - checks=self.check('privateEndpointNetworkPolicies', 'Disabled')) - - # Create a private endpoint connection - pr = self.cmd('storage account private-link-resource list --account-name {sa} -g {rg}').get_output_in_json() - self.kwargs['group_id'] = pr[0]['groupId'] - - storage = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json() - self.kwargs['sa_id'] = storage['id'] - private_endpoint = self.cmd( - 'network private-endpoint create -g {rg} -n {pe} --vnet-name {vnet} --subnet {subnet} -l {loc} ' - '--connection-name {pe_connection} --private-connection-resource-id {sa_id} ' - '--group-ids blob').get_output_in_json() - self.assertEqual(private_endpoint['name'], self.kwargs['pe']) - self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['name'], self.kwargs['pe_connection']) - self.assertEqual( - private_endpoint['privateLinkServiceConnections'][0]['privateLinkServiceConnectionState']['status'], - 'Approved') - self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['provisioningState'], 'Succeeded') - self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['groupIds'][0], self.kwargs['group_id']) - self.kwargs['pe_id'] = private_endpoint['privateLinkServiceConnections'][0]['id'] - - # Show the connection at storage account - storage = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json() - self.assertIn('privateEndpointConnections', storage) - self.assertEqual(len(storage['privateEndpointConnections']), 1) - self.assertEqual(storage['privateEndpointConnections'][0]['privateLinkServiceConnectionState']['status'], - 'Approved') - - self.kwargs['sa_pec_id'] = storage['privateEndpointConnections'][0]['id'] - self.kwargs['sa_pec_name'] = storage['privateEndpointConnections'][0]['name'] - - self.cmd('storage account private-endpoint-connection show --account-name {sa} -g {rg} --name {sa_pec_name}', - checks=self.check('id', '{sa_pec_id}')) - - self.cmd('network private-endpoint show -g {rg} -n {pe}', checks=[ - self.check('length(customDnsConfigs)', 1) - ]) - self.cmd('network private-dns zone create -n {zone_name1} -g {rg}') - self.cmd('network private-dns zone create -n {zone_name2} -g {rg}') - - self.cmd('network private-endpoint dns-zone-group create --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' - '--zone-name {private_zone_name1} --private-dns-zone {zone_name1}', - checks=[ - self.check('name', '{private_dns_zone_group_name}') - ]) - - self.cmd('network private-endpoint dns-zone-group add --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' - '--zone-name {private_zone_name2} --private-dns-zone {zone_name2}', - checks=[ - self.check('length(privateDnsZoneConfigs)', 2) - ]) - - self.cmd('network private-endpoint dns-zone-group show --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}', checks=[ - self.check('length(privateDnsZoneConfigs)', 2) - ]) - self.cmd('network private-endpoint dns-zone-group list --endpoint-name {pe} -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network private-endpoint dns-zone-group remove --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' - '--zone-name {private_zone_name2}') - self.cmd('network private-endpoint dns-zone-group show --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}', checks=[ - self.check('length(privateDnsZoneConfigs)', 1) - ]) - self.cmd('network private-endpoint dns-zone-group delete --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}') - - -class NetworkPrivateLinkService(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_pls_udr') - @AllowLargeResponse() - def test_network_private_link_service_udr(self, resource_group): - - self.kwargs.update({ - 'sku': 'Standard', - 'vnet': 'vnet1', - 'vnet_prefix': '10.0.0.0/16', - 'subnet1': 'subnet1', - 'subnet_prefix': '10.0.0.0/24', - 'location': 'westcentralus', - 'lks1': 'lks1', - 'destination_ip': '10.0.0.10' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --address-prefixes {vnet_prefix} --subnet-name {subnet1} --subnet-prefixes {subnet_prefix} -l {location}') - self.cmd('az network vnet subnet update -n {subnet1} --vnet-name {vnet} -g {rg} --pls-network-policies disabled') - self.cmd('network private-link-service create -n {lks1} -g {rg} --vnet-name {vnet} --subnet {subnet1} --destination-ip-address {destination_ip} -l {location}', checks=[ - self.check('type', 'Microsoft.Network/privateLinkServices'), - self.check('enableProxyProtocol', False), - self.check('destinationIPAddress', '{destination_ip}') - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_network_private_link_service') - @AllowLargeResponse() - def test_network_private_link_service(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb1', - 'sku': 'Standard', - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'location': 'westcentralus', - 'ip': 'pubip1', - 'lks1': 'lks1', - 'lks2': 'lks2', - 'sub1': '00000000-0000-0000-0000-000000000000', - 'destination_ip': '10.0.0.1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} -l {location}') - self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-address {ip} --sku {sku}') - self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies') - self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} --address-prefixes 10.0.2.0/24 --default-outbound false') - self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} --disable-private-endpoint-network-policies') - - with self.assertRaises(HttpResponseError, msg=' either one LoadBalancerFrontendIpConfiguration if PLS with LB based scenario or DestinationIPAddress if PLS UDR and NSG scenario'): - self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location} --destination-ip-address {destination_ip}') - self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location} --enable-proxy-protocol', checks=[ - self.check('type', 'Microsoft.Network/privateLinkServices'), - self.check('length(ipConfigurations)', 1), - self.check('length(loadBalancerFrontendIpConfigurations)', 1), - self.check('enableProxyProtocol', True) - ]) - - self.cmd('network private-link-service update -g {rg} -n {lks1} --visibility {sub1} {sub1} --auto-approval {sub1} {sub1} --enable-proxy-protocol False --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd', checks=[ - self.check('length(visibility.subscriptions)', 2), - self.check('length(autoApproval.subscriptions)', 2), - self.check('enableProxyProtocol', False) - ]) - self.cmd('network private-link-service list -g {rg}', checks=[ - self.check('length(@)', 1), - self.check('@[0].type', 'Microsoft.Network/privateLinkServices') - ]) - self.cmd('network private-link-service show -g {rg} -n {lks1}', checks=[ - self.check('type', 'Microsoft.Network/privateLinkServices'), - self.check('length(ipConfigurations)', 1), - self.check('length(loadBalancerFrontendIpConfigurations)', 1) - ]) - self.cmd('network private-link-service list-auto-approved -l westus', self.check('type(@)', 'array')) - self.cmd('network private-link-service delete -g {rg} -n {lks1}') - - self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies false', checks=[ - self.check('privateLinkServiceNetworkPolicies', 'Enabled') - ]) - - -class NetworkLoadBalancerWithZone(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_network_lb_zone') - def test_network_lb_zone(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb1', - 'lb2': 'lb4', - 'lb3': 'lb5', - 'zone': '2', - 'location': 'eastus2', - 'ip': 'pubip1', - 'ip2': 'pubip2' - }) - - # LB with public ip - self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-zone {zone} --public-ip-address {ip} --sku Standard') - # No zone on LB and its front-ip-config - self.cmd('network lb show -g {rg} -n {lb}', checks=[ - self.check("frontendIPConfigurations[0].zones", None), - self.check("zones", None) - ]) - # Zone on public-ip which LB uses to infer the zone - self.cmd('network public-ip show -g {rg} -n {ip}', checks=[ - self.check('zones[0]', self.kwargs['zone']) - ]) - - # LB w/o public ip, so called ILB - self.kwargs['lb'] = 'lb2' - self.cmd('network lb create -g {rg} -l {location} -n {lb} --frontend-ip-zone {zone} --public-ip-address "" --vnet-name vnet1 --subnet subnet1 --sku Standard') - # Zone on front-ip-config, and still no zone on LB resource - self.cmd('network lb show -g {rg} -n {lb}', checks=[ - self.check("frontendIPConfigurations[0].zones[0]", self.kwargs['zone']), - self.check("zones", None) - ]) - # add a second frontend ip configuration - self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n LoadBalancerFrontEnd2 -z {zone} --vnet-name vnet1 --subnet subnet1', checks=[ - self.check("zones", [self.kwargs['zone']]) - ]) - - # test for private-ip-address-version - self.cmd('network lb create -g {rg} -n {lb2} -l westcentralus --sku Standard') - self.cmd('network public-ip create -n {ip2} -g {rg} -l westcentralus --sku Standard --allocation-method Static --version IPv6 --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network lb frontend-ip create --lb-name {lb2} -n ipv6 -g {rg} --private-ip-address-version IPv6 --public-ip-address {ip2}', checks=[ - self.check('name', 'ipv6'), - self.check('provisioningState', 'Succeeded') - ]) - - @ResourceGroupPreparer(name_prefix='test_network_lb_frontend_ip_zone', location='eastus2') - def test_network_lb_frontend_ip_zone(self, resource_group): - self.kwargs.update({ - 'location': 'eastus2', - 'lb1': self.create_random_name('lb', 10), - 'lb2': self.create_random_name('lb', 10), - 'vnet1': self.create_random_name('vnet', 10), - 'vnet2': self.create_random_name('vnet', 10), - 'pool': self.create_random_name('poll', 10) - }) - - # LB with subnet : internal LB - self.cmd('network lb create -g {rg} -l {location} -n {lb1} --vnet-name {vnet1} --subnet subnet --sku Standard') - self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb1} -n LoadBalancerFrontEnd2 -z 1 2 3 --vnet-name {vnet1} --subnet subnet', checks=[ - self.check("length(zones)", 3) - ]) - self.cmd('network lb create -g {rg} -n {lb2} --sku standard --vnet-name {vnet2} --subnet default --frontend-ip-zone 1 2 3 --backend-pool-name {pool}', checks=[ - self.check("loadBalancer.frontendIPConfigurations[0].zones", ['1', '2', '3']) - ]) - - -class NetworkPublicIpWithSku(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_network_lb_sku') - def test_network_public_ip_sku(self, resource_group): - - self.kwargs.update({ - 'standard_sku': 'Standard', - 'basic_sku': 'Basic', - 'regional_tier': 'Regional', - 'global_tier': 'Global', - 'location': 'eastus2', - 'ip1': 'pubip1', - 'ip2': 'pubip2', - 'ip3': 'pubip3', - 'ip4': 'pubip4' - }) - - self.cmd('network public-ip create -g {rg} -l {location} -n {ip1} --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network public-ip show -g {rg} -n {ip1}', checks=[ - self.check('sku.name', self.kwargs.get('standard_sku')), - self.check('sku.tier', self.kwargs.get('regional_tier')), - self.check('publicIPAllocationMethod', 'Static') - ]) - - self.cmd('network public-ip create -g {rg} -l {location} -n {ip2} --sku {standard_sku} --tags foo=doo --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network public-ip show -g {rg} -n {ip2}', checks=[ - self.check('sku.name', self.kwargs.get('standard_sku')), - self.check('sku.tier', self.kwargs.get('regional_tier')), - self.check('publicIPAllocationMethod', 'Static'), - self.check('tags.foo', 'doo') - ]) - - self.cmd('network public-ip create -g {rg} -l {location} -n {ip3} --sku {standard_sku} --tier {global_tier} --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network public-ip show -g {rg} -n {ip3}', checks=[ - self.check('sku.name', self.kwargs.get('standard_sku')), - self.check('sku.tier', self.kwargs.get('global_tier')), - self.check('publicIPAllocationMethod', 'Static') - ]) - - self.cmd('network public-ip create -g {rg} -n {ip4} --sku standardv2 --allocation-method static --ip-tags FirstPartyUsage=/NonProd', checks=[ - self.check('publicIp.sku.name', 'StandardV2'), - ]) - - -class NetworkCustomIPPrefix(ScenarioTest): - @ResourceGroupPreparer(name_prefix="cli_test_network_custom_ip_prefix_", location="eastus2") - def test_network_custom_ip_prefix_crud(self): - self.kwargs.update({ - "cip_name1": self.create_random_name("cip-", 8), - "cip_name2": self.create_random_name("cip-", 8), - }) - self.cmd( - "network custom-ip prefix create --name {cip_name1} --resource-group {rg} --cidr 2001:250:6000::/48 --is-parent", - checks=[ - self.check("name", "{cip_name1}"), - self.check("prefixType", "Parent") - ] - ) - self.cmd( - "network custom-ip prefix create -n {cip_name2} -z 1 -g {rg} --cidr 0.0.0.0/24 " - "--asn 65515 --geo GLOBAL --is-advertised false", - checks=[ - self.check("name", "{cip_name2}"), - self.check("asn", "65515"), - self.check("geo", "GLOBAL"), - self.check("expressRouteAdvertise", False) - ] - ) - self.cmd( - "network custom-ip prefix list -g {rg}", - checks=[ - self.check("length(@)", 2), - self.check("@[0].name", "{cip_name1}") - ] - ) - self.cmd("network custom-ip prefix update -n {cip_name2} -g {rg} --tags foo=bar") - self.cmd( - "network custom-ip prefix show -n {cip_name2} -g {rg}", - checks=[ - self.check("name", "{cip_name2}"), - self.check("tags.foo", "bar") - ] - ) - - - @record_only() - def test_network_custom_ip_prefix_update_state(self): - self.kwargs.update({ - "rg": "cli_test_custom_ip_prefix", - "cip_name": "prefix1" - }) - - self.cmd( - "network custom-ip prefix update -n {cip_name} -g {rg} --state commission --no-internet-advertise false", - checks=[ - self.check("commissionedState", "Commissioning"), - self.check("noInternetAdvertise", False) - ] - ) - - -class NetworkPublicIpPrefix(ScenarioTest): - - @record_only() # cannot assign both tags and a public IP prefix to a public IP address in Azure - @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix', location='eastus2') - def test_network_public_ip_prefix(self, resource_group): - - self.kwargs.update({ - 'prefix': 'prefix1', - 'pip': 'pip1', - 'prefix_v6': self.create_random_name('public-ip-prefix-', 24), - 'pip_v6': self.create_random_name('public-ip-', 16) - }) - - # Test prefix CRUD - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30', - checks=self.check('prefixLength', 30)) - self.cmd('network public-ip prefix update -g {rg} -n {prefix} --tags foo=doo') - - # test prefix show command - self.cmd('network public-ip prefix show -g {rg} -n {prefix}', - checks=self.check('tags.foo', 'doo')) - - self.cmd('network public-ip prefix list -g {rg}', - checks=self.check('length(@)', 1)) - self.cmd('network public-ip prefix delete -g {rg} -n {prefix}') - self.cmd('network public-ip prefix list -g {rg}', - checks=self.is_empty()) - - # Test public IP create with prefix - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') - self.cmd('network public-ip create -g {rg} -n {pip} --public-ip-prefix {prefix} --sku Standard', - checks=self.check("publicIp.publicIPPrefix.id.contains(@, '{prefix}')", True)) - self.cmd('network public-ip prefix create -n {prefix_v6} -g {rg} --version IPv6 --length 126 -z 1 3 2') - self.cmd( - 'network public-ip create -n {pip_v6} -g {rg} --public-ip-prefix {prefix_v6}', - checks=[ - self.check('publicIp.name', '{pip_v6}'), - self.check('publicIp.publicIPAddressVersion', 'IPv6'), - self.check('publicIp.zones', ['1', '3', '2']) - ] - ) - - # Test IP address version - self.kwargs.update({ - 'prefix_name_ipv4': 'public_ip_prefix_0', - 'prefix_name_ipv5': 'public_ip_prefix_1', - 'prefix_name_ipv6': 'public_ip_prefix_2' - }) - - # Check the default ip address version value - self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv4} --length 30', checks=[ - self.check('publicIPAddressVersion', 'IPv4') - ]) - - # Check the creation of public IP prefix with IPv6 address option - # Note: prefix length for IPv6 is minimal 124 and maximal 127 respectively - self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv6} --length 127 --version IPv6', checks=[ - self.check('publicIPAddressVersion', 'IPv6') - ]) - - # Check with unsupported IP address version: IPv5 - with self.assertRaisesRegex(SystemExit, '2'): - self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv6} --length 127 --version IPv5') - - @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_zone', location='eastus2') - def test_network_public_ip_prefix_zone(self, resource_group): - self.kwargs.update({ - 'prefix': 'prefix1', - }) - - # Test prefix with multi zones - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30 --zone 1 2 3', checks=[ - self.check('prefixLength', 30), - self.check('length(zones)', 3) - ]) - - @record_only() # cannot assign both tags and a public IP prefix to a public IP address in Azure - @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_with_ip_address', location='eastus2') - def test_network_public_ip_prefix_with_ip_address(self, resource_group): - self.kwargs.update({ - 'prefix_name_ipv4': 'public_ip_prefix_0', - 'pip': 'pip1' - }) - - ip_prefix = self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv4} --length 28', checks=[ - self.check('publicIPAddressVersion', 'IPv4') - ]).get_output_in_json() - - ip_address = ip_prefix['ipPrefix'][:-3] - - # Create public ip with ip address - self.cmd('network public-ip create -g {rg} -n {pip} --public-ip-prefix {prefix_name_ipv4} --sku Standard --ip-address ' + ip_address, - checks=self.check("publicIp.publicIPPrefix.id.contains(@, '{prefix_name_ipv4}')", True)) - - @live_only() - @ResourceGroupPreparer(name_prefix="cli_test_network_public_ip_prefix_", location="eastus2", subscription=AUX_SUBSCRIPTION) - def test_network_public_ip_prefix_with_aux_custom(self, resource_group): - self.kwargs.update({ - "aux_rg": resource_group, - "aux_subscription": AUX_SUBSCRIPTION, - "public_prefix_name": self.create_random_name("public-prefix-", 20) - }) - - # previously created custom ip prefix - self.kwargs["custom_id"] = self.cmd("network custom-ip prefix show -n ethan-cip -g ethan-rg").get_output_in_json()["id"] - self.cmd( - "network public-ip prefix create -n {public_prefix_name} -g {aux_rg} --length 31 --zone 2 3 1 " - "--custom-ip-prefix-name {custom_id} --subscription {aux_subscription}", - checks=[ - self.check("name", "{public_prefix_name}"), - self.check("type", "Microsoft.Network/publicIPPrefixes") - ] - ) - - @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_with_ip_tags', location='eastus2') - def test_network_public_ip_prefix_with_ip_tags(self, resource_group): - self.kwargs.update({ - 'prefix': 'prefix1', - 'ip_tags': 'RoutingPreference=Internet' - }) - # Test prefix create with param --ip-tags - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30 --ip-tags {ip_tags}', - checks=[ - self.check('ipTags[0].ipTagType', 'RoutingPreference'), - self.check('ipTags[0].tag', 'Internet')]) - - -class NetworkMultiIdsShowScenarioTest(ScenarioTest): - @live_only() - @ResourceGroupPreparer(name_prefix='test_multi_id') - def test_network_multi_id_show(self, resource_group): - - self.cmd('network public-ip create -g {rg} -n pip1 --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network public-ip create -g {rg} -n pip2 --ip-tags FirstPartyUsage=/NonProd') - - pip1 = self.cmd('network public-ip show -g {rg} -n pip1').get_output_in_json() - pip2 = self.cmd('network public-ip show -g {rg} -n pip2').get_output_in_json() - self.cmd('network public-ip show --ids {} {}'.format(pip1['id'], pip2['id']), - checks=self.check('length(@)', 2)) - - -class NetworkUsageListScenarioTest(ScenarioTest): - - def test_network_usage_list(self): - self.cmd('network list-usages --location westus', checks=self.check('type(@)', 'array')) - - -class NetworkAppGatewayDefaultScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_basic') - def test_network_app_gateway_with_defaults(self, resource_group): - self.cmd('network vnet create -n vnet1 -g {rg} --address-prefix 10.0.0.0/16') - self.cmd('network vnet subnet create -n subnet1 -g {rg} --vnet-name vnet1 --address-prefix 10.0.0.0/24 --default-outbound-access false') - self.cmd('network public-ip create -g {rg} -n pubip1 --sku standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network application-gateway create -g {rg} -n ag1 --sku Standard_v2 --priority 1001 --vnet-name vnet1 --subnet subnet1 --public-ip-address pubip1 --enable-fips false') - self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=self.check('enableFips', False)) - self.cmd('network application-gateway update -g {rg} -n ag1 --no-wait') - self.cmd('network application-gateway update -g {rg} -n ag1 --no-wait ' - '--capacity 3 --tags foo=doo --http2 Disabled --enable-fips true') - self.cmd('network application-gateway wait -g {rg} -n ag1 --updated') - - ag_list = self.cmd('network application-gateway list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?resourceGroup == '{}']) == length(@)".format(resource_group), True) - ]).get_output_in_json() - ag_count = len(ag_list) - - self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=[ - self.check('type(@)', 'object'), - self.check('name', 'ag1'), - self.check('resourceGroup', resource_group), - self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic'), - self.check("enableHttp2", False), - self.check("enableFips", True), - self.check("contains(defaultPredefinedSslPolicy, 'AppGwSslPolicy')", True), - ]) - self.cmd('network application-gateway show-backend-health -g {rg} -n ag1') - - self.cmd('network application-gateway stop --resource-group {rg} -n ag1') - self.cmd('network application-gateway start --resource-group {rg} -n ag1 --no-wait') - self.cmd('network application-gateway delete --resource-group {rg} -n ag1') - self.cmd('network application-gateway list --resource-group {rg}', checks=self.check('length(@)', ag_count - 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_basic_with_waf_v2_sku') - def test_network_app_gateway_with_waf_v2_sku(self, resource_group): - self.cmd('network public-ip create -g {rg} -n pubip1 --sku Standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network application-gateway waf-policy create -n waf1 -g {rg}') - self.cmd('network application-gateway create -g {rg} -n ag1 --sku WAF_v2 --public-ip-address pubip1 --waf-policy waf1 --priority 1001') - - self.cmd('network application-gateway list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?resourceGroup == '{}']) == length(@)".format(resource_group), True) - ]) - - self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=[ - self.check('type(@)', 'object'), - self.check('name', 'ag1'), - self.check('resourceGroup', resource_group), - self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic') - ]) - self.cmd('network application-gateway show-backend-health -g {rg} -n ag1 ' - '--host-name-from-http-settings --path /test --timeout 100 ' - '--http-settings appGatewayBackendHttpSettings --address-pool appGatewayBackendPool') - - @ResourceGroupPreparer(name_prefix="cli_test_ag_with_non_v2_sku_", location="westus") - def test_ag_with_non_v2_sku(self): - self.kwargs.update({ - "ag_name": self.create_random_name("ag-", 12), - "port_name": self.create_random_name("port-", 12), - "lisener_name": self.create_random_name("lisener-", 12), - "rule_name": self.create_random_name("rule-", 12), - }) - - self.cmd("network application-gateway create -n {ag_name} -g {rg} --sku WAF_Medium") - - self.kwargs["front_ip"] = self.cmd("network application-gateway show -n {ag_name} -g {rg}").get_output_in_json()["frontendIPConfigurations"][0]["name"] - self.cmd("network application-gateway frontend-port create -n {port_name} -g {rg} --gateway-name {ag_name} --port 8080") - self.cmd("network application-gateway http-listener create -n {lisener_name} -g {rg} --gateway-name {ag_name} --frontend-ip {front_ip} --frontend-port {port_name}") - - self.cmd( - "network application-gateway rule create -n {rule_name} -g {rg} --gateway-name {ag_name} --http-listener {lisener_name}", - checks=[ - self.check("name", "{ag_name}"), - self.check("sku.tier", "WAF") - ] - ) - - self.cmd("network application-gateway delete -n {ag_name} -g {rg}") - - @ResourceGroupPreparer(name_prefix='test_network_appgw_creation_with_public_and_private_ip') - def test_network_appgw_creation_with_public_and_private_ip(self, resource_group): - self.kwargs.update({ - "appgw": "applicationGateway", - "ip": "publicIP", - }) - - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - - self.cmd("network application-gateway create -g {rg} -n {appgw} " - "--sku Standard_v2 " - "--enable-private-link " - "--private-ip-address 10.0.0.17 " - "--public-ip-address {ip} " - "--priority 1001") - show_data = self.cmd("network application-gateway show -g {rg} -n {appgw}").get_output_in_json() - - self.assertEqual(len(show_data["frontendIPConfigurations"]), 2) - - # Those assertions are not stable, because the order in array frontendIpConfigurations is not fixed - # self.assertTrue(show_data["frontendIpConfigurations"][0]["publicIpAddress"]["id"].endswith(self.kwargs["ip"])) - # self.assertTrue(show_data["frontendIpConfigurations"][1]["id"].endswith("appGatewayPrivateFrontendIP")) # default name - # self.assertEqual(show_data["frontendIpConfigurations"][1]["privateIpAddress"], "10.0.0.17") - # self.assertEqual(show_data["frontendIpConfigurations"][1]["privateLinkConfiguration"], None) - # service buggy, this properties won't be populcated so fast even in Azure CLI 2.12.0 - # self.assertTrue(show_data["frontendIpConfigurations"][1]["privateLinkConfiguration"]["id"].endswith("PrivateLinkDefaultConfiguration")) - - self.cmd("network application-gateway delete -g {rg} -n {appgw}") - - -class NetworkAppGatewayIndentityScenarioTest(ScenarioTest): - - @live_only() - @ResourceGroupPreparer(name_prefix='cli_test_ag_identity') - @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium') - def test_network_app_gateway_with_identity(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'gw': 'gateway', - 'one_off_identity': 'id1', - 'access_identity': 'id2', - 'ip': 'ip1', - 'cert': 'MyCertificate' - }) - - # create a managed identity - self.cmd('identity create -g {rg} -n {one_off_identity}').get_output_in_json() - access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() - self.kwargs.update({ - 'access_identity_principal': access_identity_result['principalId'] - }) - - self.cmd('keyvault set-policy -g {rg} -n {kv} ' - '--object-id {access_identity_principal} --secret-permissions get list set') - - # create a certificate - keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() - self.kwargs.update({ - 'keyvault_cert_policy': keyvault_cert_policy - }) - self.cmd('keyvault certificate create ' - '--vault-name {kv} ' - '--name {cert} ' - '--policy "{keyvault_cert_policy}"') - cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() - self.kwargs.update({ - 'secret_id': cert_result['sid'] - }) - - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - - # create application-gateway with one_off_identity - self.cmd('network application-gateway create ' - '-g {rg} -n {gw} ' - '--sku Standard_v2 --public-ip-address {ip} ' - '--identity {one_off_identity} ' - '--priority 1001') - self.cmd('network application-gateway show -g {rg} -n {gw}', checks=[ - self.check('identity.type', 'userAssigned') - ]) - - # remove one_off_identity - self.cmd('network application-gateway identity remove -g {rg} --gateway-name {gw}', checks=[ - self.check('identity', None) - ]) - # assign access_identity - self.cmd('network application-gateway identity assign ' - '-g {rg} --gateway-name {gw} --identity {access_identity}', - checks=[ - self.check('identity.type', 'userAssigned') - ]) - self.cmd('network application-gateway identity show -g {rg} --gateway-name {gw}', checks=[ - self.check('type', 'userAssigned') - ]) - - self.cmd('network application-gateway ssl-cert create ' - ' -g {rg} --gateway-name {gw} ' - '--name MySSLCert ' - '--key-vault-secret-id {secret_id}') - - self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gw} -n cert1 --keyvault-secret {secret_id}', checks=[ - self.check('trustedRootCertificates[0].keyVaultSecretId', '{secret_id}') - ]) - - - @ResourceGroupPreparer(name_prefix='cli_test_ag_cert_name_') - @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium', additional_params='--enable-rbac-authorization false') - def test_network_app_gateway_with_cert_name(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'gw': 'gateway', - 'access_identity': 'id1', - 'ip': 'ip1', - 'cert': 'MyCertificate', - 'ssl_cert_name': 'TestCertName' - }) - - # create a managed identity - access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() - self.kwargs.update({ - 'access_identity_principal': access_identity_result['principalId'] - }) - - self.cmd('keyvault set-policy -g {rg} -n {kv} ' - '--object-id {access_identity_principal} --secret-permissions get list set') - - # create a certificate - keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() - self.kwargs.update({ - 'keyvault_cert_policy': keyvault_cert_policy - }) - self.cmd('keyvault certificate create ' - '--vault-name {kv} ' - '--name {cert} ' - '--policy "{keyvault_cert_policy}"') - cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() - self.kwargs.update({ - 'secret_id': cert_result['sid'] - }) - - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - - # create application-gateway with one_off_identity - self.cmd('network application-gateway create ' - '-g {rg} -n {gw} ' - '--sku Standard_v2 --public-ip-address {ip} ' - '--identity {access_identity} ' - '--frontend-port 1000 ' - '--key-vault-secret-id {secret_id} ' - '--ssl-certificate-name {ssl_cert_name} --priority 1001', checks=[ - self.check('applicationGateway.sslCertificates[0].name', self.kwargs['ssl_cert_name']), - self.check('applicationGateway.sslCertificates[0].properties.keyVaultSecretId', self.kwargs['secret_id']), - ]) - - -class NetworkAppGatewayTrustedClientCertScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_trusted_client_cert') - def test_network_app_gateway_with_trusted_client_cert(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'gw': 'gateway', - 'ip': 'ip1', - 'cert': os.path.join(TEST_DIR, 'client.cer'), - 'cert1': os.path.join(TEST_DIR, 'client1.cer'), - 'cname': 'cert_name', - 'cname1': 'cert_name1', - }) - - # create an ag with trusted client cert - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network application-gateway create -g {rg} -n {gw} --sku Standard_v2 --public-ip-address {ip} ' - '--trusted-client-cert name={cname} data="{cert}" --priority 1001', - checks=[self.check('length(applicationGateway.trustedClientCertificates)', 1)]) - - self.cmd('network application-gateway client-cert add -g {rg} --gateway-name {gw} ' - '--name {cname1} --data "{cert1}"', - checks=[self.check('length(trustedClientCertificates)', 2)]) - - self.cmd('network application-gateway client-cert list -g {rg} --gateway-name {gw}', - checks=[self.check('length(@)', 2)]) - - self.cmd('network application-gateway client-cert update -g {rg} --gateway-name {gw} ' - '--name {cname1} --data "{cert}"') - - cert = self.cmd('network application-gateway client-cert show -g {rg} --gateway-name {gw} --name {cname}').get_output_in_json() - - self.cmd('network application-gateway client-cert show -g {rg} --gateway-name {gw} --name {cname1}', - checks=[self.check('data', cert['data'])]) - - self.cmd('network application-gateway client-cert remove -g {rg} --gateway-name {gw} --name {cname1}') - - -class NetworkAppGatewaySslProfileScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_ssl_profile') - def test_network_app_gateway_with_ssl_profile(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'gw': 'gateway', - 'ip': 'ip1', - 'name': 'name', - 'name1': 'name1', - }) - - # create an ag with ssl profile - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd( - "network application-gateway create -n {gw} -g {rg} --public-ip-address {ip} --sku Standard_v2 --priority 1001 " - "--ssl-profile name={name} min-protocol-version=TLSv1_0 cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 policy-type=Custom client-auth-configuration=True", - checks=[ - self.check("length(applicationGateway.sslProfiles)", 1), - self.check("applicationGateway.sslProfiles[0].properties.clientAuthConfiguration.verifyClientCertIssuerDN", True), - self.check("applicationGateway.sslProfiles[0].properties.clientAuthConfiguration.verifyClientRevocation", "None"), - ] - ) - # set client cert revocation option - self.cmd( - "network application-gateway update -n {gw} -g {rg} --ssl-profiles [0].client-auth-configuration.verify-client-revocation=OCSP", - checks=[ - self.check("sslProfiles[0].clientAuthConfiguration.verifyClientCertIssuerDN", True), - self.check("sslProfiles[0].clientAuthConfiguration.verifyClientRevocation", "OCSP"), - ] - ) - - self.cmd('network application-gateway ssl-profile add -g {rg} --gateway-name {gw} --name {name1} ' - '--client-auth-configuration True --min-protocol-version TLSv1_0 ' - '--cipher-suites TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 --policy-type Custom', - checks=[self.check('length(sslProfiles)', 2)]) - - self.cmd('network application-gateway ssl-profile update -g {rg} --gateway-name {gw} --name {name1} ' - '--client-auth-configuration False', - checks=[self.check('sslProfiles[1].clientAuthConfiguration.verifyClientCertIssuerDN', False)]) - - self.cmd('network application-gateway ssl-profile show -g {rg} --gateway-name {gw} --name {name1} ', - checks=[self.check('clientAuthConfiguration.verifyClientCertIssuerDN', False)]) - - self.cmd('network application-gateway ssl-profile list -g {rg} --gateway-name {gw}', - checks=[self.check('length(@)', 2)]) - - self.cmd('network application-gateway ssl-profile remove -g {rg} --gateway-name {gw} --name {name} ') - - -class NetworkAppGatewayZoneScenario(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_zone', location='westus2') - def test_network_ag_zone(self, resource_group): - self.kwargs.update({ - 'gateway': 'ag1', - 'ip': 'pubip1' - }) - - # for public-ip after '2020-08-01', when set '-z 1 3', actually return 'zones:[1,2,3]' - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard -z 1 3 --ip-tags FirstPartyUsage=/NonProd', checks=[ - self.check('length(publicIp.zones)', 3) - ]) - self.cmd('network application-gateway create -g {rg} -n {gateway} --sku Standard_v2 --min-capacity 2 --max-capacity 4 --zones 1 3 --public-ip-address {ip} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') - self.cmd('network application-gateway show -g {rg} -n {gateway}', checks=[ - self.check('zones[0]', 1) - ]) - - -class NetworkAppGatewayAuthCertScenario(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_auth_cert') - def test_network_ag_auth_cert(self, resource_group): - self.kwargs.update({ - 'gateway': 'ag1', - 'cert1': 'cert1', - 'cert1_file': os.path.join(TEST_DIR, 'AuthCert.pfx'), - 'cert2': 'cert2', - 'cert2_file': os.path.join(TEST_DIR, 'AuthCert2.pfx'), - 'cert3': 'cert3', - 'cert3_file': os.path.join(TEST_DIR, 'AuthCert3.pfx'), - 'settings': 'https_settings' - }) - self.cmd('network application-gateway create -g {rg} -n {gateway} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') - self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}" --no-wait') - self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}" --no-wait') - - self.cmd( 'network application-gateway auth-cert update -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert3_file}" --no-wait') - - # test command of auth-cert list - self.cmd('network application-gateway auth-cert list -g {rg} --gateway-name {gateway}', - checks=self.check('length(@)', 2)) - - # test command of auth-cert show - self.cmd('network application-gateway auth-cert show -g {rg} --gateway-name {gateway} -n {cert1}', - checks=self.check('name', 'cert1')) - - # test command of auth-cert delete - self.cmd('network application-gateway auth-cert delete -g {rg} --gateway-name {gateway} -n {cert1} --no-wait') - self.cmd('network application-gateway auth-cert list -g {rg} --gateway-name {gateway}', - checks=self.check('length(@)', 1)) - - self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}" --no-wait') - - self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {gateway} -n {settings} --auth-certs {cert1} {cert2} --no-wait --port 443 --protocol https') - self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --auth-certs {cert2} {cert1} --no-wait') - self.cmd('network application-gateway show -g {rg} -n {gateway}', - checks=self.check('length(backendHttpSettingsCollection[1].authenticationCertificates)', 2)) - - -class NetworkAppGatewayTrustedRootCertScenario(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_root_cert') - def test_network_ag_root_cert(self, resource_group): - self.kwargs.update({ - 'gateway': 'ag1', - 'cert1': 'cert1', - 'cert1_file': os.path.join(TEST_DIR, 'test-root-cert.cer'), - 'cert2': 'cert2', - 'cert2_file': os.path.join(TEST_DIR, 'test-root-cert-2.cer'), - 'settings': 'https_settings', - 'ip1': 'myip1' - }) - self.cmd('network public-ip create -g {rg} -n {ip1} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network application-gateway create -g {rg} -n {gateway} --sku Standard_v2 --public-ip-address {ip1} --priority 1001') - self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') - self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}"') - self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}"') - - # test root-cert list - self.cmd('network application-gateway root-cert list -g {rg} --gateway-name {gateway}', - checks=self.check('length(@)', 2)) - # test root-cert show - self.cmd('network application-gateway root-cert show -g {rg} --gateway-name {gateway} -n {cert1}', - checks=self.check('name', 'cert1')) - - # test root-cert delete - self.cmd('network application-gateway root-cert delete -g {rg} --gateway-name {gateway} -n {cert2} --no-wait') - self.cmd('network application-gateway root-cert list -g {rg} --gateway-name {gateway}', - checks=self.check('length(@)', 1)) - self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}" --no-wait') - - self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {gateway} -n {settings} --root-certs {cert1} {cert2} --host-name-from-backend-pool true --no-wait --port 443 --protocol https') - self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --root-certs {cert2} {cert1} --no-wait') - self.cmd('network application-gateway show -g {rg} -n {gateway}', - checks=self.check('length(backendHttpSettingsCollection[1].trustedRootCertificates)', 2)) - self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --no-wait') - - -class NetworkAppGatewayRedirectConfigScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_basic') - def test_network_app_gateway_redirect_config(self, resource_group): - self.kwargs.update({ - 'gateway': 'ag1', - 'name': 'redirect1', - 'name2': 'redirect2' - }) - self.cmd('network application-gateway create -g {rg} -n {gateway} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') - self.cmd('network application-gateway redirect-config create --gateway-name {gateway} -g {rg} -n {name} -t permanent --include-query-string --include-path false --target-listener appGatewayHttpListener --no-wait') - self.cmd('network application-gateway redirect-config show --gateway-name {gateway} -g {rg} -n {name}', checks=[ - self.check('includePath', False), - self.check('includeQueryString', True), - self.check('redirectType', 'Permanent') - ]) - self.cmd('network application-gateway redirect-config update --gateway-name {gateway} -g {rg} -n {name} --include-path --include-query-string false --no-wait') - self.cmd('network application-gateway redirect-config show --gateway-name {gateway} -g {rg} -n {name}', checks=[ - self.check('includePath', True), - self.check('includeQueryString', False), - self.check('redirectType', 'Permanent') - ]) - # test redirect-config list command - self.cmd('network application-gateway redirect-config create --gateway-name {gateway} -g {rg} -n {name2} -t permanent --include-query-string --include-path false --target-listener appGatewayHttpListener --no-wait') - self.cmd('network application-gateway redirect-config list --gateway-name {gateway} -g {rg}', checks=[ - self.check('length(@)', 2) - ]) - # test redirect-config delete command - self.cmd('network application-gateway redirect-config delete --gateway-name {gateway} -g {rg} -n {name2}') - self.cmd('network application-gateway redirect-config list --gateway-name {gateway} -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - - - -class NetworkAppGatewayExistingSubnetScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_existing_subnet') - def test_network_app_gateway_with_existing_subnet(self, resource_group): - - vnet = self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name subnet1').get_output_in_json() - subnet_id = vnet['newVNet']['subnets'][0]['id'] - self.kwargs['subnet_id'] = subnet_id - - # make sure it fails - self.cmd('network application-gateway create -g {rg} -n ag2 --subnet {subnet_id} --subnet-address-prefix 10.0.0.0/28 --tags foo=doo --priority 1001', expect_failure=True) - # now verify it succeeds - self.cmd('network application-gateway create -g {rg} -n ag2 --subnet {subnet_id} --servers 172.0.0.1 www.mydomain.com --priority 1001', checks=[ - self.check('applicationGateway.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), - self.check('applicationGateway.frontendIPConfigurations[0].properties.subnet.id', subnet_id) - ]) - - -class NetworkAppGatewayNoWaitScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_no_wait') - def test_network_app_gateway_no_wait(self, resource_group): - - self.kwargs.update({ - 'tags': {'a': 'b', 'c': 'd'} - }) - - self.cmd('network application-gateway create -g {rg} -n ag1 --no-wait --connection-draining-timeout 180 --priority 1001', checks=self.is_empty()) - self.cmd('network application-gateway create -g {rg} -n ag2 --no-wait --tags a=b c=d --priority 1001', checks=self.is_empty()) - self.cmd('network application-gateway wait -g {rg} -n ag1 --created --interval 120', checks=self.is_empty()) - self.cmd('network application-gateway wait -g {rg} -n ag2 --created --interval 120', checks=self.is_empty()) - self.cmd('network application-gateway show -g {rg} -n ag1', checks=[ - self.check('provisioningState', 'Succeeded'), - self.check('backendHttpSettingsCollection[0].connectionDraining.enabled', True), - self.check('backendHttpSettingsCollection[0].connectionDraining.drainTimeoutInSec', 180) - ]) - self.cmd('network application-gateway show -g {rg} -n ag2', checks=[ - self.check('provisioningState', 'Succeeded'), - self.check('tags', '{tags}') - ]) - self.cmd('network application-gateway delete -g {rg} -n ag2 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n ag2 --deleted') - - -class NetworkAppGatewayPrivateIpScenarioTest20170601(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_private_ip') - def test_network_app_gateway_with_private_ip(self, resource_group): - - self.kwargs.update({ - 'private_ip': '10.0.0.15', - 'public_ip': 'pip-ag3', - 'path': os.path.join(TEST_DIR, 'TestCert.pfx'), - 'pass': 'password' - }) - self.cmd('network public-ip create -g {rg} -n {public_ip} --sku Standard') - self.cmd('network application-gateway waf-policy create -n waf1 -g {rg}') - self.cmd('network application-gateway create -g {rg} -n ag3 --subnet subnet1 --private-ip-address {private_ip} --public-ip-address {public_ip} --sku WAF_v2 --waf-policy waf1 --cert-file "{path}" --cert-password {pass} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n ag3 --exists') - self.cmd('network application-gateway show -g {rg} -n ag3', checks=[ - self.check('frontendIPConfigurations[0].privateIPAddress', '{private_ip}'), - self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Static') - ]) - self.kwargs['path'] = os.path.join(TEST_DIR, 'TestCert2.pfx') - self.cmd('network application-gateway ssl-cert update -g {rg} --gateway-name ag3 -n ag3SslCert --cert-file "{path}" --cert-password {pass}') - self.cmd('network application-gateway wait -g {rg} -n ag3 --updated') - - # test ssl-cert list - self.cmd('network application-gateway ssl-cert list -g {rg} --gateway-name ag3', - checks=[self.check('length(@)', 1)]) - - # test ssl-cert show - self.cmd('network application-gateway ssl-cert show -g {rg} --gateway-name ag3 -n ag3SslCert', - checks=[self.check('name', 'ag3SslCert')]) - - self.kwargs['path'] = os.path.join(TEST_DIR, 'TestCert.pfx') - self.cmd('network application-gateway ssl-cert create -g {rg} --gateway-name ag3 -n ag3SslCert01 --cert-file "{path}" --cert-password {pass} --no-wait') - # test ssl-cert delete - self.cmd('network application-gateway ssl-cert delete -g {rg} --gateway-name ag3 -n ag3SslCert01 --no-wait') - self.cmd('network application-gateway ssl-cert list -g {rg} --gateway-name ag3', checks=[ - self.check('length(@)', 1)]) - - self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 --disabled-ssl-protocols TLSv1_0 TLSv1_1 --no-wait') - self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', - checks=self.check('disabledSslProtocols.length(@)', 2)) - - cipher_suite = 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256' - self.kwargs['cipher'] = cipher_suite - self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 --min-protocol-version TLSv1_2 --cipher-suites {cipher} --no-wait') - self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', checks=[ - self.check('cipherSuites.length(@)', 1), - self.check('minProtocolVersion', 'TLSv1_2'), - self.check('policyType', 'Custom') - ]) - - # supported predefined policy (positive path) - policy_name = 'AppGwSslPolicy20220101' - self.kwargs['policy'] = policy_name - self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 -n {policy} --policy-type Predefined --no-wait') - self.cmd('network application-gateway wait -g {rg} -n ag3 --updated') - self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', checks=[ - self.check('policyName', policy_name), - self.check('policyType', 'Predefined') - ]) - # test predefined show - self.cmd('network application-gateway ssl-policy predefined show -n {policy}', checks=[ - self.check('name', policy_name) - ]) - - # test predefined list - self.cmd('network application-gateway ssl-policy predefined list', checks=[ - self.check('length(@)', 5)]) - - # test ssl-policy list-options - self.cmd('network application-gateway ssl-policy list-options', checks=[ - self.exists('availableCipherSuites'), - self.exists('availableProtocols'), - self.exists('predefinedPolicies'), - self.check('type', 'Microsoft.Network/ApplicationGatewayAvailableSslOptions'), - ]) - - @ResourceGroupPreparer(name_prefix='test_appgw_with_tcp', location='westus') - def test_appgw_with_tcp(self, resource_group): - self.kwargs.update({ - 'appgw': 'appgw', - 'appgw_frontend_port': 'testFrontendPort', - 'appgw_settings': 'testSettings', - 'appgw_listener': 'testListener', - 'appgw_address_pool': 'testAddressPool', - 'appgw_routing_rule': 'testRule', - 'appgw_public_ip': 'testPublicIp', - 'appgw_rule_type': 'Basic', - 'priority': 1001, - 'port': 8080 - }) - - self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - - self.cmd('network application-gateway create -g {rg} -n {appgw} ' - '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' - '--priority {priority}') - show_appgw_data = self.cmd('network application-gateway show -g {rg} -n {appgw}').get_output_in_json() - frontend_ip = show_appgw_data['frontendIPConfigurations'][0]['name'] - self.kwargs.update({ - 'appgw_frontend_ip': frontend_ip - }) - - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port} --port {port}') - self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' - '--frontend-port {appgw_frontend_port} -n {appgw_listener} --frontend-ip {appgw_frontend_ip}', - checks=(self.check('listeners[0].name', '{appgw_listener}'))) - self.cmd('network application-gateway settings create -g {rg} --gateway-name {appgw} ' - '--name {appgw_settings} --port {port} ', - checks=(self.check('backendSettingsCollection[0].name', '{appgw_settings}'))) - self.cmd( - 'network application-gateway address-pool create -g {rg} --gateway-name {appgw} -n {appgw_address_pool} ' - '--servers 10.0.0.4 10.0.0.5') - self.cmd('network application-gateway routing-rule create -g {rg} --gateway-name {appgw} ' - '--name {appgw_routing_rule} --listener {appgw_listener} --rule-type {appgw_rule_type} ' - '--address-pool {appgw_address_pool} --settings {appgw_settings} --priority 1002', - checks=[ - self.check('routingRules[0].name', '{appgw_routing_rule}') - ]) - - self.cmd('network application-gateway delete --name {appgw} --resource-group {rg}') - -class NetworkAppGatewaySubresourceScenarioTest(ScenarioTest): - - def _create_ag(self): - self.cmd('network application-gateway create -g {rg} -n {ag} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - @ResourceGroupPreparer(name_prefix='cli_test_ag_address_pool') - def test_network_ag_address_pool(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway address-pool', - 'name': 'pool1' - }) - self._create_ag() - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --servers 123.4.5.6 www.mydns.com') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('length(backendAddresses)', 2), - self.check('backendAddresses[0].ipAddress', '123.4.5.6'), - self.check('backendAddresses[1].fqdn', 'www.mydns.com'), - ]) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --servers 5.4.3.2') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('length(backendAddresses)', 1), - self.check('backendAddresses[0].ipAddress', '5.4.3.2') - ]) - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_port') - def test_network_ag_frontend_port(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway frontend-port', - 'name': 'myport' - }) - self._create_ag() - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --port 111') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('name', 'myport'), - self.check('port', 111) - ]) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --port 112') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('name', 'myport'), - self.check('port', 112) - ]) - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_ip_public') - def test_network_ag_frontend_ip_public(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway frontend-ip', - 'name': 'myfrontend', - 'ip1': 'myip1', - 'ip2': 'myip2' - }) - self.cmd('network application-gateway create -g {rg} -n {ag} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - self.cmd('network public-ip create -g {rg} -n {ip1} --sku Basic') - self.cmd('network public-ip create -g {rg} -n {ip2}') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --public-ip-address {ip1}') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('subnet', None) - ]) - - # NOTE: Service states that public IP address cannot be changed. https://github.com/Azure/azure-cli/issues/4133 - # self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --public-ip-address {ip2}') - # self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}') - - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_ip_private') - def test_network_ag_frontend_ip_private(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway frontend-ip', - 'name': 'frontendip', - 'ip1': 'myip1', - 'vnet1': 'vnet1', - 'vnet2': 'vnet2', - 'subnet': 'subnet1' - }) - self.cmd('network public-ip create -g {rg} -n {ip1}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name {subnet}') - - self.cmd('network application-gateway create -g {rg} -n {ag} --no-wait --public-ip-address {ip1} --vnet-name {vnet1} --subnet {subnet} --priority 1001') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --private-ip-address 10.0.0.10 --vnet-name {vnet1} --subnet {subnet}') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - ]) - - # NOTE: Service states that frontend subnet cannot differ from gateway subnet https://github.com/Azure/azure-cli/issues/4134 - # self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name {subnet} --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.10.0/24') - # self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --private-ip-address 11.0.10.10 --vnet-name {vnet2} --subnet {subnet}') - # self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}') - - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_http_listener') - def test_network_ag_http_listener(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway http-listener', - 'name': 'mylistener' - }) - self._create_ag() - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('hostName', 'www.test.com') - ]) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --host-name www.test2.com') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('hostName', 'www.test2.com') - ]) - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='test_network_ag_http_listener_with_waf_policy') - def test_network_ag_http_listener_with_waf_policy(self): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway http-listener', - 'name': 'mylistener', - 'waf_1': 'waf_1', - 'waf_2': 'waf_2', - 'waf_3': 'waf_3', - 'listener_2': 'listener_2', - }) - - # prepare 2 WAF policies - self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_1}') - self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_2}') - self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_3}') - - self.cmd('network public-ip create -g {rg} -n ip-1 --sku Standard') - - # sku=WAF_v2 is necessary for updating HTTP listener's WAF configuration - self.cmd('network application-gateway waf-policy create -n waf_1 -g {rg}') - create_res = self.cmd('network application-gateway create -g {rg} --name {ag} --public-ip-address ip-1 --sku WAF_v2 --priority 1001 --waf-policy waf_1').get_output_in_json() - self.assertEqual(len(create_res['applicationGateway']['httpListeners']), 1) - self.assertIsNone(create_res['applicationGateway']['httpListeners'][0].get('firewallPolicy')) - - # update the default HTTP listener's WAF policy - update_res = self.cmd('network application-gateway http-listener update -g {rg} --gateway-name {ag} --name appGatewayHttpListener --waf-policy {waf_1}').get_output_in_json() - self.assertTrue(update_res['firewallPolicy']['id'].endswith('waf_1')) - - # create another HTTP listener with WAF policy and update it to another WAF policy - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {ag} --port 9020 --name 9020') - self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} --name {listener_2} --frontend-port 9020 --waf-policy {waf_2}') - update_res = self.cmd('network application-gateway http-listener update -g {rg} --gateway-name {ag} --name {listener_2} --waf-policy {waf_3}').get_output_in_json() - self.assertTrue(update_res['firewallPolicy']['id'].endswith('waf_3')) - - self.cmd('network application-gateway show -g {rg} --name {ag}') - - @ResourceGroupPreparer(name_prefix='cli_test_ag_http_listener') - def test_network_ag_http_listener_with_multi_host_names(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway http-listener', - 'name': 'mylistener', - 'gateway_ip': 'ip1', - 'port': 'cliport', - 'waf': 'waf1', - }) - - self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') - self.cmd('network application-gateway waf-policy create -n {waf} -g {rg}') - self.cmd('network application-gateway create -g {rg} -n {ag} ' - '--sku WAF_v2 ' - '--public-ip-address {gateway_ip} --waf-policy {waf} --priority 1001') - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {ag} -n {port} --port 18080') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --frontend-port {port} --host-names "*.contoso.com" "www.microsoft.com"') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('length(hostNames)', 2), - self.check('hostNames[0]', "*.contoso.com"), - self.check('hostNames[1]', "www.microsoft.com") - ]) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --host-names "*.contoso.com" "www.bing.com"') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('length(hostNames)', 2), - self.check('hostNames[0]', "*.contoso.com"), - self.check('hostNames[1]', "www.bing.com") - ]) - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_http_settings') - def test_network_ag_http_settings(self, resource_group): - - self.kwargs.update({ - 'ag': 'ag1', - 'res': 'application-gateway http-settings', - 'name': 'mysettings', - 'name2': 'mysettings2', - 'ip': 'pip', - 'vnet': 'vnet1', - 'subnet': 'subnet1' - }) - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network vnet create -g {rg} -n {vnet} --address-prefix 10.0.0.0/16') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --default-outbound-access false') - self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet} --public-ip-address {ip} --priority 1001 --sku Standard_v2') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --affinity-cookie-name mycookie --connection-draining-timeout 60 --cookie-based-affinity --host-name-from-backend-pool --protocol https --timeout 50 --port 70') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('affinityCookieName', 'mycookie'), - self.check('connectionDraining.drainTimeoutInSec', 60), - self.check('connectionDraining.enabled', True), - self.check('cookieBasedAffinity', 'Enabled'), - self.check('pickHostNameFromBackendAddress', True), - self.check('port', 70), - self.check('protocol', 'Https'), - self.check('requestTimeout', 50) - ]) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --affinity-cookie-name mycookie2 --connection-draining-timeout 0 --cookie-based-affinity disabled --host-name-from-backend-pool false --protocol http --timeout 40 --port 71') - self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('affinityCookieName', 'mycookie2'), - self.check('connectionDraining.drainTimeoutInSec', 1), - self.check('connectionDraining.enabled', False), - self.check('cookieBasedAffinity', 'Disabled'), - self.check('pickHostNameFromBackendAddress', False), - self.check('port', 71), - self.check('protocol', 'Http'), - self.check('requestTimeout', 40) - ]) - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - - self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {name2} --port 443 \ - --protocol Https --cookie-based-affinity disabled --validate-cert-chain-and-expiry false --validate-sni true', checks=[ - self.check('name', '{name2}'), - self.check('port', 443), - self.check('protocol', 'Https'), - self.check('cookieBasedAffinity', 'Disabled'), - self.check('validateCertChainAndExpiry', False), - self.check('validateSNI', True), - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_probe') - def test_network_ag_probe(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'gateway_ip': 'gateway_ip', - 'ag': 'ag1', - 'name': 'myprobe', - 'waf': 'waf1', - }) - - self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') - self.cmd('network application-gateway waf-policy create -n {waf} -g {rg}') - self.cmd('network application-gateway create -g {rg} -n {ag} ' - '--sku WAF_v2 --priority 1001 ' - '--public-ip-address {gateway_ip} --waf-policy {waf}') - - self.cmd('network application-gateway probe create -g {rg} --gateway-name {ag} -n {name} --no-wait ' - '--path /test ' - '--protocol http ' - '--interval 25 ' - '--timeout 100 ' - '--threshold 10 ' - '--min-servers 2 ' - '--host www.test.com ' - '--match-status-codes 200 204 ' - '--host-name-from-http-settings false ' - '--port 2048 ') - self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('path', '/test'), - self.check('protocol', 'Http'), - self.check('interval', 25), - self.check('timeout', 100), - self.check('unhealthyThreshold', 10), - self.check('minServers', 2), - self.check('host', 'www.test.com'), - self.check('length(match.statusCodes)', 2), - self.check('pickHostNameFromBackendHttpSettings', False), - self.check('port', 2048) - ]) - self.cmd('network application-gateway probe update -g {rg} --gateway-name {ag} -n {name} --no-wait ' - '--path /test2 ' - '--protocol https ' - '--interval 26 ' - '--timeout 101 ' - '--threshold 11 ' - '--min-servers 3 ' - '--host "" ' - '--match-status-codes 201 ' - '--host-name-from-http-settings ' - '--port 4096 ') - self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('path', '/test2'), - self.check('protocol', 'Https'), - self.check('interval', 26), - self.check('timeout', 101), - self.check('unhealthyThreshold', 11), - self.check('minServers', 3), - self.check('host', ''), - self.check('length(match.statusCodes)', 1), - self.check('pickHostNameFromBackendHttpSettings', True), - self.check('port', 4096) - ]) - self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - self.cmd('network application-gateway probe delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_probe_with_host_name_from_settings') - def test_network_ag_probe_with_host_name_from_settings(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'gateway_ip': 'gateway_ip', - 'ag': 'ag1', - 'name': 'myprobe' - }) - - self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') - self.cmd('network application-gateway create -g {rg} -n {ag} ' - '--sku Standard_v2 --priority 1001 ' - '--public-ip-address {gateway_ip} ') - - self.cmd('network application-gateway probe create -g {rg} --gateway-name {ag} -n {name} --no-wait ' - '--protocol tcp ' - '--interval 25 ' - '--timeout 100 ' - '--threshold 10 ' - '--min-servers 2 ' - '--match-status-codes 200 204 ' - '--host-name-from-settings false ' - '--port 2048 ') - self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('protocol', 'Tcp'), - self.check('interval', 25), - self.check('timeout', 100), - self.check('unhealthyThreshold', 10), - self.check('minServers', 2), - self.check('length(match.statusCodes)', 2), - self.check('pickHostNameFromBackendSettings', False), - self.check('port', 2048) - ]) - self.cmd('network application-gateway probe update -g {rg} --gateway-name {ag} -n {name} --no-wait ' - '--protocol tls ' - '--interval 26 ' - '--timeout 101 ' - '--threshold 11 ' - '--min-servers 3 ' - '--match-status-codes 201 ' - '--host-name-from-settings false ' - '--port 4096 ') - self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ - self.check('protocol', 'Tls'), - self.check('interval', 26), - self.check('timeout', 101), - self.check('unhealthyThreshold', 11), - self.check('minServers', 3), - self.check('length(match.statusCodes)', 1), - self.check('pickHostNameFromBackendSettings', False), - self.check('port', 4096) - ]) - self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) - self.cmd('network application-gateway probe delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_rule') - def test_network_ag_rule(self, resource_group): - - self.kwargs.update({ - 'ip': 'pip1', - 'ag': 'ag1', - 'res': 'application-gateway rule', - 'name': 'myrule', - 'name2': 'myrule2', - 'set': 'myruleset' - }) - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') - self.cmd('network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - # Make the default rule has priority. - # Otherwise, server will raise ApplicationGatewayRequestRoutingRulePartialPriorityDefined - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n rule1 --priority 1') - - self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') - self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener2 --no-wait --frontend-port appGatewayFrontendPort --host-name www.test2.com') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --http-listener mylistener --priority 12') - rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}').get_output_in_json() - self.assertTrue(rule['httpListener']['id'].endswith('mylistener')) - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --http-listener mylistener2 --priority 32') - rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}').get_output_in_json() - self.assertTrue(rule['httpListener']['id'].endswith('mylistener2')) - - self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') - - # test rewrite-rule set update command - self.cmd('network application-gateway rewrite-rule set update -g {rg} --gateway-name {ag} -n {set}') - - self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name2} --no-wait --rewrite-rule-set {set} --http-listener mylistener --priority 10') - rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name2}').get_output_in_json() - self.kwargs['set_id'] = rule['rewriteRuleSet']['id'] - self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name2} --rewrite-rule-set {set_id} --priority 21', checks=[ - self.check('rewriteRuleSet.id', '{set_id}') - ]) - - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=[ - self.check('length(@)', 3) - ]) - self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') - self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=[ - self.check('length(@)', 2) - ]) - - @ResourceGroupPreparer(name_prefix="cli_test_ag_rule_default_exists", location="westus") - def test_ag_rule_default_exists(self): - self.kwargs.update({ - "pip": self.create_random_name("public-ip-", 16), - "ag": self.create_random_name("application-gateway-", 24), - "port1": self.create_random_name("frontend-port-", 20), - "port2": self.create_random_name("frontend-port-", 20), - "listener": self.create_random_name("listener-", 16), - "settings": self.create_random_name("settings-", 16), - "http_listener": self.create_random_name("http-listener-", 20), - "routing_rule": self.create_random_name("routing-rule-", 20), - "pool": self.create_random_name("pool-", 12), - "redirect_config": self.create_random_name("redirect-config-", 20), - "rule": self.create_random_name("rule-", 12), - }) - self.cmd("network public-ip create -n {pip} -g {rg} --sku Standard") - output = self.cmd("network application-gateway create -n {ag} -g {rg} --public-ip-address {pip} --sku Standard_v2 --priority 1001").get_output_in_json()["applicationGateway"] - self.kwargs["pool_id"] = output["backendAddressPools"][0]["id"] - self.kwargs["http_settings_id"] = output["backendHttpSettingsCollection"][0]["id"] - - self.cmd("network application-gateway frontend-port create -n {port1} -g {rg} --gateway-name {ag} --port 8080") - self.kwargs["listener_id"] = self.cmd("network application-gateway listener create -n {listener} -g {rg} --gateway-name {ag} --frontend-port {port1} --frontend-ip appGatewayFrontendIP").get_output_in_json()["listeners"][0]["id"] - self.kwargs["settings_id"] = self.cmd("network application-gateway settings create -n {settings} -g {rg} --gateway-name {ag} --port 8080").get_output_in_json()["backendSettingsCollection"][0]["id"] - - self.cmd( - "network application-gateway routing-rule create -n {routing_rule} -g {rg} --gateway-name {ag} --priority 1002", - checks=[ - self.check("routingRules[0].backendAddressPool.id", "{pool_id}"), - self.check("routingRules[0].backendSettings.id", "{settings_id}"), - self.check("routingRules[0].listener.id", "{listener_id}"), - ] - ) - self.cmd("network application-gateway routing-rule delete -n {routing_rule} -g {rg} --gateway-name {ag}") - # default http listener has been associated with default rule - self.cmd("network application-gateway frontend-port create -n {port2} -g {rg} --gateway-name {ag} --port 8082") - self.cmd("network application-gateway http-listener create -n {http_listener} -g {rg} --gateway-name {ag} --frontend-port {port2} --frontend-ip appGatewayFrontendIP") - # multiple pools are valid when redirection exsits - self.cmd("network application-gateway address-pool create -n {pool} -g {rg} --gateway-name {ag}") - self.cmd("network application-gateway frontend-port create -n rd-port -g {rg} --gateway-name {ag} --port 8084") - self.cmd("network application-gateway http-listener create -n rd-listener -g {rg} --gateway-name {ag} --frontend-port rd-port --frontend-ip appGatewayFrontendIP") - self.cmd("network application-gateway redirect-config create -n {redirect_config} -g {rg} --gateway-name {ag} --target-listener rd-listener --type permanent") - self.cmd( - "network application-gateway rule create -n {rule} -g {rg} --gateway-name {ag} --http-listener {http_listener} --redirect-config {redirect_config} --priority 1004", - checks=[ - self.check("length(backendAddressPools)", 2), - self.check("requestRoutingRules[0].backendAddressPool.id", "{pool_id}"), - self.check("requestRoutingRules[0].backendHttpSettings.id", "{http_settings_id}"), - ] - ) - self.cmd("network application-gateway rule delete -n {rule} -g {rg} --gateway-name {ag}") - - @ResourceGroupPreparer(name_prefix='cli_test_ag_url_path_map') - def test_network_ag_url_path_map(self, resource_group): - self.kwargs.update({ - 'ip': 'pip1', - 'ag': 'ag1', - 'name': 'mypathmap', - 'rulename': 'myurlrule', - 'rulename2': 'myurlrule2', - 'pool': 'mypool', - 'set': 'myruleset', - 'settings': 'http_settings', - 'rg': resource_group - }) - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') - self.cmd('network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') - - self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') - self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') - self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {settings} --port 443 --protocol https') - self.cmd('network application-gateway url-path-map create -g {rg} --gateway-name {ag} -n {name} --rule-name {rulename} --paths /mypath1/* --address-pool {pool} ' - '--default-address-pool {pool} --http-settings {settings} --default-http-settings {settings} ' - '--default-rewrite-rule-set {set} --rewrite-rule-set {set}') - - # test url-path-map list - self.cmd('network application-gateway url-path-map list -g {rg} --gateway-name {ag}', - checks=[self.check('length(@)', 1)]) - - # test url-path-map show - self.cmd('network application-gateway url-path-map show -g {rg} --gateway-name {ag} -n {name}', - checks=[self.check('name', 'mypathmap')]) - - self.cmd('network application-gateway url-path-map update -g {rg} --gateway-name {ag} -n {name} --default-rewrite-rule-set {set}') - self.cmd('network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' - '--paths /mypath122/* --address-pool {pool} --http-settings {settings} --rewrite-rule-set {set}') - - # test url-path-map rule delete - self.cmd('network application-gateway url-path-map rule delete -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name}') - - # test url-path-map delete - self.cmd('network application-gateway url-path-map delete -g {rg} --gateway-name {ag} -n {name}') - self.cmd('network application-gateway url-path-map list -g {rg} --gateway-name {ag}', - checks=[self.check('length(@)', 0)]) - - - @ResourceGroupPreparer(name_prefix='cli_test_ag_url_path_map_edge_case') - def test_network_ag_url_path_map_edge_case(self, resource_group): - self.kwargs.update({ - 'ip': 'pip1', - 'ag': 'ag1', - 'name': 'mypathmap', - 'rulename': 'myurlrule', - 'rulename2': 'myurlrule2', - 'pool': 'mypool', - 'set': 'myruleset', - 'settings': 'http_settings', - 'redirect_config': 'myconfig', - 'rg': resource_group - }) - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') - self.cmd( - 'network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - - self.cmd( - 'network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') - - self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') - self.cmd('network application-gateway redirect-config create -g {rg} --gateway-name {ag} -n {redirect_config} ' - '--target-listener mylistener --type Permanent') - self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') - self.cmd( - 'network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {settings} --port 443 --protocol https') - self.cmd( - 'network application-gateway url-path-map create -g {rg} --gateway-name {ag} -n {name} --rule-name {rulename} --paths /mypath1/* ' - '--redirect-config {redirect_config} --default-redirect-config {redirect_config}') - self.cmd( - 'network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' - '--paths /mypath122/* --address-pool {pool} --http-settings {settings}') - with self.assertRaisesRegex(CLIError, "Cannot reference a BackendAddressPool when Redirect Configuration is specified."): - self.cmd( - 'network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' - '--paths /mypath122/* --address-pool {pool} --http-settings {settings} --redirect-config {redirect_config}') - - @ResourceGroupPreparer(name_prefix='cli_test_ag_listener') - def test_network_ag_listener(self, resource_group): - self.kwargs.update({ - 'appgw': 'appgw', - 'appgw_frontend_port': 'testFrontendPort01', - 'appgw_listener': 'testListener', - 'appgw_public_ip': 'testPublicIp', - 'appgw_rule_type': 'Basic', - 'res': 'application-gateway listener', - 'priority': 1001, - 'port1': 8080, - 'port2': 8081, - }) - - self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') - - self.cmd('network application-gateway create -g {rg} -n {appgw} ' - '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' - '--priority {priority}') - - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port} --port {port1}') - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n testFrontendPort02 --port {port2}') - - self.cmd('network {res} create -g {rg} --gateway-name {appgw} --frontend-port {appgw_frontend_port} ' - '-n {appgw_listener} --frontend-ip appGatewayFrontendIP') - - self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_listener}', - checks=(self.check('name', '{appgw_listener}'))) - - self.cmd('network {res} update -g {rg} --gateway-name {appgw} --frontend-port testFrontendPort02 -n {appgw_listener}') - - listener = self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_listener}').get_output_in_json() - self.assertTrue(listener['frontendPort']['id'].endswith('testFrontendPort02')) - - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 1))) - - self.cmd('network {res} delete -g {rg} --gateway-name {appgw} -n {appgw_listener}') - - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 0))) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_listener_with_host_names') - @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium', additional_params='--enable-rbac-authorization false') - def test_network_ag_listener_with_host_names(self, resource_group): - self.kwargs.update({ - 'appgw': 'appgw', - 'appgw_frontend_port': 'testFrontendPort01', - 'appgw_listener': 'testListener', - 'appgw_public_ip': 'testPublicIp', - 'access_identity': 'id1', - 'priority': 1001, - 'cert': 'MyCertificate', - 'port': 8080, - 'ssl_cert_name': 'TestCertName', - }) - - # create a managed identity - access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() - self.kwargs.update({ - 'access_identity_principal': access_identity_result['principalId'] - }) - - self.cmd('keyvault set-policy -g {rg} -n {kv} ' - '--object-id {access_identity_principal} --secret-permissions get list set') - - # create a certificate - keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() - self.kwargs.update({ - 'keyvault_cert_policy': keyvault_cert_policy - }) - self.cmd('keyvault certificate create ' - '--vault-name {kv} ' - '--name {cert} ' - '--policy "{keyvault_cert_policy}"') - cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() - self.kwargs.update({ - 'secret_id': cert_result['sid'] - }) - - self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') - - # create application-gateway with one_off_identity - self.cmd('network application-gateway create ' - '-g {rg} -n {appgw} ' - '--sku Standard_v2 --public-ip-address {appgw_public_ip} ' - '--identity {access_identity} ' - '--frontend-port 1000 ' - '--key-vault-secret-id {secret_id} ' - '--ssl-certificate-name {ssl_cert_name} --priority {priority}', checks=[ - self.check('applicationGateway.sslCertificates[0].name', self.kwargs['ssl_cert_name']), - self.check('applicationGateway.sslCertificates[0].properties.keyVaultSecretId', self.kwargs['secret_id']), - ]) - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port} --port {port}') - - self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} -n {appgw_listener} ' - '--host-names "*.contoso.com" "www.microsoft.com" --frontend-port {appgw_frontend_port} ' - '--frontend-ip appGatewayFrontendIP --ssl-cert {ssl_cert_name}') - self.cmd('network application-gateway listener show -g {rg} --gateway-name {appgw} -n {appgw_listener}', checks=[ - self.check('length(hostNames)', 2), - self.check('hostNames[0]', "*.contoso.com"), - self.check('hostNames[1]', "www.microsoft.com") - ]) - self.cmd('network application-gateway listener update -g {rg} --gateway-name {appgw} -n {appgw_listener} ' - '--host-names "*.contoso.com" "www.bing.com"') - self.cmd('network application-gateway listener show -g {rg} --gateway-name {appgw} -n {appgw_listener}', checks=[ - self.check('length(hostNames)', 2), - self.check('hostNames[0]', "*.contoso.com"), - self.check('hostNames[1]', "www.bing.com") - ]) - self.cmd('network application-gateway listener list -g {rg} --gateway-name {appgw}', self.check('length(@)', 1)) - self.cmd('network application-gateway listener delete -g {rg} --gateway-name {appgw} -n {appgw_listener}') - self.cmd('network application-gateway listener list -g {rg} --gateway-name {appgw}', self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_settings') - def test_network_ag_settings(self, resource_group): - self.kwargs.update({ - 'appgw': 'appgw', - 'appgw_frontend_port1': 'testFrontendPort01', - 'appgw_frontend_port2': 'testFrontendPort02', - 'appgw_settings': 'testSettings', - 'appgw_public_ip': 'testPublicIp', - 'appgw_rule_type': 'Basic', - 'res': 'application-gateway settings', - 'priority': 1001, - 'port1': 8080, - 'port2': 8081 - }) - - self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') - - self.cmd('network application-gateway create -g {rg} -n {appgw} ' - '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' - '--priority {priority}') - - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port1} --port {port1}') - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port2} --port {port2}') - - self.cmd('network {res} create -g {rg} --gateway-name {appgw} ' - '--name {appgw_settings} --port {port1} ') - - self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_settings}', - checks=(self.check('name', '{appgw_settings}'))) - - self.cmd('network {res} update -g {rg} --gateway-name {appgw} ' - '--name {appgw_settings} --port {port2}') - - self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_settings}', - checks=(self.check('port', 8081))) - - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 1))) - - self.cmd('network {res} delete --gateway-name {appgw} --name {appgw_settings} --resource-group {rg}') - - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 0))) - - @ResourceGroupPreparer(name_prefix='cli_test_ag_routing_rule') - def test_network_ag_routing_rule(self, resource_group): - self.kwargs.update({ - 'appgw': 'appgw', - 'appgw_frontend_port1': 'testFrontendPort01', - 'appgw_frontend_port2': 'testFrontendPort02', - 'appgw_settings': 'testSettings', - 'appgw_listener1': 'testListener01', - 'appgw_listener2': 'testListener02', - 'appgw_address_pool': 'testAddressPool', - 'appgw_routing_rule': 'testRule', - 'appgw_public_ip': 'testPublicIp', - 'appgw_rule_type': 'Basic', - 'res': 'application-gateway routing-rule', - 'priority': 1001, - 'port1': 8080, - 'port2': 8081 - }) - - self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') - - self.cmd('network application-gateway create -g {rg} -n {appgw} ' - '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' - '--priority {priority}') - - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port1} --port {port1}') - self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' - '-n {appgw_frontend_port2} --port {port2}') - - self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' - '--frontend-port {appgw_frontend_port1} -n {appgw_listener1} --frontend-ip appGatewayFrontendIP', - checks=(self.check('listeners[0].name', '{appgw_listener1}'))) - - self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' - '--frontend-port {appgw_frontend_port2} -n {appgw_listener2} --frontend-ip appGatewayFrontendIP', - checks=(self.check('listeners[1].name', '{appgw_listener2}'))) - - self.cmd('network application-gateway settings create -g {rg} --gateway-name {appgw} ' - '--name {appgw_settings} --port {port1} ', - checks=(self.check('backendSettingsCollection[0].name', '{appgw_settings}'))) - self.cmd( - 'network application-gateway address-pool create -g {rg} --gateway-name {appgw} -n {appgw_address_pool} ' - '--servers 10.0.0.4 10.0.0.5') - self.cmd('network {res} create -g {rg} --gateway-name {appgw} ' - '--name {appgw_routing_rule} --listener {appgw_listener1} --rule-type {appgw_rule_type} ' - '--address-pool {appgw_address_pool} --settings {appgw_settings} --priority 1002') - - self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_routing_rule}', - checks=(self.check('name', '{appgw_routing_rule}'))) - - self.cmd('network {res} update -g {rg} --gateway-name {appgw} --name {appgw_routing_rule} ' - '--listener {appgw_listener2} --rule-type {appgw_rule_type} ' - '--address-pool {appgw_address_pool}') - - routing_rule = self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_routing_rule}').get_output_in_json() - self.assertTrue(routing_rule['listener']['id'].endswith('testListener02')) - - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 1))) - self.cmd('network {res} delete --gateway-name {appgw} --resource-group {rg} -n {appgw_routing_rule}') - self.cmd('network {res} list -g {rg} --gateway-name {appgw}', - checks=(self.check('length(@)', 0))) - - - @ResourceGroupPreparer(name_prefix='cli_test_ags_new_prop') - def test_network_ags_enable_l4_client_ip_preservation(self, resource_group): - self.kwargs.update({ - 'public-ip-name': self.create_random_name(prefix='public',length=15), - 'vnet-name': self.create_random_name(prefix='vnet',length=15), - 'vnet-address': '10.10.0.0/16', - 'subnet-address': '10.10.0.0/24', - 'subnet-name': self.create_random_name(prefix='subnet',length=15), - 'gateway-name': self.create_random_name(prefix='gateway',length=15), - 'setting-name': self.create_random_name(prefix='setting',length=15), - 'port': 8080, - }) - - self.cmd('network public-ip create ' - '--resource-group {rg} ' - '--name {public-ip-name} ' - '--sku Standard ' - '--ip-tags FirstPartyUsage=/NonProd') - - self.cmd('network vnet create ' - '--resource-group {rg} ' - '--name {vnet-name} ' - '--address-prefix {vnet-address}') - - self.cmd('network vnet subnet create ' - '--resource-group {rg} ' - '--name {subnet-name} ' - '--vnet-name {vnet-name} ' - '--address-prefix {subnet-address} ' - '--default-outbound false') - - self.cmd('network application-gateway create ' - '--resource-group {rg} ' - '--name {gateway-name} ' - '--sku Standard_v2 ' - '--public-ip-address {public-ip-name} ' - '--vnet-name {vnet-name} ' - '--subnet {subnet-name} ' - '--priority 1001') - - self.cmd('network application-gateway settings create ' - '--resource-group {rg} ' - '--name {setting-name} ' - '--gateway-name {gateway-name} ' - '--port {port}') - - self.cmd('network application-gateway settings show ' - '--resource-group {rg} ' - '--name {setting-name} ' - '--gateway-name {gateway-name}', - checks=(self.check('enableL4ClientIpPreservation', False))) - - self.cmd('network application-gateway settings update ' - '--resource-group {rg} ' - '--name {setting-name} ' - '--gateway-name {gateway-name} ' - '--enable-l4-client-ip true', - checks=(self.check('enableL4ClientIpPreservation', True))) - - self.cmd('network application-gateway settings list ' - '--resource-group {rg} ' - '--gateway-name {gateway-name}', - checks = self.check('length(@)', 1)) - - self.cmd('network application-gateway settings delete ' - '--resource-group {rg} ' - '--name {setting-name} ' - '--gateway-name {gateway-name}') - - self.cmd('network application-gateway settings list ' - '--resource-group {rg} ' - '--gateway-name {gateway-name}', - checks=self.check('length(@)', 0)) - - - @ResourceGroupPreparer(name_prefix='cli_test_agp_new_prop') - def test_network_ags_enable_probe_proxy_protocol_header(self, resource_group): - self.kwargs.update({ - 'public-ip-name': self.create_random_name(prefix='public',length=15), - 'vnet-name': self.create_random_name(prefix='vnet',length=15), - 'vnet-address': '10.10.0.0/16', - 'subnet-address': '10.10.0.0/24', - 'subnet-name': self.create_random_name(prefix='subnet',length=15), - 'gateway-name': self.create_random_name(prefix='gateway',length=15), - 'probe-name': self.create_random_name(prefix='probe',length=15), - }) - - self.cmd('network public-ip create ' - '--resource-group {rg} ' - '--name {public-ip-name} ' - '--sku Standard ' - '--ip-tags FirstPartyUsage=/NonProd') - - self.cmd('network vnet create ' - '--resource-group {rg} ' - '--name {vnet-name} ' - '--address-prefix {vnet-address}') - - self.cmd('network vnet subnet create ' - '--resource-group {rg} ' - '--name {subnet-name} ' - '--vnet-name {vnet-name} ' - '--address-prefix {subnet-address} ' - '--default-outbound false') - - self.cmd('network application-gateway create ' - '--resource-group {rg} ' - '--name {gateway-name} ' - '--sku Standard_v2 ' - '--public-ip-address {public-ip-name} ' - '--vnet-name {vnet-name} ' - '--subnet {subnet-name} ' - '--priority 1001') - - self.cmd('network application-gateway probe create ' - '--resource-group {rg} ' - '--name {probe-name} ' - '--gateway-name {gateway-name} ' - '--protocol TCP') - - self.cmd('network application-gateway probe show ' - '--resource-group {rg} ' - '--name {probe-name} ' - '--gateway-name {gateway-name}', - checks=(self.check('enableProbeProxyProtocolHeader', False))) - - self.cmd('network application-gateway probe update ' - '--resource-group {rg} ' - '--name {probe-name} ' - '--gateway-name {gateway-name} ' - '--enable-proxy-header true', - checks=(self.check('enableProbeProxyProtocolHeader', True))) - - self.cmd('network application-gateway probe list ' - '--resource-group {rg} ' - '--gateway-name {gateway-name}', - checks=self.check('length(@)', 1)) - - self.cmd('network application-gateway probe delete ' - '--resource-group {rg} ' - '--name {probe-name} ' - '--gateway-name {gateway-name}') - - self.cmd('network application-gateway probe list ' - '--resource-group {rg} ' - '--gateway-name {gateway-name}', - checks=self.check('length(@)', 0)) - - -class NetworkAppGatewayRewriteRuleset(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_rewrite_rulesets') - def test_network_app_gateway_rewrite_rulesets(self, resource_group): - - self.kwargs.update({ - 'gw': 'gw1', - 'ip': 'pip1', - 'set': 'ruleset1', - 'rule': 'rule1', - 'rule2': 'rule2', - 'rule3': 'rule3', - 'rule4': 'rule4', - 'var': 'http_req_Authorization' - }) - self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') - self.cmd('network application-gateway create -g {rg} -n {gw} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {gw} --exists') - - # create ruleset - self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {gw} -n {set} --no-wait') - self.cmd('network application-gateway rewrite-rule set show -g {rg} --gateway-name {gw} -n {set}') - - # manage rewrite rules - self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --sequence 123 --request-headers foo=bar --response-headers cat=hat --no-wait') - self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --sequence 321 --request-headers bar=foo --response-headers hat=cat --no-wait') - self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --set ruleSequence=321 --remove actionSet.responseHeaderConfigurations 0 --no-wait') - self.cmd('network application-gateway rewrite-rule show -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule}') - self.cmd('network application-gateway rewrite-rule list -g {rg} --gateway-name {gw} --rule-set-name {set}') - self.cmd('network application-gateway rewrite-rule list-request-headers') - self.cmd('network application-gateway rewrite-rule list-response-headers') - - # manage rewrite rules with url configuration - self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} ' - '--sequence 123 --request-headers foo=bar --response-headers cat=hat ' - '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', - checks=[ - self.check('actionSet.urlConfiguration.modifiedPath', '/def'), - self.check('actionSet.urlConfiguration.modifiedQueryString', 'a=b&c=d%20f'), - self.check('actionSet.urlConfiguration.reroute', False) - ]) - self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} ' - '--sequence 321 --request-headers bar=foo --response-headers hat=cat ' - '--modified-path "/def2" --modified-query-string "a=b&c=d%20f12" --enable-reroute', - checks=[ - self.check('actionSet.urlConfiguration.modifiedPath', '/def2'), - self.check('actionSet.urlConfiguration.modifiedQueryString', 'a=b&c=d%20f12'), - self.check('actionSet.urlConfiguration.reroute', True) - ]) - self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} --set ruleSequence=321 --remove actionSet.responseHeaderConfigurations 0 --no-wait') - self.cmd('network application-gateway rewrite-rule show -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2}') - - # ISSUE#17373 create rewrite rule without - self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule3} --sequence 123 --modified-path "/" --no-wait') - - # manage rewrite rules with response-header-configurations - self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule4} ' - '--sequence 123 --response-header-configurations [{{"header-name":Set-Cookie,"header-value":hat1,"header-value-matcher":{{"ignore-case":true,"negate":true,"pattern":"(https?)//.*azurewebsites.net(.*)$"}}}}] --request-headers foo=bar ' - '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', - checks=[ - self.check('actionSet.responseHeaderConfigurations[0].headerName', 'Set-Cookie'), - self.check('actionSet.responseHeaderConfigurations[0].headerValue', 'hat1'), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.ignoreCase', True), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.negate', True), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.pattern', "(https?)//.*azurewebsites.net(.*)$"), - ]) - self.cmd( - 'network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule4} ' - '--sequence 123 --response-header-configurations [{{"header-name":Set-Cookie,"header-value":hat2,"header-value-matcher":{{"ignore-case":true,"negate":false,"pattern":"(https?)//.*azurewebsites.net(.*)$"}}}}] --request-headers foo=bar ' - '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', - checks=[ - self.check('actionSet.responseHeaderConfigurations[0].headerName', 'Set-Cookie'), - self.check('actionSet.responseHeaderConfigurations[0].headerValue', 'hat2'), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.ignoreCase', True), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.negate', False), - self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.pattern', - "(https?)//.*azurewebsites.net(.*)$"), - ]) - - # manage rewrite rule conditions - self.cmd('network application-gateway rewrite-rule condition create -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --pattern "^Bearer" --ignore-case false --negate --no-wait') - self.cmd('network application-gateway rewrite-rule condition update -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --pattern "^Bearers" --no-wait') - self.cmd('network application-gateway rewrite-rule condition show -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var}') - self.cmd('network application-gateway rewrite-rule condition list -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule}') - self.cmd('network application-gateway rewrite-rule condition delete -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --no-wait') - self.cmd('network application-gateway rewrite-rule condition list -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule}') - self.cmd('network application-gateway rewrite-rule condition list-server-variables') - - self.cmd('network application-gateway rewrite-rule delete -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --no-wait') - self.cmd('network application-gateway rewrite-rule list -g {rg} --gateway-name {gw} --rule-set-name {set}') - - self.cmd('network application-gateway rewrite-rule set delete -g {rg} --gateway-name {gw} -n {set} --no-wait') - self.cmd('network application-gateway rewrite-rule set list -g {rg} --gateway-name {gw}') - - -class NetworkAppGatewayPublicIpScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ag_public_ip') - def test_network_app_gateway_with_public_ip(self, resource_group): - - self.kwargs['ip'] = 'publicip4' - self.cmd('network application-gateway create -g {rg} -n test4 --subnet subnet1 --vnet-name vnet4 --vnet-address-prefix 10.0.0.1/16 --subnet-address-prefix 10.0.0.1/28 --public-ip-address {ip} --priority 1001', checks=[ - self.check("applicationGateway.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{ip}')", True), - self.check('applicationGateway.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic') - ]) - - -class NetworkAppGatewayWafConfigScenarioTest20170301(ScenarioTest): - - @unittest.skip('SKU for this scenario is deprecated.') - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_config') - def test_network_app_gateway_waf_config(self, resource_group): - - self.kwargs.update({ - 'ip': 'pip1', - 'ag': 'ag1' - }) - self.cmd('network application-gateway create -g {rg} -n {ag} --subnet subnet1 --vnet-name vnet1 --public-ip-address {ip} --sku WAF_Medium --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') - self.cmd('network application-gateway show -g {rg} -n {ag}', checks=[ - self.check("frontendIPConfigurations[0].publicIPAddress.contains(id, '{ip}')", True), - self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic') - ]) - self.cmd('network application-gateway waf-config set -g {rg} --gateway-name {ag} --enabled true --firewall-mode prevention --rule-set-version 2.2.9 ' - '--disabled-rule-groups crs_30_http_policy --disabled-rules 981175 981176 ' - '--exclusion RequestHeaderNames StartsWith abc --exclusion RequestArgNames Equals def') - self.cmd('network application-gateway waf-config show -g {rg} --gateway-name {ag}', checks=[ - self.check('enabled', True), - self.check('firewallMode', 'Prevention'), - self.check('length(disabledRuleGroups)', 2), - self.check('length(disabledRuleGroups[1].rules)', 2), - self.check('length(exclusions)', 2) - ]) - # test list rule sets - self.cmd('network application-gateway waf-config list-rule-sets --group *', checks=[ - self.check('length(@)', 6) - ]) - - self.cmd('network application-gateway waf-config list-dynamic-rule-sets -l westus', - self.check('type(@)', 'array')) - - -class NetworkAppGatewayWafPolicyScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_', location='westcentralus') - def test_network_app_gateway_waf_policy_with_application_gateway(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'custom-rule1': 'rule1', - 'custom-rule2': 'rule2', - 'ip1': 'pip1', - 'ag1': 'ag1', - 'ip2': 'pip2', - 'ag2': 'ag2', - 'rg': resource_group, - 'csr_grp1': 'REQUEST-931-APPLICATION-ATTACK-RFI', - 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION' - }) - - # create a waf policy - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') - self.cmd('network application-gateway waf-policy update -g {rg} -n {waf} --tags test=best', - checks=self.check('tags.test', 'best')) - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}') - self.cmd('network application-gateway waf-policy list -g {rg}', - checks=self.check('length(@)', 1)) - - # test waf-policy delete - self.cmd('network application-gateway waf-policy delete -g {rg} -n {waf}') - self.cmd('network application-gateway waf-policy list -g {rg}', - checks=[ - self.check('length(@)', 0) - ]) - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --type OWASP --version 3.2') - - # add two custom rules of this waf-policy - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {custom-rule1} ' - '--priority 50 --action log --rule-type MatchRule ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]', - checks=self.check('priority', 50)) - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {custom-rule2} ' - '--priority 100 --action log --rule-type MatchRule ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]') - - # test custom-rule list - self.cmd('network application-gateway waf-policy custom-rule list -g {rg} ' - '--policy-name {waf}', - checks=[ - self.check('length(@)', 2) - ]) - - # add two managed rule set to the managed rules of this waf-policy - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.2 ' - '--group-name {csr_grp1} --rule rule-id=931120 --rule rule-id=931130') - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.2 ' - '--group-name {csr_grp2} --rule rule-id=913100') - - # update some policy settings of this waf-policy - self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' - '--state Enabled --file-upload-limit-in-mb 64 --mode Prevention') - - # test waf-policy policy-setting list - self.cmd('network application-gateway waf-policy policy-setting list -g {rg} --policy-name {waf}', checks=[ - self.check("type(@)", "object") - ]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type Microsoft_BotManagerRuleSet --version 1.0', - checks=[ - self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), - self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.0') - ]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type Microsoft_BotManagerRuleSet --version 1.1', - checks=[ - self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), - self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.1') - ]) - - # add one exclusion rule to the managed rules of this waf-policy - self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' - '--match-variable "RequestHeaderNames" --selector-match-operator "StartsWith" --selector "Bing"') - - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('customRules | length(@)', 2), - self.check('customRules[0].priority', 50), - self.check('customRules[1].priority', 100), - self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.2'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '931120'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100'), - self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), - self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.1'), - self.check('policySettings.fileUploadLimitInMb', 64), - self.check('policySettings.maxRequestBodySizeInKb', 128), - self.check('policySettings.mode', 'Prevention'), - self.check('policySettings.requestBodyCheck', False), - self.check('policySettings.state', 'Enabled') - ]) - - # prepare two IPs - self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard --ip-tags FirstPartyUsage=/NonProd') - self.cmd('network public-ip create -g {rg} -n {ip2} --sku standard --ip-tags FirstPartyUsage=/NonProd') - - self.cmd('network vnet create -g {rg} -n vnet1 --address-prefix 10.0.0.0/16') - self.cmd('network vnet subnet create -g {rg} --vnet-name vnet1 -n subnet1 --address-prefix 10.0.0.0/24 --default-outbound false') - - self.cmd('network vnet create -g {rg} -n vnet2 --address-prefix 10.0.0.0/16') - self.cmd('network vnet subnet create -g {rg} --vnet-name vnet2 -n subnet2 --address-prefix 10.0.0.0/24 --default-outbound false') - - # create two application gateways and assign with the same waf-policy - self.cmd('network application-gateway create -g {rg} -n {ag1} --subnet subnet1 --vnet-name vnet1 ' - '--public-ip-address {ip1} --sku WAF_v2 --waf-policy {waf} --priority 1001') - self.cmd('network application-gateway create -g {rg} -n {ag2} --subnet subnet2 --vnet-name vnet2 ' - '--public-ip-address {ip2} --sku WAF_v2 --waf-policy {waf} --priority 1001') - - self.cmd('network application-gateway show -g {rg} -n {ag1}', - checks=self.check("firewallPolicy.contains(id, '{waf}')", True)) - self.cmd('network application-gateway show -g {rg} -n {ag2}', - checks=self.check("firewallPolicy.contains(id, '{waf}')", True)) - - # test assigned application-gateways - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('applicationGateways | length(@)', 2), - self.check("contains(applicationGateways[0].id, '{ag1}')", True), - self.check("contains(applicationGateways[1].id, '{ag2}')", True) - ]) - - # test custom-rule delete - self.cmd('network application-gateway waf-policy custom-rule delete -g {rg} ' - '--policy-name {waf} -n {custom-rule2}') - self.cmd('network application-gateway waf-policy custom-rule list -g {rg} ' - '--policy-name {waf}', - checks=[ - self.check('length(@)', 1) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_custom_rule_') - def test_network_app_gateway_waf_custom_rule(self, resource_group): - from azure.cli.core.azclierror import ArgumentUsageError - self.kwargs.update({ - 'waf': 'agp1', - 'rule': 'rule1', - 'ip': 'pip1', - 'ag': 'ag1', - 'rg': resource_group, - 'custom-rule1':'custom-rule1' - }) - - # create a waf-policy with empty custom rule - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('customRules | length(@)', 0) - ]) - - # create a custom rule - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {rule} ' - '--priority 50 --action LOG --rule-type MatchRule ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]', - checks=[ - self.check('priority', 50), - self.check('ruleType', 'MatchRule'), - self.check('action', 'Log'), - self.check('matchConditions | length(@)', 1), - self.check("state", "Enabled") - ]) - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('customRules | length(@)', 1) - ]) - self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' - '--policy-name {waf} -n {rule}', - checks=[ - self.check('priority', 50), - self.check('ruleType', 'MatchRule'), - self.check('action', 'Log'), - self.check('matchConditions | length(@)', 1) - ]) - # validate match condition - with self.assertRaisesRegex(ArgumentUsageError, 'requires --values'): - self.cmd("network application-gateway waf-policy custom-rule match-condition add -g {rg} " - "--policy-name {waf} -n {rule} " - "--match-variables RequestHeaders.value --operator Contains --transform lowercase") - - # add match condition to the previous created custom rule - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule} ' - '--match-variables RequestHeaders.value --operator contains --values foo boo --transform lowercase') - self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' - '--policy-name {waf} -n {rule}', - checks=[ - self.check('priority', 50), - self.check('ruleType', 'MatchRule'), - self.check('action', 'Log'), - self.check('matchConditions | length(@)', 2) - ]) - - # update one of properties - self.cmd('network application-gateway waf-policy custom-rule update -g {rg} --state disabled ' - '--policy-name {waf} -n {rule} ' - '--priority 75', - checks=[ - self.check('priority', 75), - self.check("state", "Disabled") - ]) - - # add another match condition to the same custom rule - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule} ' - '--match-variables RequestHeaders.value --operator contains ' - '--values remove this --transform uppercase') - self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' - '--policy-name {waf} -n {rule}', - checks=[ - self.check('priority', 75), - self.check('ruleType', 'MatchRule'), - self.check('action', 'Log'), - self.check('matchConditions | length(@)', 3) - ]) - self.cmd('network application-gateway waf-policy custom-rule match-condition list -n {rule} -g {rg} ' - '--policy-name {waf}', - checks=[ - self.check('length(@)', 3) - ]) - - # remove one of match condition of custom rule - self.cmd('network application-gateway waf-policy custom-rule match-condition remove -g {rg} ' - '--policy-name {waf} -n {rule} ' - '--index 0') - self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' - '--policy-name {waf} -n {rule}', - checks=[ - self.check('priority', 75), - self.check('ruleType', 'MatchRule'), - self.check('action', 'Log'), - self.check('matchConditions | length(@)', 2) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_custom_rule_v2_') - def test_network_app_gateway_waf_custom_rule_v2(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'rule': 'rule1', - 'rule2': 'rule2', - 'rule3': 'rule3', - 'ip': 'pip1', - 'ag': 'ag1', - 'custom-rule1': 'custom-rule1' - }) - # create a waf-policy with empty custom rule - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') - - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') - self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector hello --type OWASP --version 3.2 --group-name REQUEST-930-APPLICATION-ATTACK-LFI --rule-ids 930120 ') - self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector hello --type OWASP --version 3.2 --group-name REQUEST-932-APPLICATION-ATTACK-RCE') - self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator EndsWith --selector hello --type OWASP --version 3.2') - self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector test') - self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} --match-variable RequestArgValues --selector-match-operator StartsWith --selector test') - self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' - '--log-scrubbing-state Enabled --scrubbing-rules [{{"state":"Enabled","match-variable":"RequestArgNames","selector-match-operator":"Equals","selector":"test"}},{{"state":"Enabled","match-variable":"RequestIPAddress","selector-match-operator":"EqualsAny","selector":null}}]') - - # create a custom rule - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {rule} ' - '--priority 1 ' - '--action Block ' - '--rule-type MatchRule ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]') - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {rule2} ' - '--priority 2 ' - '--action Block ' - '--rule-type MatchRule ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]') - - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule} --match-variables RemoteAddr ' - '--operator IPMatch --values "192.168.1.0/24" "10.0.0.0/24" --negate false') - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule2} --negate false ' - '--match-variables RemoteAddr --operator IPMatch --values "192.168.1.0/24" ') - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule2} ' - '--match-variables RequestHeaders.UserAgent --operator Contains --values "Windows"') - - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} -n {rule3} ' - '--priority 3 ' - '--action Block ' - '--rule-type RateLimitRule ' - '--rate-limit-duration FiveMins ' - '--rate-limit-threshold 15 ' - '--group-by-user-session [{{group-by-variables:[{{variable-name:"GeoLocation"}}]}}] ' - '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]', - checks=[self.check('name', '{rule3}'), - self.check('groupByUserSession[0].groupByVariables[0].variableName', 'GeoLocation'), - self.check('rateLimitDuration', 'FiveMins'), - self.check('rateLimitThreshold', '15')]) - - self.cmd('network application-gateway waf-policy custom-rule update -g {rg} ' - '--policy-name {waf} -n {rule3} ' - '--rate-limit-duration OneMin ' - '--rate-limit-threshold 10 ' - '--group-by-user-session [{{group-by-variables:[{{variable-name:"ClientAddr"}}]}}]', - checks=[self.check('name', '{rule3}'), - self.check('groupByUserSession[0].groupByVariables[0].variableName', 'ClientAddr'), - self.check('rateLimitDuration', 'OneMin'), - self.check('rateLimitThreshold', '10')]) - self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' - '--policy-name {waf} -n {rule3} --negate true ' - '--match-variables RemoteAddr --operator IPMatch --values "192.168.1.0/24" "10.0.0.0/24"') - - self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' - '--policy-name {waf} --name ClientIPRateLimitRule ' - '--action Block --priority 90 --rule-type RateLimitRule --rate-limit-threshold 100 ' - '--group-by-user-session [{{group-by-variables:[{{variable-name:"ClientAddrXffHeader"}}]}}] ' - '--match-conditions [{{"variables":[{{"variable_name":"RequestHeaders"}}],"operator":"IPMatch","values":["198.51.100.0/24"]}}]') - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_setting_') - def test_network_app_gateway_waf_policy_setting(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ag': 'ag1', - 'rg': resource_group, - }) - - # check default policy setting values - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ - self.check('policySettings.fileUploadLimitInMb', 100), - self.check('policySettings.maxRequestBodySizeInKb', 128), - self.check('policySettings.mode', 'Detection'), - self.check('policySettings.requestBodyCheck', True), - self.check('policySettings.state', 'Disabled') - ]) - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') - - # randomly update some properties - self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' - '--state Enabled --file-upload-limit-in-mb 64 --mode Prevention --js-cookie-exp-time 100', - checks=[ - self.check('policySettings.fileUploadLimitInMb', 64), - self.check('policySettings.maxRequestBodySizeInKb', 128), - self.check('policySettings.mode', 'Prevention'), - self.check('policySettings.requestBodyCheck', False), - self.check('policySettings.state', 'Enabled'), - self.check('policySettings.jsChallengeCookieExpirationInMins', 100) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_setting_v2_') - def test_network_app_gateway_waf_policy_setting_v2(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ag': 'ag1', - 'rg': resource_group, - }) - - # check default policy setting values - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ - self.check('policySettings.fileUploadLimitInMb', 100), - self.check('policySettings.maxRequestBodySizeInKb', 128), - self.check('policySettings.mode', 'Detection'), - self.check('policySettings.requestBodyCheck', True), - self.check('policySettings.state', 'Disabled') - ]) - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') - # randomly update some properties - self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' - '--request-body-inspect-limit-in-kb 64 --file-upload-enforcement True --request-body-enforcement False ' - '--log-scrubbing-state Enabled --scrubbing-rules [{{"state":"Enabled","match-variable":"RequestArgNames","selector-match-operator":"Equals","selector":"test"}},{{"state":"Enabled","match-variable":"RequestIPAddress","selector-match-operator":"EqualsAny","selector":null}}]', - checks=[ - self.check('policySettings.requestBodyInspectLimitInKB', 64), - self.check('policySettings.requestBodyEnforcement', False), - self.check('policySettings.fileUploadEnforcement', True), - self.check('policySettings.logScrubbing.scrubbingRules | length(@)', 2), - self.check('policySettings.logScrubbing.state', 'Enabled') - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_') - def test_network_app_gateway_waf_policy_managed_rules(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ip': 'pip1', - 'ag': 'ag1', - 'rg': resource_group, - 'csr_grp1': 'REQUEST-921-PROTOCOL-ATTACK', - 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION', - 'csr_grp3': 'REQUEST-931-APPLICATION-ATTACK-RFI' - }) - - # create a waf-policy with default type and version - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ - self.check('name', '{waf}'), - self.check('managedRules.managedRuleSets[0].ruleSetType', 'Microsoft_DefaultRuleSet'), - self.check('managedRules.managedRuleSets[0].ruleSetVersion', '2.1'), - ]) - self.cmd('network application-gateway waf-policy delete -g {rg} -n {waf}') - - # create a waf-policy - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --version 3.0 --type OWASP') - - # case 1: Initialize(add) managed rule set - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.0 ' - '--group-name {csr_grp1} --rule rule-id=921100 --rule rule-id=921110 sensitivity=low') - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.0'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921100'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].sensitivity', 'Low') - ]) - - # case 2: Append(add) another managed rule set to same rule group - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.0 ' - '--group-name {csr_grp1} --rule rule-id=921150 sensitivity=medium') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.0'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 3), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].ruleId', '921150'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].sensitivity', 'Medium') - ]) - - # case 3: Add another managed rule set of different rule group - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.0 ' - '--group-name {csr_grp2} --rule rule-id=913100') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.0'), - self.check('managedRuleSets[0].ruleGroupOverrides[1].rules | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), - self.check('managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100') - ]) - - # case 4: override(update) existing managed rule set - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.0 ' - '--group-name {csr_grp1} --rule rule-id=921100 --rule rule-id=921150') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.0'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921100'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '921150'), - ]) - - # case 5: clear manage rule set by group {csr_grp1} and only {csr_grp2} left - self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp1} ') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', checks=[ - self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp2']), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '913100'), - ]) - - # case 6: change managed rules of OWASP from 3.1 to 3.0 - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1') - - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 0) - ]) - - # case 7: override existing rules with one rule for OWASP 3.1 - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name REQUEST-911-METHOD-ENFORCEMENT ' - '--rule rule-id=911100') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '911100') - ]) - - # case 8: validate per rule action - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.2') - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type Microsoft_DefaultRuleSet --version 2.1') - - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.2 ' - '--group-name {csr_grp3} ' - '--rule rule-id=931120 state=Enabled action=Log ' - '--rule rule-id=931130 state=Disabled action=AnomalyScoring') - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.2'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp3']), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '931120'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].state', 'Enabled'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].action', 'Log'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '931130'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].state', 'Disabled'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].action', 'AnomalyScoring') - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_') - def test_network_app_gateway_waf_policy_with_version_and_type(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ip': 'pip1', - 'ag': 'ag1', - 'rg': resource_group, - 'csr_grp1': 'REQUEST-921-PROTOCOL-ATTACK', - 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION' - }) - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --version 3.1 --type OWASP') - - # case 1: Initialize(add) managed rule set - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp1} --rule rule-id=921120 --rule rule-id=921110') - self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ - self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921120') - ]) - - # case 2: Append(add) another managed rule set to same rule group - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp1} --rule rule-id=921150') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 3), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].ruleId', '921150') - ]) - - # # case 3: Add another managed rule set of different rule group - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp2} --rule rule-id=913100') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides[1].rules | length(@)', 1), - self.check('managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), - self.check('managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100') - ]) - - # case 4: override(update) existing managed rule set - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp1} --rule rule-id=921130 --rule rule-id=921140') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921130'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '921140') - ]) - - # # case 5: clear manage rule set by group {csr_grp1} - self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} --policy-name {waf} ' - '--type OWASP --version 3.1 ' - '--group-name {csr_grp1} ') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', - checks=[ - self.check('managedRuleSets[0].ruleSetType', 'OWASP'), - self.check('managedRuleSets[0].ruleSetVersion', '3.1'), - self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp2']) - ]) - - self.kwargs.update({ - 'waf2': 'agp2', - 'csr_grp3': 'ExcessiveRequests' - }) - - # case 6: support Microsoft_HTTPDDoSRuleSet type, Medium is default sensitivity for this type if not specified - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf2} --version 3.2 --type owasp') - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf2} ' - '--type Microsoft_HTTPDDoSRuleSet --version 1.0 --group-name {csr_grp3} ' - '--rule rule-id=500100 ' - '--rule rule-id=500110 sensitivity=low') - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf2}', checks=[ - self.check('managedRuleSets[1].ruleSetType', 'Microsoft_HTTPDDoSRuleSet'), - self.check('managedRuleSets[1].ruleSetVersion', '1.0'), - self.check('managedRuleSets[1].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp3']), - self.check('managedRuleSets[1].ruleGroupOverrides[0].rules[0].sensitivity', 'Medium'), - self.check('managedRuleSets[1].ruleGroupOverrides[0].rules[1].sensitivity', 'Low') - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_exclusion') - def test_network_app_gateway_waf_policy_managed_rules_exclusions(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ip': 'pip1', - 'ag': 'ag1', - 'rg': resource_group - }) - - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') - - # add one exclusion rule - self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' - '--match-variable "RequestHeaderNames" --selector-match-operator "StartsWith" --selector "Bing"') - self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', - checks=[ - self.check('exclusions | length(@)', 1) - ]) - - # add another exclusion rule - self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' - '--match-variable "RequestHeaderNames" --selector-match-operator "Contains" --selector "Azure"') - self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', - checks=[ - self.check('exclusions | length(@)', 2) - ]) - - # clear all exclusion rules - self.cmd('network application-gateway waf-policy managed-rule exclusion remove -g {rg} --policy-name {waf} ') - self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', - checks=[ - self.check('exclusions | length(@)', 0) - ]) - - @ResourceGroupPreparer(name_prefix="cli_test_app_gateway_waf_policy_exclusion_rule_set_") - def test_network_app_gateway_waf_policy_exclusion_rule_set(self, resource_group): - self.kwargs.update({ - "waf": "agp", - "rule_group1": "REQUEST-921-PROTOCOL-ATTACK", - "rule_group2": "REQUEST-920-PROTOCOL-ENFORCEMENT", - }) - # create a waf-policy - self.cmd("network application-gateway waf-policy create -n {waf} -g {rg} --version 3.2 --type OWASP") - # add one rule group to exclusion - self.cmd( - "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ - --match-variable RequestHeaderValues --match-operator Contains --selector Google \ - --type OWASP --version 3.2 \ - --group-name {rule_group1} --rule-ids 921140 921150", - checks=[ - self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group1"]), - self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules | length(@)", 2), - self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "921140"), - self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[1].ruleId", "921150"), - ] - ) - # add another rule group to exclusion (with different matchers) - self.cmd( - "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ - --match-variable RequestHeaderNames --match-operator StartsWith --selector Bing \ - --type OWASP --version 3.2 \ - --group-name {rule_group2} --rule-ids 920340", - checks=[ - self.check("managedRules.exclusions | length(@)", 2), - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group2"]), - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "920340"), - ] - ) - # add a rule group to the second exclusion - self.cmd( - "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ - --match-variable RequestHeaderNames --match-operator StartsWith --selector Bing \ - --type OWASP --version 3.2 \ - --group-name {rule_group1} --rule-ids 921140 921150", - checks=[ - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].ruleGroupName", self.kwargs["rule_group1"]), - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules | length(@)", 2), - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules[0].ruleId", "921140"), - self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules[1].ruleId", "921150"), - ] - ) - # remove the first rule group - self.cmd( - "network application-gateway waf-policy managed-rule exclusion rule-set remove -g {rg} --policy-name {waf} \ - --match-variable RequestHeaderValues --match-operator Contains --selector Google \ - --type OWASP --version 3.2 --group-name {rule_group1}" - ) - self.cmd( - "network application-gateway waf-policy managed-rule exclusion rule-set list -g {rg} --policy-name {waf}", - checks=[ - self.check("exclusions | length(@)", 1), - self.check("exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group2"]), - self.check("exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "920340"), - ] - ) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_exception_', location='eastus2') - def test_network_app_gateway_waf_policy_exception(self, resource_group): - self.kwargs.update({ - 'waf': 'agp1', - 'ip': 'pip1', - 'ag': 'ag1', - 'rg': resource_group - }) - - self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') - - self.cmd('network application-gateway waf-policy managed-rule exception add -g {rg} --policy-name {waf} ' - '--match-variable "RequestURI" --value-match-operator "Contains" --values "health" "account/images" "default.aspx" ' - '--rule-sets [0].rule-set-type=OWASP [0].rule-set-version=3.2') - self.cmd('network application-gateway waf-policy managed-rule exception list -g {rg} --policy-name {waf}', - checks=[ - self.check('exceptions | length(@)', 1) - ]) - self.cmd('network application-gateway waf-policy managed-rule exception remove -g {rg} --policy-name {waf}') - self.cmd('network application-gateway waf-policy managed-rule exception list -g {rg} --policy-name {waf}', - checks=[ - self.not_exists('exceptions') - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_compute_disabled_rule') - def test_network_app_gateway_waf_policy_compute_disabled_rule(self, resource_group): - self.kwargs.update({ - 'policy_name': self.create_random_name('waf', 15), - 'policy_type': 'OWASP', - 'policy_version': 3.2, - 'rule_group_name': 'REQUEST-921-PROTOCOL-ATTACK', - 'rule_id': '921120' - }) - - self.cmd('network application-gateway waf-policy create -g {rg} ' - '-n {policy_name} ' - '--type {policy_type} ' - '--version {policy_version}') - - self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} ' - '--policy-name {policy_name} ' - '--type {policy_type} ' - '--version {policy_version} ' - '--group-name {rule_group_name} ' - '--rule rule-id={rule_id}', - checks=[ - self.exists('managedRules.managedRuleSets[0].computedDisabledRules'), - self.check('managedRules.managedRuleSets[0].computedDisabledRules | length(@)', 1), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), - ]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} ' - '--policy-name {policy_name} ' - '--type {policy_type} ' - '--version {policy_version} ' - '--group-name {rule_group_name} ' - '--rule rule-id={rule_id} state=Enabled', - checks=[self.not_exists('managedRules.managedRuleSets[0].computedDisabledRules')]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} ' - '--policy-name {policy_name} ' - '--type {policy_type} ' - '--version {policy_version} ' - '--group-name {rule_group_name} ' - '--rule rule-id={rule_id} state=Disabled', - checks=[ - self.exists('managedRules.managedRuleSets[0].computedDisabledRules'), - self.check('managedRules.managedRuleSets[0].computedDisabledRules | length(@)', 1), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), - self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), - ]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} ' - '--policy-name {policy_name}', - checks=[ - self.exists('managedRuleSets[0].computedDisabledRules'), - self.check('managedRuleSets[0].computedDisabledRules | length(@)', 1), - self.check('managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), - self.check('managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), - self.check('managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), - ]) - - self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} ' - '--policy-name {policy_name} ' - '--type {policy_type} ' - '--version {policy_version} ' - '--group-name {rule_group_name}', - checks=[self.not_exists('managedRules.managedRuleSets[0].computedDisabledRules')]) - - -class NetworkDdosProtectionScenarioTest(LiveScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_ddos_protection', location='eastus2') - def test_network_ddos_protection_plan(self, resource_group): - - self.kwargs.update({ - 'vnet1': 'vnet1', - 'vnet2': 'vnet2', - 'ddos': 'ddos1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet1}') - self.kwargs['vnet2_id'] = self.cmd('network vnet create -g {rg} -n {vnet2}').get_output_in_json()['newVNet']['id'] - # can be attached through DDoS create - self.kwargs['ddos_id'] = self.cmd('network ddos-protection create -g {rg} -n {ddos} --vnets {vnet1} {vnet2_id} --tags foo=doo').get_output_in_json()['id'] - self.cmd('network ddos-protection show -g {rg} -n {ddos}', - checks=[self.check('name', '{ddos}'), - self.check('provisioningState', 'Succeeded'), - self.check('length(virtualNetworks)', 2)]) - - # can be detached through VNet update - self.cmd('network vnet update -g {rg} -n {vnet1} --ddos-protection-plan ""') - self.cmd('network vnet update -g {rg} -n {vnet2} --ddos-protection-plan ""') - self.cmd('network ddos-protection show -g {rg} -n {ddos}') - - # can be attached through VNet update - self.cmd('network vnet update -g {rg} -n {vnet1} --ddos-protection-plan {ddos}') - self.cmd('network vnet update -g {rg} -n {vnet2} --ddos-protection-plan {ddos_id}') - self.cmd('network ddos-protection show -g {rg} -n {ddos}') - - # can be detached through DDoS update - self.cmd('network ddos-protection update -g {rg} -n {ddos} --tags doo=foo --vnets ""') - self.cmd('network ddos-protection show -g {rg} -n {ddos}', - checks=[self.check('name', '{ddos}'), - self.check('provisioningState', 'Succeeded'), - self.check('virtualNetworks', None)]) - - # can be attached through DDoS update - self.cmd('network ddos-protection update -g {rg} -n {ddos} --vnets {vnet2_id} --tags foo=boo') - self.cmd('network ddos-protection show -g {rg} -n {ddos}', - checks=[self.check('name', '{ddos}'), - self.check('provisioningState', 'Succeeded'), - self.check('length(virtualNetworks)', 1)]) - - self.cmd('network ddos-protection list -g {rg}', checks=[self.check('length(@)', 1)]) - with self.assertRaises(Exception): - self.cmd('network ddos-protection delete -g {rg} -n {ddos}') - - # remove all vnets and retry - self.cmd('network ddos-protection update -g {rg} -n {ddos} --vnets ""') - self.cmd('network ddos-protection delete -g {rg} -n {ddos}') - - -class NetworkPublicIpScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_public_ip', location="eastus2euap") - def test_network_public_ip(self, resource_group): - self.kwargs.update({ - 'ip1': 'pubipdns', - 'ip2': 'pubipnodns', - 'ip3': 'pubip3', - 'dns': 'woot1', - 'zone': '1 2 3', - 'location': 'eastus2', - 'ip_tags': 'RoutingPreference=Internet', - 'version': 'ipv4', - 'sku': 'standard' - }) - self.cmd('network public-ip create -g {rg} -n {ip1} --dns-name {dns} --dns-name-scope TenantReuse --allocation-method static', checks=[ - self.check('publicIp.provisioningState', 'Succeeded'), - self.check('publicIp.publicIPAllocationMethod', 'Static'), - self.check('publicIp.dnsSettings.domainNameLabel', '{dns}'), - self.check('publicIp.dnsSettings.domainNameLabelScope', 'TenantReuse') - ]) - self.cmd('network public-ip create -g {rg} -n {ip2}', checks=[ - self.check('publicIp.provisioningState', 'Succeeded'), - self.check('publicIp.publicIPAllocationMethod', 'Static'), - self.check('publicIp.dnsSettings', None) - ]) - - self.cmd('network public-ip create -g {rg} -n {ip3}' - ' --version {version} ' - '--sku {sku} ' - '--zone {zone} ' - '-l {location} ' - '--ip-tags {ip_tags} ', - checks=[ - self.check('publicIp.provisioningState', 'Succeeded'), - self.check('publicIp.publicIPAllocationMethod', 'Static'), - self.check('publicIp.dnsSettings', None), - self.check('publicIp.ipTags[0].ipTagType', 'RoutingPreference'), - self.check('publicIp.ipTags[0].tag', 'Internet'), - ]) - - self.cmd( - 'network public-ip update -g {rg} -n {ip2} --allocation-method static --dns-name wowza2 --idle-timeout 10 --ip-tags null --tags foo=doo', - checks=[ - self.check('publicIPAllocationMethod', 'Static'), - self.check('dnsSettings.domainNameLabel', 'wowza2'), - self.check('idleTimeoutInMinutes', 10), - self.check('tags.foo', 'doo'), - self.check("ipTags", []) - ]) - - self.cmd('network public-ip list -g {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - - self.cmd('network public-ip show -g {rg} -n {ip1}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{ip1}'), - self.check('resourceGroup', '{rg}') - ]) - - self.cmd('network public-ip delete -g {rg} -n {ip1}') - self.cmd('network public-ip list -g {rg}', - checks=self.check("length[?name == '{ip1}']", None)) - - @ResourceGroupPreparer(name_prefix='cli_test_public_ip_zone', location='eastus2') - def test_network_public_ip_zone(self, resource_group): - self.cmd('network public-ip create -g {rg} -n ip --sku Standard -z 1 2 3', checks=[ - self.check('length(publicIp.zones)', 3) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_public_ip_ddos_settings', location='eastus2') - def test_network_public_ip_ddos_settings(self, resource_group): - - self.kwargs.update({ - 'ip1': 'pubipddos', - 'ddos': 'ddos1', - }) - - self.kwargs['ddos_id'] = self.cmd('network ddos-protection create -g {rg} -n {ddos}').get_output_in_json()['id'] - - self.cmd( - 'network public-ip create -g {rg} -n {ip1} --protection-mode Enabled --sku Standard --ddos-protection-plan {ddos}', - checks=[ - self.check('publicIp.ddosSettings.protectionMode', 'Enabled'), - self.check('publicIp.ddosSettings.ddosProtectionPlan.id', '{ddos_id}'), - self.check('publicIp.name', '{ip1}'), - self.check('publicIp.provisioningState', 'Succeeded') - ]) - - # test ddos protection status - self.cmd('network application-gateway create -g {rg} -n testag --public-ip-address {ip1} --sku Standard_v2 --priority 1001') - self.cmd('network public-ip ddos-protection show -g {rg} -n {ip1}', self.check('isWorkloadProtected', True)) - self.cmd('network public-ip update -g {rg} -n {ip1} --protection-mode Disabled --ddos-protection-plan null', - checks=[ - self.check('ddosSettings.protectionMode', 'Disabled'), - self.check('ddosSettings.ddosProtectionPlan', None), - self.check('name', '{ip1}'), - self.check('provisioningState', 'Succeeded') - ]) - self.cmd('network ddos-protection delete -g {rg} -n {ddos}') - - self.cmd('network application-gateway delete -g {rg} -n testag') - self.cmd('network public-ip delete -g {rg} -n {ip1}') - self.cmd('network public-ip list -g {rg}', - checks=self.check("length[?name == '{ip1}']", None)) - - -class NetworkZonedPublicIpScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_zoned_public_ip') - def test_network_zoned_public_ip(self, resource_group): - self.kwargs['ip'] = 'pubip' - self.cmd('network public-ip create -g {rg} -n {ip} -l centralus -z 2 --sku standard', - checks=self.check('publicIp.zones[0]', '2')) - - self.cmd( - 'network public-ip show -g {rg} -n {ip}', - checks=[ - self.check('name', '{ip}'), - self.check('publicIPAddressVersion', 'IPv4') - ] - ) - - -class NetworkRouteFilterScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_network_route_filter') - def test_network_route_filter(self, resource_group): - self.kwargs['filter'] = 'filter1' - self.kwargs['rg'] = resource_group - self.cmd('network route-filter create -g {rg} -n {filter} --tags foo=doo') - self.cmd('network route-filter update -g {rg} -n {filter}') - self.cmd('network route-filter show -g {rg} -n {filter}') - self.cmd('network route-filter list -g {rg}') - - - self.cmd('network route-filter rule list-service-communities') - self.cmd('network route-filter rule create -g {rg} --filter-name {filter} -n rule1 --communities 12076:5040 12076:5030 --access allow') - self.cmd('network route-filter rule update -g {rg} --filter-name {filter} -n rule1') - self.cmd('network route-filter rule show -g {rg} --filter-name {filter} -n rule1') - self.cmd('network route-filter rule list -g {rg} --filter-name {filter}') - self.cmd('network route-filter rule delete -g {rg} --filter-name {filter} -n rule1') - - self.cmd('network route-filter delete -g {rg} -n {filter}') - - -class NetworkExpressRouteScenarioTest(ScenarioTest): - - def _test_express_route_peering(self): - - def _create_peering(peering, peer_asn, vlan, primary_prefix, secondary_prefix): - self.kwargs.update({ - 'peering': peering, - 'asn': peer_asn, - 'vlan': vlan, - 'pri_prefix': primary_prefix, - 'sec_prefix': secondary_prefix - }) - self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type {peering} --peer-asn {asn} --vlan-id {vlan} --primary-peer-subnet {pri_prefix} --secondary-peer-subnet {sec_prefix}') - - # create private peerings - _create_peering('AzurePrivatePeering', 10001, 101, '102.0.0.0/30', '103.0.0.0/30') - - self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3') - self.cmd('network express-route peering show -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ - self.check('microsoftPeeringConfig.advertisedPublicPrefixes[0]', '104.0.0.0/30'), - self.check('microsoftPeeringConfig.customerASN', 10000), - self.check('microsoftPeeringConfig.routingRegistryName', 'LEVEL3') - ]) - - self.cmd('network express-route peering delete -g {rg} --circuit-name {er} -n MicrosoftPeering') - - self.cmd('network express-route peering list --resource-group {rg} --circuit-name {er}', - checks=self.check('length(@)', 1)) - - self.cmd('network express-route peering update -g {rg} --circuit-name {er} -n AzurePrivatePeering --set vlanId=200', - checks=self.check('vlanId', 200)) - - def _test_express_route_auth(self): - - self.cmd('network express-route auth create -g {rg} --circuit-name {er} -n auth1', - checks=self.check('authorizationUseStatus', 'Available')) - - self.cmd('network express-route auth list --resource-group {rg} --circuit-name {er}', - checks=self.check('length(@)', 1)) - - self.cmd('network express-route auth show -g {rg} --circuit-name {er} -n auth1', - checks=self.check('authorizationUseStatus', 'Available')) - - self.cmd('network express-route auth delete -g {rg} --circuit-name {er} -n auth1') - - self.cmd('network express-route auth list --resource-group {rg} --circuit-name {er}', checks=self.is_empty()) - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route') - def test_network_express_route(self, resource_group): - - self.kwargs = { - 'rg': resource_group, - 'er': 'circuit1', - 'rt': 'Microsoft.Network/expressRouteCircuits' - } - - self.cmd('network express-route list-service-providers', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == 'Microsoft.Network/expressRouteServiceProviders']) == length(@)", True) - ]) - - # Premium SKU required to create MicrosoftPeering settings - self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium --tags foo=doo') - self.cmd('network express-route list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True) - ]) - self.cmd('network express-route list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network express-route show --resource-group {rg} --name {er}', checks=[ - self.check('type(@)', 'object'), - self.check('type', '{rt}'), - self.check('name', '{er}'), - self.check('resourceGroup', '{rg}'), - self.check('tags.foo', 'doo') - ]) - self.cmd('network express-route get-stats --resource-group {rg} --name {er}', - checks=self.check('type(@)', 'object')) - - self.cmd('network express-route update -g {rg} -n {er} --set tags.test=Test', checks=[ - self.check('tags.test', 'Test') - ]) - - self.cmd('network express-route update -g {rg} -n {er} --tags foo=boo', - checks=self.check('tags.foo', 'boo')) - - self._test_express_route_auth() - - self._test_express_route_peering() - - # because the circuit isn't actually provisioned, these commands will not return anything useful - # so we will just verify that the command makes it through the SDK without error. - self.cmd('network express-route list-arp-tables --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') - self.cmd('network express-route list-route-tables --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') - self.cmd('network express-route list-route-tables-summary --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') - - self.cmd('network express-route delete --resource-group {rg} --name {er}') - # Expecting no results as we just deleted the only express route in the resource group - self.cmd('network express-route list --resource-group {rg}', checks=self.is_empty()) - - with self.assertRaisesRegex(CLIError, 'Please provide a complete resource ID'): - self.cmd('network express-route gateway connection show --ids /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.Network/expressRouteGateways/aaa') - - @unittest.skip('Test is wrong, please fix. rg not found') - @ResourceGroupPreparer(name_prefix='cli_test_express_route') - def test_network_express_route_connection_routing_configuration(self, resource_group): - self.kwargs = { - 'rg': 'dedharrtv3final', - 'gw': '16297a6ff5314c0f8d0eb580aa7861b3-eastus-er-gw', - 'connection': 'yuerconnection', - 'peering': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/expressRouteCircuits/clicktfinal/peerings/AzurePrivatePeering', - 'route_table1': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/virtualHubs/blhub/hubRouteTables/routetable1', - 'route_table2': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/virtualHubs/blhub/hubRouteTables/routetable2' - } - - self.cmd('network express-route gateway connection update ' - '-n {connection} ' - '-g {rg} ' - '--gateway-name {gw} ' - '--peering {peering} ' - '--associated-route-table {route_table1} ' - '--propagated-route-tables {route_table1} {route_table2} ' - '--labels label1 label2', - checks=[ - self.check('provisioningState', 'Succeeded'), - self.check('name', self.kwargs['connection']), - self.check('routingConfiguration.associatedRouteTable.id', self.kwargs['route_table1']), - self.check('length(routingConfiguration.propagatedRouteTables.ids)', 2), - self.check('routingConfiguration.propagatedRouteTables.ids[0].id', self.kwargs['route_table1']), - self.check('routingConfiguration.propagatedRouteTables.ids[1].id', self.kwargs['route_table2']), - self.check('length(routingConfiguration.propagatedRouteTables.labels)', 2), - self.check('routingConfiguration.propagatedRouteTables.labels[0]', 'label1'), - self.check('routingConfiguration.propagatedRouteTables.labels[1]', 'label2')]) - - self.cmd('network express-route gateway connection show -n {connection} -g {rg} --gateway-name {gw}', checks=[ - self.check('provisioningState', 'Succeeded'), - self.check('name', self.kwargs['connection']), - self.check('routingConfiguration.associatedRouteTable.id', self.kwargs['route_table1']), - self.check('length(routingConfiguration.propagatedRouteTables.ids)', 2), - self.check('routingConfiguration.propagatedRouteTables.ids[0].id', self.kwargs['route_table1']), - self.check('routingConfiguration.propagatedRouteTables.ids[1].id', self.kwargs['route_table2']), - self.check('length(routingConfiguration.propagatedRouteTables.labels)', 2), - self.check('routingConfiguration.propagatedRouteTables.labels[0]', 'label1'), - self.check('routingConfiguration.propagatedRouteTables.labels[1]', 'label2') - ]) - - @unittest.skip('The required extension command has not been release') - @ResourceGroupPreparer(name_prefix='cli_test_express_route_gateway_connection_inbound_outbound_routemap') - def test_express_route_gateway_connection_inbound_outbound_routemap(self, resource_group): - self.kwargs.update({ - 'vwan': self.create_random_name('vwan', 10), - 'vhub': self.create_random_name('vhub', 10), - 'er': self.create_random_name("er", 10), - 'ergateway': self.create_random_name("ergw", 16), - 'ergatewayconn': self.create_random_name("ergw", 16), - "route_map_name": self.create_random_name("routemap-", 16), - "route_map_name_2": self.create_random_name("routemap-", 16), - "route_map_name_3": self.create_random_name("routemap-", 16), - "route_map_name_4": self.create_random_name("routemap-", 16) - }) - - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') - route_map_id = self.cmd("network vhub route-map create -n {route_map_name} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] - route_map_id_2 = self.cmd("network vhub route-map create -n {route_map_name_2} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] - route_map_id_3 = self.cmd("network vhub route-map create -n {route_map_name_3} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] - route_map_id_4 = self.cmd("network vhub route-map create -n {route_map_name_4} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] - self.kwargs.update({ - 'route_map_id': route_map_id, - 'route_map_id_2': route_map_id_2, - 'route_map_id_3': route_map_id_3, - 'route_map_id_4': route_map_id_4 - }) - self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium') - self.cmd('network express-route gateway create -g {rg} -n {ergateway} --virtual-hub {vhub}') - # self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') - peer_id = self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3').get_output_in_json()['id'] - self.kwargs.update({ - 'peer_id': peer_id - }) - - with self.assertRaises(Exception): - self.cmd('network express-route gateway connection create -g {rg} -n {ergatewayconn} --gateway-name {ergateway} --peering {peer_id} --inbound-route-map {{id:{route_map_id}}} --outbound-route-map {{id:{route_map_id_2}}}') - self.cmd('network express-route gateway connection show -n {ergatewayconn} -g {rg} --gateway-name {ergateway}', checks=[ - self.check('routingConfiguration.inboundRouteMap.id', '{route_map_id}'), - self.check('routingConfiguration.outboundRouteMap.id', '{route_map_id_2}') - ]) - with self.assertRaises(Exception): - self.cmd('network express-route gateway connection update -g {rg} -n {ergatewayconn} --gateway-name {ergateway} --inbound-route-map {{id:{route_map_id_3}}} --outbound-route-map {{id:{route_map_id_4}}}') - self.cmd('network express-route gateway connection show -n {ergatewayconn} -g {rg} --gateway-name {ergateway}', checks=[ - self.check('routingConfiguration.inboundRouteMap.id', '{route_map_id_3}'), - self.check('routingConfiguration.outboundRouteMap.id', '{route_map_id_4}') - ]) - - -class NetworkExpressRoutePortScenarioTest(ScenarioTest): - - def __init__(self, method_name): - super().__init__(method_name, recording_processors=[ - ExpressRoutePortLOAContentReplacer() - ]) - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_express_route_port', location='eastus') - @KeyVaultPreparer(name_prefix='test-er-port-kv', location='eastus', additional_params='--enable-rbac-authorization false') - def test_network_express_route_port(self, resource_group, key_vault): - self.kwargs.update({ - 'rg': resource_group, - 'location': 'eastus', - 'name': 'expressRouteTest', - 'peeringRG': 'Equinix-Ashburn-DC2', - 'encapsulation': 'QinQ', - 'bandwidth': '10 Gbps', - 'cipher': 'GcmAes128', - 'kv': key_vault, - 'CAK_name': 'CAK', - 'CAK_value': 'b4355b9ccaf727d2ba7744ee991ce00e', - 'CKN_name': 'CKN', - 'CKN_value': '93e9ce8469eff0536784fc4ad253b5a6', - }) - self.kwargs['CAK_id'] = self.cmd('keyvault secret set --name {CAK_name} --vault-name {kv} --value {CAK_value}').get_output_in_json()['id'] - self.kwargs['CKN_id'] = self.cmd('keyvault secret set --name {CKN_name} --vault-name {kv} --value {CKN_value}').get_output_in_json()['id'] - identity = self.cmd('identity create -g {rg} -n {name}').get_output_in_json() - self.cmd('keyvault set-policy -n {kv} -g {rg} --secret-permissions get --object-id ' + identity['principalId']) - - self.cmd('network express-route port location list') - - self.cmd('network express-route port location show -l {peeringRG}', checks=[ - self.check('name', self.kwargs['peeringRG']) - ]) - - self.cmd('network express-route port create -g {rg} -n {name} --location {location} --peering-location {peeringRG} --encapsulation {encapsulation} --bandwidth {bandwidth}', checks=[ - self.check('name', self.kwargs['name']), - self.check('length(links)', 2), - ]) - self.cmd('network express-route port list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network express-route port show -g {rg} -n {name}') - - self.cmd('network express-route port identity assign -g {rg} -n {name} --identity ' + identity['id']) - - self.cmd('network express-route port identity show -g {rg} -n {name}') - - self.cmd('network express-route port link list -g {rg} --port-name {name}', checks=[ - self.check('length(@)', 2) - ]) - self.cmd('network express-route port link show -g {rg} --port-name {name} -n link1', checks=[ - self.check('name', 'link1') - ]) - - self.cmd('network express-route port link update -g {rg} --port-name {name} -n link1 ' - '--macsec-ckn-secret-identifier {CKN_id} --macsec-cak-secret-identifier {CAK_id} ' - '--macsec-cipher {cipher} --admin-state', checks=[ - self.check('adminState', 'Enabled'), - self.check('macSecConfig.cakSecretIdentifier', self.kwargs['CAK_id']), - self.check('macSecConfig.cknSecretIdentifier', self.kwargs['CKN_id']), - self.check('macSecConfig.cipher', self.kwargs['cipher']), - ]) - - self.cmd('network express-route port generate-loa --customer-name MyCustomer -g {rg} --name {name} -f loa1') - - -class NetworkExpressRouteIPv6PeeringScenarioTest(ScenarioTest): - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route_ipv6_peering') - def test_network_express_route_ipv6_peering(self, resource_group): - - self.kwargs['er'] = 'circuit1' - - # Premium SKU required to create MicrosoftPeering settings - self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3') - self.cmd('network express-route peering update -g {rg} --circuit-name {er} -n MicrosoftPeering --ip-version ipv6 --primary-peer-subnet 2001:db00::/126 --secondary-peer-subnet 2002:db00::/126 --advertised-public-prefixes 2001:db00::/126 --customer-asn 100001 --routing-registry-name level3') - self.cmd('network express-route peering show -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ - self.check('microsoftPeeringConfig.advertisedPublicPrefixes[0]', '104.0.0.0/30'), - self.check('microsoftPeeringConfig.customerASN', 10000), - self.check('microsoftPeeringConfig.routingRegistryName', 'LEVEL3'), - self.check('ipv6PeeringConfig.microsoftPeeringConfig.advertisedPublicPrefixes[0]', '2001:db00::/126'), - self.check('ipv6PeeringConfig.microsoftPeeringConfig.customerASN', 100001), - self.check('ipv6PeeringConfig.state', 'Enabled') - ]) - self.cmd('network express-route peering get-stats -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ - self.check('type(@)', 'object'), - ]) - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route_ipv6_peering2', location='eastus') - def test_network_express_route_ipv6_peering2(self, resource_group): - self.kwargs['er'] = 'test_circuit' - # create with ipv6 - self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" ' - '--peering-location Area51 --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type AzurePrivatePeering ' - '--peer-asn 10002 --vlan-id 103 --ip-version ipv6 --primary-peer-subnet 2002:db00::/126 ' - '--secondary-peer-subnet 2003:db00::/126', - checks=[self.check('ipv6PeeringConfig.primaryPeerAddressPrefix', '2002:db00::/126'), - self.check('ipv6PeeringConfig.secondaryPeerAddressPrefix', '2003:db00::/126')]) - - -class NetworkExpressRouteGlobalReachScenarioTest(ScenarioTest): - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route_global_reach') - def test_network_express_route_global_reach(self, resource_group): - from azure.core.exceptions import HttpResponseError - self.kwargs.update({ - 'er1': 'er1', - 'er2': 'er2', - 'conn12': 'conn12', - }) - - self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') - - self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') - - # These commands won't succeed because circuit creation requires a manual step from the service. - with self.assertRaisesRegex(HttpResponseError, 'is Not Provisioned'): - self.cmd('network express-route peering connection create -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --peer-circuit {er2} --address-prefix 104.0.0.0/29') - self.cmd('network express-route peering connection show -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') - self.cmd('network express-route peering connection list -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering') - self.cmd('network express-route peering connection delete -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route_peer_connection') - def test_network_express_route_peer_connection(self, resource_group): - from azure.core.exceptions import ResourceNotFoundError - self.kwargs.update({ - 'er1': 'er1', - 'er2': 'er2', - 'peconn12': 'peconn12', - }) - - self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') - - self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') - - # cannot create it, so this test will fail due to resource is not found. - with self.assertRaisesRegex(ResourceNotFoundError, 'NotFound'): - self.cmd('network express-route peering peer-connection show -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {peconn12}') - self.cmd('network express-route peering peer-connection list -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering') - - @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER - @ResourceGroupPreparer(name_prefix='cli_test_express_route_global_reach_config') - def test_network_express_route_global_reach_config(self, resource_group): - from azure.core.exceptions import HttpResponseError - self.kwargs.update({ - 'er1': 'er1', - 'er2': 'er2', - 'conn12': 'conn12', - }) - - self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') - - self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') - self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') - - # These commands won't succeed because circuit creation requires a manual step from the service. - with self.assertRaisesRegex(HttpResponseError, 'is Not Provisioned'): - self.cmd('network express-route peering connection create -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --peer-circuit {er2} --address-prefix 104.0.0.0/29') - with self.assertRaisesRegex(HttpResponseError, 'ParentResourceIsInFailedState'): - self.cmd('network express-route peering connection ipv6-config set -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --address-prefix .../125') - with self.assertRaisesRegex(HttpResponseError, 'ParentResourceIsInFailedState'): - self.cmd('network express-route peering connection ipv6-config remove -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') - self.cmd('network express-route peering connection delete -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') - - -class NetworkCrossRegionLoadBalancerScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_cr_load_balancer') - def test_network_cross_region_lb(self, resource_group): - - self.kwargs.update({ - 'lb': 'cross-region-lb', - 'rg': resource_group, - 'rt': 'Microsoft.Network/loadBalancers', - 'pub_ip': 'publicip4' - }) - - # test lb create with min params (new ip) - self.cmd('network cross-region-lb create -n {lb}1 -g {rg}', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}') - ]) - - # test internet facing load balancer with new static public IP - self.cmd('network cross-region-lb create -n {lb}2 -g {rg} --public-ip-address-allocation static --tags foo=doo') - self.cmd('network public-ip show -g {rg} -n PublicIP{lb}2', checks=[ - self.check('publicIPAllocationMethod', 'Static'), - self.check('tags.foo', 'doo') - ]) - - # test internet facing load balancer with existing public IP (by name) - self.cmd('network public-ip create -n {pub_ip} -g {rg} --sku Standard --tier Global') - self.cmd('network cross-region-lb create -n {lb}3 -g {rg} --public-ip-address {pub_ip}', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), - self.check("loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{pub_ip}')", True) - ]) - - self.cmd('network cross-region-lb list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True) - ]) - self.cmd('network cross-region-lb list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network cross-region-lb show --resource-group {rg} --name {lb}1', checks=[ - self.check('type(@)', 'object'), - self.check('type', '{rt}'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{lb}1') - ]) - # test cross-region-lb update - self.cmd( - 'network cross-region-lb update --resource-group {rg} --name {lb}1 --set tags.CostCenter=MyBusinessGroup', - checks=[ - self.check('tags.CostCenter', 'MyBusinessGroup') - ]) - self.cmd('network cross-region-lb delete --resource-group {rg} --name {lb}1') - # Expecting no results as we just deleted the only lb in the resource group - self.cmd('network cross-region-lb list --resource-group {rg}', checks=self.check('length(@)', 2)) - - @ResourceGroupPreparer(name_prefix='cli_test_cross_region_load_balancer_ip_config') - def test_network_cross_region_load_balancer_ip_config(self, resource_group): - - for i in range(1, 4): # create 3 public IPs to use for the test - self.cmd('network public-ip create -g {{rg}} -n publicip{} --sku Standard --tier Global'.format(i)) - - # create internet-facing LB with public IP (lb1) - self.cmd('network cross-region-lb create -g {rg} -n lb1 --public-ip-address publicip1') - - # Test frontend IP configuration for internet-facing LB - self.cmd('network cross-region-lb frontend-ip create -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip2') - self.cmd('network cross-region-lb frontend-ip list -g {rg} --lb-name lb1', - checks=self.check('length(@)', 2)) - self.cmd('network cross-region-lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip3') - self.cmd('network cross-region-lb frontend-ip show -g {rg} --lb-name lb1 -n ipconfig1', - checks=self.check("publicIPAddress.contains(id, 'publicip3')", True)) - - # test generic update - self.kwargs['ip2_id'] = resource_id(subscription=self.get_subscription_id(), resource_group=self.kwargs['rg'], namespace='Microsoft.Network', type='publicIPAddresses', name='publicip2') - self.cmd('network cross-region-lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --set publicIPAddress.id="{ip2_id}"', - checks=self.check("publicIPAddress.contains(id, 'publicip2')", True)) - self.cmd('network cross-region-lb frontend-ip delete -g {rg} --lb-name lb1 -n ipconfig1') - self.cmd('network cross-region-lb frontend-ip list -g {rg} --lb-name lb1', - checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_address_pool', location='eastus2') - def test_network_cross_region_lb_address_pool(self, resource_group): - - self.kwargs.update({ - 'lb': self.create_random_name('cross_region_lb', 24), - 'rg': resource_group - }) - - self.cmd('network cross-region-lb create -g {rg} -n {lb}') - - for i in range(1, 4): - self.cmd('network cross-region-lb address-pool create -g {{rg}} --lb-name {{lb}} -n bap{}'.format(i), - checks=self.check('name', 'bap{}'.format(i))) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 4)) - self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', - checks=self.check('name', 'bap1')) - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', - checks=self.is_empty()) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 3)) - - @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_address_pool_addresses', location='eastus2') - def test_network_cross_region_lb_address_pool_addresses(self, resource_group): - - self.kwargs.update({ - 'regional_lb1': self.create_random_name('regional_lb', 24), - 'regional_lb2': self.create_random_name('regional_lb', 24), - 'lb': self.create_random_name('cross_region_lb', 24), - 'address_pool': self.create_random_name('address_pool', 24), - 'backend_address1': self.create_random_name('backend_address', 24), - 'backend_address2': self.create_random_name('backend_address', 24), - 'rg': resource_group, - 'lb_address_pool_file_path': os.path.join(TEST_DIR, 'test-cross-region-lb-address-pool-config.json') - }) - - regional_lb_frontend_ip_address1 = self.cmd('network lb create -n {regional_lb1} -g {rg} --sku Standard').get_output_in_json()['loadBalancer']['frontendIPConfigurations'][0]['id'] - regional_lb_frontend_ip_address2 = self.cmd('network lb create -n {regional_lb2} -g {rg} --sku Standard').get_output_in_json()['loadBalancer']['frontendIPConfigurations'][0]['id'] - - self.kwargs.update({ - 'regional_lb_frontend_ip_address1': regional_lb_frontend_ip_address1, - 'regional_lb_frontend_ip_address2': regional_lb_frontend_ip_address2 - }) - self.cmd('network cross-region-lb create -g {rg} -n {lb}') - - self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n {address_pool} ' - '--backend-address name={backend_address1} frontend-ip-address={regional_lb_frontend_ip_address1} ' - '--admin-state Up', - checks=[self.check('name', self.kwargs['address_pool']), - self.check('loadBalancerBackendAddresses[0].adminState', 'Up'), - ]) - - self.cmd('network cross-region-lb address-pool update -g {rg} --lb-name {lb} -n {address_pool} ' - '--backend-address name={backend_address1} frontend-ip-address={regional_lb_frontend_ip_address1} admin-state=Down', - checks=[self.check('name', self.kwargs['address_pool']), - self.check('loadBalancerBackendAddresses[0].adminState', 'Down'), - ]) - - self.cmd('network cross-region-lb address-pool address add -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2} --frontend-ip-address {regional_lb_frontend_ip_address2} --admin-state Down', - checks=[self.check('name', self.kwargs['address_pool']), - self.check('loadBalancerBackendAddresses[1].adminState', 'Down'), - ]) - - self.cmd( - 'network cross-region-lb address-pool address update -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2} --admin-state Up', - checks=[self.check('name', self.kwargs['address_pool']), - self.check('loadBalancerBackendAddresses[1].adminState', 'Up'), - ]) - - self.cmd('network cross-region-lb address-pool address remove -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2}') - - self.cmd('network cross-region-lb address-pool address list -g {rg} --lb-name {lb} --pool-name {address_pool}', checks=self.check('length(@)', 1)) - - self.cmd('network cross-region-lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - self.cmd('network cross-region-lb address-pool show -g {rg} --lb-name {lb} -n {address_pool}', - checks=self.check('name', self.kwargs['address_pool'])) - self.cmd('network cross-region-lb address-pool address remove -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address1}') - self.cmd('network cross-region-lb address-pool delete -g {rg} --lb-name {lb} -n {address_pool}', - checks=self.is_empty()) - self.cmd('network cross-region-lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 1)) - - @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_rules') - def test_network_cross_region_lb_rules(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.cmd('network cross-region-lb create -g {rg} -n {lb}') - - self.cmd('network cross-region-lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-port 60 --backend-port 60 --protocol tcp', - checks=[ - self.check('enableTcpReset', False), - self.check('idleTimeoutInMinutes', 4)]) - self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n bap1') - self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n bap2') - self.cmd('network cross-region-lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name LoadBalancerFrontEnd --frontend-port 40 --backend-pool-name bap1 --backend-port 40 --protocol tcp') - - self.cmd('network cross-region-lb rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - self.cmd('network cross-region-lb rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --load-distribution sourceip --protocol udp') - self.cmd('network cross-region-lb rule update -g {rg} --lb-name {lb} -n rule2 --backend-pool-name bap2 --load-distribution sourceipprotocol') - self.cmd('network cross-region-lb rule show -g {rg} --lb-name {lb} -n rule1', checks=[ - self.check('enableFloatingIP', True), - self.check('idleTimeoutInMinutes', 4), - self.check('loadDistribution', 'SourceIP'), - self.check('protocol', 'Udp') - ]) - - self.cmd('network cross-region-lb rule show -g {rg} --lb-name {lb} -n rule2', checks=[ - self.check("backendAddressPool.contains(id, 'bap2')", True), - self.check('loadDistribution', 'SourceIPProtocol') - ]) - self.cmd('network cross-region-lb rule delete -g {rg} --lb-name {lb} -n rule1') - self.cmd('network cross-region-lb rule delete -g {rg} --lb-name {lb} -n rule2') - self.cmd('network cross-region-lb rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 0)) - - -class NetworkLoadBalancerScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_load_balancer', location='eastus2') - def test_network_lb(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb', - 'rt': 'Microsoft.Network/loadBalancers', - 'vnet': 'mytestvnet', - 'pri_ip': '10.0.0.15', - 'pub_ip': 'publicip4' - }) - - # test lb create with min params (new ip) - self.cmd('network lb create -n {lb}1 -g {rg}', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}') - ]) - - # test internet facing load balancer with new static public IP - self.cmd('network lb create -n {lb}2 -g {rg} --public-ip-address-allocation static --tags foo=doo') - self.cmd('network public-ip show -g {rg} -n PublicIP{lb}2', checks=[ - self.check('publicIPAllocationMethod', 'Static'), - self.check('tags.foo', 'doo') - ]) - - # test internal load balancer create (existing subnet ID) - self.kwargs['subnet_id'] = self.cmd('network vnet create -n {vnet} -g {rg} --subnet-name default').get_output_in_json()['newVNet']['subnets'][0]['id'] - self.cmd('network lb create -n {lb}3 -g {rg} --subnet {subnet_id} --private-ip-address {pri_ip}', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Static'), - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAddress', '{pri_ip}'), - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), - self.check("loadBalancer.frontendIPConfigurations[0].properties.subnet.id", '{subnet_id}') - ]) - - # test internet facing load balancer with existing public IP (by name) - self.cmd('network public-ip create -n {pub_ip} -g {rg}') - self.cmd('network lb create -n {lb}4 -g {rg} --public-ip-address {pub_ip}', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), - self.check("loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{pub_ip}')", True) - ]) - - self.cmd('network lb list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True) - ]) - self.cmd('network lb list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network lb show --resource-group {rg} --name {lb}1', checks=[ - self.check('type(@)', 'object'), - self.check('type', '{rt}'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{lb}1') - ]) - self.cmd('network lb delete --resource-group {rg} --name {lb}1') - # Expecting no results as we just deleted the only lb in the resource group - self.cmd('network lb list --resource-group {rg}', - checks=self.check('length(@)', 3)) - - @live_only() - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_network_lb_with_cross_subscription_id_', location='eastus2euap') - @ResourceGroupPreparer(name_prefix='cli_test_network_lb_with_cross_subscription_id_', location='eastus2euap', - parameter_name='aux_resource_group', subscription=AUX_SUBSCRIPTION) - def test_network_lb_with_cross_subscription_id(self, resource_group, aux_resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'rg2': aux_resource_group, - 'aux_sub': AUX_SUBSCRIPTION, - 'lb': self.create_random_name("lb", 12), - 'vnet': self.create_random_name("vnet", 12), - "subnet": self.create_random_name("subnet", 12), - 'lb2': self.create_random_name("lb2", 12), - 'publicip': self.create_random_name("publicip", 12), - }) - - vnet = self.cmd('network vnet create -n {vnet} -g {rg2} --subnet-name {subnet} --subscription {aux_sub}', checks=[ - self.check('newVNet.name', '{vnet}'), - ]).get_output_in_json() - - self.cmd('network vnet subnet update -n {subnet} -g {rg2} --vnet-name {vnet} --default-outbound-access false --subscription {aux_sub}') - - self.kwargs['vnet_id'] = vnet['newVNet']['id'] - self.kwargs['subnet_id'] = vnet['newVNet']['subnets'][0]['id'] - - self.cmd('network lb create -g {rg} -n {lb} --subnet {subnet_id} --sku Standard', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), - ]) - - public_ip_address_id = self.cmd('network public-ip create -g {rg2} -n {publicip} --subscription {aux_sub} --ip-tags FirstPartyUsage=/NonProd', checks=[ - self.check('publicIp.name', '{publicip}') - ]).get_output_in_json()['publicIp']['id'] - - self.kwargs['publicip_id'] = public_ip_address_id - - self.cmd('network lb create -g {rg} -n {lb2} --public-ip-address {publicip_id} --sku Standard', checks=[ - self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), - self.check('loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.id', '{publicip_id}'), - ]) - - -class NetworkLoadBalancerIpConfigScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_load_balancer_ip_config', location='westus') - def test_network_load_balancer_ip_config(self, resource_group): - - for i in range(1, 4): # create 3 public IPs to use for the test - self.cmd('network public-ip create -g {{rg}} -n publicip{}'.format(i)) - - # create internet-facing LB with public IP (lb1) - self.cmd('network lb create -g {rg} -n lb1 --public-ip-address publicip1') - - # create internal LB (lb2) - self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') - self.cmd('network vnet subnet create -g {rg} --vnet-name vnet1 -n subnet2 --address-prefix 10.0.1.0/24 --default-outbound false') - self.cmd('network lb create -g {rg} -n lb2 --subnet subnet1 --vnet-name vnet1') - - # Test frontend IP configuration for internet-facing LB - self.cmd('network lb frontend-ip create -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip2') - self.cmd('network lb frontend-ip list -g {rg} --lb-name lb1', - checks=self.check('length(@)', 2)) - self.cmd('network lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip3') - self.cmd('network lb frontend-ip show -g {rg} --lb-name lb1 -n ipconfig1', - checks=self.check("publicIPAddress.contains(id, 'publicip3')", True)) - - # test generic update - self.kwargs['ip2_id'] = resource_id(subscription=self.get_subscription_id(), resource_group=self.kwargs['rg'], namespace='Microsoft.Network', type='publicIPAddresses', name='publicip2') - self.cmd('network lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address "{ip2_id}"', - checks=self.check("publicIPAddress.contains(id, 'publicip2')", True)) - self.cmd('network lb frontend-ip delete -g {rg} --lb-name lb1 -n ipconfig1') - self.cmd('network lb frontend-ip list -g {rg} --lb-name lb1', - checks=self.check('length(@)', 1)) - - # Test frontend IP configuration for internal LB - self.cmd('network lb frontend-ip create -g {rg} --lb-name lb2 -n ipconfig2 --vnet-name vnet1 --subnet subnet1 --private-ip-address 10.0.0.99') - self.cmd('network lb frontend-ip list -g {rg} --lb-name lb2', - checks=self.check('length(@)', 2)) - self.cmd('network lb frontend-ip update -g {rg} --lb-name lb2 -n ipconfig2 --subnet subnet2 --vnet-name vnet1 --private-ip-address 10.0.1.100') - self.cmd('network lb frontend-ip show -g {rg} --lb-name lb2 -n ipconfig2', - checks=self.check("subnet.contains(id, 'subnet2')", True)) - - -class NetworkLoadBalancerOutboundRulesScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_lb_outbound_rules', location='eastus2') - def test_network_load_balancer_outbound_rules(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'loc': resource_group_location, - 'lb': 'lb1', - 'prefix': 'prefix1', - 'frontend1': 'LoadBalancerFrontEnd', - 'frontend2': 'prefixFrontEnd', - 'backend': 'lb1bepool', - 'rule1': 'rule1', - 'rule2': 'rule2' - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku Standard') - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') - self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {frontend2} --public-ip-prefix {prefix}') - self.cmd('network lb outbound-rule create -g {rg} --lb-name {lb} -n {rule1} --address-pool {backend} --enable-tcp-reset --frontend-ip-configs {frontend1} --outbound-ports 512 --protocol Tcp', checks=[ - self.check('enableTcpReset', True), - self.check('protocol', 'Tcp'), - self.check('allocatedOutboundPorts', 512), - self.check("contains(backendAddressPool.id, '{backend}')", True), - self.check("contains(frontendIPConfigurations[0].id, '{frontend1}')", True) - ]) - self.cmd('network lb outbound-rule create -g {rg} --lb-name {lb} -n {rule2} --address-pool {backend} --frontend-ip-configs {frontend2} --idle-timeout 20 --protocol all', checks=[ - self.check('idleTimeoutInMinutes', 20), - self.check("contains(backendAddressPool.id, '{backend}')", True), - self.check("contains(frontendIPConfigurations[0].id, '{frontend2}')", True) - ]) - self.cmd('network lb outbound-rule update -g {rg} --lb-name {lb} -n {rule2} --idle-timeout 25', - checks=self.check('idleTimeoutInMinutes', 25)) - self.cmd('network lb outbound-rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - self.cmd('network lb outbound-rule show -g {rg} --lb-name {lb} -n {rule1}', checks=[ - self.check('enableTcpReset', True), - self.check('protocol', 'Tcp'), - self.check('allocatedOutboundPorts', 512), - self.check("contains(backendAddressPool.id, '{backend}')", True), - self.check("contains(frontendIPConfigurations[0].id, '{frontend1}')", True) - ]) - self.cmd('network lb outbound-rule delete -g {rg} --lb-name {lb} -n {rule1}') - self.cmd('network lb outbound-rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 1)) - - -class NetworkLoadBalancerSubresourceScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules', location='eastus2') - def test_network_lb_nat_rules(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.cmd('network lb create -g {rg} -n {lb}') - - for count in range(1, 3): - self.cmd('network lb inbound-nat-rule create -g {{rg}} --lb-name {{lb}} -n rule{0} --protocol tcp --frontend-port {0} --backend-port {0} --frontend-ip-name LoadBalancerFrontEnd'.format(count)) - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --frontend-port 3 --backend-port 3') - self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 3)) - self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --idle-timeout 10') - self.cmd('network lb inbound-nat-rule show -g {rg} --lb-name {lb} -n rule1', checks=[ - self.check('enableFloatingIP', True), - self.check('idleTimeoutInMinutes', 10) - ]) - # test generic update - self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule1 --set idleTimeoutInMinutes=5', - checks=self.check('idleTimeoutInMinutes', 5)) - - for count in range(1, 4): - self.cmd('network lb inbound-nat-rule delete -g {{rg}} --lb-name {{lb}} -n rule{}'.format(count)) - self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules_v2', location='eastus2') - def test_network_lb_nat_rules_v2(self, resource_group): - self.kwargs['lb'] = 'lb1' - self.cmd('network lb create -g {rg} -n {lb} --sku Standard') - - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --backend-port 3 ' - '--frontend-port-range-start 0 --frontend-port-range-end 3', checks=[ - self.check('name', 'rule3'), - self.check('frontendPortRangeStart', 0), - self.check('frontendPortRangeEnd', 3)]) - self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule3 --floating-ip true --idle-timeout 10 --frontend-port-range-end 5', - checks=self.check('frontendPortRangeEnd', 5)) - self.cmd('network lb inbound-nat-rule delete -g {rg} --lb-name {lb} -n rule3') - - @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules_v3', location='eastus2euap') - def test_network_lb_nat_rules_v3(self, resource_group): - self.kwargs.update({ - 'lb': 'lb1', - 'backend': 'lb1bepool', - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku Standard') - - # test lb inbound-nat-rule create with new param --backend-pool-name - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --backend-port 30 ' - '--frontend-port-range-start 0 --frontend-port-range-end 3 --backend-pool-name {backend}', checks=[ - self.check('name', 'rule3'), - self.check('frontendPortRangeStart', 0), - self.check('frontendPortRangeEnd', 3), - self.check("contains(backendAddressPool.id, '{backend}')", True)]) - self.cmd( - 'network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule3 --floating-ip true --idle-timeout 10 --frontend-port-range-end 5', - checks=self.check('frontendPortRangeEnd', 5)) - self.cmd('network lb inbound-nat-rule delete -g {rg} --lb-name {lb} -n rule3') - - @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_pools', location='eastus2') - def test_network_lb_nat_pools(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.cmd('network lb create -g {rg} -n {lb}') - - for count in range(1000, 4000, 1000): - self.cmd('network lb inbound-nat-pool create -g {{rg}} --lb-name {{lb}} -n rule{0} --protocol tcp --frontend-port-range-start {0} --frontend-port-range-end {1} --backend-port {0}'.format(count, count + 999)) - self.cmd('network lb inbound-nat-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 3)) - self.cmd('network lb inbound-nat-pool update -g {rg} --lb-name {lb} -n rule1000 --protocol udp --backend-port 50 --floating-ip --idle-timeout 20') - self.cmd('network lb inbound-nat-pool show -g {rg} --lb-name {lb} -n rule1000', checks=[ - self.check('protocol', 'Udp'), - self.check('backendPort', 50), - self.check('enableFloatingIP', True), - self.check('idleTimeoutInMinutes', 20) - ]) - # test generic update - self.cmd('network lb inbound-nat-pool update -g {rg} --lb-name {lb} -n rule1000 --set protocol=Tcp', - checks=self.check('protocol', 'Tcp')) - - for count in range(1000, 4000, 1000): - self.cmd('network lb inbound-nat-pool delete -g {{rg}} --lb-name {{lb}} -n rule{}'.format(count)) - self.cmd('network lb inbound-nat-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool', location='eastus2') - def test_network_lb_address_pool(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.cmd('network lb create -g {rg} -n {lb}') - - for i in range(1, 4): - self.cmd('network lb address-pool create -g {{rg}} --lb-name {{lb}} -n bap{}'.format(i), - checks=self.check('name', 'bap{}'.format(i))) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 4)) - self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', - checks=self.check('name', 'bap1')) - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', - checks=self.is_empty()) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 3)) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool_with_sync_mode', location='eastus2') - def test_network_lb_address_pool_with_sync_mode(self, resource_group): - - self.kwargs.update({ - 'lb': self.create_random_name('lb', 10), - 'ap1': self.create_random_name('ap1', 10), - 'ap2': self.create_random_name('ap2', 10), - 'vnet': self.create_random_name('vnet', 10), - }) - self.cmd('network lb create -g {rg} -n {lb}') - self.cmd('network vnet create -g {rg} -n {vnet}') - - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {ap1} --sync-mode Manual --vnet {vnet}') - self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n {ap1}', - checks=[self.check('name', '{ap1}'), - self.check('syncMode', 'Manual')]) - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {ap2}') - self.cmd('network lb address-pool update -g {rg} --lb-name {lb} -n {ap2} --sync-mode Automatic --vnet {vnet}', - checks=self.check('syncMode', 'Automatic')) - - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n {ap1}', - checks=self.is_empty()) - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n {ap2}', - checks=self.is_empty()) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool_addresses', location='eastus2') - def test_network_lb_address_pool_addresses(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb1', - 'vnet': 'clitestvnet', - 'nic': 'clitestnic', - 'rg': resource_group, - 'lb_address_pool_file_path': os.path.join(TEST_DIR, 'test-address-pool-config.json'), - 'subnet_name': 'subnetx' - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name subnet1') - self.cmd('network vnet subnet create -g {rg} -n {subnet_name} --vnet-name {vnet} --address-prefixes 10.0.1.0/24 --default-outbound false') - self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name {vnet}') - self.cmd('network lb create -g {rg} -n {lb} --sku Standard') - - self.kwargs['subnet'] = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json()['subnets'][0]['id'] - - # create with vnet - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet} ' - '--backend-address name=addr1 ip-address=10.0.0.1 ' - '--backend-address name=addr2 ip-address=10.0.0.2 ' - '--backend-address name=addr3 ip-address=10.0.0.3 ' - '--drain-period 10', - checks=self.check('name', 'bap1')) - - # create with subnet - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2 --vnet {vnet} --admin-state None ' - '--backend-address name=addr1 ip-address=10.0.0.1 subnet={subnet} ' - '--backend-address name=addr2 ip-address=10.0.1.1 subnet={subnet_name} ' - '--backend-address name=addr3 ip-address=10.0.0.3 subnet={subnet} ' - '--drain-period 10', - checks=[ - self.check('name', 'bap2'), - self.check('drainPeriodInSeconds', 10), - self.check('loadBalancerBackendAddresses[0].adminState', 'None'), - self.check('loadBalancerBackendAddresses[1].adminState', 'None'), - self.check('loadBalancerBackendAddresses[2].adminState', 'None') - ]) - - # update backend pool - self.cmd('network lb address-pool update -g {rg} --lb-name {lb} -n bap2 --vnet {vnet} --admin-state None ' - '--backend-address name=addr1 ip-address=10.0.0.3 subnet={subnet} ' - '--backend-address name=addr2 ip-address=10.0.1.2 subnet={subnet_name} ' - '--backend-address name=addr3 ip-address=10.0.0.5 subnet={subnet} ' - '--drain-period 20', - checks=[ - self.check('loadBalancerBackendAddresses[0].ipAddress', '10.0.0.3'), - self.check('loadBalancerBackendAddresses[1].ipAddress', '10.0.1.2'), - self.check('loadBalancerBackendAddresses[2].ipAddress', '10.0.0.5'), - self.check('drainPeriodInSeconds', 20), - self.check('loadBalancerBackendAddresses[0].adminState', 'None'), - self.check('loadBalancerBackendAddresses[1].adminState', 'None'), - self.check('loadBalancerBackendAddresses[2].adminState', 'None') - ]) - - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap2 ') - - self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr6 --vnet {vnet} --ip-address 10.0.0.6 --admin-state None', - checks=[ - self.check('name', 'bap1'), - self.check('loadBalancerBackendAddresses[3].adminState', 'None') - ]) - - self.cmd('network lb address-pool address remove -g {rg} --lb-name {lb} --pool-name bap1 --name addr2') - - self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '3')) - - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', - checks=self.check('name', 'bap1')) - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', - checks=self.is_empty()) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 1)) - - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet} ' - '--backend-addresses @"{lb_address_pool_file_path}"', - checks=self.check('name', 'bap1')) - self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '2')) - self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', checks=self.is_empty()) - self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', checks=self.check('length(@)', 1)) - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet}', checks=self.check('name', 'bap1')) - - self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr6 --vnet {vnet} --ip-address 10.0.0.6', checks=self.check('name', 'bap1')) - - self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '1')) - - self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr7 --subnet {subnet} --ip-address 10.0.0.7', checks=self.check('name', 'bap1')) - - self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr8 --vnet {vnet} --subnet {subnet_name} --ip-address 10.0.1.3', checks=self.check('name', 'bap1')) - - self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '3')) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_probes', location='eastus2') - def test_network_lb_probes(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.kwargs['lb2'] = 'lb2' - self.kwargs['probe5'] = 'probe5' - self.cmd('network lb create -g {rg} -n {lb}') - - for i in range(1, 4): - self.cmd('network lb probe create -g {{rg}} --lb-name {{lb}} -n probe{0} --port {0} --protocol http --path "/test{0}"'.format(i)) - self.cmd('network lb probe list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 3)) - self.cmd('network lb probe update -g {rg} --lb-name {lb} -n probe1 --interval 20 --threshold 5') - self.cmd('network lb probe update -g {rg} --lb-name {lb} -n probe2 --protocol tcp --path ""') - self.cmd('network lb probe show -g {rg} --lb-name {lb} -n probe1', checks=[ - self.check('intervalInSeconds', 20), - self.check('numberOfProbes', 5) - ]) - - self.cmd('network lb probe show -g {rg} --lb-name {lb} -n probe2', checks=[ - self.check('protocol', 'Tcp'), - self.check('path', None) - ]) - self.cmd('network lb probe delete -g {rg} --lb-name {lb} -n probe3') - self.cmd('network lb probe list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - - # test standard LB supports https probe - self.cmd('network lb create -g {rg} -n {lb2} --sku standard') - self.cmd('network lb probe create -g {rg} --lb-name {lb2} -n probe1 --port 443 --protocol https --path "/test1"') - self.cmd('network lb probe list -g {rg} --lb-name {lb2}', checks=self.check('[0].protocol', 'Https')) - - # test --probe-threshold parameter - self.cmd('network lb probe create -g {rg} --lb-name {lb2} -n {probe5} --port 443 --protocol https --path "/test1" --probe-threshold 5', checks=self.check('probeThreshold', 5)) - self.cmd('network lb probe show -g {rg} --lb-name {lb2} -n {probe5}', checks=self.check('probeThreshold', 5)) - self.cmd('network lb probe update -g {rg} --lb-name {lb2} -n {probe5} --port 443 --protocol https --path "/test1" --probe-threshold 6', checks=self.check('probeThreshold', 6)) - self.cmd('network lb probe show -g {rg} --lb-name {lb2} -n {probe5}', checks=self.check('probeThreshold', 6)) - self.cmd('network lb probe list -g {rg} --lb-name {lb2}', checks=[ - self.check('length(@)', 2), - self.check('[1].probeThreshold', 6) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_lb_rules', location='eastus2') - def test_network_lb_rules(self, resource_group): - - self.kwargs['lb'] = 'lb1' - self.cmd('network lb create -g {rg} -n {lb}') - - self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-port 60 --backend-port 60 --protocol tcp') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') - self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name LoadBalancerFrontEnd --frontend-port 40 --backend-pool-name bap1 --backend-port 40 --protocol tcp') - - self.cmd('network lb rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 2)) - self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --idle-timeout 20 --load-distribution sourceip --protocol udp') - self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule2 --backend-pool-name bap2 --load-distribution sourceipprotocol') - self.cmd('network lb rule show -g {rg} --lb-name {lb} -n rule1', checks=[ - self.check('enableFloatingIP', True), - self.check('idleTimeoutInMinutes', 20), - self.check('loadDistribution', 'SourceIP'), - self.check('protocol', 'Udp') - ]) - # test generic update - self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule1 --set idleTimeoutInMinutes=5', - checks=self.check('idleTimeoutInMinutes', 5)) - - self.cmd('network lb rule show -g {rg} --lb-name {lb} -n rule2', checks=[ - self.check("backendAddressPool.contains(id, 'bap2')", True), - self.check('loadDistribution', 'SourceIPProtocol') - ]) - self.cmd('network lb rule delete -g {rg} --lb-name {lb} -n rule1') - self.cmd('network lb rule delete -g {rg} --lb-name {lb} -n rule2') - self.cmd('network lb rule list -g {rg} --lb-name {lb}', - checks=self.check('length(@)', 0)) - - @ResourceGroupPreparer(name_prefix="cli_test_network_lb_port_mapping_") - def test_network_lb_port_mapping(self): - self.kwargs.update({ - "lb": "test-lb", - "rule": "test-nat", - "pool": "test-pool", - "start": 3389, - "end": 4000, - "vnet": "test-vnet", - "subnet": "test-subnet", - "ip": "10.0.0.1", - "address": "test-address", - }) - - # prepare backend address pool - self.cmd("network lb create -n {lb} -g {rg} --sku standard") - self.cmd("network lb address-pool create -n {pool} -g {rg} --lb-name {lb}") - self.cmd("network vnet create -n {vnet} -g {rg} --subnet-name {subnet}") - self.cmd( - "network lb address-pool address add -n {address} -g {rg} --lb-name {lb} --pool-name {pool} " - "--vnet {vnet} --ip-address {ip}" - ) - self.cmd( - "network lb inbound-nat-rule create -n {rule} -g {rg} --lb-name {lb} --backend-pool-name {pool} " - "--backend-port {start} --frontend-port-range-start {start} --frontend-port-range-end {end} --protocol tcp" - ) - - self.cmd( - "network lb list-mapping -n {lb} -g {rg} --backend-pool-name {pool} --request ip={ip}", - checks=[ - self.check("inboundNatRulePortMappings[0].inboundNatRuleName", "{rule}"), - self.check("inboundNatRulePortMappings[0].backendPort", self.kwargs["start"]), - self.check("inboundNatRulePortMappings[0].frontendPort", self.kwargs["start"]), - self.check("inboundNatRulePortMappings[0].protocol", "Tcp"), - ] - ) - - -class NetworkLocalGatewayScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='local_gateway_scenario') - def test_network_local_gateway(self, resource_group): - - self.kwargs.update({ - 'lgw1': 'lgw1', - 'lgw2': 'lgw2', - 'rt': 'Microsoft.Network/localNetworkGateways' - }) - self.cmd('network local-gateway create --resource-group {rg} --name {lgw1} --gateway-ip-address 10.1.1.1 --local-address-prefixes 10.0.1.0/24 --tags foo=doo') - self.cmd('network local-gateway update --resource-group {rg} --name {lgw1} --tags foo=boo', - checks=self.check('tags.foo', 'boo')) - self.cmd('network local-gateway show --resource-group {rg} --name {lgw1}', checks=[ - self.check('type', '{rt}'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{lgw1}')]) - - self.cmd('network local-gateway create --resource-group {rg} --name {lgw2} --gateway-ip-address 10.1.1.2 --local-address-prefixes 10.0.2.0/24', - checks=self.check('localNetworkAddressSpace.addressPrefixes[0]', '10.0.2.0/24')) - - self.cmd('network local-gateway list --resource-group {rg}', - checks=self.check('length(@)', 2)) - - self.cmd('network local-gateway delete --resource-group {rg} --name {lgw1}') - self.cmd('network local-gateway list --resource-group {rg}', - checks=self.check('length(@)', 1)) - - -class NetworkNicScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_nic_scenario', location='eastus2') - def test_network_nic(self, resource_group): - - self.kwargs.update({ - 'nic': 'cli-test-nic', - 'rt': 'Microsoft.Network/networkInterfaces', - 'subnet': 'mysubnet', - 'vnet': 'myvnet', - 'nsg1': 'mynsg', - 'nsg2': 'myothernsg', - 'lb': 'mylb', - 'pri_ip': '10.0.0.15', - 'pub_ip': 'publicip1' - }) - - self.kwargs['subnet_id'] = self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}').get_output_in_json()['newVNet']['subnets'][0]['id'] - self.cmd('network nsg create -g {rg} -n {nsg1}') - self.kwargs['nsg_id'] = self.cmd('network nsg show -g {rg} -n {nsg1}').get_output_in_json()['id'] - - # test network nsg update - self.cmd('network nsg update -g {rg} -n {nsg1} --set tags.CostCenter=MyBusinessGroup') - self.cmd('network nsg show -g {rg} -n {nsg1}', checks=[ - self.check('tags.CostCenter', 'MyBusinessGroup') - ]) - self.cmd('network nsg create -g {rg} -n {nsg2}') - self.cmd('network public-ip create -g {rg} -n {pub_ip}') - self.kwargs['pub_ip_id'] = self.cmd('network public-ip show -g {rg} -n {pub_ip}').get_output_in_json()['id'] - self.cmd('network lb create -g {rg} -n {lb}') - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule1 --protocol tcp --frontend-port 100 --backend-port 100 --frontend-ip-name LoadBalancerFrontEnd') - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule2 --protocol tcp --frontend-port 200 --backend-port 200 --frontend-ip-name LoadBalancerFrontEnd') - self.kwargs['rule_ids'] = ' '.join(self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb} --query "[].id"').get_output_in_json()) - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') - self.kwargs['address_pool_ids'] = ' '.join(self.cmd('network lb address-pool list -g {rg} --lb-name {lb} --query "[].id"').get_output_in_json()) - - # create with minimum parameters - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet}', checks=[ - self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), - self.check('NewNIC.provisioningState', 'Succeeded') - ]) - # exercise optional parameters - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet_id} --ip-forwarding --private-ip-address {pri_ip} --public-ip-address {pub_ip} --internal-dns-name test --dns-servers 100.1.2.3 --lb-address-pools {address_pool_ids} --lb-inbound-nat-rules {rule_ids} --accelerated-networking --tags foo=doo', checks=[ - self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Static'), - self.check('NewNIC.ipConfigurations[0].privateIPAddress', '{pri_ip}'), - self.check('NewNIC.enableIPForwarding', True), - self.check('NewNIC.enableAcceleratedNetworking', True), - self.check('NewNIC.provisioningState', 'Succeeded'), - self.check('NewNIC.dnsSettings.internalDnsNameLabel', 'test'), - self.check('length(NewNIC.dnsSettings.dnsServers)', 1) - ]) - self.cmd('network lb list-nic -g {rg} -n {lb}', checks=[ - self.check('length(@)', 1) - ]) - # exercise creating with NSG - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet} --network-security-group {nsg1}', checks=[ - self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), - self.check('NewNIC.enableIPForwarding', False), - self.check("NewNIC.networkSecurityGroup.contains(id, '{nsg1}')", True), - self.check('NewNIC.provisioningState', 'Succeeded') - ]) - # exercise creating with NSG and Public IP - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet} --network-security-group {nsg_id} --public-ip-address {pub_ip_id}', checks=[ - self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), - self.check('NewNIC.enableIPForwarding', False), - self.check("NewNIC.networkSecurityGroup.contains(id, '{nsg1}')", True), - self.check('NewNIC.provisioningState', 'Succeeded') - ]) - self.cmd('network nic list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?contains(id, 'networkInterfaces')]) == length(@)", True) - ]) - self.cmd('network nic list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network nic show --resource-group {rg} --name {nic}', checks=[ - self.check('type(@)', 'object'), - self.check('type', '{rt}'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{nic}') - ]) - self.cmd('network nic update -g {rg} -n {nic} --internal-dns-name noodle --ip-forwarding true --accelerated-networking false --dns-servers "[]" --network-security-group {nsg2}', checks=[ - self.check('enableIPForwarding', True), - self.check('enableAcceleratedNetworking', False), - self.check('dnsSettings.internalDnsNameLabel', 'noodle'), - self.check('length(dnsSettings.dnsServers)', 0), - self.check("networkSecurityGroup.contains(id, '{nsg2}')", True) - ]) - # test generic update - self.cmd('network nic update -g {rg} -n {nic} --set dnsSettings.internalDnsNameLabel=doodle --set enableIPForwarding=false', checks=[ - self.check('enableIPForwarding', False), - self.check('dnsSettings.internalDnsNameLabel', 'doodle') - ]) - - self.cmd('network nic delete --resource-group {rg} --name {nic}') - self.cmd('network nic list -g {rg}', checks=self.is_empty()) - - @ResourceGroupPreparer(name_prefix='test_network_nic_auxiliary', location='eastus') - def test_network_nic_auxiliary(self, resource_group): - self.kwargs.update({ - 'vnet': self.create_random_name('vnet', 10), - 'subnet': self.create_random_name('subnet', 10), - 'nic': self.create_random_name('nic', 10), - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network nic create -g {rg} -n {nic} --vnet-name {vnet} --subnet {subnet} --auxiliary-mode MaxConnections --auxiliary-sku A1 --accelerated-networking true --tags fastpathenabled=true', checks=[ - self.check('NewNIC.auxiliaryMode', 'MaxConnections'), - self.check('NewNIC.auxiliarySku', 'A1'), - self.check('NewNIC.enableAcceleratedNetworking', True), - self.check('NewNIC.tags.fastpathenabled', 'true') - ]) - self.cmd('network nic update -g {rg} -n {nic} --auxiliary-mode AcceleratedConnections --auxiliary-sku A2', checks=[ - self.check('auxiliaryMode', 'AcceleratedConnections'), - self.check('auxiliarySku', 'A2'), - self.check('enableAcceleratedNetworking', True), - self.check('tags.fastpathenabled', 'true') - ]) - - -class NetworkNicAppGatewayScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_nic_app_gateway', location='eastus') - def test_network_nic_app_gateway(self, resource_group): - from azure.core.exceptions import HttpResponseError - import json - - self.kwargs.update({ - 'nic': 'nic1', - 'ag': 'ag1', - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'ip': 'ip1', - 'lb': 'lb1', - 'bap': 'bap1', - 'pool1': 'appGatewayBackendPool', - 'pool2': 'bepool2', - 'config1': 'ipconfig1', - 'config2': 'ipconfig2' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1}') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.1.0/24 --default-outbound false') - self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet1} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists --timeout 120') - self.kwargs['ipaddres'] = json.dumps( - { - "ip_address": "10.20.0.69" - } - ) - self.cmd("network application-gateway address-pool update -g {rg} --gateway-name {ag} -n {pool1} --add backendAddresses \'{ipaddres}\'", checks=[ - self.check('length(backendAddresses)', 1) - ]) - self.kwargs['ipaddres'] = json.dumps( - { - "ip_address": "10.20.0.70" - } - ) - self.cmd("network application-gateway address-pool update -g {rg} --gateway-name {ag} -n {pool1} --add backendAddresses \'{ipaddres}\'", checks=[ - self.check('length(backendAddresses)', 2) - ]) - self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool2} --no-wait') - self.cmd('network lb create -g {rg} -n {lb}') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap}') - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet2} --vnet-name {vnet} --gateway-name {ag} --app-gateway-address-pools {pool1}', - checks=self.check('length(NewNIC.ipConfigurations[0].applicationGatewayBackendAddressPools)', 1)) - with self.assertRaisesRegex(HttpResponseError, 'not supported for secondary IpConfigurations'): - self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n {config2} --subnet {subnet2} --vnet-name {vnet} --gateway-name {ag} --app-gateway-address-pools {pool2}') - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config1} --gateway-name {ag} --app-gateway-address-pools {pool1} {pool2}', - checks=self.check('length(applicationGatewayBackendAddressPools)', 2)) - self.cmd('az network nic ip-config address-pool add -g {rg} --nic-name {nic} --lb-name {lb} --address-pool {bap} --ip-config-name {config1}') - - -class NetworkNicSubresourceScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_nic_subresource') - def test_network_nic_subresources(self, resource_group): - - self.kwargs['nic'] = 'nic1' - - self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') - self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name vnet1') - self.cmd('network nic ip-config list -g {rg} --nic-name {nic}', - checks=self.check('length(@)', 1)) - self.cmd('network nic ip-config show -g {rg} --nic-name {nic} -n ipconfig1', checks=[ - self.check('name', 'ipconfig1'), - self.check('privateIPAllocationMethod', 'Dynamic') - ]) - self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n ipconfig2 --make-primary', - checks=self.check('primary', True)) - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n ipconfig1 --make-primary', - checks=self.check('primary', True)) - self.cmd('network nic ip-config delete -g {rg} --nic-name {nic} -n ipconfig2') - - # test various sets - self.kwargs.update({ - 'vnet': 'vnet2', - 'subnet': 'subnet2', - 'ip': 'publicip2', - 'lb': 'lb1', - 'config': 'ipconfig1' - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.kwargs['ip_id'] = self.cmd('network public-ip show -g {rg} -n {ip}').get_output_in_json()['id'] - self.cmd('network lb create -g {rg} -n {lb}') - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule1 --protocol tcp --frontend-port 100 --backend-port 100 --frontend-ip-name LoadBalancerFrontEnd') - self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule2 --protocol tcp --frontend-port 200 --backend-port 200 --frontend-ip-name LoadBalancerFrontEnd') - self.kwargs['rule1_id'] = self.cmd('network lb inbound-nat-rule show -g {rg} --lb-name {lb} -n rule1').get_output_in_json()['id'] - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') - self.kwargs['bap1_id'] = self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1').get_output_in_json()['id'] - - self.kwargs['private_ip'] = '10.0.0.15' - # test ability to set load balancer IDs - # includes the default backend pool - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --lb-name {lb} --lb-address-pools {bap1_id} bap2 --lb-inbound-nat-rules {rule1_id} rule2 --private-ip-address {private_ip}', checks=[ - self.check('length(loadBalancerBackendAddressPools)', 2), - self.check('length(loadBalancerInboundNatRules)', 2), - self.check('privateIPAddress', '{private_ip}'), - self.check('privateIPAllocationMethod', 'Static')]) - # test generic update - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --set privateIPAddress=10.0.0.50', - checks=self.check('privateIPAddress', '10.0.0.50')) - - # test ability to add and remove IDs one at a time with subcommands - self.cmd('network nic ip-config inbound-nat-rule remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --inbound-nat-rule rule1') - self.cmd('network nic ip-config inbound-nat-rule add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --inbound-nat-rule rule1', - checks=self.check('length(loadBalancerInboundNatRules)', 2)) - - self.cmd('network nic ip-config address-pool remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool bap1') - self.cmd('network nic ip-config address-pool add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool bap1', - checks=self.check('length(loadBalancerBackendAddressPools)', 2)) - - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --private-ip-address "" --public-ip-address {ip_id}', checks=[ - self.check('privateIPAllocationMethod', 'Dynamic'), - self.check("publicIPAddress.contains(id, '{ip_id}')", True) - ]) - - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --subnet {subnet} --vnet-name {vnet}', - checks=self.check("subnet.contains(id, '{subnet}')", True)) - - @ResourceGroupPreparer(name_prefix="cli_test_multiple_ipconfigs_update_with_asg_", location="westus") - def test_multiple_ipconfigs_update_with_asg(self): - self.kwargs.update({ - "nic_name": self.create_random_name("nic-", 8), - "vnet_name": self.create_random_name("vnet-", 12), - "subnet_name": self.create_random_name("subnet-", 12), - "asg_name": self.create_random_name("asg-", 8), - }) - - self.cmd("network vnet create -n {vnet_name} -g {rg} --subnet-name {subnet_name}") - self.cmd("network nic create -n {nic_name} -g {rg} --vnet-name {vnet_name} --subnet {subnet_name}") - self.cmd("network nic ip-config create -n ipconfig2 -g {rg} --nic-name {nic_name}") - self.kwargs["asg_id"] = self.cmd("network asg create -n {asg_name} -g {rg}").get_output_in_json()["id"] - - self.cmd("network nic ip-config update -n ipconfig1 -g {rg} --nic-name {nic_name} --asgs {asg_name}") - self.cmd( - "network nic show -n {nic_name} -g {rg}", - checks=[ - self.check("ipConfigurations | length(@)", 2), - self.check("ipConfigurations[0].name", "ipconfig1"), - self.check("ipConfigurations[1].name", "ipconfig2"), - self.check("ipConfigurations[0].applicationSecurityGroups[0].id", "{asg_id}"), - self.check("ipConfigurations[1].applicationSecurityGroups[0].id", "{asg_id}"), - ] - ) - - @ResourceGroupPreparer(name_prefix="cli_test_multiple_ipconfigs_update_with_shorthand_", location="westus") - def test_multiple_ipconfigs_remove_by_shorthand(self): - self.kwargs.update({ - "nic": self.create_random_name("nic-", 8), - "vnet": self.create_random_name("vnet-", 12), - "subnet": self.create_random_name("subnet-", 12), - }) - - self.cmd("network vnet create -n {vnet} -g {rg} --subnet-name {subnet}") - self.cmd("network nic create -n {nic} -g {rg} --vnet-name {vnet} --subnet {subnet}") - - # `ipconfg1` implicitly created - self.cmd("network nic ip-config create -n ipconfig2 -g {rg} --nic-name {nic}") - self.cmd("network nic ip-config create -n ipconfig3 -g {rg} --nic-name {nic}") - self.cmd("network nic ip-config create -n ipconfig4 -g {rg} --nic-name {nic}") - self.cmd("network nic ip-config create -n ipconfig5 -g {rg} --nic-name {nic}") - - self.cmd( - "network nic update -n {nic} -g {rg} --ip-configurations [1]=null [2]=null [4]=null", - checks=[ - self.check("ipConfigurations | length(@)", 2), - self.check("ipConfigurations[0].name", "ipconfig1"), - self.check("ipConfigurations[1].name", "ipconfig4"), - ] - ) - - @ResourceGroupPreparer(name_prefix='cli_test_nic_lb_address_pools', location='eastus2') - def test_network_nic_lb_address_pools(self, resource_group): - - self.kwargs.update({ - 'nic': 'nic1', - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'config': 'ipconfig1', - 'lb': 'lb1', - 'pool': 'pool1' - }) - - self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') - self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name vnet1') - - self.cmd('network lb create -g {rg} -n {lb}') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {pool}') - self.kwargs['lb_pool_id'] = self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n {pool}').get_output_in_json()['id'] - - self.cmd('network nic ip-config address-pool add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool {pool}', - checks=self.check('length(loadBalancerBackendAddressPools)', 1)) - self.cmd('network nic ip-config address-pool remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool {pool}') - self.cmd('network nic ip-config address-pool add -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {lb_pool_id}', - checks=self.check('length(loadBalancerBackendAddressPools)', 1)) - self.cmd('network nic ip-config address-pool remove -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {lb_pool_id}') - - @ResourceGroupPreparer(name_prefix='cli_test_nic_ag_address_pools') - def test_network_nic_ag_address_pools(self, resource_group): - - self.kwargs.update({ - 'nic': 'nic1', - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'config': 'ipconfig1', - 'ag': 'ag1', - 'pool': 'pool1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1}') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.1.0/24 --default-outbound false') - self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet1} --priority 1001 --no-wait') - self.cmd('network application-gateway wait -g {rg} -n {ag} --exists --timeout 120') - self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') - self.kwargs['ag_pool_id'] = self.cmd('network application-gateway address-pool show -g {rg} --gateway-name {ag} -n {pool}').get_output_in_json()['id'] - - self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet2} --vnet-name {vnet}') - - self.cmd('network nic ip-config address-pool add -g {rg} --gateway-name {ag} --nic-name {nic} --ip-config-name {config} --address-pool {pool}', - checks=self.check('length(applicationGatewayBackendAddressPools)', 1)) - self.cmd('network nic ip-config address-pool remove -g {rg} --gateway-name {ag} --nic-name {nic} --ip-config-name {config} --address-pool {pool}') - self.cmd('network nic ip-config address-pool add -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {ag_pool_id}', - checks=self.check('length(applicationGatewayBackendAddressPools)', 1)) - self.cmd('network nic ip-config address-pool remove -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {ag_pool_id}') - - @ResourceGroupPreparer(name_prefix='cli_test_nic_ip_config_private_ip_address_prefix_length') - def test_network_nic_nic_ip_config_private_ip_address_prefix_length(self, resource_group): - self.kwargs.update({ - 'nic': self.create_random_name('nic', 10), - 'vnet': self.create_random_name('vnet', 10), - 'subnet': self.create_random_name('subnet', 10), - 'config1': self.create_random_name('config', 10), - 'config2': self.create_random_name('config', 10) - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet} --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') - self.cmd('network nic create -g {rg} -n {nic} --vnet-name {vnet} --subnet {subnet} --accelerated-networking true ') - self.cmd('network nic ip-config create -g {rg} -n {config1} --nic-name {nic} --private-ip-address-version IPv4 --private-ip-address-prefix-length 28 --make-primary false', checks=[ - self.check('privateIPAddressPrefixLength', 28) - ]) - - self.cmd('network nic ip-config create -g {rg} -n {config2} --nic-name {nic} --private-ip-address-version IPv4 ', checks=[ - self.check('privateIPAddressPrefixLength', None) - ]) - self.cmd('network nic ip-config update -g {rg} -n {config2} --nic-name {nic} --private-ip-address-prefix-length 28', checks=[ - self.check('privateIPAddressPrefixLength', 28) - ]) - - -class NetworkNicConvenienceCommandsScenarioTest(ScenarioTest): - - @AllowLargeResponse(size_kb=99999) - @ResourceGroupPreparer(name_prefix='cli_nic_convenience_test') - def test_network_nic_convenience_commands(self, resource_group): - self.kwargs.update({ - 'vm': 'conveniencevm1', - 'subnet': 'subnet1', - 'vnet': 'vnet1' - }) - - self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --admin-username myusername --admin-password aBcD1234!@#$ --authentication-type password --subnet {subnet} --vnet-name {vnet} --nsg-rule None') - - # Disable default outbound access - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') - - self.kwargs['nic_id'] = self.cmd('vm show -g {rg} -n {vm} --query "networkProfile.networkInterfaces[0].id"').get_output_in_json() - self.cmd('network nic list-effective-nsg --ids {nic_id}', - checks=self.greater_than('length(@)', 0)) - self.cmd('network nic show-effective-route-table --ids {nic_id}', - checks=self.greater_than('length(@)', 0)) - self.cmd('network nic show-effective-route-table --ids {nic_id} -o table') - - -class NetworkExtendedNSGScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_extended_nsg') - def test_network_extended_nsg(self, resource_group): - - self.kwargs.update({ - 'nsg': 'nsg1', - 'rule': 'rule1' - }) - self.cmd('network nsg create --name {nsg} -g {rg}') - self.cmd('network nsg rule create --access allow --destination-address-prefixes 10.0.0.0/24 11.0.0.0/24 --direction inbound --nsg-name {nsg} -g {rg} --source-address-prefixes * -n {rule} --source-port-ranges 700-900 1000-1100 --priority 1000', checks=[ - self.check('length(destinationAddressPrefixes)', 2), - self.check('destinationAddressPrefix', None), - self.check('length(sourceAddressPrefixes)', 0), - self.check('sourceAddressPrefix', '*'), - self.check('length(sourcePortRanges)', 2), - self.check('sourcePortRange', None), - self.check('length(destinationPortRanges)', 0), - self.check('destinationPortRange', '80') - ]) - self.cmd('network nsg rule update --destination-address-prefixes Internet --nsg-name {nsg} -g {rg} --source-address-prefixes 10.0.0.0/24 11.0.0.0/24 -n {rule} --source-port-ranges * --destination-port-ranges 500-1000 2000 3000', checks=[ - self.check('length(destinationAddressPrefixes)', 0), - self.check('destinationAddressPrefix', 'Internet'), - self.check('length(sourceAddressPrefixes)', 2), - self.check('sourceAddressPrefix', None), - self.check('length(sourcePortRanges)', 0), - self.check('sourcePortRange', '*'), - self.check('length(destinationPortRanges)', 3), - self.check('destinationPortRange', None) - ]) - - -class NetworkSecurityGroupScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_nsg') - def test_network_nsg(self, resource_group): - - self.kwargs.update({ - 'nsg': 'test-nsg1', - 'rule': 'web', - 'rt': 'Microsoft.Network/networkSecurityGroups' - }) - - self.cmd('network nsg create --name {nsg} -g {rg} --tags foo=doo') - self.cmd('network nsg rule create --access allow --destination-address-prefixes 1234 --direction inbound --nsg-name {nsg} --protocol * -g {rg} --source-address-prefixes 789 -n {rule} --source-port-ranges * --destination-port-ranges 4444 --priority 1000') - - self.cmd('network nsg list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True) - ]) - self.cmd('network nsg list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network nsg show --resource-group {rg} --name {nsg}', checks=[ - self.check('type(@)', 'object'), - self.check('type', '{rt}'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{nsg}') - ]) - # Test for the manually added nsg rule - self.cmd('network nsg rule list --resource-group {rg} --nsg-name {nsg}', checks=[ - self.check('type(@)', 'array'), - self.check('length(@)', 1), - self.check("length([?resourceGroup == '{rg}']) == length(@)", True) - ]) - self.cmd('network nsg rule list --resource-group {rg} --nsg-name {nsg} -o table') - self.cmd('network nsg rule show --resource-group {rg} --nsg-name {nsg} --name {rule}', checks=[ - self.check('type(@)', 'object'), - self.check('resourceGroup', '{rg}'), - self.check('name', '{rule}') - ]) - - self.kwargs.update({ - 'access': 'DENY', - 'prefix': '111', - 'dir': 'Outbound', - 'protocol': 'Tcp', - 'ports': '1234-1235', - 'desc': 'greatrule', - 'priority': 888 - }) - self.cmd('network nsg rule update -g {rg} --nsg-name {nsg} -n {rule} --direction {dir} --access {access} --destination-address-prefixes {prefix} --protocol {protocol} --source-address-prefixes {prefix} --source-port-ranges {ports} --destination-port-ranges {ports} --priority {priority} --description {desc}', checks=[ - self.check('access', 'Deny'), - self.check('direction', '{dir}'), - self.check('destinationAddressPrefix', '{prefix}'), - self.check('protocol', '{protocol}'), - self.check('sourceAddressPrefix', '{prefix}'), - self.check('sourcePortRange', '{ports}'), - self.check('priority', '{priority}'), - self.check('description', '{desc}') - ]) - - # test generic update - self.cmd('network nsg rule update -g {rg} --nsg-name {nsg} -n {rule} --set description="cool"', - checks=self.check('description', 'cool')) - - self.kwargs.update({ - 'nsg2': 'test-nsg2', - 'asg': 'test-asg1', - 'asg2': 'test-asg2', - 'rule2': 'test-rule2', - 'prefix': '1234', - }) - # test --destination-asgs in nsg rule - self.cmd('network nsg create --name {nsg2} -g {rg}') - self.cmd('network asg create --name {asg} -g {rg}') - self.cmd('network asg create --name {asg2} -g {rg}') - self.cmd('network nsg rule create -g {rg} --nsg-name {nsg2} -n {rule2} --priority 500 --source-address-prefixes Internet --destination-port-ranges 80 8080 --destination-asgs {asg} --access Allow --protocol Tcp', - checks=[self.check('name', '{rule2}'), - self.check('ends_with(@.destinationApplicationSecurityGroups[0].id, `/{asg}`)', True)]) - self.cmd('network nsg rule update -g {rg} --nsg-name {nsg2} -n {rule2} --destination-asgs {asg2}', - checks=[self.check('name', '{rule2}'), - self.check('ends_with(@.destinationApplicationSecurityGroups[0].id, `/{asg2}`)', True)]) - self.cmd('network nsg rule update -g {rg} --nsg-name {nsg2} -n {rule2} --destination-asgs "" --destination-address-prefix {prefix}', - checks=[self.check('name', '{rule2}'), - self.check('destinationApplicationSecurityGroups', None)]) - - self.cmd('network nsg rule delete --resource-group {rg} --nsg-name {nsg} --name {rule}') - self.cmd('network nsg rule delete --resource-group {rg} --nsg-name {nsg2} --name {rule2}') - # Delete the network security group - self.cmd('network nsg delete --resource-group {rg} --name {nsg}') - self.cmd('network nsg delete --resource-group {rg} --name {nsg2}') - # Expecting no results as we just deleted the only security group in the resource group - self.cmd('network nsg list --resource-group {rg}', checks=self.is_empty()) - - -class NetworkRouteTableOperationScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_route_table') - def test_network_route_table_operation(self, resource_group): - - self.kwargs.update({ - 'table': 'cli-test-route-table', - 'route': 'my-route', - 'rt': 'Microsoft.Network/routeTables' - }) - - self.cmd('network route-table create -n {table} -g {rg} --tags foo=doo', - checks=self.check('tags.foo', 'doo')) - self.cmd('network route-table update -n {table} -g {rg} --tags foo=boo --disable-bgp-route-propagation', checks=[ - self.check('tags.foo', 'boo') - ]) - self.cmd('network route-table route create --address-prefix 10.0.5.0/24 -n {route} -g {rg} --next-hop-type None --route-table-name {table}') - - self.cmd('network route-table list', - checks=self.check('type(@)', 'array')) - self.cmd('network route-table list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check('length(@)', 1), - self.check('[0].name', '{table}'), - self.check('[0].type', '{rt}') - ]) - self.cmd('network route-table show --resource-group {rg} --name {table}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{table}'), - self.check('type', '{rt}') - ]) - self.cmd('network route-table route list --resource-group {rg} --route-table-name {table}', - checks=self.check('type(@)', 'array')) - self.cmd('network route-table route show --resource-group {rg} --route-table-name {table} --name {route}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{route}'), - ]) - # test route-table route update - self.cmd('network route-table route update -g {rg} -n {route} --route-table-name {table} --next-hop-type VirtualNetworkGateway' , checks=[ - self.check('nextHopType', 'VirtualNetworkGateway') - ]) - - self.cmd('network route-table route delete --resource-group {rg} --route-table-name {table} --name {route}') - self.cmd('network route-table route list --resource-group {rg} --route-table-name {table}', checks=self.is_empty()) - self.cmd('network route-table delete --resource-group {rg} --name {table}') - self.cmd('network route-table list --resource-group {rg}', checks=self.is_empty()) - - -class NetworkVNetScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_vnet_test') - def test_network_vnet(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'rt': 'Microsoft.Network/virtualNetworks' - }) - - self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ - self.check('newVNet.provisioningState', 'Succeeded'), - self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16'), - self.check('newVNet.subnets[0].privateEndpointNetworkPolicies', 'Disabled') - ]) - self.cmd('network vnet check-ip-address -g {rg} -n {vnet} --ip-address 10.0.0.50', - checks=self.check('available', True)) - - self.cmd('network vnet check-ip-address -g {rg} -n {vnet} --ip-address 10.0.0.0', - checks=self.check('available', False)) - - self.cmd('network vnet list', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True) - ]) - self.cmd('network vnet list --resource-group {rg}', checks=[ - self.check('type(@)', 'array'), - self.check("length([?type == '{rt}']) == length(@)", True), - ]) - self.cmd("network vnet list -o table") - self.cmd('network vnet show --resource-group {rg} --name {vnet}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{vnet}'), - self.check('type', '{rt}') - ]) - self.kwargs['prefixes'] = '20.0.0.0/16 10.0.0.0/16' - self.cmd('network vnet update --resource-group {rg} --name {vnet} --address-prefixes {prefixes} --dns-servers 1.2.3.4', checks=[ - self.check('length(addressSpace.addressPrefixes)', 2), - self.check('dhcpOptions.dnsServers[0]', '1.2.3.4') - ]) - self.cmd('network vnet update -g {rg} -n {vnet} --dns-servers null', checks=[ - self.check('length(addressSpace.addressPrefixes)', 2), - self.check('dhcpOptions.dnsServers', []) - ]) - - # test generic update - self.cmd('network vnet update --resource-group {rg} --name {vnet} --set addressSpace.addressPrefixes[0]="20.0.0.0/24"', - checks=self.check('addressSpace.addressPrefixes[0]', '20.0.0.0/24')) - - self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 20.0.0.0/24 --default-outbound false') - self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', - checks=self.check('type(@)', 'array')) - self.cmd('network vnet subnet show --resource-group {rg} --vnet-name {vnet} --name {subnet}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{subnet}'), - ]) - - self.cmd('network vnet subnet delete --resource-group {rg} --vnet-name {vnet} --name {subnet}') - self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', - checks=self.check("length([?name == '{subnet}'])", 0)) - - self.cmd('network vnet list --resource-group {rg}', - checks=self.check("length([?name == '{vnet}'])", 1)) - self.cmd('network vnet delete --resource-group {rg} --name {vnet}') - self.cmd('network vnet list --resource-group {rg}', checks=self.is_empty()) - - @live_only() - @ResourceGroupPreparer(name_prefix='cli_vnet_with_ipam_pool_test', location='westus') - @AllowLargeResponse(size_kb=99999) - def test_network_vnet_subnet_with_ipam_pool(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'rg': resource_group, - 'location': resource_group_location, - 'manager': 'manager1', - 'pool': 'pool1', - 'vnet': 'vnet1', - 'subnet': 'subnet1' - }) - self.cmd('extension add -n virtual-network-manager') - self.kwargs['sub_id'] = self.get_subscription_id() - self.cmd('network manager create -g {rg} -n {manager} -l {location} --scope-accesses "SecurityAdmin" "Connectivity" --network-manager-scopes subscriptions="/subscriptions/{sub_id}"') - self.kwargs['pool_id'] = self.cmd('network manager ipam-pool create --manager-name {manager} -g {rg} --name {pool} --address-prefix 10.1.0.0/16').get_output_in_json()['id'] - - self.cmd('network vnet create -g {rg} -n {vnet} --ipam-allocations [0].id={pool_id} [0].number-of-ip-addresses=10', checks=[ - self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].id', '{pool_id}'), - self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].numberOfIpAddresses', 10), - self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].resourceGroup', '{rg}') - ]) - - self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet} --ipam-allocations [0].id={pool_id} [0].number-of-ip-addresses=5', checks=[ - self.check('ipamPoolPrefixAllocations[0].id', '{pool_id}'), - self.check('ipamPoolPrefixAllocations[0].numberOfIpAddresses', 5), - self.check('ipamPoolPrefixAllocations[0].resourceGroup', '{rg}') - ]) - - @ResourceGroupPreparer(name_prefix='cli_vnet_with_subnet_nsg_test') - def test_network_vnet_with_subnet_nsg(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'nsg': 'nsg', - 'rt': 'Microsoft.Network/virtualNetworks', - 'prefixes': '20.0.0.0/16 10.0.0.0/16' - }) - result = self.cmd('network nsg create --resource-group {rg} --name {nsg}').get_output_in_json() - self.kwargs['nsg_id'] = result['NewNSG']['id'] - self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefixes {prefixes} ' - '--subnet-name {subnet} --subnet-prefixes 20.0.0.0/24 --nsg {nsg}') - self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', - checks=self.check('type(@)', 'array')) - self.cmd('network vnet subnet show --resource-group {rg} --vnet-name {vnet} --name {subnet}', checks=[ - self.check('type(@)', 'object'), - self.check('name', '{subnet}'), - self.check('networkSecurityGroup.id', '{nsg_id}') - ]) - - self.cmd('network vnet subnet delete --resource-group {rg} --vnet-name {vnet} --name {subnet}') - - @ResourceGroupPreparer(name_prefix='cli_vnet_test') - def test_network_vnet_list_available_ips(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'rt': 'Microsoft.Network/virtualNetworks', - 'rg': resource_group - }) - - self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ - self.check('newVNet.provisioningState', 'Succeeded'), - self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16') - ]) - self.kwargs['prefixes'] = '20.0.0.0/16 10.0.0.0/16' - self.cmd('network vnet update --resource-group {rg} --name {vnet} --address-prefixes {prefixes} --dns-servers 1.2.3.4', checks=[ - self.check('length(addressSpace.addressPrefixes)', 2), - self.check('dhcpOptions.dnsServers[0]', '1.2.3.4') - ]) - - self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 20.0.0.0/24 --default-outbound false') - - self.cmd('network vnet list-available-ips -g {rg} --name {vnet}', checks=[ - self.check('length(@)', 5) - ]) - - @ResourceGroupPreparer(name_prefix='cli_vnet_with_bgp_community') - def test_network_vnet_with_bgp_community(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - }) - - self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default --bgp-community "12076:20000"', checks=[ - self.check('newVNet.bgpCommunities.regionalCommunity', '12076:50006'), - self.check('newVNet.bgpCommunities.virtualNetworkCommunity', '12076:20000') - ]) - - self.cmd('network vnet update --resource-group {rg} --name {vnet} --bgp-community "12076:20001"', checks=[ - self.check('bgpCommunities.regionalCommunity', '12076:50006'), - self.check('bgpCommunities.virtualNetworkCommunity', '12076:20001') - ]) - - @ResourceGroupPreparer(name_prefix='cli_vnet_with_encryption') - def test_network_vnet_with_encryption(self, resource_group): - self.kwargs.update({ - 'allowUnencrypted': 'AllowUnencrypted', - 'dropUnencrypted': 'DropUnencrypted', - }) - # only create with --enable-encryption and --encryption-enforcement-policy - self.cmd('network vnet create --address-prefixes 10.0.0.0/16 -n MyVnet1 -g {rg} --subnet-name Mysubnet --subnet-prefixes 10.0.0.0/24 --enable-encryption true --encryption-enforcement-policy allowUnencrypted') - self.cmd('network vnet create --address-prefixes 10.1.0.0/16 -n MyVnet2 -g {rg} --subnet-name MySubnet --subnet-prefixes 10.1.0.0/24 --enable-encryption true --encryption-enforcement-policy dropUnencrypted') - self.cmd('network vnet show -n MyVnet1 -g {rg}', checks=[ - self.check('encryption.enabled', True), - self.check('encryption.enforcement', '{allowUnencrypted}'), - ]) - self.cmd('network vnet show -n MyVnet2 -g {rg}', checks=[ - self.check('encryption.enabled', True), - self.check('encryption.enforcement', '{dropUnencrypted}'), - ]) - # only create with --enable-encryption - self.cmd('network vnet create --address-prefixes 10.2.0.0/16 --name MyVnet3 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.2.0.0/24 --enable-encryption false') - self.cmd('network vnet create --address-prefixes 10.3.0.0/16 --name MyVnet4 --resource-group {rg} --subnet-name MySubnet --subnet-prefixes 10.3.0.0/24 --enable-encryption true', expect_failure=True) - self.cmd('network vnet update --name MyVnet3 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy allowUnencrypted', checks=[ - self.check('encryption.enabled', True), - self.check('encryption.enforcement', '{allowUnencrypted}'), - ]) - self.cmd('network vnet update --name MyVnet3 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy dropUnencrypted', checks=[ - self.check('encryption.enabled', True), - self.check('encryption.enforcement', '{dropUnencrypted}'), - ]) - # create without encryption - self.cmd('network vnet create --address-prefixes 10.5.0.0/16 --name MyVnet6 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.5.0.0/24') - self.cmd('network vnet create --address-prefixes 10.6.0.0/16 --name MyVnet7 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.6.0.0/24') - self.cmd('network vnet create --address-prefixes 10.7.0.0/16 --name MyVnet8 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.7.0.0/24') - # update - self.cmd('network vnet update --name MyVnet6 --resource-group {rg} --enable-encryption true', expect_failure=True) - self.cmd('network vnet update --name MyVnet7 --resource-group {rg} --encryption-enforcement-policy dropUnencrypted', expect_failure=True) - self.cmd('network vnet update --name MyVnet8 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy dropUnencrypted', checks=[ - self.check('encryption.enabled', True), - self.check('encryption.enforcement', '{dropUnencrypted}'), - ]) - # vnet peering - self.cmd('network vnet peering create --name MyVnet1ToMyVnet2 --remote-vnet MyVnet2 --resource-group {rg} --vnet-name MyVnet1') - self.cmd('network vnet peering show --name MyVnet1ToMyVnet2 --vnet-name MyVnet1 -g {rg}', checks=[ - self.check('remoteVirtualNetworkEncryption.enabled', True), - self.check('remoteVirtualNetworkEncryption.enforcement', '{dropUnencrypted}'), - ]) - - @ResourceGroupPreparer(name_prefix='cli_vnet_subnet_test') - def test_network_vnet_subnet_list_available_ips(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'rt': 'Microsoft.Network/virtualNetworks', - 'rg': resource_group - }) - - self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ - self.check('newVNet.provisioningState', 'Succeeded'), - self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16') - ]) - - self.cmd( - 'network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 10.0.1.0/24 --default-outbound false') - - self.cmd('network vnet subnet list-available-ips -g {rg} --vnet-name {vnet} --name {subnet}', checks=[ - self.check('length(@)', 5) - ]) - -class NetworkVNetCachingScenarioTest(ScenarioTest): - @live_only() - @ResourceGroupPreparer(name_prefix='cli_test_vnet_ids_query') - def test_network_vnet_ids_query(self, resource_group): - import json - - # This test ensures that --query works with --ids - self.kwargs.update({ - 'vnet1': 'vnet1', - 'vnet2': 'vnet2' - }) - self.kwargs['id1'] = self.cmd('network vnet create -g {rg} -n {vnet1}').get_output_in_json()['newVNet']['id'] - self.kwargs['id2'] = self.cmd('network vnet create -g {rg} -n {vnet2}').get_output_in_json()['newVNet']['id'] - self.cmd('network vnet show --ids {id1} {id2} --query "[].name"', checks=[ - self.check('length(@)', 2), - self.check("contains(@, '{vnet1}')", True), - self.check("contains(@, '{vnet2}')", True), - ]) - - # This test ensures you can pipe a list of IDs to --ids - self.kwargs['ids'] = self.cmd('network vnet list -g {rg} --query "[].id" -otsv').output - self.cmd('network vnet show --ids {ids}', - checks=self.check('length(@)', 2)) - - # This test ensures you can pipe JSON output to --ids Windows-style - # ensures a single JSON string has its ids parsed out - self.kwargs['json'] = json.dumps(self.cmd('network vnet list -g {rg}').get_output_in_json()) - self.cmd('network vnet show --ids \'{json}\'', - checks=self.check('length(@)', 2)) - - # This test ensures you can pipe JSON output to --ids bash-style - # ensures that a JSON string where each line is interpretted individually - # is reassembled and treated as a single json string - json_obj = self.cmd('network vnet list -g {rg}').get_output_in_json() - for item in json_obj: - del item['etag'] - split_json = json.dumps(json_obj, indent=4).split() - split_string = ' '.join(split_json).replace('{', '{{').replace('}', '}}').replace('"', '\\"') - self.cmd('network vnet show --ids {}'.format(split_string), - checks=self.check('length(@)', 2)) - - -class NetworkVNetPeeringScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_vnet_flowtimeout', location='centraluseuap') - def test_network_vnet_flowtimeout(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'time': 10, - 'time1': 20, - }) - - self.cmd('network vnet create -g {rg} -n vnet --flowtimeout {time}', - checks=self.check('newVNet.flowTimeoutInMinutes', '{time}')) - self.cmd('network vnet update -g {rg} -n vnet --flowtimeout {time1}', - checks=self.check('flowTimeoutInMinutes', '{time1}')) - - @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering') - def test_network_vnet_peering(self, resource_group): - - # create two vnets with non-overlapping prefixes - self.cmd('network vnet create -g {rg} -n vnet1') - self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name GatewaySubnet --address-prefix 11.0.0.0/16 --subnet-prefix 11.0.0.0/24') - # create supporting resources for gateway - self.cmd('network public-ip create -g {rg} -n ip1') - ip_id = self.cmd('network public-ip show -g {rg} -n ip1 --query id').get_output_in_json() - vnet_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() - - self.kwargs.update({ - 'ip_id': ip_id, - 'vnet_id': vnet_id - }) - # create the gateway on vnet2 - self.cmd('network vnet-gateway create -g {rg} -n gateway1 --public-ip-address {ip_id} --vnet {vnet_id} --tags foo=doo --sku VpnGw1') - - vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() - vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() - - self.kwargs.update({ - 'vnet1_id': vnet1_id, - 'vnet2_id': vnet2_id - }) - # set up gateway sharing from vnet1 to vnet2. test that remote-vnet indeed accepts name or id. - self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --allow-gateway-transit', checks=[ - self.check('allowGatewayTransit', True), - self.check('remoteVirtualNetwork.id', '{vnet1_id}'), - self.check('peeringState', 'Initiated') - ]) - self.cmd('network vnet peering create -g {rg} -n peering1 --vnet-name vnet1 --remote-vnet vnet2 --use-remote-gateways --allow-forwarded-traffic', checks=[ - self.check('useRemoteGateways', True), - self.check('remoteVirtualNetwork.id', '{vnet2_id}'), - self.check('peeringState', 'Connected'), - self.check('allowVirtualNetworkAccess', False) - ]) - self.cmd('network vnet peering show -g {rg} -n peering1 --vnet-name vnet1', - checks=self.check('name', 'peering1')) - self.cmd('network vnet peering list -g {rg} --vnet-name vnet2', checks=[ - self.check('[0].name', 'peering2'), - self.check('length(@)', 1) - ]) - self.cmd('network vnet peering update -g {rg} -n peering1 --vnet-name vnet1 --set useRemoteGateways=false', checks=[ - self.check('useRemoteGateways', False), - self.check('allowForwardedTraffic', True) - ]) - self.cmd('network vnet peering delete -g {rg} -n peering1 --vnet-name vnet1') - self.cmd('network vnet peering list -g {rg} --vnet-name vnet1', - checks=self.is_empty()) - # must delete the second peering and the gateway or the resource group delete will fail - self.cmd('network vnet peering delete -g {rg} -n peering2 --vnet-name vnet2') - self.cmd('network vnet-gateway delete -g {rg} -n gateway1') - - @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering') - def test_network_vnet_peering_sync(self, resource_group): - - # create two vnets with non-overlapping prefixes - self.cmd('network vnet create -g {rg} -n vnet1') - self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name GatewaySubnet --address-prefix 11.0.0.0/16 --subnet-prefix 11.0.0.0/24') - # create supporting resources for gateway - self.cmd('network public-ip create -g {rg} -n ip1') - ip_id = self.cmd('network public-ip show -g {rg} -n ip1 --query id').get_output_in_json() - vnet_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() - - self.kwargs.update({ - 'ip_id': ip_id, - 'vnet_id': vnet_id - }) - # create the gateway on vnet2 - self.cmd('network vnet-gateway create -g {rg} -n gateway1 --public-ip-address {ip_id} --vnet {vnet_id} --tags foo=doo --sku VpnGw1') - - vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() - vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() - - self.kwargs.update({ - 'vnet1_id': vnet1_id, - 'vnet2_id': vnet2_id - }) - # set up gateway sharing from vnet1 to vnet2. test that remote-vnet indeed accepts name or id. - self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --allow-gateway-transit', checks=[ - self.check('allowGatewayTransit', True), - self.check('remoteVirtualNetwork.id', '{vnet1_id}'), - self.check('peeringState', 'Initiated') - ]) - self.cmd('network vnet peering create -g {rg} -n peering1 --vnet-name vnet1 --remote-vnet vnet2 --use-remote-gateways --allow-forwarded-traffic', checks=[ - self.check('useRemoteGateways', True), - self.check('remoteVirtualNetwork.id', '{vnet2_id}'), - self.check('peeringState', 'Connected'), - self.check('allowVirtualNetworkAccess', False) - ]) - - self.cmd('network vnet peering sync -g {rg} -n peering1 --vnet-name vnet1') - - @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering_with_params') - def test_network_vnet_peering_with_params(self, resource_group): - - # create two vnets with non-overlapping prefixes - self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name Subnet1 --address-prefixes 10.0.0.0/27 10.0.1.0/27 --subnet-prefixes 10.0.0.0/27') - self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name Subnet2 --address-prefixes 20.0.0.0/27 --subnet-prefixes 20.0.0.0/27') - - vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() - vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() - - self.kwargs.update({ - 'vnet1_id': vnet1_id, - 'vnet2_id': vnet2_id - }) - self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --peer-complete-vnets false --local-subnet-names Subnet2 --remote-subnet-names Subnet1 --allow-vnet-access --allow-forwarded-traffic --allow-gateway-transit false --use-remote-gateways false --enable-only-ipv6 false', checks=[ - self.check('allowForwardedTraffic', True), - self.check('allowGatewayTransit', False), - self.check('allowVirtualNetworkAccess', True), - self.check('useRemoteGateways', False), - self.check('peerCompleteVnets', False), - self.check('enableOnlyIPv6Peering', False), - self.check('remoteVirtualNetwork.id', '{vnet1_id}'), - self.check('remoteSubnetNames[0]', 'Subnet1'), - self.check('localSubnetNames[0]', 'Subnet2'), - ]) - self.cmd( - "network vnet peering update -n peering2 -g {rg} --vnet-name vnet2 --remote-vnet {vnet1_id} " - "--allow-vnet-access false --allow-forwarded-traffic false --allow-gateway-transit true", - checks=[ - self.check("allowForwardedTraffic", False), - self.check("allowGatewayTransit", True), - self.check("allowVirtualNetworkAccess", False), - ] - ) - - -class NetworkVpnConnectionIpSecPolicy(ScenarioTest): - @live_only() - @ResourceGroupPreparer(name_prefix='test_vpn_connection_aux_', location='westus') - @ResourceGroupPreparer(name_prefix='test_vpn_connection_aux_', location='westus', - parameter_name='aux_resource_group', subscription=AUX_SUBSCRIPTION) - def test_vpn_connection_aux(self, resource_group, aux_resource_group, resource_group_location,): - self.kwargs.update({ - 'rg': resource_group, - 'rg2': aux_resource_group, - 'location': resource_group_location, - 'aux_sub': AUX_SUBSCRIPTION, - 'vnet1': 'vnet1', - 'vnet_prefix1': '10.11.0.0/16', - 'vnet_prefix2': '10.12.0.0/16', - 'fe_sub1': 'FrontEnd', - 'fe_sub_prefix1': '10.11.0.0/24', - 'be_sub1': 'BackEnd', - 'be_sub_prefix1': '10.12.0.0/24', - 'gw_sub1': 'GatewaySubnet', - 'gw_sub_prefix1': '10.12.255.0/27', - 'gw1ip': 'pip1', - 'gw1': 'gw1', - 'gw1_sku': 'VpnGw1', - 'lgw1': 'lgw1', - 'lgw1ip': '131.107.72.22', - 'lgw1_prefix1': '10.61.0.0/16', - 'lgw1_prefix2': '10.62.0.0/16', - 'conn1': 'conn1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2}') - self.cmd( - 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {fe_sub1} --address-prefix {fe_sub_prefix1} --default-outbound false') - self.cmd( - 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {be_sub1} --address-prefix {be_sub_prefix1} --default-outbound false') - self.cmd( - 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {gw_sub1} --address-prefix {gw_sub_prefix1} --default-outbound false') - self.cmd('network public-ip create -g {rg} -n {gw1ip}') - - self.cmd( - 'network vnet-gateway create -g {rg} -l {location} -n {gw1} --public-ip-address {gw1ip} --vnet {vnet1} --sku {gw1_sku}') - self.kwargs["local_gateway_id"] = self.cmd( - 'network local-gateway create -g {rg2} -l {location} -n {lgw1} --gateway-ip-address {lgw1ip} --local-address-prefixes {lgw1_prefix1} {lgw1_prefix2} --subscription {aux_sub}').get_output_in_json()["id"] - - self.cmd( - 'network vpn-connection create -g {rg} -l {location} -n {conn1} --vnet-gateway1 {gw1} --local-gateway2 {local_gateway_id} --shared-key AzureA1b2C3', - checks=[ - self.check("resource.localNetworkGateway2.id", "{local_gateway_id}"), - ] - ) - - @ResourceGroupPreparer(name_prefix='cli_test_vpn_connection_ipsec') - def test_network_vpn_connection_ipsec(self, resource_group): - - self.kwargs.update({ - 'vnet1': 'vnet1', - 'vnet_prefix1': '10.11.0.0/16', - 'vnet_prefix2': '10.12.0.0/16', - 'fe_sub1': 'FrontEnd', - 'fe_sub_prefix1': '10.11.0.0/24', - 'be_sub1': 'BackEnd', - 'be_sub_prefix1': '10.12.0.0/24', - 'gw_sub1': 'GatewaySubnet', - 'gw_sub_prefix1': '10.12.255.0/27', - 'gw1ip': 'pip1', - 'gw1': 'gw1', - 'gw1_sku': 'VpnGw1', - 'lgw1': 'lgw1', - 'lgw1ip': '131.107.72.22', - 'lgw1_prefix1': '10.61.0.0/16', - 'lgw1_prefix2': '10.62.0.0/16', - 'conn1': 'conn1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2}') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {fe_sub1} --address-prefix {fe_sub_prefix1} --default-outbound false') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {be_sub1} --address-prefix {be_sub_prefix1} --default-outbound false') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {gw_sub1} --address-prefix {gw_sub_prefix1} --default-outbound false') - self.cmd('network public-ip create -g {rg} -n {gw1ip}') - - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --public-ip-address {gw1ip} --vnet {vnet1} --sku {gw1_sku}') - self.cmd('network local-gateway create -g {rg} -n {lgw1} --gateway-ip-address {lgw1ip} --local-address-prefixes {lgw1_prefix1} {lgw1_prefix2}') - self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {gw1} --local-gateway2 {lgw1} --shared-key AzureA1b2C3') - self.cmd('network vpn-connection list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network vpn-connection list -g {rg} --vnet-gateway {gw1}', checks=[ - self.check('length(@)', 1) - ]) - - # test vpn connection show - self.cmd('network vpn-connection show -g {rg} -n {conn1}', checks=[ - self.check('name', 'conn1') - ]) - # test vpn connection show-device-config-script - self.cmd('network vpn-connection show-device-config-script -g {rg} -n {conn1} --vendor "Cisco" --device-family "Cisco-ISR(IOS)" --firmware-version "Cisco-ISR-15.x--IKEv2+BGP"') - self.cmd('network vpn-connection ipsec-policy add -g {rg} --connection-name {conn1} --ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 --ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 --sa-lifetime 7200 --sa-max-size 2048') - self.cmd('network vpn-connection ipsec-policy list -g {rg} --connection-name {conn1}', checks=self.check('length(@)', 1)) - self.cmd('network vpn-connection ipsec-policy clear -g {rg} --connection-name {conn1}') - self.cmd('network vpn-connection ipsec-policy list -g {rg} --connection-name {conn1}', checks=self.check('length(@)', 0)) - - -class NetworkVpnConnectionNatRule(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_vpn_connection_nat_rule') - def test_network_vpn_connection_nat_rule(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet', - 'lgw1': 'lgw1', - 'lgw1ip': '131.107.72.22', - 'lgw1_prefix1': '10.61.0.0/16', - 'lgw1_prefix2': '10.62.0.0/16', - 'conn1': 'conn1', - 'subnet': 'GatewaySubnet', - 'vg': 'vnet-gateway-name', - 'ip': 'ip-name', - 'sku': 'VpnGw2', - 'nat': 'nat-name', - 'nat1': 'nat-name1', - 'i_map': '10.4.0.0/24', - 'i_map1': '10.5.0.0/24', - 'e_map': '192.168.21.0/24', - 'e_map1': '192.168.22.0/24', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network public-ip create -g {rg} -n {ip}') - - vg = self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku} ' - '--nat-rule name={nat} mode=IngressSnat internal-mappings={i_map} external-mappings={e_map} ' - '--nat-rule name={nat1} mode=EgressSnat internal-mappings={i_map1} external-mappings={e_map1}', - checks=[self.check('length(vnetGateway.natRules)', 2)]).get_output_in_json() - - self.kwargs.update({'id': vg['vnetGateway']['natRules'][0]['id']}) - self.kwargs.update({'id1': vg['vnetGateway']['natRules'][1]['id']}) - - self.cmd('network local-gateway create -g {rg} -n {lgw1} --gateway-ip-address {lgw1ip} ' - '--local-address-prefixes {lgw1_prefix1} {lgw1_prefix2}') - self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {vg} --local-gateway2 {lgw1} ' - '--shared-key AzureA1b2C3 --ingress-nat-rule {id}', - checks=[self.check('length(resource.ingressNatRules)', 1)]) - - self.cmd('network vpn-connection delete -g {rg} -n {conn1}') - - self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {vg} --local-gateway2 {lgw1} ' - '--shared-key AzureA1b2C3 --egress-nat-rule {id1}', - checks=[self.check('length(resource.egressNatRules)', 1)]) - - -class VNetGatewayManagedIdentityScenarioTest(ScenarioTest): - @ResourceGroupPreparer(location='eastus', name_prefix='test_vnet_gateway_mi') - @AllowLargeResponse(size_kb=9999) - def test_vnet_gateway_managed_identity(self, resource_group): - subscription_id = self.get_subscription_id() - self.kwargs.update({ - 'rg': resource_group, - 'identity_name': 'myUamIdentity', - 'identity_name_2': 'myUamIdentity2', - 'vnet_name': 'myVNet', - 'pip_name': 'myGWpip', - 'gateway_name': 'myTestGW', - 'subscription': subscription_id, - 'location': 'eastus' - }) - - # create managed identity 1 - identity_result = self.cmd('identity create -g {rg} -n {identity_name}', checks=[ - self.check('name', '{identity_name}'), - self.check('location', '{location}'), - self.exists('clientId'), - self.exists('principalId'), - self.exists('id') - ]).get_output_in_json() - self.kwargs['identity_id'] = identity_result['id'] - - # create managed identity 2 (for update test) - identity_result_2 = self.cmd('identity create -g {rg} -n {identity_name_2}', checks=[ - self.check('name', '{identity_name_2}'), - self.check('location', '{location}'), - self.exists('clientId'), - self.exists('principalId'), - self.exists('id') - ]).get_output_in_json() - self.kwargs['identity_id_2'] = identity_result_2['id'] - - # create vnet with subnet - self.cmd('network vnet create -g {rg} -n {vnet_name} ' - '--address-prefix 10.0.0.0/16 ' - '--subnet-name GatewaySubnet ' - '--subnet-prefix 10.0.255.0/24', checks=[ - self.check('newVNet.name', '{vnet_name}'), - self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16'), - self.check('newVNet.subnets[0].name', 'GatewaySubnet'), - self.check('newVNet.subnets[0].addressPrefix', '10.0.255.0/24') - ]) - - # create public ip - self.cmd('network public-ip create -g {rg} -n {pip_name} ' - '--allocation-method Static ' - '--sku Standard ' - '--ip-tags FirstPartyUsage=/NonProd ' - '--zone 1 2 3', checks=[ - self.check('publicIp.name', '{pip_name}'), - self.check('publicIp.publicIPAllocationMethod', 'Static'), - self.check('publicIp.sku.name', 'Standard'), - self.check('length(publicIp.zones)', 3) - ]) - - # create vnet-gateway with user-assigned managed identity - self.cmd('network vnet-gateway create -g {rg} -n {gateway_name} ' - '--public-ip-address {pip_name} ' - '--vnet {vnet_name} ' - '--gateway-type Vpn ' - '--vpn-type RouteBased ' - '--sku VpnGw2AZ ' - '--mi-user-assigned {identity_id}', checks=[ - self.check('vnetGateway.name', '{gateway_name}'), - self.check('vnetGateway.gatewayType', 'Vpn'), - self.check('vnetGateway.vpnType', 'RouteBased'), - self.check('vnetGateway.sku.name', 'VpnGw2AZ'), - self.check('vnetGateway.sku.tier', 'VpnGw2AZ'), - self.check('vnetGateway.identity.type', 'userAssigned'), - self.exists('vnetGateway.identity.userAssignedIdentities') - ]) - - # verify identity configuration - self.cmd('network vnet-gateway show -g {rg} -n {gateway_name}', checks=[ - self.check('name', '{gateway_name}'), - self.check('identity.type', 'userAssigned'), - self.exists('identity.userAssignedIdentities') - ]) - - identity_show_result = self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ - self.check('type', 'userAssigned'), - self.exists('userAssignedIdentities') - ]).get_output_in_json() - - # Verify the first user-assigned identity details - assert self.kwargs['identity_id'] in identity_show_result['userAssignedIdentities'] - - # update vnet-gateway to use a different managed identity - # Note: VPN Gateway currently only allows one user-assigned identity at a time, - # so we need to remove the existing identity before assigning a new one - self.cmd('network vnet-gateway identity remove -g {rg} -n {gateway_name} --user-assigned', checks=[ - self.check('type', 'none') - ]) - - # Then assign the new identity - self.cmd('network vnet-gateway identity assign -g {rg} -n {gateway_name} ' - '--user-assigned {identity_id_2}', checks=[ - self.check('type', 'userAssigned'), - self.exists('userAssignedIdentities') - ]) - - # verify the identity was updated to the second identity - identity_show_result_updated = self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ - self.check('type', 'userAssigned'), - self.exists('userAssignedIdentities') - ]).get_output_in_json() - - # verify the second user-assigned identity is now configured - assert self.kwargs['identity_id_2'] in identity_show_result_updated['userAssignedIdentities'] - - # remove user-assigned identity - self.cmd('network vnet-gateway identity remove -g {rg} -n {gateway_name} --user-assigned', checks=[ - self.check('type', 'none') - ]) - - # double check identity is really deleted - self.cmd('network vnet-gateway show -g {rg} -n {gateway_name}', checks=[ - self.check('name', '{gateway_name}'), - self.check('identity.type', 'none'), - self.check('provisioningState', 'Succeeded') - ]) - - # verify identity show returns none type - self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ - self.check('type', 'none') - ]) - - # update to add identity back (testing update from none to userAssigned) - self.cmd('network vnet-gateway identity assign -g {rg} -n {gateway_name} ' - '--user-assigned {identity_id}', checks=[ - self.check('type', 'userAssigned'), - self.exists('userAssignedIdentities') - ]) - - self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ - self.check('type', 'userAssigned'), - self.exists('userAssignedIdentities') - ]) - - self.cmd('network vnet-gateway delete -g {rg} -n {gateway_name}') - - self.cmd('network vnet-gateway list -g {rg}', checks=[ - self.check('length(@)', 0) - ]) - - -class VpnConnectionAuthenticationScenarioTest(ScenarioTest): - - @staticmethod - def _get_now_utc(): - import datetime - try: - from datetime import timezone - return datetime.datetime.now(timezone.utc) - except ImportError: - return datetime.datetime.utcnow() - - @staticmethod - def _format_subject_dn(common_name: str): - return "CN={}, OU=IT, O=Test Organization, L=Redmond, S=Washington, C=US".format(common_name) - - @staticmethod - def generate_ca_chain(root_cert_path, intermediate_cert_path): - """ - Generate a valid certificate chain: - Root CA -> Intermediate CA - Return: (root_key, root_cert, inter_key, inter_cert) - """ - try: - from cryptography import x509 - from cryptography.x509.oid import NameOID - from cryptography.hazmat.primitives import hashes, serialization - from cryptography.hazmat.primitives.asymmetric import rsa - from cryptography.hazmat.backends import default_backend - import datetime - - now = VpnConnectionAuthenticationScenarioTest._get_now_utc() - - os.makedirs(os.path.dirname(root_cert_path), exist_ok=True) - - # ===== Root CA ===== - root_key = rsa.generate_private_key( - public_exponent=65537, - key_size=2048, - backend=default_backend() - ) - - root_subject = x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Root CA Org"), - x509.NameAttribute(NameOID.COMMON_NAME, u"Test Root CA"), - ]) - - root_public_key = root_key.public_key() - root_ski = x509.SubjectKeyIdentifier.from_public_key(root_public_key) - - root_cert = x509.CertificateBuilder().subject_name( - root_subject - ).issuer_name( - root_subject - ).public_key( - root_public_key - ).serial_number( - x509.random_serial_number() - ).not_valid_before( - now - datetime.timedelta(minutes=5) - ).not_valid_after( - now + datetime.timedelta(days=3650) - ).add_extension( - x509.BasicConstraints(ca=True, path_length=1), - critical=True, - ).add_extension( - x509.KeyUsage( - digital_signature=True, - key_cert_sign=True, - crl_sign=True, - key_encipherment=False, - content_commitment=False, - data_encipherment=False, - key_agreement=False, - encipher_only=False, - decipher_only=False, - ), - critical=True, - ).add_extension( - root_ski, - critical=False, - ).sign(root_key, hashes.SHA256(), default_backend()) - - # Write Root cert (public only) - with open(root_cert_path, 'wb') as f: - f.write(root_cert.public_bytes(serialization.Encoding.PEM)) - - # ===== Intermediate CA (signed by Root) ===== - intermediate_key = rsa.generate_private_key( - public_exponent=65537, - key_size=2048, - backend=default_backend() - ) - - intermediate_subject = x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Intermediate CA Org"), - x509.NameAttribute(NameOID.COMMON_NAME, u"Test Intermediate CA"), - ]) - - intermediate_public_key = intermediate_key.public_key() - intermediate_ski = x509.SubjectKeyIdentifier.from_public_key(intermediate_public_key) - intermediate_aki = x509.AuthorityKeyIdentifier.from_issuer_public_key(root_public_key) - - intermediate_cert = x509.CertificateBuilder().subject_name( - intermediate_subject - ).issuer_name( - root_subject - ).public_key( - intermediate_public_key - ).serial_number( - x509.random_serial_number() - ).not_valid_before( - now - datetime.timedelta(minutes=5) - ).not_valid_after( - now + datetime.timedelta(days=1825) - ).add_extension( - x509.BasicConstraints(ca=True, path_length=0), - critical=True, - ).add_extension( - x509.KeyUsage( - digital_signature=True, - key_cert_sign=True, - crl_sign=True, - key_encipherment=False, - content_commitment=False, - data_encipherment=False, - key_agreement=False, - encipher_only=False, - decipher_only=False, - ), - critical=True, - ).add_extension( - intermediate_ski, - critical=False, - ).add_extension( - intermediate_aki, - critical=False, - ).sign(root_key, hashes.SHA256(), default_backend()) - - # Write Intermediate cert (public only) - with open(intermediate_cert_path, 'wb') as f: - f.write(intermediate_cert.public_bytes(serialization.Encoding.PEM)) - - return root_key, root_cert, intermediate_key, intermediate_cert - - except ImportError as e: - raise Exception(f"cryptography package is required. Error: {e}") - - @staticmethod - def generate_leaf_certificate(common_name, signer_key, signer_cert, is_ca=False, days=365): - """ - Generate a leaf certificate signed by signer_cert. - Return: (leaf_private_key, leaf_cert) - """ - try: - from cryptography import x509 - from cryptography.x509.oid import NameOID, ExtendedKeyUsageOID - from cryptography.hazmat.primitives import hashes - from cryptography.hazmat.primitives.asymmetric import rsa - from cryptography.hazmat.backends import default_backend - import datetime - - now = VpnConnectionAuthenticationScenarioTest._get_now_utc() - - private_key = rsa.generate_private_key( - public_exponent=65537, - key_size=2048, - backend=default_backend() - ) - - subject = x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), - x509.NameAttribute(NameOID.LOCALITY_NAME, u"Redmond"), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Organization"), - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"IT"), - x509.NameAttribute(NameOID.COMMON_NAME, common_name), - ]) - - public_key = private_key.public_key() - ski = x509.SubjectKeyIdentifier.from_public_key(public_key) - aki = x509.AuthorityKeyIdentifier.from_issuer_public_key(signer_key.public_key()) - - builder = x509.CertificateBuilder().subject_name( - subject - ).issuer_name( - signer_cert.subject - ).public_key( - public_key - ).serial_number( - x509.random_serial_number() - ).not_valid_before( - now - datetime.timedelta(minutes=5) - ).not_valid_after( - now + datetime.timedelta(days=days) - ) - - # Leaf cert constraints - builder = builder.add_extension( - x509.BasicConstraints(ca=is_ca, path_length=None if not is_ca else 0), - critical=True, - ) - - # EKU: Both client & server auth are required for certificate auth - builder = builder.add_extension( - x509.ExtendedKeyUsage([ - ExtendedKeyUsageOID.SERVER_AUTH, - ExtendedKeyUsageOID.CLIENT_AUTH, - ]), - critical=False, - ) - - # Key usage for leaf - builder = builder.add_extension( - x509.KeyUsage( - digital_signature=True, - key_encipherment=True, - key_cert_sign=False, - crl_sign=False, - content_commitment=False, - data_encipherment=False, - key_agreement=False, - encipher_only=False, - decipher_only=False, - ), - critical=True, - ) - - builder = builder.add_extension(ski, critical=False) - builder = builder.add_extension(aki, critical=False) - - cert = builder.sign(signer_key, hashes.SHA256(), default_backend()) - return private_key, cert - - except ImportError as e: - raise Exception(f"cryptography package (>= 3.0) is required for certificate generation. " - f"Install it with: pip install 'cryptography>=3.0'. Error: {e}") - - @staticmethod - def write_pem_cert(cert, cert_path): - try: - from cryptography.hazmat.primitives import serialization - os.makedirs(os.path.dirname(cert_path), exist_ok=True) - with open(cert_path, 'wb') as f: - f.write(cert.public_bytes(serialization.Encoding.PEM)) - except ImportError as e: - raise Exception(f"cryptography package is required. Error: {e}") - - @staticmethod - def generate_outbound_pfx_with_chain(pfx_path, password, leaf_private_key, leaf_cert, chain_certs): - """ - Generate outbound PFX that includes: - - leaf cert + private key - - CA chain (intermediate + root) via 'cas' - """ - try: - from cryptography.hazmat.primitives import serialization - from cryptography.hazmat.primitives.serialization.pkcs12 import serialize_key_and_certificates, load_key_and_certificates - - os.makedirs(os.path.dirname(pfx_path), exist_ok=True) - - pfx_data = serialize_key_and_certificates( - name=b"test-vpn-outbound", - key=leaf_private_key, - cert=leaf_cert, - cas=chain_certs, # IMPORTANT: include CA chain - encryption_algorithm=serialization.BestAvailableEncryption(password.encode()) - ) - - with open(pfx_path, 'wb') as f: - f.write(pfx_data) - - _k, _c, _addl = load_key_and_certificates(pfx_data, password.encode()) - - except ImportError as e: - raise Exception(f"cryptography package is required for PFX generation. Error: {e}") - - @live_only() - @ResourceGroupPreparer(location='eastus', name_prefix='test_vpn_connection_auth') - @KeyVaultPreparer(name_prefix='cli-mi-vpn-cert-kv-', sku='premium', - additional_params='--enable-rbac-authorization false') - @AllowLargeResponse(size_kb=9999) - def test_vpn_connection_authentication(self, resource_group): - import json - import tempfile - import shutil - - subscription_id = self.get_subscription_id() - self.kwargs.update({ - 'rg': resource_group, - 'location': 'eastus', - 'vnet_name': 'myVNet', - 'vnet_gateway_name': 'myVnetGateway', - 'local_gateway_name': 'myLocalGateway', - 'pip_name': 'myGatewayIP', - 'connection_name': 'myVpnConnection', - 'identity_name': 'myIdentity', - 'cert_name': 'vpn-gateway-cert', - 'shared_key': 'Abc123', - 'subscription': subscription_id - }) - - # create temporary directory for test certificates - temp_dir = tempfile.mkdtemp() - outbound_cert_path = os.path.join(temp_dir, 'VpnGatewayoutboundcert.pfx') - - # public cert files for inbound chain (PEM with BEGIN/END CERT) - inbound_cert1_path = os.path.join(temp_dir, 'VpnGatewayInboundCert.cer') # Intermediate CA (public) - inbound_cert2_path = os.path.join(temp_dir, 'VpnGatewayAuthCert.cer') # Root CA (public) - - try: - root_key, root_cert, inter_key, inter_cert = self.generate_ca_chain( - root_cert_path=inbound_cert2_path, # Root CA public - intermediate_cert_path=inbound_cert1_path # Intermediate CA public - ) - - outbound_cn = "test-vpn-outbound.local" - outbound_key, outbound_leaf_cert = self.generate_leaf_certificate( - common_name=outbound_cn, - signer_key=inter_key, - signer_cert=inter_cert - ) - self.generate_outbound_pfx_with_chain( - pfx_path=outbound_cert_path, - password="AAAAAAAA", - leaf_private_key=outbound_key, - leaf_cert=outbound_leaf_cert, - chain_certs=[inter_cert, root_cert] # include chain - ) - - # generate inbound leaf cert (signed by Intermediate) - inbound_cn = "test-vpn-inbound.local" - _in_key, inbound_leaf_cert = self.generate_leaf_certificate( - common_name=inbound_cn, - signer_key=inter_key, - signer_cert=inter_cert - ) - self.kwargs['subject_name'] = self._format_subject_dn(inbound_cn) - - # create managed identity - identity_result = self.cmd('identity create -g {rg} -n {identity_name}', checks=[ - self.check('name', '{identity_name}'), - self.exists('principalId') - ]).get_output_in_json() - self.kwargs['identity_id'] = identity_result['id'] - self.kwargs['principal_id'] = identity_result['principalId'] - - # grant managed identity access to KV - self.cmd('keyvault set-policy -n {kv} ' - '--object-id {principal_id} ' - '--certificate-permissions get list ' - '--secret-permissions get list') - - # import outbound certificate to KV - self.cmd(f'keyvault certificate import -n {{cert_name}} --vault-name {{kv}} ' - f'--file "{outbound_cert_path}" --password "AAAAAAAA"', checks=[ - self.check('name', '{cert_name}') - ]) - - # get certificate url (OutboundAuthCertificate) - cert_info = self.cmd('keyvault certificate show -n {cert_name} --vault-name {kv}').get_output_in_json() - self.kwargs['cert_url'] = cert_info['id'] - - # read inbound certificate chain (public keys only) - # Azure docs recommend at least two certs (Root + Intermediate) - def read_cert_base64(file_path): - with open(file_path, 'r') as f: - content = f.read() - cert_data = content.replace('-----BEGIN CERTIFICATE-----', '') - cert_data = cert_data.replace('-----END CERTIFICATE-----', '') - cert_data = cert_data.replace('\n', '').replace('\r', '').strip() - return cert_data - - inbound_root_base64 = read_cert_base64(inbound_cert2_path) - inbound_intermediate_base64 = read_cert_base64(inbound_cert1_path) - - # create virtual network with gateway subnet - self.cmd('network vnet create -g {rg} -n {vnet_name} ' - '--address-prefix 10.0.0.0/16 ' - '--subnet-name GatewaySubnet ' - '--subnet-prefix 10.0.255.0/24', checks=[ - self.check('newVNet.name', '{vnet_name}'), - self.check('newVNet.subnets[0].name', 'GatewaySubnet') - ]) - - # create public ip - self.cmd('network public-ip create -g {rg} -n {pip_name} ' - '--allocation-method Static ' - '--ip-tags FirstPartyUsage=/NonProd ' - '--sku Standard', checks=[ - self.check('publicIp.name', '{pip_name}') - ]) - - # create vnet gateway with managed identity - self.cmd('network vnet-gateway create -g {rg} -n {vnet_gateway_name} ' - '--public-ip-address {pip_name} ' - '--vnet {vnet_name} ' - '--gateway-type Vpn ' - '--vpn-type RouteBased ' - '--sku VpnGw1 ' - '--mi-user-assigned {identity_id}', checks=[ - self.check('vnetGateway.name', '{vnet_gateway_name}'), - self.check('vnetGateway.gatewayType', 'Vpn'), - self.exists('vnetGateway.identity') - ]) - - # create local gateway - self.cmd('network local-gateway create -g {rg} -n {local_gateway_name} ' - '--gateway-ip-address 192.168.4.5 ' - '--local-address-prefixes 192.168.0.0/16', checks=[ - self.check('name', '{local_gateway_name}') - ]) - - # create vpn connection with certificate authentication - cert_auth_config = { - "outboundAuthCertificate": self.kwargs['cert_url'], - "inboundAuthCertificateChain": [inbound_root_base64, inbound_intermediate_base64], - "inboundAuthCertificateSubjectName": self.kwargs['subject_name'] - } - self.kwargs['cert_auth'] = json.dumps(cert_auth_config) - self.cmd('network vpn-connection create -g {rg} -n {connection_name} ' - '--vnet-gateway1 {vnet_gateway_name} ' - '--local-gateway2 {local_gateway_name} ' - '--shared-key {shared_key} ' - '--auth-type Certificate ' - '--cert-auth \'{cert_auth}\'', checks=[ - self.check('resource.connectionType', 'IPsec') - ]) - - # verify connection with certificate authentication - connection = self.cmd('network vpn-connection show -g {rg} -n {connection_name}', checks=[ - self.check('name', '{connection_name}'), - self.check('authenticationType', 'Certificate'), - self.exists('certificateAuthentication') - ]).get_output_in_json() - - # verify certificate authentication configuration - cert_config = connection['certificateAuthentication'] - self.assertEqual(cert_config['outboundAuthCertificate'], self.kwargs['cert_url']) - self.assertEqual(cert_config['inboundAuthCertificateSubjectName'], self.kwargs['subject_name']) - self.assertEqual(len(cert_config['inboundAuthCertificateChain']), 2) - - # update certificate authentication - new_cert_auth_config = { - "outboundAuthCertificate": self.kwargs['cert_url'], - "inboundAuthCertificateChain": [inbound_root_base64, inbound_intermediate_base64], - "inboundAuthCertificateSubjectName": self.kwargs['subject_name'] + "-new" - } - self.kwargs['new_cert_auth'] = json.dumps(new_cert_auth_config) - self.cmd('network vpn-connection update -g {rg} -n {connection_name} ' - '--cert-auth \'{new_cert_auth}\'', checks=[ - self.check('name', '{connection_name}'), - self.check('authenticationType', 'Certificate') - ]) - - # delete connection - self.cmd('network vpn-connection delete -g {rg} -n {connection_name}') - - # create connection with PSK for comparison - self.cmd('network vpn-connection create -g {rg} -n {connection_name} ' - '--vnet-gateway1 {vnet_gateway_name} ' - '--local-gateway2 {local_gateway_name} ' - '--shared-key {shared_key}') - - # verify PSK connection - psk_connection = self.cmd('network vpn-connection show -g {rg} -n {connection_name}').get_output_in_json() - if 'authenticationType' in psk_connection: - self.assertIn(psk_connection['authenticationType'], ['PSK', None]) - - finally: - # clean up temporary certificates - if os.path.exists(temp_dir): - shutil.rmtree(temp_dir) - - -class NetworkVnetGatewayIpSecPolicy(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_vnet_gateway_ipsec') - def test_network_vnet_gateway_ipsec(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'ip': 'pip1', - 'gw': 'gw1', - 'gw_sku': 'VpnGw2', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} ' - '--sku {gw_sku} --gateway-type Vpn --vpn-type RouteBased ' - '--address-prefix 172.16.0.0/24 --client-protocol IkeV2') - self.cmd('network vnet-gateway ipsec-policy add -g {rg} --gateway-name {gw} ' - '--ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 ' - '--ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 ' - '--sa-lifetime 7200 --sa-max-size 2048', - checks=[self.check('dhGroup', 'DHGroup24'), - self.check('ikeEncryption', 'AES256'), - self.check('ikeIntegrity', 'SHA384'), - self.check('ipsecEncryption', 'GCMAES256'), - self.check('ipsecIntegrity', 'GCMAES256'), - self.check('pfsGroup', 'PFS24'), - self.check('saDataSizeKilobytes', 2048), - self.check('saLifeTimeSeconds', 7200)]) - - self.cmd('network vnet-gateway ipsec-policy list -g {rg} --gateway-name {gw}', - checks=[self.check('length(@)', 1)]) - self.cmd('network vnet-gateway ipsec-policy clear -g {rg} --gateway-name {gw}') - self.cmd('network vnet-gateway ipsec-policy list -g {rg} --gateway-name {gw}', - checks=[self.check('length(@)', 0)]) - self.cmd('network vnet-gateway vpn-client show-health -g {rg} -n {gw}') - self.cmd('network vnet-gateway show-supported-devices -g {rg} -n {gw} -o tsv') - - -class NetworkVnetGatewayMigration(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_vnet_gateway_migration', location='westus') - def test_network_vnet_gateway_migration(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'pub_ip': 'public_ip1', - 'gw': 'gateway1', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --address-prefix 10.0.0.0/16 --subnet-name GatewaySubnet --subnet-prefix 10.0.0.0/24') - self.cmd('network public-ip create -g {rg} -n {pub_ip} --sku Basic') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --sku VpnGw1 --vpn-gateway-generation Generation1 ' - '--vnet {vnet} --public-ip-address {pub_ip} --vpn-type RouteBased', - checks=[ - self.check('virtualNetworkGatewayMigrationStatus.state', None), - self.check('virtualNetworkGatewayMigrationStatus.phase', None) - ]) - - # prepare migration - self.cmd('network vnet-gateway migration prepare -g {rg} -n {gw} --migration-type UpgradeDeploymentToStandardIP') - self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ - self.check('virtualNetworkGatewayMigrationStatus.state', 'InProgress'), - self.check('virtualNetworkGatewayMigrationStatus.phase', 'PrepareSucceeded') - ]) - - # execute migration - self.cmd('network vnet-gateway migration execute -g {rg} -n {gw}') - self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ - self.check('virtualNetworkGatewayMigrationStatus.state', 'InProgress'), - self.check('virtualNetworkGatewayMigrationStatus.phase', 'ExecuteSucceeded') - ]) - - # commit migration - self.cmd('network vnet-gateway migration commit -g {rg} -n {gw}') - self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ - self.check('virtualNetworkGatewayMigrationStatus.state', 'Succeeded'), - self.check('virtualNetworkGatewayMigrationStatus.phase', 'CommitSucceeded') - ]) - - -class NetworkVnetGatewayMultiAuth(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_multi_auth') - def test_network_vnet_gateway_multi_auth(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet', - 'ip': 'pip', - 'gw': 'gw', - 'gw_sku': 'VpnGw2', - 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', - 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', - 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9', - 'root_cert_name': 'root-cert', - 'root_cert_data': os.path.join(TEST_DIR, 'test-root-cert.cer'), - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' - '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN ' - '--aad-audience {aad_audience} --aad-issuer {aad_issuer} --aad-tenant {aad_tenant} ' - '--root-cert-name {root_cert_name} --root-cert-data "{root_cert_data}" ' - '--radius-secret 111_aaa --radius-server 30.1.1.15 --vpn-auth-type AAD Certificate Radius', - checks=[self.check('length(vnetGateway.vpnClientConfiguration.vpnAuthenticationTypes)', 3)]) - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_multi_auth1') - def test_network_vnet_gateway_multi_auth1(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet', - 'ip': 'pip', - 'gw': 'gw', - 'gw_sku': 'VpnGw2', - 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', - 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', - 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9', - 'root_cert_name': 'root-cert', - 'root_cert_data': os.path.join(TEST_DIR, 'test-root-cert.cer'), - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' - '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN') - self.cmd('network vnet-gateway update -g {rg} -n {gw} --vpn-auth-type AAD Certificate Radius ' - '--aad-audience {aad_audience} --aad-issuer {aad_issuer} --aad-tenant {aad_tenant} ' - '--root-cert-name {root_cert_name} --root-cert-data "{root_cert_data}" ' - '--radius-secret 111_aaa --radius-server 30.1.1.15', - checks=[self.check('length(vpnClientConfiguration.vpnAuthenticationTypes)', 3)]) - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_allow_traffic') - def test_network_vnet_gateway_allow_traffic(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet', - 'ip': 'pip', - 'gw': 'gw', - 'gw_sku': 'VpnGw2', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' - '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN ' - '--allow-remote-vnet-traffic true --allow-vwan-traffic true', - checks=[self.check('vnetGateway.allowRemoteVnetTraffic', True), - self.check('vnetGateway.allowVirtualWanTraffic', True)]) - self.cmd('network vnet-gateway update -g {rg} -n {gw} --allow-remote-vnet-traffic false --allow-vwan-traffic false', - checks=[self.check('allowRemoteVnetTraffic', False), - self.check('allowVirtualWanTraffic', False)]) - - -class NetworkExpressRouteGatewayScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_no_pip') - def test_network_vnet_gateway_expressroute_without_public_ip(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet', - 'gw': 'gw', - 'sku': 'Standard', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - result = self.cmd('network vnet-gateway create -g {rg} -n {gw} --vnet {vnet} ' - '--gateway-type ExpressRoute --sku {sku}').get_output_in_json() - - ip_configs = result['vnetGateway']['ipConfigurations'] - self.assertEqual(1, len(ip_configs)) - - ip_config = ip_configs[0] - self.assertEqual('Dynamic', ip_config['privateIPAllocationMethod']) - self.assertTrue(ip_config['subnet']['id'].endswith('/subnets/GatewaySubnet')) - self.assertFalse(ip_config.get('publicIPAddress')) - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_with_pip') - def test_network_vnet_gateway_expressroute_with_public_ip(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet', - 'pip': 'pip', - 'gw': 'gw', - 'sku': 'Standard', - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - public_ip = self.cmd('network public-ip create -g {rg} -n {pip}').get_output_in_json()['publicIp']['id'] - self.kwargs['pip_id'] = public_ip - print(self.kwargs['pip_id']) - result = self.cmd('network vnet-gateway create -g {rg} -n {gw} --vnet {vnet} ' - '--gateway-type ExpressRoute --sku {sku} --public-ip-addresses {pip}').get_output_in_json() - - ip_configs = result['vnetGateway']['ipConfigurations'] - self.assertEqual(1, len(ip_configs)) - - ip_config = ip_configs[0] - print(ip_config) - self.assertEqual('Dynamic', ip_config['privateIPAllocationMethod']) - self.assertTrue(ip_config['subnet']['id'].endswith('/subnets/GatewaySubnet')) - # public ip is ommitted by design with auto-assigned ip - self.assertFalse(ip_config.get('publicIPAddress')) - - -class NetworkVirtualRouter(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_virtual_router', location='WestCentralUS') - @unittest.skip('Skip as service has bug for deleting peering') - def test_network_virtual_router_scenario(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'rg': resource_group, - 'location': resource_group_location, - 'vnet': 'vnet1', - 'ip': 'pip1', - 'gw': 'gw1', - 'gw_sku': 'HighPerformance', - 'vrouter': 'vrouter1', - 'vrouter_peering': 'peering1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet -l {location} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {ip} -l {location}') - self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} --gateway-type ExpressRoute -l {location}') - - self.cmd('network vrouter create -n {vrouter} -l {location} -g {rg} --hosted-gateway {gw}', checks=[ - self.check('type', 'Microsoft.Network/VirtualRouters'), - self.check('name', '{vrouter}') - ]) - - self.cmd('network vrouter show -n {vrouter} -g {rg}', checks=[ - self.check('name', '{vrouter}') - ]) - - self.cmd('network vrouter list -g {rg}', checks=[ - self.check('@[0].name', '{vrouter}') - ]) - - self.cmd('network vrouter peering create -n {vrouter_peering} --peer-asn 10000 --peer-ip 10.0.0.0 -g {rg} --vrouter-name {vrouter}', checks=[ - self.check('name', '{vrouter_peering}') - ]) - - self.cmd('network vrouter peering update -n {vrouter_peering} --peer-asn 11000 --peer-ip 11.0.0.0 -g {rg} --vrouter-name {vrouter}', checks=[ - self.check('peerAsn', '11000'), - self.check('peerIp', '11.0.0.0') - ]) - - self.cmd('network vrouter peering show -n {vrouter_peering} -g {rg} --vrouter-name {vrouter}', checks=[ - self.check('name', '{vrouter_peering}') - ]) - - self.cmd('network vrouter peering list -g {rg} --vrouter-name {vrouter}', checks=[ - self.check('@[0].name', '{vrouter_peering}'), - self.check('length(@)', 1) - ]) - - self.cmd('network vrouter peering delete -n {vrouter_peering} -g {rg} --vrouter-name {vrouter}') - - self.cmd('network vrouter delete -g {rg} -n {vrouter}') - - # @record_only() # this feature need resource from service team for now. - @unittest.skip('rg not found') - @ResourceGroupPreparer(name_prefix='cli_test_virtual_router', location='eastus2euap') - def test_vrouter_with_virtual_hub_support(self, resource_group, resource_group_location): - self.kwargs.update({ - 'rg': 'test_vrouter_with_virtual_hub_support', # the subscription needs to be a specified one given by service team - 'location': resource_group_location, - 'vnet': 'vnet2', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'vrouter': 'vrouter2', - 'peer': 'peer1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} ' - '--location {location} ' - '--subnet-name {subnet1} ' - '--address-prefix 10.0.0.0/24') - - # a cleanup program runs in short peoridically to assign subnets a NSG within that subscription - # which will block subnet is assigned to the virtual router - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --remove networkSecurityGroup') - vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() - - self.kwargs.update({ - 'subnet1_id': vnet['subnets'][0]['id'] - }) - - self.cmd('network vrouter create -g {rg} -l {location} -n {vrouter} --hosted-subnet {subnet1_id}', checks=[ - self.check('type', 'Microsoft.Network/virtualHubs'), - self.check('ipConfigurations', None), - self.check('provisioningState', 'Succeeded') - ]) - - self.cmd('network vrouter list -g {rg}') - - self.cmd('network vrouter show -g {rg} -n {vrouter}', checks=[ - self.check('virtualRouterAsn', 65515), - self.check('length(virtualRouterIps)', 2), - ]) - - self.cmd('network vrouter peering create -g {rg} --vrouter-name {vrouter} -n {peer} ' - '--peer-asn 11000 --peer-ip 10.0.0.120') - - self.cmd('network vrouter peering list -g {rg} --vrouter-name {vrouter}') - - self.cmd('network vrouter peering show -g {rg} --vrouter-name {vrouter} -n {peer}') - - # unable to update unless the ASN's range is required - # self.cmd('network vrouter peering update -g {rg} --vrouter-name {vrouter} -n {peer} --peer-ip 10.0.0.0') - - self.cmd('network vrouter peering delete -g {rg} --vrouter-name {vrouter} -n {peer}') - - self.cmd('network vrouter delete -g {rg} -n {vrouter}') - - -class NetworkVirtualHubRouter(ScenarioTest): - @ResourceGroupPreparer(name_prefix='cli_test_virtual_hub_router', location='centraluseuap') - def test_network_virtual_hub_router_scenario(self, resource_group, resource_group_location): - self.kwargs.update({ - 'rg': resource_group, - 'location': resource_group_location, - 'vnet': 'vnet2', - 'vhr_ip1': 'vhrip1', - 'subnet1': 'RouteServerSubnet', - 'vrouter': 'vrouter2', - 'peer': 'peer1' - }) - - self.cmd('network vnet create -g {rg} -n {vnet} ' - '--location {location} ' - '--subnet-name {subnet1} ' - '--address-prefix 10.0.0.0/24') - - # a cleanup program runs in short peoridically to assign subnets a NSG within that subscription - # which will block subnet is assigned to the virtual router - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --remove networkSecurityGroup') - vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() - self.cmd('network public-ip create -g {rg} -n {vhr_ip1} --sku Standard') - - self.kwargs.update({ - 'subnet1_id': vnet['subnets'][0]['id'] - }) - - self.cmd('network routeserver create -g {rg} -l {location} -n {vrouter} --auto-scale-config min-capacity=3 ' - '--hosted-subnet {subnet1_id} --public-ip-address {vhr_ip1} --hub-routing-preference aspath', - checks=[ - self.check('type', 'Microsoft.Network/virtualHubs'), - self.check('ipConfigurations', None), - self.check('provisioningState', 'Succeeded'), - self.check("hubRoutingPreference", "ASPath"), - self.check('virtualRouterAutoScaleConfiguration.minCapacity', 3) - ]) - - self.cmd('network routeserver update -g {rg} --name {vrouter} --allow-b2b-traffic --hub-routing-preference expressroute', checks=[ - self.check('allowBranchToBranchTraffic', True), - self.check("hubRoutingPreference", "ExpressRoute") - ]) - - self.cmd('network routeserver list -g {rg}') - - self.cmd('network routeserver show -g {rg} -n {vrouter}', checks=[ - self.check('virtualRouterAsn', 65515), - self.check('length(virtualRouterIps)', 2), - ]) - - self.cmd('network routeserver peering create -g {rg} --routeserver {vrouter} -n {peer} ' - '--peer-asn 11000 --peer-ip 10.0.0.120') - - self.cmd('network routeserver peering list -g {rg} --routeserver {vrouter}') - - self.cmd('network routeserver peering show -g {rg} --routeserver {vrouter} -n {peer}') - - self.cmd('network routeserver peering list-advertised-routes -g {rg} --routeserver {vrouter} -n {peer}', - checks=[self.check("contains(keys(@), 'RouteServiceRole_IN_0')", True)]) - - self.cmd('network routeserver peering list-learned-routes -g {rg} --routeserver {vrouter} -n {peer}', - checks=[self.check("contains(keys(@), 'RouteServiceRole_IN_1')", True)]) - - # unable to update unless the ASN's range is required - # self.cmd('network routeserver peering update -g {rg} --routeserver {vrouter} -n {peer} --peer-ip 10.0.0.0') - - self.cmd('network routeserver peering delete -g {rg} --routeserver {vrouter} -n {peer} -y') - - self.cmd('network routeserver delete -g {rg} -n {vrouter} -y') - - -class NetworkSubnetScenarioTests(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_subnet_set_test') - def test_network_subnet_set(self, resource_group): - - self.kwargs.update({ - 'vnet': 'vnet1', - 'vnet_prefix': '123.0.0.0/16', - 'subnet': 'default', - 'subnet_prefix': '123.0.0.0/24', - 'subnet_prefix2': '123.0.5.0/24', - 'nsg': 'test-vnet-nsg' - }) - - self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefix {vnet_prefix} --subnet-name {subnet} --subnet-prefix {subnet_prefix}') - self.cmd('network nsg create --resource-group {rg} --name {nsg}') - - # Test we can update the address space and nsg - self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix {subnet_prefix2} --network-security-group {nsg}', checks=[ - self.check('addressPrefix', '{subnet_prefix2}'), - self.check('ends_with(@.networkSecurityGroup.id, `/{nsg}`)', True) - ]) - - # test generic update - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --set addressPrefix=123.0.0.0/24', - checks=self.check('addressPrefix', '123.0.0.0/24')) - - # Test we can get rid of the nsg. - self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix {subnet_prefix2} --network-security-group null', - checks=self.check('networkSecurityGroup', None)) - - self.cmd('network vnet delete --resource-group {rg} --name {vnet}') - self.cmd('network nsg delete --resource-group {rg} --name {nsg}') - - @ResourceGroupPreparer(name_prefix='cli_subnet_detach_nat_gateway_', location="eastus2") - def test_subnet_detach_nat_gateway(self, resource_group, resource_group_location): - self.kwargs.update({ - 'vnet': 'vnet1', - 'vnet_prefix': '123.0.0.0/16', - 'subnet': 'default', - 'subnet_prefix': '123.0.0.0/24', - 'nat': 'test-nat', - 'idle_timeout': 4, - 'sku': "Standard", - 'ip_addr': "pip", - 'ip_prefix': "prefix", - 'idle_timeout_updated': 5, - 'zone': 2, - 'location': resource_group_location, - 'resource_type': 'Microsoft.Network/NatGateways' - }) - - self.cmd('network public-ip create -g {rg} -n {ip_addr} --location {location} --zone {zone} --sku Standard ') - self.cmd('network public-ip prefix create --length 29 --location {location} --name {ip_prefix} --resource-group {rg} --zone {zone}') - self.cmd('network nat gateway create --resource-group {rg} --location {location} --public-ip-prefixes {ip_prefix} --name {nat} --public-ip-addresses {ip_addr} --idle-timeout {idle_timeout} --zone {zone}') - self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefix {vnet_prefix}') - - self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefixes {subnet_prefix} --nat-gateway {nat} --default-outbound false', - checks=self.check('ends_with(@.natGateway.id, `/{nat}`)', True)) - self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --nat-gateway null', - checks=self.check('natGateway', None)) - - @ResourceGroupPreparer(name_prefix='cli_subnet_endpoint_service_test', location="eastus2") - def test_network_subnet_endpoint_service(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - 'subnet3': 'subnet3', - 'publicip': 'testip1', - 'publicip2': 'testip2' - }) - result = self.cmd('network vnet list-endpoint-services -l westus').get_output_in_json() - self.assertGreaterEqual(len(result), 2) - - public_ip1 = self.cmd('network public-ip create -g {rg} -n {publicip}').get_output_in_json() - public_ip2 = self.cmd('network public-ip create -g {rg} -n {publicip2}').get_output_in_json() - self.kwargs.update({ - 'public_ip1': public_ip1['publicIp']['id'], - 'public_ip2': public_ip2['publicIp']['id'] - }) - self.cmd('network vnet create -g {rg} -n {vnet}') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet1} --address-prefix 10.0.1.0/24 --service-endpoints Microsoft.Storage --default-outbound false', - checks=self.check('serviceEndpoints[0].service', 'Microsoft.Storage')) - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --service-endpoints null', - checks=self.check('serviceEndpoints', None)) - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.2.0/24 --endpoints [{{"service":Microsoft.Storage,"network-identifier":{public_ip1}}}] --default-outbound false', - checks=[self.check('serviceEndpoints[0].service', 'Microsoft.Storage'), - self.check('serviceEndpoints[0].networkIdentifier.id', '{public_ip1}')]) - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet2} --service-endpoints null', - checks=self.check('serviceEndpoints', None)) - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet3} --address-prefix 10.0.3.0/24 --default-outbound false') - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet3} --endpoints [{{"service":Microsoft.Storage,"network-identifier":{public_ip2}}}]', - checks=[self.check('serviceEndpoints[0].service', 'Microsoft.Storage'), - self.check('serviceEndpoints[0].networkIdentifier.id', '{public_ip2}')]) - - @ResourceGroupPreparer(name_prefix='cli_subnet_delegation') - def test_network_subnet_delegation(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1', - }) - result = self.cmd('network vnet subnet list-available-delegations -l westcentralus').get_output_in_json() - self.assertTrue(len(result) > 1, True) - result = self.cmd('network vnet subnet list-available-delegations -g {rg}').get_output_in_json() - self.assertTrue(len(result) > 1, True) - - self.cmd('network vnet create -g {rg} -n {vnet} -l westcentralus') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --delegations Microsoft.Web.serverFarms --default-outbound false', checks=[ - self.check('delegations[0].serviceName', 'Microsoft.Web/serverFarms') - ]) - # verify the update command, and that CLI validation will accept either serviceName or Name - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --delegations Microsoft.Sql/managedInstances', - checks=self.check('delegations[0].serviceName', 'Microsoft.Sql/managedInstances')) - - @ResourceGroupPreparer(name_prefix='test_subnet_with_private_endpoint_option') - def test_subnet_with_private_endpoint_and_private_link_options(self, resource_group): - self.kwargs.update({ - 'vnet': 'MyVnet', - 'subnet1': 'MySubnet1', - 'subnet2': 'MySubnet2', - 'subnet3': 'MySubnet3', - }) - - self.cmd('network vnet create -g {rg} -n {vnet}') - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' - '--address-prefixes 10.0.1.0/24 ' - '--name {subnet1} ' - '--disable-private-endpoint-network-policies true ' - '--default-outbound false', checks=[ - self.check('addressPrefix', '10.0.1.0/24'), - self.check('privateEndpointNetworkPolicies', 'Disabled'), - self.check('privateLinkServiceNetworkPolicies', 'Enabled') - ]) - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' - '--address-prefixes 10.0.2.0/24 ' - '--name {subnet2} ' - '--disable-private-link-service-network-policies true ' - '--default-outbound false', checks=[ - self.check('addressPrefix', '10.0.2.0/24'), - self.check('privateEndpointNetworkPolicies', 'Disabled'), - self.check('privateLinkServiceNetworkPolicies', 'Disabled') - ]) - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' - '--address-prefixes 10.0.3.0/24 ' - '--name {subnet3} ' - '--disable-private-endpoint-network-policies true ' - '--disable-private-link-service-network-policies true ' - '--default-outbound false', checks=[ - self.check('addressPrefix', '10.0.3.0/24'), - self.check('privateEndpointNetworkPolicies', 'Disabled'), - self.check('privateLinkServiceNetworkPolicies', 'Disabled') - ]) - - @ResourceGroupPreparer(name_prefix='cli_subnet_default_outbound_access') - def test_network_subnet_default_outbound_access(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - }) - self.cmd('network vnet create -g {rg} -n {vnet} -l westcentralus') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet1} --address-prefixes 10.0.3.0/24 --default-outbound-access false', - self.check('defaultOutboundAccess', False)) - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --default-outbound-access true', - self.check('defaultOutboundAccess', True)) - - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefixes 10.0.4.0/24 --default-outbound-access true', - self.check('defaultOutboundAccess', True)) - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet2} --default-outbound-access false', - self.check('defaultOutboundAccess', False)) - - self.cmd('network vnet subnet show -g {rg} --vnet-name {vnet} -n {subnet2}', - self.check('defaultOutboundAccess', False)) - - @ResourceGroupPreparer(name_prefix='cli_subnet_with_sharing_scope', location='westcentralus') - def test_network_subnet_with_sharing_scope(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet1', - 'subnet': 'subnet1' - }) - self.cmd('az network vnet create -g {rg} -n {vnet} -l westcentralus --address-prefixes 10.0.0.0/16') - self.cmd('az network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefixes 10.0.0.0/16 --default-outbound false --sharing-scope Tenant') - self.cmd('network vnet subnet show -g {rg} --vnet-name {vnet} -n {subnet}', - checks=self.check('sharingScope', 'Tenant')) - - -class NetworkActiveActiveCrossPremiseScenarioTest(ScenarioTest): # pylint: disable=too-many-instance-attributes - - @ResourceGroupPreparer(name_prefix='cli_test_active_active_cross_premise_connection', location='westus2') - def test_network_active_active_cross_premise_connection(self, resource_group): - self.kwargs.update({ - 'vnet1': 'vnet1', - 'vnet_prefix1': '10.11.0.0/16', - 'vnet_prefix2': '10.12.0.0/16', - 'vnet1_asn': 65010, - 'gw_subnet': 'GatewaySubnet', - 'gw_subnet_prefix': '10.12.255.0/27', - 'gw_ip1': 'gwip1', - 'gw_ip2': 'gwip2', - 'gw1': 'gw1', - 'lgw2': 'lgw2', - 'lgw_ip': '131.107.72.22', - 'lgw_prefix': '10.52.255.253/32', - 'bgp_peer1': '10.52.255.253', - 'lgw_asn': 65050, - 'lgw_loc': 'eastus', - 'conn_151': 'Vnet1toSite5_1', - 'conn_152': 'Vnet1toSite5_2', - 'shared_key': 'abc123', - 'shared_key2': 'a1b2c3', - 'lgw3': 'lgw3', - 'lgw3_ip': '131.107.72.23', - 'lgw3_prefix': '10.52.255.254/32', - 'bgp_peer2': '10.52.255.254' - }) - - self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2} --subnet-name {gw_subnet} --subnet-prefix {gw_subnet_prefix}') - - self.cmd('network public-ip create -g {rg} -n {gw_ip1} --sku Standard --zone 1 2 3') - self.cmd('network public-ip create -g {rg} -n {gw_ip2} --sku Standard --zone 1 2 3') - - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --sku VpnGw1AZ --asn {vnet1_asn} --public-ip-addresses {gw_ip1} {gw_ip2} --tags foo=doo') - self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') - - import time - time.sleep(3 * 60) # 3min - - self.cmd('network vnet-gateway update -g {rg} -n {gw1} --tags foo=boo --no-wait') - self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --updated') - - self.cmd('network local-gateway create -g {rg} -n {lgw2} -l {lgw_loc} --gateway-ip-address {lgw_ip} --local-address-prefixes {lgw_prefix} --asn {lgw_asn} --bgp-peering-address {bgp_peer1}') - self.cmd('network vpn-connection create -g {rg} -n {conn_151} --vnet-gateway1 {gw1} --local-gateway2 {lgw2} --shared-key {shared_key} --enable-bgp') - self.cmd('network vpn-connection shared-key reset -g {rg} --connection-name {conn_151} --key-length 128') - sk1 = self.cmd( - 'network vpn-connection shared-key show -g {rg} --connection-name {conn_151}').get_output_in_json() - self.cmd('network vpn-connection shared-key update -g {rg} --connection-name {conn_151} --value {shared_key2}') - sk2 = self.cmd('network vpn-connection shared-key show -g {rg} --connection-name {conn_151}', - checks=self.check('value', '{shared_key2}')).get_output_in_json() - - self.assertNotEqual(sk1, sk2) - - self.cmd('network local-gateway create -g {rg} -n {lgw3} -l {lgw_loc} --gateway-ip-address {lgw3_ip} --local-address-prefixes {lgw3_prefix} --asn {lgw_asn} --bgp-peering-address {bgp_peer2}') - self.cmd('network vpn-connection create -g {rg} -n {conn_152} --vnet-gateway1 {gw1} --local-gateway2 {lgw3} --shared-key {shared_key} --enable-bgp') - -class NetworkActiveActiveVnetScenarioTest(ScenarioTest): # pylint: disable=too-many-instance-attributes - - def __init__(self, method_name): - self.sas_replacer = StorageAccountSASReplacer() - super().__init__(method_name, recording_processors=[ - self.sas_replacer - ]) - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_active_active_vnet_vnet_connection') - @StorageAccountPreparer(name_prefix='clitestvpncnn') - def test_network_active_active_vnet_connection(self, resource_group, storage_account): - from datetime import datetime, timedelta - self.kwargs.update({ - 'subnet': 'GatewaySubnet', - 'vnet1': 'vnet1', - 'vnet1_prefix': '10.21.0.0/16', - 'vnet1_asn': 65010, - 'gw1': 'vgw1', - 'gw1_prefix': '10.21.255.0/27', - 'gw1_ip1': 'gw1ip1', - 'gw1_ip2': 'gw1ip2', - 'vnet2': 'vnet2', - 'vnet2_prefix': '10.22.0.0/16', - 'vnet2_asn': 65020, - 'gw2': 'vgw2', - 'gw2_prefix': '10.22.255.0/27', - 'gw2_ip1': 'gw2ip1', - 'gw2_ip2': 'gw2ip2', - 'key': 'abc123', - 'conn12': 'vnet1to2', - 'conn21': 'vnet2to1', - 'bgp_peer1': '10.52.255.253', - 'bgp_peer2': '10.53.255.253', - 'storage_account': storage_account, - 'ctn': self.create_random_name(prefix='clitestvpngw', length=24), - 'expiry': (datetime.utcnow() + timedelta(hours=3)).strftime('%Y-%m-%dT%H:%MZ') - }) - - self.cmd('storage container create --account-name {storage_account} --name {ctn}') - sas = self.cmd( - 'storage blob generate-sas -n src --account-name {storage_account} -c {ctn} --permissions acrwd --expiry {expiry} -otsv').output.strip() - self.kwargs['sas_url'] = 'https://{}.blob.azure.com/{}?{}'.format(self.kwargs['storage_account'], - self.kwargs['ctn'], sas) - self.sas_replacer.add_sas_token(sas) - - # Create one VNet with two public IPs - self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet1_prefix} --subnet-name {subnet} --subnet-prefix {gw1_prefix}') - self.cmd('network public-ip create -g {rg} -n {gw1_ip1}') - self.cmd('network public-ip create -g {rg} -n {gw1_ip2}') - - # Create second VNet with two public IPs - self.cmd('network vnet create -g {rg} -n {vnet2} --address-prefix {vnet2_prefix} --subnet-name {subnet} --subnet-prefix {gw2_prefix}') - self.cmd('network public-ip create -g {rg} -n {gw2_ip1}') - self.cmd('network public-ip create -g {rg} -n {gw2_ip2}') - - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --sku VpnGw1 --asn {vnet1_asn} --public-ip-addresses {gw1_ip1} {gw1_ip2} --bgp-peering-address {bgp_peer1} --no-wait') - self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2} --sku VpnGw1 --asn {vnet2_asn} --public-ip-addresses {gw2_ip1} {gw2_ip2} --bgp-peering-address {bgp_peer2} --no-wait') - - # wait for gateway completion to finish - self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') - self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') - - # create and connect the VNet gateways - self.cmd('network vpn-connection create -g {rg} -n {conn12} --vnet-gateway1 {gw1} --vnet-gateway2 {gw2} --shared-key {key} --enable-bgp') - self.cmd('network vpn-connection create -g {rg} -n {conn21} --vnet-gateway1 {gw2} --vnet-gateway2 {gw1} --shared-key {key} --enable-bgp') - self.cmd('network vpn-connection list-ike-sas -g {rg} -n {conn12}') - output = self.cmd('network vpn-connection packet-capture start -g {rg} -n {conn12}').output.strip() - self.assertTrue('Successful' in output, 'Expected Successful in output.\nActual: {}'.format(output)) - # currently we cannot create traffic by cli command. So it will return an error when stop. - with self.assertRaisesRegex(HttpResponseError, 'The response did not contain any data'): - self.cmd('network vpn-connection packet-capture stop -g {rg} -n {conn12} --sas-url {sas_url}') - - -class NetworkVpnGatewayScenarioTest(ScenarioTest): - - def __init__(self, method_name): - self.sas_replacer = StorageAccountSASReplacer() - super().__init__(method_name, recording_processors=[ - self.sas_replacer - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway') - def test_network_vpn_gateway(self, resource_group): - - self.kwargs.update({ - 'vnet1': 'myvnet1', - 'vnet2': 'myvnet2', - 'vnet3': 'myvnet3', - 'gw1': 'gateway1', - 'gw2': 'gateway2', - 'gw3': 'gateway3', - 'ip1': 'pubip1', - 'ip2': 'pubip2', - 'ip3': 'pubip3', - 'custom_routes1': "101.168.0.6/32", - 'custom_routes2': "102.168.0.6/32" - }) - - self.cmd('network public-ip create -n {ip1} -g {rg}') - self.cmd('network public-ip create -n {ip2} -g {rg}') - self.cmd('network public-ip create -n {ip3} -g {rg}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') - self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name GatewaySubnet --address-prefix 10.1.0.0/16') - self.cmd('network vnet create -g {rg} -n {vnet3} --subnet-name GatewaySubnet --address-prefix 10.2.0.0/16') - - self.kwargs.update({'sub': self.get_subscription_id()}) - self.kwargs.update({ - 'vnet1_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet1}'.format(**self.kwargs), - 'vnet2_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet2}'.format(**self.kwargs) - }) - - with self.assertRaisesRegex(HttpResponseError, 'InvalidGatewaySkuSpecifiedForGatewayDeploymentType'): - self.cmd( - 'network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1_id} --public-ip-address {ip1} --gateway-type ExpressRoute --vpn-gateway-generation Generation1') - - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1_id} --public-ip-address {ip1} --vpn-gateway-generation Generation1 --custom-routes {custom_routes1} --sku VpnGw1 --no-wait') - self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2_id} --public-ip-address {ip2} --sku VpnGw1 --no-wait') - self.cmd('network vnet-gateway create -g {rg} -n {gw3} --vnet {vnet3} --public-ip-address {ip3} --no-wait --sku VpnGw1 --asn 12345 --bgp-peering-address 10.2.250.250 --peer-weight 50') - - self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') - self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') - self.cmd('network vnet-gateway wait -g {rg} -n {gw3} --created') - - self.cmd('network vnet-gateway show -g {rg} -n {gw1}', checks=[ - self.check('gatewayType', 'Vpn'), - self.check('sku.capacity', 2), - self.check('sku.name', 'VpnGw1'), - self.check('vpnType', 'RouteBased'), - self.check('vpnGatewayGeneration', 'Generation1'), - self.check('enableBgp', False), - self.check('customRoutes.addressPrefixes[0]', self.kwargs['custom_routes1']) - ]) - - self.cmd('network vnet-gateway update -g {rg} -n {gw1} --custom-routes {custom_routes1} {custom_routes2}', checks=[ - self.check('length(customRoutes.addressPrefixes)', 2) - ]) - - self.cmd('network vnet-gateway show -g {rg} -n {gw2}', checks=[ - self.check('gatewayType', 'Vpn'), - self.check('sku.capacity', 2), - self.check('sku.name', 'VpnGw1'), - self.check('vpnType', 'RouteBased'), - self.check('enableBgp', False) - ]) - self.cmd('network vnet-gateway show -g {rg} -n {gw3}', checks=[ - self.check('sku.name', 'VpnGw1'), - self.check('enableBgp', True), - self.check('bgpSettings.asn', 12345), - self.check('bgpSettings.bgpPeeringAddress', '10.2.250.250'), - self.check('bgpSettings.peerWeight', 50), - self.check('enableHighBandwidthVpnGateway', False) - ]) - - self.kwargs.update({ - 'conn12': 'conn1to2', - 'conn21': 'conn2to1', - 'gw1_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworkGateways/{gw1}'.format(**self.kwargs) - }) - - self.cmd('network vpn-connection create -n {conn12} -g {rg} --shared-key 123 --vnet-gateway1 {gw1_id} --vnet-gateway2 {gw2} --tags foo=doo') - self.cmd('network vpn-connection update -n {conn12} -g {rg} --routing-weight 25 --tags foo=boo', - checks=self.check('routingWeight', 25)) - self.cmd('network vpn-connection create -n {conn21} -g {rg} --shared-key 123 --vnet-gateway2 {gw1_id} --vnet-gateway1 {gw2}') - - self.cmd('network vnet-gateway list-learned-routes -g {rg} -n {gw1}') - self.cmd('network vnet-gateway list-advertised-routes -g {rg} -n {gw1} --peer 10.1.1.1') - self.cmd('network vnet-gateway list-bgp-peer-status -g {rg} -n {gw1} --peer 10.1.1.1') - self.cmd('network vpn-connection list -g {rg} --vnet-gateway {gw1}', checks=[ - self.check('length(@)', 1) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_sku_', location='westus3') - def test_network_vpn_gateway_sku(self, resource_group): - self.kwargs.update({ - 'vnet1': 'myvnet1', - 'gw1': 'gateway1', - 'ip1': 'pubip1', - 'custom_routes1': "101.168.0.6/32", - 'custom_routes2': "102.168.0.6/32" - }) - - self.cmd('network public-ip create -n {ip1} -g {rg}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') - - self.cmd( - "network vnet-gateway create -n {gw1} -g {rg} --public-ip-address {ip1} --vnet {vnet1} --gateway-type ExpressRoute --resiliency-model SingleHomed --sku ErGwScale --min-scale-unit 3 --max-scale-unit 5", - checks=[ - self.check("vnetGateway.autoScaleConfiguration.bounds.max", 5), - self.check("vnetGateway.autoScaleConfiguration.bounds.min", 3), - self.check("vnetGateway.resiliencyModel", "SingleHomed"), - ] - ) - self.cmd( - "network vnet-gateway update -n {gw1} -g {rg} --min-scale-unit 4 --max-scale-unit 8", - checks=[ - self.check("autoScaleConfiguration.bounds.max", 8), - self.check("autoScaleConfiguration.bounds.min", 4), - ] - ) - - @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_aad_') - def test_network_vpn_gateway_aad(self, resource_group): - self.kwargs.update({ - 'vnet': 'vnet', - 'gw': 'gw', - 'ip': 'ip', - 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', - 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', - 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9' - }) - - self.cmd('network public-ip create -g {rg} -n {ip} ') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network vnet-gateway create -g {rg} -n {gw} ' - '--vnet {vnet} --public-ip-address {ip} ' - '--gateway-type Vpn --vpn-type RouteBased ' - '--sku VpnGw1 ' - '--client-protocol OpenVPN ' - '--address-prefixes 201.169.0.0/16 ') - self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ - self.check('sku.name', 'VpnGw1'), - self.check('enableBgp', False), - self.check('vpnType', 'RouteBased'), - self.check('vpnClientConfiguration.vpnClientProtocols[0]', "OpenVPN") - ]) - - self.cmd('network vnet-gateway aad assign -g {rg} --gateway-name {gw} ' - '--tenant {aad_tenant} ' - '--audience {aad_audience} ' - '--issuer {aad_issuer} ') - self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ - self.check('vpnClientConfiguration.aadTenant', self.kwargs['aad_tenant']), - self.check('vpnClientConfiguration.aadIssuer', self.kwargs['aad_issuer']), - self.check('vpnClientConfiguration.aadAudience', self.kwargs['aad_audience']) - ]) - self.cmd('network vnet-gateway aad show -g {rg} --gateway-name {gw}', checks=[ - self.check('aadTenant', self.kwargs['aad_tenant']) - ]) - - self.cmd('network vnet-gateway aad remove -g {rg} --gateway-name {gw}').get_output_in_json() - self.cmd('network vnet-gateway aad show -g {rg} --gateway-name {gw}', checks=[ - self.check('aadTenant', None), - self.check('aadIssuer', None), - self.check('aadAudience', None) - ]) - - @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_disconnect_connects_') - def test_network_vpn_gateway_disconnect_connects(self, resource_group): - self.kwargs.update({ - 'vnet1': 'myvnet1', - 'vnet2': 'myvnet2', - 'gw1': 'gateway1', - 'gw2': 'gateway2', - 'ip1': 'pubip1', - 'ip2': 'pubip2', - }) - - self.cmd('network public-ip create -n {ip1} -g {rg}') - self.cmd('network public-ip create -n {ip2} -g {rg}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16') - self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name GatewaySubnet --address-prefix 10.1.0.0/16') - - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --public-ip-address {ip1} ' - '--sku VpnGw1 --gateway-type Vpn --vpn-type RouteBased ' - '--vpn-gateway-generation Generation1 ' - '--address-prefixes 172.16.0.0/24 --client-protocol IkeV2 ' - '--no-wait') - self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2} --public-ip-address {ip2} ' - '--sku VpnGw1 --gateway-type Vpn --vpn-type RouteBased ' - '--vpn-gateway-generation Generation1 --no-wait') - - self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') - self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') - - self.kwargs.update({ - 'conn12': 'conn1to2', - 'conn21': 'conn2to1', - }) - - self.cmd('network vpn-connection create -n {conn12} -g {rg} --shared-key 123 ' - '--vnet-gateway1 {gw1} --vnet-gateway2 {gw2}') - self.cmd('network vpn-connection create -n {conn21} -g {rg} --shared-key 123 ' - '--vnet-gateway2 {gw1} --vnet-gateway1 {gw2}') - self.cmd('network vnet-gateway disconnect-vpn-connections -g {rg} -n {gw1} --vpn-connections {conn12}') - - @AllowLargeResponse() - @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_package_capture', location='westus') - @StorageAccountPreparer(name_prefix='clitestvpngw') - def test_network_vpn_gateway_package_capture(self, resource_group, storage_account): - from datetime import datetime, timedelta - self.kwargs.update({ - 'vnet1': 'myvnet1', - 'gw1': 'gateway1', - 'gw1_sku': 'VpnGw1', - 'ip1': 'pubip1', - 'storage_account': storage_account, - 'ctn': self.create_random_name(prefix='clitestvpngw', length=24), - 'expiry': (datetime.utcnow() + timedelta(hours=3)).strftime('%Y-%m-%dT%H:%MZ') - }) - - self.cmd('storage container create --account-name {storage_account} --name {ctn}') - sas = self.cmd( - 'storage blob generate-sas -n src --account-name {storage_account} -c {ctn} --permissions acrwd --expiry {expiry} -otsv').output.strip() - self.kwargs['sas_url'] = 'https://{}.blob.azure.com/{}?{}'.format(self.kwargs['storage_account'], - self.kwargs['ctn'], sas) - self.sas_replacer.add_sas_token(sas) - - self.cmd('network public-ip create -n {ip1} -g {rg}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') - self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --public-ip-address {ip1} --sku {gw1_sku}') - output = self.cmd('network vnet-gateway packet-capture start -g {rg} -n {gw1}').output.strip() - self.assertTrue('Successful' in output, 'Expected Successful in output.\nActual: {}'.format(output)) - # currently we cannot create traffic by cli command. So it will return an error when stop. - with self.assertRaisesRegex(HttpResponseError, 'The response did not contain any data'): - self.cmd('network vnet-gateway packet-capture stop -g {rg} -n {gw1} --sas-url {sas_url}') - - -class NetworkVpnClientPackageScenarioTest(ScenarioTest): - - @staticmethod - def _generate_p2s_root_cert_public_file(cert_path, common_name="VpnGatewayAuthCert"): - """ - Generate a self-signed Root CA public certificate file for P2S root-cert upload. - The file content is PEM (BEGIN/END CERTIFICATE), which is acceptable for public cert data. - """ - try: - from cryptography import x509 - from cryptography.x509.oid import NameOID - from cryptography.hazmat.primitives import hashes, serialization - from cryptography.hazmat.primitives.asymmetric import rsa - from cryptography.hazmat.backends import default_backend - import datetime - - # timezone-aware now - try: - from datetime import timezone - now = datetime.datetime.now(timezone.utc) - except ImportError: - now = datetime.datetime.utcnow() - - # Root key (private key not exported; we only write public cert) - root_key = rsa.generate_private_key( - public_exponent=65537, - key_size=2048, - backend=default_backend() - ) - - subject = x509.Name([ - x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), - x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), - x509.NameAttribute(NameOID.LOCALITY_NAME, u"Redmond"), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Organization"), - x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"IT"), - x509.NameAttribute(NameOID.COMMON_NAME, common_name), - ]) - - cert = x509.CertificateBuilder().subject_name( - subject - ).issuer_name( - subject # self-signed root - ).public_key( - root_key.public_key() - ).serial_number( - x509.random_serial_number() - ).not_valid_before( - now - datetime.timedelta(minutes=5) - ).not_valid_after( - now + datetime.timedelta(days=3650) - ).add_extension( - x509.BasicConstraints(ca=True, path_length=1), - critical=True, - ).add_extension( - x509.KeyUsage( - digital_signature=True, - key_cert_sign=True, - crl_sign=True, - key_encipherment=False, - content_commitment=False, - data_encipherment=False, - key_agreement=False, - encipher_only=False, - decipher_only=False, - ), - critical=True, - ).add_extension( - x509.SubjectKeyIdentifier.from_public_key(root_key.public_key()), - critical=False, - ).sign(root_key, hashes.SHA256(), default_backend()) - - os.makedirs(os.path.dirname(cert_path), exist_ok=True) - with open(cert_path, "wb") as f: - # write public cert as PEM (public only) - f.write(cert.public_bytes(serialization.Encoding.PEM)) - - except ImportError as e: - raise Exception("cryptography package is required for certificate generation. ") - - @ResourceGroupPreparer('cli_test_vpn_client_package') - def test_vpn_client_package(self, resource_group): - import tempfile - import shutil - - # create a temporary folder for generated public root cert - temp_dir = tempfile.mkdtemp() - cert_path = os.path.join(temp_dir, 'VpnGatewayAuthCert.cer') - - try: - # generate a root cert public file dynamically (avoid static cert dependency) - self._generate_p2s_root_cert_public_file(cert_path) - - self.kwargs.update({ - 'vnet': 'vnet1', - 'public_ip': 'pip1', - 'gateway_prefix': '100.1.1.0/24', - 'gateway': 'vgw1', - 'gw_sku': 'VpnGw1AZ', - 'cert': 'cert1', - 'cert_path': cert_path, - }) - - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n {public_ip}') - self.cmd('network vnet-gateway create -g {rg} -n {gateway} --address-prefix {gateway_prefix} --vnet {vnet} --public-ip-address {public_ip} --sku {gw_sku}') - self.cmd('network vnet-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert} --public-cert-data "{cert_path}"') - - # test vnet-gateway revoked-cert create - self.cmd('network vnet-gateway revoked-cert create -g {rg} -n MyCer --gateway-name {gateway} --thumbprint e806da0b7fe24f47e76fa269dc4ed76dac4b39d0') - - # test vnet-gateway revoked-cert delete - self.cmd('network vnet-gateway revoked-cert delete -g {rg} -n MyCer --gateway-name {gateway}') - - output = self.cmd('network vnet-gateway vpn-client generate -g {rg} -n {gateway}').get_output_in_json() - self.assertTrue('.zip' in output, 'Expected ZIP file in output.\nActual: {}'.format(str(output))) - - output = self.cmd('network vnet-gateway vpn-client show-url -g {rg} -n {gateway}').get_output_in_json() - self.assertTrue('.zip' in output, 'Expected ZIP file in output.\nActual: {}'.format(str(output))) - - self.cmd('network vnet-gateway vpn-client ipsec-policy set -g {rg} -n {gateway} --ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 --ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 --sa-lifetime 7200 --sa-max-size 2048') - self.cmd('network vnet-gateway vpn-client ipsec-policy show -g {rg} -n {gateway}', checks=[ - self.check('dhGroup', 'DHGroup24'), - self.check('ikeEncryption', 'AES256'), - self.check('ikeIntegrity', 'SHA384'), - self.check('ipsecEncryption', 'GCMAES256'), - self.check('ipsecIntegrity', 'GCMAES256'), - self.check('pfsGroup', 'PFS24'), - self.check('saDataSizeKilobytes', 2048), - self.check('saLifeTimeSeconds', 7200), - ]) - - finally: - if os.path.exists(temp_dir): - shutil.rmtree(temp_dir) - - -class NetworkTrafficManagerScenarioTest(ScenarioTest): - - @ResourceGroupPreparer('cli_test_traffic_manager') - def test_network_traffic_manager(self, resource_group): - - self.kwargs.update({ - 'tm': 'mytmprofile', - 'endpoint': 'myendpoint', - 'dns': 'mytrafficmanager001100a' - }) - - self.cmd('network traffic-manager profile check-dns -n myfoobar1') - self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method priority --unique-dns-name {dns} --tags foo=doo', - checks=self.check('TrafficManagerProfile.trafficRoutingMethod', 'Priority')) - self.cmd('network traffic-manager profile show -g {rg} -n {tm}', - checks=self.check('dnsConfig.relativeName', '{dns}')) - self.cmd('network traffic-manager profile update -n {tm} -g {rg} --routing-method weighted --tags foo=boo', - checks=self.check('trafficRoutingMethod', 'Weighted')) - self.cmd('network traffic-manager profile list -g {rg}') - - # Endpoint tests - self.cmd('network traffic-manager endpoint create -n {endpoint} --profile-name {tm} -g {rg} --type externalEndpoints --weight 50 --target www.microsoft.com', - checks=self.check('type', 'Microsoft.Network/trafficManagerProfiles/externalEndpoints')) - self.cmd('network traffic-manager endpoint update -n {endpoint} --profile-name {tm} -g {rg} --type externalEndpoints --weight 25 --target www.contoso.com', checks=[ - self.check('weight', 25), - self.check('target', 'www.contoso.com') - ]) - self.cmd('network traffic-manager endpoint show -g {rg} --profile-name {tm} -t externalEndpoints -n {endpoint}') - self.cmd('network traffic-manager endpoint list -g {rg} --profile-name {tm} -t externalEndpoints', - checks=self.check('length(@)', 1)) - - # test show-geographic-hierarchy - self.cmd('network traffic-manager endpoint show-geographic-hierarchy', checks=[ - self.check('type', 'Microsoft.Network/trafficManagerGeographicHierarchies') - ]) - - # ensure a profile with endpoints can be updated - self.cmd('network traffic-manager profile update -n {tm} -g {rg}') - - self.cmd('network traffic-manager endpoint delete -g {rg} --profile-name {tm} -t externalEndpoints -n {endpoint}') - self.cmd('network traffic-manager endpoint list -g {rg} --profile-name {tm} -t externalEndpoints', - checks=self.check('length(@)', 0)) - - self.cmd('network traffic-manager profile delete -g {rg} -n {tm}') - - @ResourceGroupPreparer('cli_test_traffic_manager2') - def test_network_traffic_manager2(self, resource_group): - self.kwargs.update({ - 'tm': 'mytmprofile2', - 'dns': 'mytrafficmanager001100a2' - }) - self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method Multivalue --unique-dns-name {dns} --max-return 3 --tags foo=doo', - checks=self.check('TrafficManagerProfile.trafficRoutingMethod', 'MultiValue')) - - self.cmd('network traffic-manager profile update -n {tm} -g {rg} --routing-method MultiValue --max-return 4 --tags foo=boo', - checks=self.check('maxReturn', 4)) - - @ResourceGroupPreparer('cli_test_traffic_manager_subnet') - def test_network_traffic_manager_subnet_routing(self, resource_group): - - self.kwargs.update({ - 'tm': 'tm1', - 'endpoint': 'ep1', - 'dns': self.create_random_name('testtm', 20), - 'pip': 'ip1', - 'ip_dns': self.create_random_name('testpip', 20) - }) - - self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method subnet --unique-dns-name {dns} --custom-headers foo=bar --status-code-ranges 200-202', checks=[ - self.check('TrafficManagerProfile.monitorConfig.expectedStatusCodeRanges[0].min', 200), - self.check('TrafficManagerProfile.monitorConfig.expectedStatusCodeRanges[0].max', 202), - self.check('TrafficManagerProfile.monitorConfig.customHeaders[0].name', 'foo'), - self.check('TrafficManagerProfile.monitorConfig.customHeaders[0].value', 'bar') - ]) - self.kwargs['ip_id'] = self.cmd('network public-ip create -g {rg} -n {pip} --dns-name {ip_dns} --query publicIp.id').get_output_in_json() - self.cmd('network traffic-manager profile update -n {tm} -g {rg} --status-code-ranges 200-204 --custom-headers foo=doo test=best', checks=[ - self.check('monitorConfig.expectedStatusCodeRanges[0].min', 200), - self.check('monitorConfig.expectedStatusCodeRanges[0].max', 204), - self.check('monitorConfig.customHeaders[0].name', 'foo'), - self.check('monitorConfig.customHeaders[0].value', 'doo'), - self.check('monitorConfig.customHeaders[1].name', 'test'), - self.check('monitorConfig.customHeaders[1].value', 'best') - ]) - - # Endpoint tests - self.cmd('network traffic-manager endpoint create -n {endpoint} --profile-name {tm} -g {rg} --type azureEndpoints --target-resource-id {ip_id} --subnets 10.0.0.0 --custom-headers test=best', checks=[ - self.check('customHeaders[0].name', 'test'), - self.check('customHeaders[0].value', 'best'), - self.check('subnets[0].first', '10.0.0.0') - ]) - self.cmd('network traffic-manager endpoint update -n {endpoint} --type azureEndpoints --profile-name {tm} -g {rg} --subnets 10.0.0.0:24', checks=[ - self.check('subnets[0].first', '10.0.0.0'), - self.check('subnets[0].scope', '24') - ]) - self.cmd('network traffic-manager endpoint update -n {endpoint} --type azureEndpoints --profile-name {tm} -g {rg} --subnets 10.0.0.0-11.0.0.0', checks=[ - self.check('subnets[0].first', '10.0.0.0'), - self.check('subnets[0].last', '11.0.0.0') - ]) - - @ResourceGroupPreparer('cli_test_traffic_manager_always_serve') - def test_network_traffic_manager_always_serve(self, resource_group): - self.kwargs.update({ - "profile": self.create_random_name("profile-", 12), - "endpoint": self.create_random_name("endpoint-", 16), - "dns": "mytrafficmanager001100a1", - }) - - self.cmd("network traffic-manager profile create -n {profile} -g {rg} --routing-method weighted --unique-dns-name {dns}") - self.cmd( - "network traffic-manager endpoint create -n {endpoint} -g {rg} --profile-name {profile} " - "--type externalEndpoints --weight 50 --target www.microsoft.com --always-serve Enabled", - checks=[ - self.check("type", "Microsoft.Network/trafficManagerProfiles/externalEndpoints"), - self.check("alwaysServe", "Enabled"), - ] - ) - self.cmd( - "network traffic-manager endpoint update -n {endpoint} -g {rg} --profile-name {profile} " - "--type externalEndpoints --weight 25 --target www.contoso.com --always-serve Disabled", - checks=[ - self.check("weight", 25), - self.check("target", "www.contoso.com"), - self.check("alwaysServe", "Disabled"), - ] - ) - - -class NetworkWatcherConfigureScenarioTest(LiveScenarioTest): - - @ResourceGroupPreparer(name_prefix='cli_test_nw', location='westcentralus') - def test_network_watcher_configure(self, resource_group): - self.cmd('network watcher configure -g {rg} --locations westus westus2 westcentralus eastus canadaeast --enabled') - self.cmd('network watcher configure --locations westus westus2 eastus canadaeast --tags foo=doo') - self.cmd('network watcher configure -l westus2 --enabled false') - self.cmd('network watcher list') - - -class NetworkWatcherScenarioTest(ScenarioTest): - from unittest import mock - - def _mock_thread_count(self): - return 1 - - @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) - @ResourceGroupPreparer(name_prefix='cli_test_nw_vm', location='westcentralus') - @AllowLargeResponse() - def test_network_watcher_vm(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'loc': 'westcentralus', - 'vm': 'vm1', - 'nsg': 'nsg1', - 'capture': 'capture1', - 'private-ip': '10.0.0.9', - 'subnet': 'subnet1', - 'vnet': 'vnet1' - }) - - vm = self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --authentication-type password --admin-username deploy ' - '--admin-password PassPass10!) --nsg {nsg} --nsg-rule None --private-ip-address {private-ip} --subnet {subnet} --vnet-name {vnet}').get_output_in_json() - - # Disable default outbound access - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') - - self.kwargs['vm_id'] = vm['id'] - self.cmd('vm extension set -g {rg} --vm-name {vm} -n NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher') - - self.cmd('network watcher test-connectivity -g {rg} --source-resource {vm} --dest-address www.microsoft.com --dest-port 80 --valid-status-codes 200 202') - self.cmd('network watcher run-configuration-diagnostic --resource {vm_id} --direction Inbound --protocol TCP --source 12.11.12.14 --destination 10.1.1.4 --port 12100') - self.cmd('network watcher show-topology -g {rg}') - self.cmd('network watcher test-ip-flow -g {rg} --vm {vm} --direction inbound --local {private-ip}:22 --protocol tcp --remote 100.1.2.3:*') - self.cmd('network watcher test-ip-flow -g {rg} --vm {vm} --direction outbound --local {private-ip}:* --protocol tcp --remote 100.1.2.3:80') - self.cmd('network watcher show-security-group-view -g {rg} --vm {vm}') - self.cmd('network watcher show-next-hop -g {rg} --vm {vm} --source-ip 10.0.0.9 --dest-ip 10.0.0.6') - - @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) - @ResourceGroupPreparer(name_prefix='cli_test_nw_packet_capture', location='westus2') - @AllowLargeResponse() - def test_network_watcher_packet_capture(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'loc': resource_group_location, - 'vm': 'vm1', - 'capture1': 'capture1', - 'capture2': 'capture2', - 'subnet': 'subnet1', - 'vnet': 'vnet1' - }) - - self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --authentication-type password --admin-username deploy ' - '--admin-password PassPass10!) --nsg {vm} --subnet {subnet} --vnet-name {vnet} --nsg-rule None') - - # Disable default outbound access - self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') - - self.cmd('vm extension set -g {rg} --vm-name {vm} -n NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher') - - self.cmd('network watcher packet-capture create -g {rg} --vm {vm} -n {capture1} --file-path capture/capture.cap') - self.cmd('network watcher packet-capture create -g {rg} --vm {vm} -n {capture2} --file-path capture/capture.cap --target-type AzureVM') - self.cmd('network watcher packet-capture show -l {loc} -n {capture1}') - self.cmd('network watcher packet-capture stop -l {loc} -n {capture1}') - self.cmd('network watcher packet-capture show-status -l {loc} -n {capture1}') - self.cmd('network watcher packet-capture list -l {loc}') - self.cmd('network watcher packet-capture delete -l {loc} -n {capture1}') - self.cmd('network watcher packet-capture delete -l {loc} -n {capture2}') - self.cmd('network watcher packet-capture list -l {loc}') - - @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) - @ResourceGroupPreparer(name_prefix='cli_test_nw_packet_capture_vmss_as_target', location='westcentralus') - @AllowLargeResponse() - def test_network_watcher_packet_capture_vmss_as_target(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'loc': resource_group_location, - 'vmss': 'vmssForPcap', - 'capture': 'captureVmss', - 'capture1': 'captureVMSS1', - 'capture2': 'captureVMSS2' - }) - self.cmd('vmss create -g {rg} --name {vmss} --image Canonical:UbuntuServer:18.04-LTS:latest --location {loc} --admin-username azureuser --generate-ssh-keys --upgrade-policy-mode Automatic') - self.cmd('vmss extension set --name NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher --resource-group {rg} --vmss-name {vmss}') - - self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture} --target-type AzureVMSS --file-path capture/capture.cap', checks=[ - self.check('provisioningState', 'Succeeded') - ]) - self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture1} --target-type AzureVMSS --file-path capture/capture.cap --exclude 1') - self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture2} --target-type AzureVMSS --file-path capture/capture.cap --include 0 1') - self.cmd('network watcher packet-capture show -l {loc} -n {capture}') - self.cmd('network watcher packet-capture stop -l {loc} -n {capture}') - self.cmd('network watcher packet-capture show-status -l {loc} -n {capture}') - self.cmd('network watcher packet-capture list -l {loc}') - self.cmd('network watcher packet-capture delete -l {loc} -n {capture}') - self.cmd('network watcher packet-capture delete -l {loc} -n {capture1}') - self.cmd('network watcher packet-capture delete -l {loc} -n {capture2}') - self.cmd('network watcher packet-capture list -l {loc}') - - @ResourceGroupPreparer(name_prefix='cli_test_nw_troubleshooting', location='westcentralus') - @StorageAccountPreparer(name_prefix='clitestnw', location='westcentralus') - @AllowLargeResponse() - def test_network_watcher_troubleshooting(self, resource_group, resource_group_location, storage_account): - - self.kwargs.update({ - 'loc': resource_group_location, - 'sa': storage_account - }) - - # set up resource to troubleshoot - self.cmd('storage container create -n troubleshooting --account-name {sa}') - sa = self.cmd('storage account show -g {rg} -n {sa}').get_output_in_json() - self.kwargs['storage_path'] = sa['primaryEndpoints']['blob'] + 'troubleshooting' - self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name GatewaySubnet') - self.cmd('network public-ip create -g {rg} -n vgw1-pip') - self.cmd('network vnet-gateway create -g {rg} -n vgw1 --vnet vnet1 --public-ip-address vgw1-pip') - - # test troubleshooting - self.cmd('network watcher troubleshooting start --resource vgw1 -t vnetGateway -g {rg} --storage-account {sa} --storage-path {storage_path}') - self.cmd('network watcher troubleshooting show --resource vgw1 -t vnetGateway -g {rg}') - - -class ServiceEndpointScenarioTest(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='network_service_endpoint_scenario_test', location='westcentralus') - def test_network_service_endpoints(self, resource_group, resource_group_location): - - self.kwargs.update({ - 'policy': 'policy1', - 'pd_name': 'storage-def', - 'sub': self.get_subscription_id(), - 'vnet': 'vnet1', - 'subnet': 'subnet1', - 'loc': resource_group_location - }) - - self.cmd('network service-endpoint list -l {loc}') - - # test policy CRUD - self.cmd('network service-endpoint policy create -g {rg} -n {policy} --tags test=best', - checks=self.check('tags.test', 'best')) - self.cmd('network service-endpoint policy update -g {rg} -n {policy} --tags test=nest', - checks=self.check('tags.test', 'nest')) - self.cmd('network service-endpoint policy list -g {rg}', - checks=self.check('length(@)', 1)) - self.cmd('network service-endpoint policy show -g {rg} -n {policy}', - checks=self.check('tags.test', 'nest')) - self.cmd('network service-endpoint policy delete -g {rg} -n {policy}') - self.cmd('network service-endpoint policy list -g {rg}', - checks=self.check('length(@)', 0)) - - # test policy definition CRUD - self.cmd('network service-endpoint policy create -g {rg} -n {policy} --tags test=best') - self.cmd('network service-endpoint policy-definition create -g {rg} --policy-name {policy} -n {pd_name} --service Microsoft.Storage --description "Test Def" --service-resources /subscriptions/{sub}', checks=[ - self.check("length(serviceResources)", 1), - self.check('service', 'Microsoft.Storage'), - self.check('description', 'Test Def') - ]) - self.cmd('network service-endpoint policy-definition update -g {rg} --policy-name {policy} -n {pd_name} --description "Better description"', - self.check('description', 'Better description')) - self.cmd('network service-endpoint policy-definition list -g {rg} --policy-name {policy}', - checks=self.check('length(@)', 1)) - self.cmd('network service-endpoint policy-definition show -g {rg} --policy-name {policy} -n {pd_name}', - checks=self.check('description', 'Better description')) - self.cmd('network service-endpoint policy-definition delete -g {rg} --policy-name {policy} -n {pd_name}') - self.cmd('network service-endpoint policy-definition list -g {rg} --policy-name {policy}', - checks=self.check('length(@)', 0)) - - # create a subnet with the policy - self.cmd('network service-endpoint policy-definition create -g {rg} --policy-name {policy} -n {pd_name} --service Microsoft.Storage --service-resources /subscriptions/{sub}') - self.cmd('network vnet create -g {rg} -n {vnet}') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --service-endpoints Microsoft.Storage --service-endpoint-policy {policy} --default-outbound false', - checks=self.check("contains(serviceEndpointPolicies[0].id, '{policy}')", True)) - - -class NetworkProfileScenarioTest(ScenarioTest): - - @live_only() - @ResourceGroupPreparer(name_prefix='test_network_profile') - def test_network_profile(self, resource_group): - - # no e2e scenario without create. Testing path to service only. - self.cmd('network profile list') - self.cmd('network profile list -g {rg}') - with self.assertRaisesRegex(SystemExit, '3'): - self.cmd('network profile show -g {rg} -n dummy') - self.cmd('network profile delete -g {rg} -n dummy -y') - - -class NetworkServiceAliasesScenarioTest(ScenarioTest): - - @AllowLargeResponse(size_kb=99999) - @ResourceGroupPreparer(name_prefix='test_network_service_aliases') - def test_network_service_aliases(self, resource_group): - self.kwargs.update({ - 'rg': resource_group - }) - self.cmd('network list-service-aliases -l centralus', checks=self.check('type(@)', 'array')) - self.cmd('network list-service-aliases -l centralus -g {rg}', checks=self.check('type(@)', 'array')) - - # test list-service-tags - self.cmd('network list-service-tags -l centralus', checks=self.check('type(@)', 'object')) - - -class NetworkVirtualNetworkGatewayNatRule(ScenarioTest): - - @ResourceGroupPreparer() - def test_network_vnet_gateway_nat_rule(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'ip': 'ip', - 'ip1': 'ip1', - 'vnet': 'vnet', - 'vnet1': 'vnet1', - 'subnet': 'GatewaySubnet', - 'vg': 'vnet-gateway-name', - 'vg1': 'vnet-gateway-name1', - 'sku': 'VpnGw2', - }) - - # minimal parameters - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku} ' - '--nat-rule name=nat internal-mappings=10.4.0.0/24 external-mappings=192.168.21.0/24 ', - checks=[self.check('length(vnetGateway.natRules)', 1)]) - self.cmd("network vnet-gateway show -n {vg} -g {rg}") - self.cmd("network vnet-gateway list -g {rg}") - - # minimal parameters(ip-config-id can only be set when type is Dynamic, and only allowlist sub-ids support Dynamic) - self.cmd('network public-ip create -g {rg} -n {ip1}') - self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name {subnet}') - self.cmd('network vnet-gateway create -g {rg} -n {vg1} --vnet {vnet1} --public-ip-address {ip1} --sku {sku} ' - '--nat-rule name=nat type=Static mode=EgressSnat internal-mappings=10.4.0.0/24 ' - 'external-mappings=192.168.21.0/24', - checks=[self.check('length(vnetGateway.natRules)', 1)]) - - # test vnet-gateway reset - self.cmd('network vnet-gateway reset -g {rg} -n {vg}') - - @ResourceGroupPreparer() - def test_network_vnet_gateway_nat_rule_sub_cmd(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'ip': 'ip', - 'vnet': 'vnet', - 'subnet': 'GatewaySubnet', - 'vg': 'vnet-gateway-name', - 'sku': 'VpnGw2', - 'nat': 'nat-rule-name', - 'nat1': 'nat-rule-name1', - }) - - # minimal parameters - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku}') - - # sub cmd - self.cmd('network vnet-gateway nat-rule add -g {rg} --gateway-name {vg} --name {nat} ' - '--internal-mappings 10.4.0.0/24 --external-mappings 192.168.21.0/24', - checks=[self.check('length(natRules)', 1)]) - - self.cmd('network vnet-gateway nat-rule add -g {rg} --gateway-name {vg} --name {nat1} ' - '--internal-mappings 10.3.0.0/24 --external-mappings 192.168.22.0/24', - checks=[self.check('length(natRules)', 2)]) - - self.cmd('network vnet-gateway nat-rule list -g {rg} --gateway-name {vg} ', - checks=[self.check('length(@)', 2)]) - - self.cmd('network vnet-gateway nat-rule remove -g {rg} --gateway-name {vg} --name {nat}', - checks=[self.check('length(natRules)', 1)]) - - -class NetworkSecurityPartnerProviderScenarioTest(ScenarioTest): - def __init__(self, method_name, config_file=None, recording_dir=None, recording_name=None, recording_processors=None, - replay_processors=None, recording_patches=None, replay_patches=None): - super().__init__(method_name) - self.cmd('extension add -n virtual-wan') - - @unittest.skip('Decouple with virtual-wan bump API version') - @ResourceGroupPreparer(name_prefix='cli_test_security_partner_provider_', location='westus') - @AllowLargeResponse() - def test_network_security_partner_provider(self): - self.kwargs.update({ - 'vwan': 'clitestvwan', - 'vhub': 'clitestvhub', - 'gateway': 'cligateway', - 'name': 'clisecuritypartnerprovider' - }) - - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') - self.cmd('network vpn-gateway create -g {rg} -n {gateway} --vhub {vhub}') - - self.cmd('network security-partner-provider create -n {name} -g {rg} --vhub {vhub} --provider Checkpoint', checks=[ - self.check('name', '{name}'), - self.check('securityProviderName', 'Checkpoint') - ]) - self.cmd('network security-partner-provider show -n {name} -g {rg}', checks=[ - self.check('name', '{name}'), - self.check('securityProviderName', 'Checkpoint') - ]) - self.cmd('network security-partner-provider update -n {name} -g {rg} --tag a=b', checks=[ - self.check('tags.a', 'b') - ]) - self.cmd('network security-partner-provider list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network security-partner-provider list', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network security-partner-provider delete -n {name} -g {rg}') - - -class NetworkVirtualApplianceScenarioTest(ScenarioTest): - def setUp(self): - super().setUp() - self.cmd('extension add -n virtual-wan') - - def tearDown(self): - # avoid influence other test when parallel run - # self.cmd('extension remove -n virtual-wan') - super().tearDown() - - @unittest.skip('GatewayError') - @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance') - @AllowLargeResponse() - def test_network_virtual_appliance(self, resource_group): - self.kwargs.update({ - 'vwan': 'clitestvwan', - 'vhub': 'clitestvhub', - 'name': 'cli-virtual-appliance', - 'site': 'cli-site', - 'blob': 'https://azurecliprod.blob.core.windows.net/cli-extensions/account-0.1.0-py2.py3-none-any.whl', - 'rg': resource_group - }) - - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') - - self.cmd('network virtual-appliance create -n {name} -g {rg} --vhub {vhub} --vendor "barracudasdwanrelease" ' - '--scale-unit 2 -v latest --asn 10000 --init-config "echo $abc" ' - '--boot-blobs {blob} {blob} --cloud-blobs {blob} {blob}', - checks=[ - self.check('name', '{name}'), - self.check('length(bootStrapConfigurationBlobs)', 2), - self.check('length(cloudInitConfigurationBlobs)', 2), - self.check('virtualApplianceAsn', 10000), - self.check('cloudInitConfiguration', "echo $abc") - ]) - self.cmd('network virtual-appliance update -n {name} -g {rg} --asn 20000 --init-config "echo $abcd"', checks=[ - self.check('virtualApplianceAsn', 20000), - self.check('cloudInitConfiguration', "echo $abcd") - ]) - self.cmd('network virtual-appliance show -n {name} -g {rg}', checks=[ - self.check('name', '{name}'), - self.check('length(bootStrapConfigurationBlobs)', 2), - self.check('length(cloudInitConfigurationBlobs)', 2), - self.check('virtualApplianceAsn', 20000), - self.check('cloudInitConfiguration', "echo $abcd") - ]) - self.cmd('network virtual-appliance list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) - self.cmd('network virtual-appliance list', checks=[ - self.check('length(@)', 1) - ]) - - self.cmd('network virtual-appliance sku list', checks=[ - self.check('length(@)', 3) - ]) - self.cmd('network virtual-appliance sku show --name "barracudasdwanrelease"', checks=[ - self.check('name', 'barracudasdwanrelease') - ]) - - self.cmd('network virtual-appliance site create -n {site} -g {rg} --appliance-name {name} --address-prefix 10.0.0.0/24 --allow --default --optimize', checks=[ - self.check('name', '{site}'), - self.check('o365Policy.breakOutCategories.allow', True), - self.check('o365Policy.breakOutCategories.default', True), - self.check('o365Policy.breakOutCategories.optimize', True), - self.check('addressPrefix', '10.0.0.0/24') - ]) - self.cmd('network virtual-appliance site update -n {site} -g {rg} --appliance-name {name} --address-prefix 10.0.0.1/24 --allow false --default false --optimize false', checks=[ - self.check('name', '{site}'), - self.check('o365Policy.breakOutCategories.allow', False), - self.check('o365Policy.breakOutCategories.default', False), - self.check('o365Policy.breakOutCategories.optimize', False), - self.check('addressPrefix', '10.0.0.1/24') - ]) - self.cmd('network virtual-appliance site show -n {site} -g {rg} --appliance-name {name}', checks=[ - self.check('name', '{site}'), - self.check('o365Policy.breakOutCategories.allow', False), - self.check('o365Policy.breakOutCategories.default', False), - self.check('o365Policy.breakOutCategories.optimize', False), - self.check('addressPrefix', '10.0.0.1/24') - ]) - self.cmd('network virtual-appliance site list -g {rg} --appliance-name {name}', checks=[ - # self.check('length(@)', 1) - ]) - self.cmd('network virtual-appliance site delete -n {site} -g {rg} --appliance-name {name} -y') - self.cmd('network virtual-appliance delete -n {name} -g {rg} -y') - - - -class NetworkVirtualApplianceIdentityScenarioTest(ScenarioTest): - @live_only() - @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance_identity') - @AllowLargeResponse(size_kb=9999) - def test_network_virtual_appliance_identity(self, resource_group): - from time import sleep - self.kwargs.update({ - 'vwan': 'clitestvwan', - 'vhub': 'clittestvhub', - 'nva_name1': 'cli-virtual-appliance1', - 'nva_name2': 'cli-virtual-appliance2', - 'nva_name3': 'cli-virtual-appliance3', - 'nva_name4': 'cli-virtual-appliance4', - 'nva_name5': 'cli-virtual-appliance5', - 'nva_name6': 'cli-virtual-appliance6', - 'rg': resource_group, - 'ua_Identity1': 'cli-ua-identity1', - 'ua_Identity2': 'cli-ua-identity2' - }) - self.cmd('extension add -n virtual-wan') - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - retry_count = 0 - while routing_state != 'Provisioned': - if retry_count == 20: - break - retry_count += 1 - sleep(360) - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - identityProperty1 = '{"type":"SystemAssigned"}' - self.kwargs.update({ - 'identityProperty1': identityProperty1 - }) - self.cmd('network virtual-appliance create -n {nva_name3} -g {rg} --vhub {vhub} --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', - checks=[ - self.check('name', '{nva_name3}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance show -g {rg} -n {nva_name3}', - checks=[ - self.check('name', '{nva_name3}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance create -n {nva_name4} -g {rg} --vhub {vhub} --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', - checks=[ - self.check('name', '{nva_name4}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance show -g {rg} -n {nva_name4}', - checks=[ - self.check('name', '{nva_name4}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance create -n {nva_name1} -g {rg} --vhub {vhub} --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" --identity {identityProperty1}', - checks=[ - self.check('name', '{nva_name1}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'SystemAssigned') - ]) - self.cmd('network virtual-appliance show -g {rg} -n {nva_name1}', - checks=[ - self.check('name', '{nva_name1}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'SystemAssigned') - ]) - self.cmd('network virtual-appliance delete -n {nva_name1} -g {rg} -y') - self.cmd('identity create -g {rg} -n {ua_Identity1}').get_output_in_json() - subscriptionId = self.get_subscription_id() - uaIdentity1 = self.kwargs.get('ua_Identity1') - resourceGroup = self.kwargs.get('rg') - identityProperty2 = '{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/"' + subscriptionId + '"/resourceGroups/"' + resourceGroup + '"/providers/Microsoft.ManagedIdentity/userAssignedIdentities/"' + uaIdentity1 + ':{}}}' - self.kwargs.update({ - 'identityProperty2': identityProperty2 - }) - self.cmd('network virtual-appliance create -n {nva_name2} -g {rg} --vhub {vhub} --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" --identity {identityProperty2} ', - checks=[ - self.check('name', '{nva_name2}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'UserAssigned') - ]) - self.cmd('network virtual-appliance show -g {rg} -n {nva_name2}', - checks=[ - self.check('name', '{nva_name2}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'UserAssigned') - ]) - self.cmd('network virtual-appliance delete -n {nva_name2} -g {rg} -y') - identityProperty3 = '{"type":"SystemAssigned"}' - self.kwargs.update({ - 'identityProperty3': identityProperty3 - }) - self.cmd('network virtual-appliance update -g {rg} -n {nva_name3} --identity {identityProperty3}', - checks=[ - self.check('name', '{nva_name3}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'SystemAssigned') - ]) - self.cmd('network virtual-appliance delete -n {nva_name3} -g {rg} -y') - - self.cmd('identity create -g {rg} -n {ua_Identity2}').get_output_in_json() - uaIdentity2 = self.kwargs.get('ua_Identity2') - identityProperty4 = '{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/"' + subscriptionId + '"/resourceGroups/"' + resourceGroup + '"/providers/Microsoft.ManagedIdentity/userAssignedIdentities/"' + uaIdentity2 + ':{}}}' - self.kwargs.update({ - 'identityProperty4': identityProperty4 - }) - self.cmd('network virtual-appliance update -g {rg} -n {nva_name4} --identity {identityProperty4}', - checks=[ - self.check('name', '{nva_name4}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc'), - self.check('identity.type', 'UserAssigned') - ]) - self.cmd('network virtual-appliance delete -n {nva_name4} -g {rg} -y') - -class NetworkVirtualApplianceConnectionScenarioTest(ScenarioTest): - @live_only() - @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance_connection') - @AllowLargeResponse(size_kb=9999) - def test_network_virtual_appliance_connection(self, resource_group): - from time import sleep - subscriptionId = self.get_subscription_id() - self.kwargs.update({ - 'vwan': 'clitestvwan', - 'vhub': 'clittestvhub', - 'nva_name': 'clivirtualappliance', - 'rg': resource_group, - 'name': 'defaultConnection', - 'subscription': subscriptionId - }) - self.cmd('extension add -n virtual-wan') - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - retry_count = 0 - while routing_state != 'Provisioned': - if retry_count == 20: - break - retry_count += 1 - sleep(360) - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - self.cmd('network virtual-appliance create -n {nva_name} -g {rg} --vhub {vhub} --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', - checks=[ - self.check('name', '{nva_name}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', - checks=[ - self.check('name', '{nva_name}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - self.cmd('network virtual-appliance connection show -n {name} -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ - self.check('name', '{name}') - ]) - - self.cmd('network virtual-appliance connection list -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ - self.check('length(@)', 1) - ]) - - self.cmd('network virtual-appliance connection update ' - '-n {name} ' - '-g {rg} ' - '--nva {nva_name} ' - '--labels [label1,label2] ') - - self.cmd('network virtual-appliance connection show -n {name} -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ - self.check('length(properties.routingConfiguration.propagatedRouteTables.labels)', 2), - self.check('properties.routingConfiguration.propagatedRouteTables.labels[0]', 'label1') - ]) - - @record_only() - def test_get_boot(self): - self.cmd('network virtual-appliance get-boot-diagnostic-log -n chkptbd1031 -g nashoktest --scs-sas-url "https://stonashoktest.blob.core.windows.net/testcontainer/example.txt?sp=rw&st=2025-03-07T03:47:49Z&se=2025-03-08T11:47:49Z&skoid=7f5b7efd-fa3f-4fbd-9430-8cf0f0ca6822&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2025-03-07T03:47:49Z&ske=2025-03-08T11:47:49Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=b&sig=TOSsTfWx3e6ti7YLmeYms%2B3hAwMUSTlilE%2F08iht%2BUc%3D" --css-sas-url "https://stonashoktest.blob.core.windows.net/testcontainer/pstestscreenshot.png?sp=rw&st=2025-03-07T03:48:23Z&se=2025-03-08T11:48:23Z&skoid=7f5b7efd-fa3f-4fbd-9430-8cf0f0ca6822&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2025-03-07T03:48:23Z&ske=2025-03-08T11:48:23Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=b&sig=4rU9xYe4T6t8GDUI0SVOhywiQWxIEtRSytpzq0xKwWY%3D"') - - -class NetworkVirtualApplianceReimageScenarioTest(ScenarioTest): - @live_only() - @ResourceGroupPreparer(location='eastus2euap', name_prefix='test_network_virtual_appliance_reimage') - @AllowLargeResponse(size_kb=9999) - def test_network_virtual_appliance_reimage(self, resource_group): - from time import sleep - - # Variables to use in the test - subscriptionId = self.get_subscription_id() - self.kwargs.update({ - 'vwan': 'clitestvwan', # Virtual WAN name - 'vhub': 'clivhub', # Virtual Hub name - 'nva_name': 'clivirtualappliancereimage', # NVA name - 'rg': resource_group, - 'name': 'defaultConnection', - 'subscription': subscriptionId, - 'instance_id' : 0 - }) - - # Add the required extension - self.cmd('extension add -n virtual-wan') - - # Create Virtual WAN - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard', checks=[ - self.check('name', '{vwan}'), - self.check('type', 'Microsoft.Network/virtualWans') - ]) - - # Create Virtual Hub within the Virtual WAN - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard', checks=[ - self.check('name', '{vhub}'), - ]) - - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - retry_count = 0 - while routing_state != 'Provisioned': - if retry_count == 20: - break - retry_count += 1 - sleep(360) - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - - # Create the NVA - self.cmd('network virtual-appliance create -n {nva_name} -g {rg} --vhub clivhub --vendor "checkpoint" ' - '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc"', - checks=[ - self.check('name', '{nva_name}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - - # Verify the NVA exists - self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', - checks=[ - self.check('name', '{nva_name}'), - self.check('virtualApplianceAsn', 64512), - self.check('cloudInitConfiguration', 'echo $abc') - ]) - - # Trigger the reimage operation (you won't get useful data in response, just confirm the request is accepted) - response = self.cmd('network virtual-appliance reimage -g {rg} --network-virtual-appliance-name {nva_name} --subscription {subscription} --instance-ids {instance_id}') - - # Wait for the reimage operation to complete and check provisioning state - provisioning_state = self.cmd('network virtual-appliance show -g {rg} -n {nva_name}').get_output_in_json()['provisioningState'] - retry_count = 0 - while provisioning_state != 'Succeeded': - if retry_count == 20: - raise Exception(f"Reimage operation did not complete successfully. Last known provisioningState: {provisioning_state}") - retry_count += 1 - sleep(60) - provisioning_state = self.cmd('network virtual-appliance show -g {rg} -n {nva_name}').get_output_in_json()['provisioningState'] - - # Ensure that the provisioning state is 'Succeeded' after reimaging - self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', - checks=[ - self.check('provisioningState', 'Succeeded') - ]) - -class NetworkVirtualApplianceVnetScenarioTest(ScenarioTest): - - @AllowLargeResponse() - @ResourceGroupPreparer(location='eastus2euap', name_prefix='test_nva_vnet') - def test_network_virtual_appliance_vnet_interface_config(self, resource_group): - from time import sleep - - def _get_request_id(ex: Exception) -> str: - try: - headers = getattr(getattr(ex, 'response', None), 'headers', {}) or {} - return headers.get('x-ms-request-id', 'N/A') - except Exception: - return 'N/A' - - def _is_transient_update_error(ex: Exception) -> bool: - msg = str(ex) - return ('NvaOperationNotAllowed' in msg) or ('nvaoperationnotallowed' in msg.lower()) - - # -------- (0) args -------- - self.kwargs.update({ - 'rg': resource_group, - 'vnet': 'cli-nva-vnet', - 'addrSpace': '10.10.0.0/16', - - 'subnetPriv': 'ApplianceSubnet', # nic0 - 'privPrefix': '10.10.1.0/24', - - 'subnetPub': 'ApplianceSubnetPublic', # nic1 - 'pubPrefix': '10.10.2.0/24', - - 'name': 'cli-virtual-appliance-vnet', - 'vendor': 'barracudasdwanrelease', - 'version': 'latest', - 'asn': '10000', - 'scale': '10', - 'asnUpdated': '20000', - }) - - # ------- (1) network dependencies ------- - self.cmd( - 'network vnet create ' - '-g {rg} -n {vnet} -l eastus2euap ' - '--address-prefixes {addrSpace} ' - '--subnet-name {subnetPriv} --subnet-prefix {privPrefix}', - checks=[self.check('newVNet.subnets[0].name', '{subnetPriv}')] - ) - self.cmd( - 'network vnet subnet create ' - '-g {rg} --vnet-name {vnet} -n {subnetPub} ' - '--address-prefixes {pubPrefix}', - checks=[self.check('name', '{subnetPub}')] - ) - - vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() - sub_priv_id = next(s['id'] for s in vnet['subnets'] if s['name'] == self.kwargs['subnetPriv']) - sub_pub_id = next(s['id'] for s in vnet['subnets'] if s['name'] == self.kwargs['subnetPub']) - - # ------- (2) init interface config ------- - iface_init = ( - "[{name:'nic0',subnet:{id:'%s'},type:['PrivateNic']}," - "{name:'nic1',subnet:{id:'%s'},type:['PublicNic']}]" - ) % (sub_priv_id, sub_pub_id) - self.kwargs.update({'iface_init': iface_init}) - - # ------- (3) create ------- - self.cmd( - "network virtual-appliance create " - "-n {name} -g {rg} " - "--vendor {vendor} --scale-unit {scale} -v {version} --asn {asn} " - "--interface-configs '{iface_init}'", - checks=[ - self.check('name', '{name}'), - self.check('length(nvaInterfaceConfigurations)', 2), - self.check('virtualApplianceAsn', '{asn}') - ] - ) - - # ------- (3.1) list ------- - self.cmd( - 'network virtual-appliance list -g {rg}', - checks=[self.check('length(@)', 1), self.check('[0].name', '{name}')] - ) - - # ------- (4) loop until succeeded -------- - retry_count = 0 - while True: - show = self.cmd('network virtual-appliance show -g {rg} -n {name}').get_output_in_json() - state = show.get('provisioningState') - - if state == 'Succeeded': - break - retry_count += 1 - if retry_count >= 20: - raise Exception(f'Operation not complete: provisioningState={state}, retry_count={retry_count}') - sleep(60) - - # -------- (5) wait 15 min -------- - sleep(15 * 60) - - max_retries = 5 - attempt = 0 - while True: - try: - self.cmd( - 'network virtual-appliance update -n {name} -g {rg} --asn {asnUpdated}', - checks=[ - self.check('name', '{name}'), - self.check('virtualApplianceAsn', '{asnUpdated}'), - self.check('length(nvaInterfaceConfigurations)', 2), - self.check('nvaInterfaceConfigurations[0].name', 'nic0'), - self.check('nvaInterfaceConfigurations[1].name', 'nic1'), - ] - ) - break - except Exception as ex: - attempt += 1 - req_id = _get_request_id(ex) - if attempt > max_retries or not _is_transient_update_error(ex): - raise Exception( - f'UPDATE failed after {attempt} attempt(s). ' - f'x-ms-request-id={req_id}. Error={ex}' - ) - sleep(10 * 60) - - # ------- (6) verify show ------- - show = self.cmd('network virtual-appliance show -n {name} -g {rg}').get_output_in_json() - iface_count = len(show['nvaInterfaceConfigurations']) - expected_nics = len(show['virtualApplianceNics']) - - self.cmd( - 'network virtual-appliance show -n {name} -g {rg}', - checks=[ - self.check('name', '{name}'), - self.check('virtualApplianceAsn', '{asnUpdated}'), - self.check('length(nvaInterfaceConfigurations)', iface_count), - self.check('length(virtualApplianceNics)', expected_nics) - ] - ) - - # ------- (7) delete with retries ------- - retry_count = 0 - while True: - show = self.cmd('network virtual-appliance show -n {name} -g {rg}').get_output_in_json() - state = show.get('provisioningState') - if state in ('Succeeded', 'Failed'): - break - retry_count += 1 - if retry_count >= 10: - print(f'WARN: provisioningState={state}, proceed to delete anyway.') - break - sleep(60) - - def _is_transient_nva_error(ex: Exception) -> bool: - msg = str(ex).lower() - return ('nvaoperationnotallowed' in msg) or ('nvaoperationfailed' in msg) - - max_del_retries = 6 - attempt = 0 - while True: - try: - self.cmd('network virtual-appliance delete -n {name} -g {rg} -y') - break - except Exception as ex: - attempt += 1 - if attempt > max_del_retries or not _is_transient_nva_error(ex): - print(f'WARN: NVA delete failed ({ex}); fallback to --no-wait and RG delete.') - try: - self.cmd('network virtual-appliance delete -n {name} -g {rg} -y --no-wait') - except Exception as ex2: - print(f'WARN: async NVA delete also failed: {ex2}') - try: - self.cmd('group delete --name {rg} --yes --no-wait') - except Exception as ex3: - print(f'WARN: RG delete initiation failed: {ex3}') - break - print( - f'INFO: NVA delete transient failure (attempt {attempt}/{max_del_retries}). Sleep 10 minutes then retry...') - sleep(10 * 60) - - # ------- (8) verify deletion ------- - self.cmd('network virtual-appliance show -n {name} -g {rg}', expect_failure=True) - - -class NetworkExtendedLocation(ScenarioTest): - @ResourceGroupPreparer(name_prefix='test_network_lb_edge_zone', location='eastus2euap') - def test_network_lb_edge_zone(self, resource_group): - - self.kwargs.update({ - 'lb': 'lb', - 'lb1': 'lb1', - 'sku': 'standard', - 'ip': 'pubip1', - 'edge_name': 'microsoftrrdclab1' - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku {sku} --public-ip-address {ip} --edge-zone {edge_name}') - self.cmd('network lb show -g {rg} -n {lb}', checks=self.check('extendedLocation.name', '{edge_name}')) - - self.cmd('network lb create -g {rg} -n {lb1} --vnet-name vnet1 --subnet subnet1 --edge-zone {edge_name}') - - @ResourceGroupPreparer(name_prefix='test_network_nic_edge_zone', location='eastus2euap') - def test_network_nic_edge_zone(self, resource_group): - - self.kwargs.update({ - 'vnet': 'clitestvnet', - 'nic': 'clitestnic', - 'rg': resource_group, - 'edge_name': 'microsoftdclabs1' - }) - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name subnet1 --edge-zone {edge_name}', - checks=self.check('newVNet.extendedLocation.name', '{edge_name}')) - self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name {vnet} --edge-zone {edge_name}', - checks=self.check('NewNIC.extendedLocation.name', '{edge_name}')) - - @ResourceGroupPreparer(name_prefix='test_network_public_ip_edge_zone', location='eastus2euap') - def test_network_public_ip_edge_zone(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'ip1': 'pubip1', - 'edge_name': 'microsoftrrdclab1' - }) - - self.cmd('network public-ip create -g {rg} -n {ip1} --edge-zone {edge_name} --sku Standard', - checks=self.check('publicIp.extendedLocation.name', '{edge_name}')) - - @ResourceGroupPreparer(name_prefix='test_network_public_ip_prefix_edge_zone', location='eastus2euap') - def test_network_public_ip_prefix_edge_zone(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'ip1': 'pubip1-prefix', - 'edge_name': 'microsoftrrdclab1' - }) - - self.cmd('network public-ip prefix create -g {rg} -n {ip1} --length 30 --edge-zone {edge_name}', - checks=self.check('extendedLocation.name', '{edge_name}')) - - @ResourceGroupPreparer(name_prefix='test_network_public_ip_prefix_with_tier', location='eastus2euap') - def test_network_public_ip_prefix_with_tier(self, resource_group): - self.kwargs.update({ - 'prefix1': self.create_random_name('prefix', 15), - 'prefix2': self.create_random_name('prefix', 15), - }) - - self.cmd('network public-ip prefix create -g {rg} -n {prefix1} --length 28 --tier regional', - checks=self.check('sku.tier', 'Regional')) - self.cmd('network public-ip prefix create -g {rg} -n {prefix2} --length 28 --tier global', - checks=self.check('sku.tier', 'Global')) - - # @unittest.skip('wait for service ready') - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_edge_zone', location='southeastasia') - def test_network_vnet_gateway_edge_zone(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'ip1': 'pubip1', - 'vnet': 'vnet', - 'edge_name': 'microsoftrrdclab1' - }) - self.cmd('network public-ip create -g {rg} -n {ip1}') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') - self.cmd('network vnet-gateway create -g {rg} -n vnet-gateway --vnet {vnet} --public-ip-address {ip1} ' - '--edge-zone {edge_name}', - checks=self.check('vnetGateway.extendedLocation.name', '{edge_name}')) - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_local_gateway', location='eastus2euap') - def test_network_vnet_gateway_local_gateway(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'vnet': 'vnet', - 'gateway_type': 'LocalGateway', - 'edge_name': 'microsoftrrdclab3', - }) - self.cmd('az network vnet create -g {rg} -n {vnet} --location eastus2euap --address-prefix 10.30.0.0/16 --edge-zone {edge_name}') - self.kwargs['edge_zone_vnet_id'] = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json()['id'] - self.cmd('network vnet-gateway create -g {rg} -n vnet-gateway --vnet {vnet} --gateway-type {gateway_type} --edge-zone {edge_name} ' - '--edge-zone-vnet-id {edge_zone_vnet_id}', - checks=self.check('vnetGateway.vNetExtendedLocationResourceId', '{edge_zone_vnet_id}')) - - @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_with_enable_private_ip_address', location='eastus') - def test_network_vnet_gateway_with_enable_private_ip_address(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'ip': self.create_random_name('ip-', 10), - 'vnet': self.create_random_name('vnet-', 10), - 'vnet_gateway': self.create_random_name('vg-', 10), - }) - - self.cmd('network vnet create -g {rg} -n {vnet} -l eastus --address-prefix 10.1.0.0/16 --subnet-name Frontend --subnet-prefix 10.1.0.0/24') - self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n GatewaySubnet --address-prefix 10.1.255.0/27 --default-outbound false') - self.cmd('network public-ip create -g {rg} -n {ip}') - self.cmd('network vnet-gateway create -g {rg} -n {vnet_gateway} --vnet {vnet} --public-ip-address {ip} --gateway-type Vpn --sku VpnGw2 --vpn-gateway-generation Generation2 --enable-private-ip true -l eastus --no-wait') - self.cmd('network vnet-gateway show -g {rg} -n {vnet_gateway}', checks=self.check("enablePrivateIpAddress", True)) - self.cmd('network vnet-gateway wait -g {rg} -n {vnet_gateway} --created') - self.cmd('network vnet-gateway update -g {rg} -n {vnet_gateway} --enable-private-ip false') - self.cmd('network vnet-gateway show -g {rg} -n {vnet_gateway}', checks=self.check("enablePrivateIpAddress", False)) - - @ResourceGroupPreparer(name_prefix='test_network_private_endpoint_edge_zone', location='eastus2euap') - def test_network_private_endpoint_edge_zone(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'lb': 'lb', - 'vnet': 'vnet', - 'edge_name': 'microsoftdclabs1', - 'subnet1': 'subnet1', - 'subnet2': 'subnet2', - }) - self.cmd('network lb create -g {rg} -n {lb} --public-ip-address ip --sku Standard') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} --edge-zone {edge_name}') - self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} ' - '--disable-private-link-service-network-policies') - self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} ' - '--address-prefixes 10.0.2.0/24 --default-outbound false') - self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} ' - '--disable-private-endpoint-network-policies') - - pls = self.cmd('network private-link-service create -g {rg} -n pls --vnet-name {vnet} --subnet {subnet1} ' - '--lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd --edge-zone {edge_name}', - checks=self.check('extendedLocation.name', '{edge_name}')).get_output_in_json() - self.kwargs['pls_id'] = pls['id'] - self.cmd('network private-endpoint create -g {rg} -n pe --vnet-name {vnet} --subnet {subnet2} ' - '--private-connection-resource-id {pls_id} --connection-name cn --edge-zone {edge_name}', - checks=self.check('extendedLocation.name', '{edge_name}')) - - -class NetworkLoadBalancerWithSkuGateway(ScenarioTest): - - @ResourceGroupPreparer(name_prefix='test_network_lb_tunnel_interface', location='eastus') - def test_network_lb_tunnel_interface(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'lb': 'lb', - 'sku': 'Gateway', - 'vnet': 'vnet', - 'subnet': 'subnet', - 'bap': 'backend-address-pool-name', - 'type': 'External', - 'type1': 'Internal', - 'protocol': 'vxlan', - 'identifier': '950', - 'identifier1': '960', - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku {sku} --vnet-name {vnet} --subnet {subnet}') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap} --vnet {vnet}') - - # default - self.cmd('network lb address-pool tunnel-interface add -g {rg} --lb-name {lb} --address-pool {bap} ' - '--type {type} --protocol {protocol} --identifier {identifier} --port 15000', - checks=self.check('length(tunnelInterfaces)', 2)) - self.cmd('network lb address-pool tunnel-interface list -g {rg} --lb-name {lb} --address-pool {bap}', - checks=self.check('length(@)', 2)) - self.cmd('network lb address-pool tunnel-interface remove -g {rg} --lb-name {lb} --address-pool {bap} ' - '--index 0') - self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap} ' - '--type {type1} --protocol {protocol} --identifier {identifier1} --port 10000 --index 0', - checks=self.check('tunnelInterfaces[0].type', '{type1}')) - - @ResourceGroupPreparer(name_prefix='test_network_lb_front_ip', location='westus') - def test_network_lb_front_ip(self, resource_group): - self.kwargs.update({ - 'rg': resource_group, - 'lb': 'lb', - 'lb1': 'lb1', - 'vnet': 'vnet', - 'subnet': 'subnet', - 'ip': 'public-ip', - 'ip1': 'public-ip1', - 'fip': 'load-balancer-frontend-end', - 'prefix': 'prefix', - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku Standard --public-ip-address {ip}') - self.cmd('network lb create -g {rg} -n {lb1} --sku Gateway --vnet-name {vnet} --subnet {subnet} ') - self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard') - self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {fip} --public-ip-address {ip1}', - checks=self.not_exists('gatewayLoadBalancer')) - result = self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb1} -n {fip} ' - '--vnet-name {vnet} --subnet {subnet}').get_output_in_json() - # test --gateway-lb - self.kwargs['id'] = result['id'] - self.cmd('network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --gateway-lb {id}', - checks=self.exists('gatewayLoadBalancer')) - - self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --gateway-lb null", - checks=self.check('gatewayLoadBalancer', None)) - self.cmd("network lb frontend-ip list -g {rg} --lb-name {lb}", - checks=self.check('length(@)', 2)) - self.cmd("network lb frontend-ip delete -g {rg} --lb-name {lb} -n LoadBalancerFrontEnd") - self.cmd("network lb frontend-ip list -g {rg} --lb-name {lb}", - checks=self.check('length(@)', 1)) - self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --public-ip-address null " - "--vnet-name {vnet} --subnet {subnet}", - checks=[ - self.check('publicIPAddress', None), - self.check("subnet.id.contains(@, '{subnet}')", True), - self.check("subnet.id.contains(@, '{vnet}')", True) - ]) - self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') - self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --subnet null " - "--public-ip-prefix {prefix}", - checks=[ - self.check("publicIPPrefix.id.contains(@, '{prefix}')", True), - self.check("subnet", None), - ]) - self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --public-ip-address {ip1} " - "--public-ip-prefix null", - checks=[ - self.check("publicIPAddress.id.contains(@, '{ip1}')", True), - self.check("publicIPPrefix", None), - ]) - - @ResourceGroupPreparer(name_prefix='test_network_nic_front_ip', location='eastus2euap') - def test_network_nic_front_ip(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'lb': 'lb', - 'vnet': 'vnet', - 'vnet1': 'vnet1', - 'subnet': 'subnet', - 'subnet1': 'subnet1', - 'ip': 'public-ip', - 'ip1': 'public-ip1', - 'fip': 'load-balancer-frontend-end', - 'nic': 'nic-name', - 'nip': 'nic-ip-config-name', - }) - - self.cmd('network public-ip create -g {rg} -n {ip} --sku standard') - self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard') - self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') - self.cmd('network nic create -g {rg} -n {nic} --public-ip-address {ip} --vnet-name {vnet} --subnet {subnet}') - self.cmd('network lb create -g {rg} -n {lb} --sku Gateway --vnet-name {vnet1} --subnet {subnet1} ') - result = self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {fip} ' - '--vnet-name {vnet1} --subnet {subnet1}').get_output_in_json() - self.kwargs['id'] = result['id'] - self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n {nip} --make-primary ' - '--public-ip-address {ip1}', - checks=self.not_exists('gatewayLoadBalancer')) - - # test --gateway-lb - self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {nip} --gateway-lb {id}', - checks=self.exists('gatewayLoadBalancer')) - - @ResourceGroupPreparer(name_prefix='test_network_lb_rule_backend_address_pools', location='eastus2euap') - def test_network_lb_rule_backend_address_pools(self, resource_group): - - self.kwargs.update({ - 'rg': resource_group, - 'lb': 'lb', - 'fip': 'LoadBalancerFrontEnd', - 'bap1': 'address-pool-name1', - 'bap2': 'address-pool-name2', - 'bap3': 'address-pool-name3', - 'type': 'External', - 'protocol': 'vxlan', - 'identifier': '901', - 'identifier1': '902', - 'port': '10700', - 'fport': '0', - 'bport': '0' - }) - - self.cmd('network lb create -g {rg} -n {lb} --sku Gateway --vnet-name vnet --subnet subnet') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap1}') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap2}') - self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap3}') - self.cmd('network lb address-pool tunnel-interface add -g {rg} --lb-name {lb} --address-pool {bap1} --type {type} --protocol {protocol} --identifier {identifier}') - self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap2} --type {type} --index 0') - self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap3} --port {port} --identifier {identifier1} --index 0') - - # test --backend-pool-name - self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name {fip} ' - '--frontend-port {fport} --protocol All --backend-port {bport} --backend-pool-name {bap1} ', - checks=[self.exists('backendAddressPool'), - self.check('length(backendAddressPools)', 1)]) - self.cmd('network lb rule delete --lb-name {lb} -g {rg} -n rule1') - # test --backend-pools-name - self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-ip-name {fip} ' - '--frontend-port {fport} --backend-pools-name {bap3} {bap2} --protocol All --backend-port {bport}', - checks=[self.not_exists('backendAddressPool'), - self.check('length(backendAddressPools)', 2)]) - self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule2 --frontend-ip-name {fip} ' - '--backend-pools-name {bap1} ', - checks=[self.check('length(backendAddressPools)', 1)]) - class NetworkVnetGatewayFailoverAPIsTest(ScenarioTest): @live_only() @@ -8945,126 +166,158 @@ def test_network_vnet_gateway_get_routes_and_resiliency_information(self, resour self.check('type(components)', 'array') ]) -class NetworkVirtualNetworkApplianceScenario(ScenarioTest): - @ResourceGroupPreparer(name_prefix='test_vna', location='eastus') - def test_network_virtual_network_appliance(self, resource_group): +class NetworkERGatewayFailoverSimulationScenarioTest(ScenarioTest): + @live_only() + def test_start_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER + resource_group = "tamil-vwan-test" + er_gateway_name = "afcf242ff531409897c9a28b4c69096a-centraluseuap-er-gw" + peering_location = "Washington DC" + self.kwargs.update({ - 'vnet1': 'vnet1', - 'vnet2': 'vnet2', - 'vnet_address': '10.10.0.0/16', - 'subnet': 'VirtualNetworkApplianceSubnet', - 'subnet_address': '10.10.0.0/24', - 'vna1': 'vna1', - 'vna2': 'vna2', - 'tag1': 'tag1', - 'tag2': 'tag2', + 'rg': resource_group, + 'er_gw': er_gateway_name, + 'peering_loc': peering_location }) - # Create vnet, subnet for first vna - self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefixes {vnet_address}') - - self.kwargs['subnet1_id'] = self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet1} --address-prefix {subnet_address} --default-outbound false --query id').get_output_in_json() - - # Create first vna - self.cmd('network virtual-network-appliance create -g {rg} -n {vna1} --bandwidth-in-gbps 50 --subnet \"{{id:{subnet1_id}}}\" --tags \"{{name:{tag1}}}\"') - - self.cmd('network virtual-network-appliance show -g {rg} -n {vna1}', checks=[ - self.check('tags.name', '{tag1}'), - self.check('subnet.id', '{subnet1_id}'), - self.check('bandwidthInGbps', 50), - ]) + # Run the command + result = self.cmd( + 'network express-route-gateway start-site-failover-test ' + '--resource-group {rg} --name {er_gw} --peering-location {peering_loc}' + ).get_output_in_json() - self.cmd('network virtual-network-appliance update -g {rg} -n {vna1} --tags \"{{name:{tag2}}}\"', checks=[ - self.check('tags.name', '{tag2}'), - ]) + # Validate that result is a string (per _schema_on_200 = AAZStrType()) + self.assertIsInstance(result, dict) - self.cmd('network virtual-network-appliance list -g {rg}', checks=[ - self.check('length(@)', 1) - ]) + @live_only() + def test_stop_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER + import time - # Create vnet, subnet for second vna - self.cmd('network vnet create -g {rg} -n {vnet2} --address-prefixes {vnet_address}') + time.sleep(2 * 60) # 120 seconds To wait for sometime before stopping the test failover + resource_group = "tamil-vwan-test" + er_gateway_name = "afcf242ff531409897c9a28b4c69096a-centraluseuap-er-gw" + peering_location = "Washington DC" + was_simulation_successful = True - self.kwargs['subnet2_id'] = self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet2} --address-prefix {subnet_address} --default-outbound false --query id').get_output_in_json() + # Construct failover test connection details + failover_details = [ + { + "failover-connection-name": "ExRConnection-centraluseuap-1750696126887", + "failover-location": "Washington DC", + "is-verified": True + } + ] - # Create second vna - vna2_id = self.cmd('network virtual-network-appliance create -g {rg} -n {vna2} --bandwidth-in-gbps 50 --subnet \"{{id:{subnet2_id}}}\" --query id').get_output_in_json() + # Convert details list to CLI argument format + details_arg = "[" + ",".join( + "{{failover-connection-name:{},failover-location:{},is-verified:{}}}".format( + d["failover-connection-name"], + d["failover-location"], + str(d["is-verified"]).lower() + ) for d in failover_details + ) + "]" - self.cmd('network virtual-network-appliance list -g {rg}', checks=[ - self.check('length(@)', 2) - ]) + self.kwargs.update({ + 'rg': resource_group, + 'er_gw': er_gateway_name, + 'peering_loc': peering_location, + 'was_successful': was_simulation_successful, + 'details_arg': details_arg + }) - self.cmd('network virtual-network-appliance delete -g {rg} -n {vna1} -y') + # Run the command + result = self.cmd( + 'network express-route-gateway stop-site-failover-test ' + '--resource-group {rg} --name {er_gw} ' + '--peering-location {peering_loc} ' + '--was-simulation-successful {was_successful} ' + '--details \'{details_arg}\'' + ).get_output_in_json() - vna_list = self.cmd('network virtual-network-appliance list -g {rg}', checks=[ - self.check('length(@)', 1) - ]).get_output_in_json() + # Validate + self.assertTrue(isinstance(result, (str, dict))) - self.assertTrue(vna_list[0].get('id') == vna2_id) +class NetworkExpressRouteGatewayRoutesResiliencyScenarioTest(ScenarioTest): + @live_only() # live_only as express route gateways require expensive resources + @ResourceGroupPreparer(name_prefix='test_express_route_gateway_routes', location='eastus') + @AllowLargeResponse(size_kb=9999) + def test_network_express_route_gateway_routes_and_resiliency(self, resource_group): + """ + Test Express Route Gateway routes and resiliency information operations: + - Get routes information + - Get resiliency information + """ + from time import sleep -class DdosCustomPolicyScenarioTest(ScenarioTest): - @ResourceGroupPreparer(name_prefix='test_ddos_cuspol', location='eastus') - def test_ddos_custom_policy(self, resource_group): self.kwargs.update({ - 'policy_name': 'policy1', - 'detection_mode': 'TrafficThreshold', - 'detection_rule_name1': 'RuleName1', - 'traffic_type1': 'Tcp', - 'packets_per_second1': '1000000', - 'detection_rule_name2': 'RuleName2', - 'traffic_type2': 'Udp', - 'packets_per_second2': '200000', - 'detection_rule_name3': 'RuleName3', + 'rg': resource_group, + 'ergw': 'test-ergw-routes', + 'vwan': 'test-vwan-routes', + 'vhub': 'test-vhub-routes', + 'attempt_refresh': True, }) - self.cmd('network ddos-custom-policy create -g {rg} -n {policy_name} --detection-rule-name {detection_rule_name1} ' - '--detection-mode {detection_mode} --traffic-type {traffic_type1} --packets-per-second {packets_per_second1}', checks=[ - self.check('length(detectionRules)', 1), - self.check('detectionRules[0].name', '{detection_rule_name1}'), - self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), - self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), - self.check('name', '{policy_name}'), + # Create Virtual WAN + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard', checks=[ + self.check('name', '{vwan}') ]) - self.cmd('network ddos-custom-policy show -g {rg} -n {policy_name}', checks=[ - self.check('length(detectionRules)', 1), - self.check('detectionRules[0].name', '{detection_rule_name1}'), - self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), - self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), - self.check('name', '{policy_name}'), + # Create Virtual Hub + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.6.0.0/16 --sku Standard', checks=[ + self.check('name', '{vhub}') ]) - self.cmd('network ddos-custom-policy create -g {rg} -n {policy_name} --detection-rule-name {detection_rule_name2} ' - '--detection-mode {detection_mode} --traffic-type {traffic_type2} --packets-per-second {packets_per_second2}', checks=[ - self.check('length(detectionRules)', 2), - self.check('detectionRules[0].name', '{detection_rule_name1}'), - self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), - self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), - self.check('detectionRules[1].name', '{detection_rule_name2}'), - self.check('detectionRules[1].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), - self.check('detectionRules[1].trafficDetectionRule.trafficType', '{traffic_type2}'), - self.check('name', '{policy_name}'), - ]) + # Wait for hub to be provisioned + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + retry_count = 0 + while routing_state != 'Provisioned': + if retry_count == 20: + raise Exception(f"Virtual Hub provisioning failed. Last known state: {routing_state}") + retry_count += 1 + sleep(60) + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - self.cmd('network ddos-custom-policy update -g {rg} -n {policy_name} --set detectionRules[0].name={detection_rule_name3}', checks=[ - self.check('length(detectionRules)', 2), - self.check('detectionRules[0].name', '{detection_rule_name3}'), - self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), - self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), - self.check('detectionRules[1].name', '{detection_rule_name2}'), - self.check('detectionRules[1].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), - self.check('detectionRules[1].trafficDetectionRule.trafficType', '{traffic_type2}'), + # Create Express Route Gateway + self.cmd('network express-route gateway create -g {rg} -n {ergw} --virtual-hub {vhub} --min-val 2', checks=[ + self.check('name', '{ergw}'), + self.check('provisioningState', 'Succeeded') ]) - self.cmd('network ddos-custom-policy update -g {rg} -n {policy_name} --remove detectionRules 0', checks=[ - self.check('length(detectionRules)', 1), - self.check('detectionRules[0].name', '{detection_rule_name2}'), - self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), - self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type2}'), - ]) + # Test 1: Get Routes Information + routes_result = self.cmd( + 'network express-route-gateway get-routes-information ' + '-g {rg} --name {ergw} --attempt-refresh {attempt_refresh}' + ).get_output_in_json() + + # Validate routes information response structure + self.assertIsInstance(routes_result, dict) + self.assertIn('routeSetVersion', routes_result) + self.assertIn('lastComputedTime', routes_result) + self.assertIn('nextEligibleComputeTime', routes_result) + if 'routeSets' in routes_result: + self.assertIsInstance(routes_result['routeSets'], list) + if 'circuitsMetadataMap' in routes_result: + self.assertIsInstance(routes_result['circuitsMetadataMap'], dict) + + # Test 2: Get Resiliency Information + resiliency_result = self.cmd( + 'network express-route-gateway get-resiliency-information ' + '-g {rg} --name {ergw} --attempt-refresh {attempt_refresh}' + ).get_output_in_json() - self.cmd('network ddos-custom-policy delete -g {rg} -n {policy_name} -y', checks=self.is_empty()) + # Validate resiliency information response structure + self.assertIsInstance(resiliency_result, dict) + self.assertIn('overallScore', resiliency_result) + self.assertIn('lastComputedTime', resiliency_result) + self.assertIn('nextEligibleComputeTime', resiliency_result) + if 'components' in resiliency_result: + self.assertIsInstance(resiliency_result['components'], list) + if len(resiliency_result['components']) > 0: + component = resiliency_result['components'][0] + self.assertIn('name', component) + self.assertIn('currentScore', component) + if 'recommendations' in component: + self.assertIsInstance(component['recommendations'], list) if __name__ == '__main__': - unittest.main() + unittest.main() \ No newline at end of file From 6bf609a730e87ba3697a88087e9bc8c8cc9c7702 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Tue, 31 Mar 2026 16:58:58 +0530 Subject: [PATCH 6/8] Fixed scenario tests --- .../tests/latest/test_network_commands.py | 8909 ++++++++++++++++- 1 file changed, 8905 insertions(+), 4 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py index 7cbc83e0c02..90c71ff8bb8 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py @@ -1,4 +1,10 @@ -import os +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- +# pylint: disable=line-too-long +# pylint: disable=too-many-lines +import os import unittest import tempfile @@ -21,6 +27,8779 @@ TEST_DIR = os.path.abspath(os.path.join(os.path.abspath(__file__), '..')) CERTS_DIR = os.path.join(TEST_DIR, 'certs') + +class NetworkApplicationSecurityGroupScenario(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_network_asg') + def test_network_asg(self, resource_group): + + self.kwargs.update({ + 'asg': 'asg1' + }) + + count1 = len(self.cmd('network asg list').get_output_in_json()) + self.cmd('network asg create -g {rg} -n {asg} --tags foo=doo', + checks=self.check('tags.foo', 'doo')) + self.cmd('network asg update -g {rg} -n {asg} --tags foo=bar', + checks=self.check('tags.foo', 'bar')) + count2 = len(self.cmd('network asg list').get_output_in_json()) + self.assertTrue(count2 == count1 + 1) + self.cmd('network asg show -g {rg} -n {asg}', checks=[ + self.check('name', '{asg}'), + self.check('resourceGroup', '{rg}'), + self.check('tags.foo', 'bar') + ]) + self.cmd('network asg delete -g {rg} -n {asg}') + count3 = len(self.cmd('network asg list').get_output_in_json()) + self.assertTrue(count3 == count1) + + +class NetworkLoadBalancerWithSku(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_network_lb_sku') + def test_network_lb_sku(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb1', + 'sku': 'standard', + 'location': 'eastus2', + 'ip': 'pubip1' + }) + + self.cmd('network lb create -g {rg} -l {location} -n {lb} --sku {sku} --public-ip-address {ip}') + self.cmd('network lb show -g {rg} -n {lb}', checks=[ + self.check('sku.name', 'Standard') + ]) + + # test network lb update command + self.cmd('network lb update -g {rg} -n {lb} --set tags.label=1544 --force-string') + self.cmd('network lb update -g {rg} -n {lb} --tags CostCenter=MyTestGroup') + self.cmd('network lb show -g {rg} -n {lb}', checks=[ + self.check('tags.CostCenter', 'MyTestGroup') + ]) + + self.cmd('network public-ip show -g {rg} -n {ip}', checks=[ + self.check('sku.name', 'Standard'), + self.check('publicIPAllocationMethod', 'Static') + ]) + + +class NetworkPrivateEndpoints(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_network_private_endpoints') + def test_network_private_endpoints(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb1', + 'sku': 'Standard', + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'location': 'centralus', + 'ip': 'pubip1', + 'lks1': 'lks1', + 'lks2': 'lks2', + 'pe': 'pe1', + 'rg': resource_group, + 'nic': 'nic1', + }) + + # Create PLS + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} -l {location}') + self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-address {ip} --sku {sku}') + self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies') + self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} --address-prefixes 10.0.2.0/24 --default-outbound false') + self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} --disable-private-endpoint-network-policies') + pls1 = self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location}', checks=[ + self.check('type', 'Microsoft.Network/privateLinkServices'), + self.check('provisioningState', 'Succeeded'), + self.check('name', self.kwargs['lks1']) + ]).get_output_in_json() + self.kwargs['pls_id'] = pls1['id'] + self.cmd('network private-endpoint list-types -l {location}') + + self.cmd('network private-endpoint create -g {rg} -n {pe} --vnet-name {vnet} --subnet {subnet2} --private-connection-resource-id {pls_id} --connection-name tttt -l {location} --nic-name {nic}', checks=[ + self.check('name', 'pe1'), + self.check('provisioningState', 'Succeeded'), + self.check('customNetworkInterfaceName', self.kwargs['nic']), + ]) + + # temporarily disable the test + ''' + self.cmd('network private-endpoint update -g {rg} -n {pe} --request-message "test"', checks=[ + self.check('privateLinkServiceConnections[0].requestMessage', 'test') + ]) + ''' + + self.cmd('network private-endpoint list') + self.cmd('network private-endpoint list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + + pe_connection_name = self.cmd('network private-link-service show -g {rg} -n {lks1}').get_output_in_json()['privateEndpointConnections'][0]['name'] + self.kwargs['pe_connect'] = pe_connection_name + self.cmd('network private-link-service connection update -g {rg} -n {pe_connect} --service-name {lks1} --connection-status Rejected --action-required "need action"') + self.cmd('network private-endpoint show -g {rg} -n {pe}', checks=[ + self.check('privateLinkServiceConnections[0].privateLinkServiceConnectionState.status', 'Rejected'), + self.check('privateLinkServiceConnections[0].privateLinkServiceConnectionState.actionsRequired', "need action") + ]) + self.cmd('network private-link-service connection delete -g {rg} -n {pe_connect} --service-name {lks1}') + self.cmd('network private-link-service show -g {rg} -n {lks1}', checks=[ + self.check('length(privateEndpointConnections)', 0) + ]) + self.cmd('network private-endpoint delete -g {rg} -n {pe}') + + @ResourceGroupPreparer(name_prefix="cli_test_network_private_endpoint_", location="eastus") + @StorageAccountPreparer(name_prefix="ipconfig", kind="StorageV2") + def test_network_private_endpoint_ip_config(self, storage_account): + self.kwargs.update({ + "sa": storage_account, + "loc": "eastus", + "vnet": self.create_random_name("vnet-", 24), + "subnet": self.create_random_name("subnet-", 24), + "pe": self.create_random_name("pe-", 24), + "connection": self.create_random_name("connection-", 24), + "ipconfig1": "ipconfig1", + "ipconfig2": "ipconfig2", + }) + + # prepare network + self.cmd("network vnet create -n {vnet} -l {loc} -g {rg} --address-prefixes 10.0.0.0/16 --subnet-name {subnet} --subnet-prefixes 10.0.0.0/24") + self.cmd("network vnet subnet update -n {subnet} -g {rg} --vnet-name {vnet} --disable-private-endpoint-network-policies true") + + # create private endpoint connection + pl_resources = self.cmd("storage account private-link-resource list --account-name {sa} -g {rg}").get_output_in_json() + self.kwargs["group_id"] = pl_resources[0]["groupId"] + self.kwargs["sa_id"] = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json()["id"] + self.cmd( + "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " + "--ip-config name={ipconfig1} group-id={group_id} member-name=blob private-ip-address=10.0.0.4 " + "--ip-config name={ipconfig2} private-ip-address=10.0.0.6", + checks=[ + self.check("length(ipConfigurations)", 2), + self.check("ipConfigurations[0].name", self.kwargs["ipconfig1"]), + self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), + ] + ) + + # check ip configuration operations + self.cmd("network private-endpoint ip-config remove -n {ipconfig2} -g {rg} --endpoint-name {pe}") + self.cmd( + "network private-endpoint ip-config add -n {ipconfig2} -g {rg} --endpoint-name {pe} --group-id {group_id} --member-name blob2 --private-ip-address 10.0.0.6", + checks=[ + self.check("length(ipConfigurations)", 2), + self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), + ] + ) + self.cmd( + "network private-endpoint ip-config list -g {rg} --endpoint-name {pe}", + checks=[ + self.check("length(@)", 2), + self.check("@[0].name", self.kwargs["ipconfig1"]), + self.check("@[1].name", self.kwargs["ipconfig2"]), + ] + ) + + self.cmd("network private-endpoint delete -n {pe} -g {rg}") + self.cmd("network private-endpoint list -g {rg}", checks=[self.check("length(@)", 0)]) + + # create private endpoint connection with --ip-configs + self.cmd( + "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " + "--ip-configs [{{name:{ipconfig1},group-id:{group_id},member-name:blob,private-ip-address:10.0.0.4}},{{name:{ipconfig2},private-ip-address:10.0.0.6}}]", + checks=[ + self.check("length(ipConfigurations)", 2), + self.check("ipConfigurations[0].name", self.kwargs["ipconfig1"]), + self.check("ipConfigurations[1].name", self.kwargs["ipconfig2"]), + ] + ) + + @ResourceGroupPreparer(name_prefix="cli_test_network_private_endpoint_", location="eastus") + @StorageAccountPreparer(name_prefix="asg", kind="StorageV2") + def test_network_private_endpoint_asg(self, storage_account): + self.kwargs.update({ + "sa": storage_account, + "loc": "eastus", + "vnet": self.create_random_name("vnet-", 24), + "subnet": self.create_random_name("subnet-", 24), + "pe": self.create_random_name("pe-", 24), + "connection": self.create_random_name("connection-", 24), + "asg1": "asg1", + "asg2": "asg2", + }) + + # prepare network + self.cmd("network vnet create -n {vnet} -l {loc} -g {rg} --address-prefixes 10.0.0.0/16 --subnet-name {subnet} --subnet-prefixes 10.0.0.0/24") + self.cmd("network vnet subnet update -n {subnet} -g {rg} --vnet-name {vnet} --disable-private-endpoint-network-policies true") + + # create private endpoint connection + pl_resources = self.cmd("storage account private-link-resource list --account-name {sa} -g {rg}").get_output_in_json() + self.kwargs["group_id"] = pl_resources[0]["groupId"] + self.kwargs["sa_id"] = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json()["id"] + self.kwargs["id1"] = self.cmd("network asg create -n {asg1} -g {rg}").get_output_in_json()["id"] + self.kwargs["id2"] = self.cmd("network asg create -n {asg2} -g {rg}").get_output_in_json()["id"] + self.cmd( + "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " + "--asg id={id1} " + "--asg id={id2}", + checks=[ + self.check("length(applicationSecurityGroups)", 2), + self.check("applicationSecurityGroups[0].id", self.kwargs["id1"]), + self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), + ] + ) + + # check application security group operations + self.cmd("network private-endpoint asg remove -g {rg} --endpoint-name {pe} --asg-id {id2}") + self.cmd( + "network private-endpoint asg add -g {rg} --endpoint-name {pe} --asg-id {id2}", + checks=[ + self.check("length(applicationSecurityGroups)", 2), + self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), + ] + ) + self.cmd( + "network private-endpoint asg list -g {rg} --endpoint-name {pe}", + checks=[ + self.check("length(@)", 2), + self.check("@[0].id", self.kwargs["id1"]), + self.check("@[1].id", self.kwargs["id2"]), + ] + ) + + self.cmd("network private-endpoint delete -n {pe} -g {rg}") + self.cmd("network private-endpoint list -g {rg}", checks=[self.check("length(@)", 0)]) + + # create private endpoint connection with --asgs + self.cmd( + "network private-endpoint create -n {pe} -g {rg} --vnet-name {vnet} --subnet {subnet} --connection-name {connection} --group-id {group_id} --private-connection-resource-id {sa_id} " + "--asgs [{{id:{id1}}},{{id:{id2}}}]", + checks=[ + self.check("length(applicationSecurityGroups)", 2), + self.check("applicationSecurityGroups[0].id", self.kwargs["id1"]), + self.check("applicationSecurityGroups[1].id", self.kwargs["id2"]), + ] + ) + + @ResourceGroupPreparer(name_prefix='fanqiu_cli_test_network_private_endpoints', location='CentralUSEuap') + @StorageAccountPreparer(name_prefix='saplr', kind='StorageV2') + def test_network_private_endpoint_private_dns_zone_group(self, resource_group, storage_account): + self.kwargs.update({ + 'sa': storage_account, + 'loc': 'CentralUSEuap', + 'vnet': self.create_random_name('cli-vnet-', 24), + 'subnet': self.create_random_name('cli-subnet-', 24), + 'pe': self.create_random_name('cli-pe-', 24), + 'pe_connection': self.create_random_name('cli-pec-', 24), + 'zone_name1': 'www.clizone1.com', + 'zone_name2': 'www.clizone2.com', + 'private_dns_zone_group_name': 'clidnsgroup', + 'private_zone_name1': 'clizone1', + 'private_zone_name2': 'clizone2' + }) + + # Prepare network + self.cmd('network vnet create -n {vnet} -g {rg} -l {loc} --subnet-name {subnet}', + checks=self.check('length(newVNet.subnets)', 1)) + self.cmd('network vnet subnet update -n {subnet} --vnet-name {vnet} -g {rg} ' + '--disable-private-endpoint-network-policies true', + checks=self.check('privateEndpointNetworkPolicies', 'Disabled')) + + # Create a private endpoint connection + pr = self.cmd('storage account private-link-resource list --account-name {sa} -g {rg}').get_output_in_json() + self.kwargs['group_id'] = pr[0]['groupId'] + + storage = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json() + self.kwargs['sa_id'] = storage['id'] + private_endpoint = self.cmd( + 'network private-endpoint create -g {rg} -n {pe} --vnet-name {vnet} --subnet {subnet} -l {loc} ' + '--connection-name {pe_connection} --private-connection-resource-id {sa_id} ' + '--group-ids blob').get_output_in_json() + self.assertEqual(private_endpoint['name'], self.kwargs['pe']) + self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['name'], self.kwargs['pe_connection']) + self.assertEqual( + private_endpoint['privateLinkServiceConnections'][0]['privateLinkServiceConnectionState']['status'], + 'Approved') + self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['provisioningState'], 'Succeeded') + self.assertEqual(private_endpoint['privateLinkServiceConnections'][0]['groupIds'][0], self.kwargs['group_id']) + self.kwargs['pe_id'] = private_endpoint['privateLinkServiceConnections'][0]['id'] + + # Show the connection at storage account + storage = self.cmd('storage account show -n {sa} -g {rg}').get_output_in_json() + self.assertIn('privateEndpointConnections', storage) + self.assertEqual(len(storage['privateEndpointConnections']), 1) + self.assertEqual(storage['privateEndpointConnections'][0]['privateLinkServiceConnectionState']['status'], + 'Approved') + + self.kwargs['sa_pec_id'] = storage['privateEndpointConnections'][0]['id'] + self.kwargs['sa_pec_name'] = storage['privateEndpointConnections'][0]['name'] + + self.cmd('storage account private-endpoint-connection show --account-name {sa} -g {rg} --name {sa_pec_name}', + checks=self.check('id', '{sa_pec_id}')) + + self.cmd('network private-endpoint show -g {rg} -n {pe}', checks=[ + self.check('length(customDnsConfigs)', 1) + ]) + self.cmd('network private-dns zone create -n {zone_name1} -g {rg}') + self.cmd('network private-dns zone create -n {zone_name2} -g {rg}') + + self.cmd('network private-endpoint dns-zone-group create --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' + '--zone-name {private_zone_name1} --private-dns-zone {zone_name1}', + checks=[ + self.check('name', '{private_dns_zone_group_name}') + ]) + + self.cmd('network private-endpoint dns-zone-group add --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' + '--zone-name {private_zone_name2} --private-dns-zone {zone_name2}', + checks=[ + self.check('length(privateDnsZoneConfigs)', 2) + ]) + + self.cmd('network private-endpoint dns-zone-group show --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}', checks=[ + self.check('length(privateDnsZoneConfigs)', 2) + ]) + self.cmd('network private-endpoint dns-zone-group list --endpoint-name {pe} -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network private-endpoint dns-zone-group remove --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name} ' + '--zone-name {private_zone_name2}') + self.cmd('network private-endpoint dns-zone-group show --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}', checks=[ + self.check('length(privateDnsZoneConfigs)', 1) + ]) + self.cmd('network private-endpoint dns-zone-group delete --endpoint-name {pe} -g {rg} -n {private_dns_zone_group_name}') + + +class NetworkPrivateLinkService(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_pls_udr') + @AllowLargeResponse() + def test_network_private_link_service_udr(self, resource_group): + + self.kwargs.update({ + 'sku': 'Standard', + 'vnet': 'vnet1', + 'vnet_prefix': '10.0.0.0/16', + 'subnet1': 'subnet1', + 'subnet_prefix': '10.0.0.0/24', + 'location': 'westcentralus', + 'lks1': 'lks1', + 'destination_ip': '10.0.0.10' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --address-prefixes {vnet_prefix} --subnet-name {subnet1} --subnet-prefixes {subnet_prefix} -l {location}') + self.cmd('az network vnet subnet update -n {subnet1} --vnet-name {vnet} -g {rg} --pls-network-policies disabled') + self.cmd('network private-link-service create -n {lks1} -g {rg} --vnet-name {vnet} --subnet {subnet1} --destination-ip-address {destination_ip} -l {location}', checks=[ + self.check('type', 'Microsoft.Network/privateLinkServices'), + self.check('enableProxyProtocol', False), + self.check('destinationIPAddress', '{destination_ip}') + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_network_private_link_service') + @AllowLargeResponse() + def test_network_private_link_service(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb1', + 'sku': 'Standard', + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'location': 'westcentralus', + 'ip': 'pubip1', + 'lks1': 'lks1', + 'lks2': 'lks2', + 'sub1': '00000000-0000-0000-0000-000000000000', + 'destination_ip': '10.0.0.1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} -l {location}') + self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-address {ip} --sku {sku}') + self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies') + self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} --address-prefixes 10.0.2.0/24 --default-outbound false') + self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} --disable-private-endpoint-network-policies') + + with self.assertRaises(HttpResponseError, msg=' either one LoadBalancerFrontendIpConfiguration if PLS with LB based scenario or DestinationIPAddress if PLS UDR and NSG scenario'): + self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location} --destination-ip-address {destination_ip}') + self.cmd('network private-link-service create -g {rg} -n {lks1} --vnet-name {vnet} --subnet {subnet1} --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd -l {location} --enable-proxy-protocol', checks=[ + self.check('type', 'Microsoft.Network/privateLinkServices'), + self.check('length(ipConfigurations)', 1), + self.check('length(loadBalancerFrontendIpConfigurations)', 1), + self.check('enableProxyProtocol', True) + ]) + + self.cmd('network private-link-service update -g {rg} -n {lks1} --visibility {sub1} {sub1} --auto-approval {sub1} {sub1} --enable-proxy-protocol False --lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd', checks=[ + self.check('length(visibility.subscriptions)', 2), + self.check('length(autoApproval.subscriptions)', 2), + self.check('enableProxyProtocol', False) + ]) + self.cmd('network private-link-service list -g {rg}', checks=[ + self.check('length(@)', 1), + self.check('@[0].type', 'Microsoft.Network/privateLinkServices') + ]) + self.cmd('network private-link-service show -g {rg} -n {lks1}', checks=[ + self.check('type', 'Microsoft.Network/privateLinkServices'), + self.check('length(ipConfigurations)', 1), + self.check('length(loadBalancerFrontendIpConfigurations)', 1) + ]) + self.cmd('network private-link-service list-auto-approved -l westus', self.check('type(@)', 'array')) + self.cmd('network private-link-service delete -g {rg} -n {lks1}') + + self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} --disable-private-link-service-network-policies false', checks=[ + self.check('privateLinkServiceNetworkPolicies', 'Enabled') + ]) + + +class NetworkLoadBalancerWithZone(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_network_lb_zone') + def test_network_lb_zone(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb1', + 'lb2': 'lb4', + 'lb3': 'lb5', + 'zone': '2', + 'location': 'eastus2', + 'ip': 'pubip1', + 'ip2': 'pubip2' + }) + + # LB with public ip + self.cmd('network lb create -g {rg} -l {location} -n {lb} --public-ip-zone {zone} --public-ip-address {ip} --sku Standard') + # No zone on LB and its front-ip-config + self.cmd('network lb show -g {rg} -n {lb}', checks=[ + self.check("frontendIPConfigurations[0].zones", None), + self.check("zones", None) + ]) + # Zone on public-ip which LB uses to infer the zone + self.cmd('network public-ip show -g {rg} -n {ip}', checks=[ + self.check('zones[0]', self.kwargs['zone']) + ]) + + # LB w/o public ip, so called ILB + self.kwargs['lb'] = 'lb2' + self.cmd('network lb create -g {rg} -l {location} -n {lb} --frontend-ip-zone {zone} --public-ip-address "" --vnet-name vnet1 --subnet subnet1 --sku Standard') + # Zone on front-ip-config, and still no zone on LB resource + self.cmd('network lb show -g {rg} -n {lb}', checks=[ + self.check("frontendIPConfigurations[0].zones[0]", self.kwargs['zone']), + self.check("zones", None) + ]) + # add a second frontend ip configuration + self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n LoadBalancerFrontEnd2 -z {zone} --vnet-name vnet1 --subnet subnet1', checks=[ + self.check("zones", [self.kwargs['zone']]) + ]) + + # test for private-ip-address-version + self.cmd('network lb create -g {rg} -n {lb2} -l westcentralus --sku Standard') + self.cmd('network public-ip create -n {ip2} -g {rg} -l westcentralus --sku Standard --allocation-method Static --version IPv6 --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network lb frontend-ip create --lb-name {lb2} -n ipv6 -g {rg} --private-ip-address-version IPv6 --public-ip-address {ip2}', checks=[ + self.check('name', 'ipv6'), + self.check('provisioningState', 'Succeeded') + ]) + + @ResourceGroupPreparer(name_prefix='test_network_lb_frontend_ip_zone', location='eastus2') + def test_network_lb_frontend_ip_zone(self, resource_group): + self.kwargs.update({ + 'location': 'eastus2', + 'lb1': self.create_random_name('lb', 10), + 'lb2': self.create_random_name('lb', 10), + 'vnet1': self.create_random_name('vnet', 10), + 'vnet2': self.create_random_name('vnet', 10), + 'pool': self.create_random_name('poll', 10) + }) + + # LB with subnet : internal LB + self.cmd('network lb create -g {rg} -l {location} -n {lb1} --vnet-name {vnet1} --subnet subnet --sku Standard') + self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb1} -n LoadBalancerFrontEnd2 -z 1 2 3 --vnet-name {vnet1} --subnet subnet', checks=[ + self.check("length(zones)", 3) + ]) + self.cmd('network lb create -g {rg} -n {lb2} --sku standard --vnet-name {vnet2} --subnet default --frontend-ip-zone 1 2 3 --backend-pool-name {pool}', checks=[ + self.check("loadBalancer.frontendIPConfigurations[0].zones", ['1', '2', '3']) + ]) + + +class NetworkPublicIpWithSku(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_network_lb_sku') + def test_network_public_ip_sku(self, resource_group): + + self.kwargs.update({ + 'standard_sku': 'Standard', + 'basic_sku': 'Basic', + 'regional_tier': 'Regional', + 'global_tier': 'Global', + 'location': 'eastus2', + 'ip1': 'pubip1', + 'ip2': 'pubip2', + 'ip3': 'pubip3', + 'ip4': 'pubip4' + }) + + self.cmd('network public-ip create -g {rg} -l {location} -n {ip1} --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network public-ip show -g {rg} -n {ip1}', checks=[ + self.check('sku.name', self.kwargs.get('standard_sku')), + self.check('sku.tier', self.kwargs.get('regional_tier')), + self.check('publicIPAllocationMethod', 'Static') + ]) + + self.cmd('network public-ip create -g {rg} -l {location} -n {ip2} --sku {standard_sku} --tags foo=doo --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network public-ip show -g {rg} -n {ip2}', checks=[ + self.check('sku.name', self.kwargs.get('standard_sku')), + self.check('sku.tier', self.kwargs.get('regional_tier')), + self.check('publicIPAllocationMethod', 'Static'), + self.check('tags.foo', 'doo') + ]) + + self.cmd('network public-ip create -g {rg} -l {location} -n {ip3} --sku {standard_sku} --tier {global_tier} --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network public-ip show -g {rg} -n {ip3}', checks=[ + self.check('sku.name', self.kwargs.get('standard_sku')), + self.check('sku.tier', self.kwargs.get('global_tier')), + self.check('publicIPAllocationMethod', 'Static') + ]) + + self.cmd('network public-ip create -g {rg} -n {ip4} --sku standardv2 --allocation-method static --ip-tags FirstPartyUsage=/NonProd', checks=[ + self.check('publicIp.sku.name', 'StandardV2'), + ]) + + +class NetworkCustomIPPrefix(ScenarioTest): + @ResourceGroupPreparer(name_prefix="cli_test_network_custom_ip_prefix_", location="eastus2") + def test_network_custom_ip_prefix_crud(self): + self.kwargs.update({ + "cip_name1": self.create_random_name("cip-", 8), + "cip_name2": self.create_random_name("cip-", 8), + }) + self.cmd( + "network custom-ip prefix create --name {cip_name1} --resource-group {rg} --cidr 2001:250:6000::/48 --is-parent", + checks=[ + self.check("name", "{cip_name1}"), + self.check("prefixType", "Parent") + ] + ) + self.cmd( + "network custom-ip prefix create -n {cip_name2} -z 1 -g {rg} --cidr 0.0.0.0/24 " + "--asn 65515 --geo GLOBAL --is-advertised false", + checks=[ + self.check("name", "{cip_name2}"), + self.check("asn", "65515"), + self.check("geo", "GLOBAL"), + self.check("expressRouteAdvertise", False) + ] + ) + self.cmd( + "network custom-ip prefix list -g {rg}", + checks=[ + self.check("length(@)", 2), + self.check("@[0].name", "{cip_name1}") + ] + ) + self.cmd("network custom-ip prefix update -n {cip_name2} -g {rg} --tags foo=bar") + self.cmd( + "network custom-ip prefix show -n {cip_name2} -g {rg}", + checks=[ + self.check("name", "{cip_name2}"), + self.check("tags.foo", "bar") + ] + ) + + + @record_only() + def test_network_custom_ip_prefix_update_state(self): + self.kwargs.update({ + "rg": "cli_test_custom_ip_prefix", + "cip_name": "prefix1" + }) + + self.cmd( + "network custom-ip prefix update -n {cip_name} -g {rg} --state commission --no-internet-advertise false", + checks=[ + self.check("commissionedState", "Commissioning"), + self.check("noInternetAdvertise", False) + ] + ) + + +class NetworkPublicIpPrefix(ScenarioTest): + + @record_only() # cannot assign both tags and a public IP prefix to a public IP address in Azure + @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix', location='eastus2') + def test_network_public_ip_prefix(self, resource_group): + + self.kwargs.update({ + 'prefix': 'prefix1', + 'pip': 'pip1', + 'prefix_v6': self.create_random_name('public-ip-prefix-', 24), + 'pip_v6': self.create_random_name('public-ip-', 16) + }) + + # Test prefix CRUD + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30', + checks=self.check('prefixLength', 30)) + self.cmd('network public-ip prefix update -g {rg} -n {prefix} --tags foo=doo') + + # test prefix show command + self.cmd('network public-ip prefix show -g {rg} -n {prefix}', + checks=self.check('tags.foo', 'doo')) + + self.cmd('network public-ip prefix list -g {rg}', + checks=self.check('length(@)', 1)) + self.cmd('network public-ip prefix delete -g {rg} -n {prefix}') + self.cmd('network public-ip prefix list -g {rg}', + checks=self.is_empty()) + + # Test public IP create with prefix + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') + self.cmd('network public-ip create -g {rg} -n {pip} --public-ip-prefix {prefix} --sku Standard', + checks=self.check("publicIp.publicIPPrefix.id.contains(@, '{prefix}')", True)) + self.cmd('network public-ip prefix create -n {prefix_v6} -g {rg} --version IPv6 --length 126 -z 1 3 2') + self.cmd( + 'network public-ip create -n {pip_v6} -g {rg} --public-ip-prefix {prefix_v6}', + checks=[ + self.check('publicIp.name', '{pip_v6}'), + self.check('publicIp.publicIPAddressVersion', 'IPv6'), + self.check('publicIp.zones', ['1', '3', '2']) + ] + ) + + # Test IP address version + self.kwargs.update({ + 'prefix_name_ipv4': 'public_ip_prefix_0', + 'prefix_name_ipv5': 'public_ip_prefix_1', + 'prefix_name_ipv6': 'public_ip_prefix_2' + }) + + # Check the default ip address version value + self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv4} --length 30', checks=[ + self.check('publicIPAddressVersion', 'IPv4') + ]) + + # Check the creation of public IP prefix with IPv6 address option + # Note: prefix length for IPv6 is minimal 124 and maximal 127 respectively + self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv6} --length 127 --version IPv6', checks=[ + self.check('publicIPAddressVersion', 'IPv6') + ]) + + # Check with unsupported IP address version: IPv5 + with self.assertRaisesRegex(SystemExit, '2'): + self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv6} --length 127 --version IPv5') + + @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_zone', location='eastus2') + def test_network_public_ip_prefix_zone(self, resource_group): + self.kwargs.update({ + 'prefix': 'prefix1', + }) + + # Test prefix with multi zones + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30 --zone 1 2 3', checks=[ + self.check('prefixLength', 30), + self.check('length(zones)', 3) + ]) + + @record_only() # cannot assign both tags and a public IP prefix to a public IP address in Azure + @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_with_ip_address', location='eastus2') + def test_network_public_ip_prefix_with_ip_address(self, resource_group): + self.kwargs.update({ + 'prefix_name_ipv4': 'public_ip_prefix_0', + 'pip': 'pip1' + }) + + ip_prefix = self.cmd('network public-ip prefix create -g {rg} -n {prefix_name_ipv4} --length 28', checks=[ + self.check('publicIPAddressVersion', 'IPv4') + ]).get_output_in_json() + + ip_address = ip_prefix['ipPrefix'][:-3] + + # Create public ip with ip address + self.cmd('network public-ip create -g {rg} -n {pip} --public-ip-prefix {prefix_name_ipv4} --sku Standard --ip-address ' + ip_address, + checks=self.check("publicIp.publicIPPrefix.id.contains(@, '{prefix_name_ipv4}')", True)) + + @live_only() + @ResourceGroupPreparer(name_prefix="cli_test_network_public_ip_prefix_", location="eastus2", subscription=AUX_SUBSCRIPTION) + def test_network_public_ip_prefix_with_aux_custom(self, resource_group): + self.kwargs.update({ + "aux_rg": resource_group, + "aux_subscription": AUX_SUBSCRIPTION, + "public_prefix_name": self.create_random_name("public-prefix-", 20) + }) + + # previously created custom ip prefix + self.kwargs["custom_id"] = self.cmd("network custom-ip prefix show -n ethan-cip -g ethan-rg").get_output_in_json()["id"] + self.cmd( + "network public-ip prefix create -n {public_prefix_name} -g {aux_rg} --length 31 --zone 2 3 1 " + "--custom-ip-prefix-name {custom_id} --subscription {aux_subscription}", + checks=[ + self.check("name", "{public_prefix_name}"), + self.check("type", "Microsoft.Network/publicIPPrefixes") + ] + ) + + @ResourceGroupPreparer(name_prefix='cli_test_network_public_ip_prefix_with_ip_tags', location='eastus2') + def test_network_public_ip_prefix_with_ip_tags(self, resource_group): + self.kwargs.update({ + 'prefix': 'prefix1', + 'ip_tags': 'RoutingPreference=Internet' + }) + # Test prefix create with param --ip-tags + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30 --ip-tags {ip_tags}', + checks=[ + self.check('ipTags[0].ipTagType', 'RoutingPreference'), + self.check('ipTags[0].tag', 'Internet')]) + + +class NetworkMultiIdsShowScenarioTest(ScenarioTest): + @live_only() + @ResourceGroupPreparer(name_prefix='test_multi_id') + def test_network_multi_id_show(self, resource_group): + + self.cmd('network public-ip create -g {rg} -n pip1 --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network public-ip create -g {rg} -n pip2 --ip-tags FirstPartyUsage=/NonProd') + + pip1 = self.cmd('network public-ip show -g {rg} -n pip1').get_output_in_json() + pip2 = self.cmd('network public-ip show -g {rg} -n pip2').get_output_in_json() + self.cmd('network public-ip show --ids {} {}'.format(pip1['id'], pip2['id']), + checks=self.check('length(@)', 2)) + + +class NetworkUsageListScenarioTest(ScenarioTest): + + def test_network_usage_list(self): + self.cmd('network list-usages --location westus', checks=self.check('type(@)', 'array')) + + +class NetworkAppGatewayDefaultScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_basic') + def test_network_app_gateway_with_defaults(self, resource_group): + self.cmd('network vnet create -n vnet1 -g {rg} --address-prefix 10.0.0.0/16') + self.cmd('network vnet subnet create -n subnet1 -g {rg} --vnet-name vnet1 --address-prefix 10.0.0.0/24 --default-outbound-access false') + self.cmd('network public-ip create -g {rg} -n pubip1 --sku standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network application-gateway create -g {rg} -n ag1 --sku Standard_v2 --priority 1001 --vnet-name vnet1 --subnet subnet1 --public-ip-address pubip1 --enable-fips false') + self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=self.check('enableFips', False)) + self.cmd('network application-gateway update -g {rg} -n ag1 --no-wait') + self.cmd('network application-gateway update -g {rg} -n ag1 --no-wait ' + '--capacity 3 --tags foo=doo --http2 Disabled --enable-fips true') + self.cmd('network application-gateway wait -g {rg} -n ag1 --updated') + + ag_list = self.cmd('network application-gateway list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?resourceGroup == '{}']) == length(@)".format(resource_group), True) + ]).get_output_in_json() + ag_count = len(ag_list) + + self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=[ + self.check('type(@)', 'object'), + self.check('name', 'ag1'), + self.check('resourceGroup', resource_group), + self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic'), + self.check("enableHttp2", False), + self.check("enableFips", True), + self.check("contains(defaultPredefinedSslPolicy, 'AppGwSslPolicy')", True), + ]) + self.cmd('network application-gateway show-backend-health -g {rg} -n ag1') + + self.cmd('network application-gateway stop --resource-group {rg} -n ag1') + self.cmd('network application-gateway start --resource-group {rg} -n ag1 --no-wait') + self.cmd('network application-gateway delete --resource-group {rg} -n ag1') + self.cmd('network application-gateway list --resource-group {rg}', checks=self.check('length(@)', ag_count - 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_basic_with_waf_v2_sku') + def test_network_app_gateway_with_waf_v2_sku(self, resource_group): + self.cmd('network public-ip create -g {rg} -n pubip1 --sku Standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network application-gateway waf-policy create -n waf1 -g {rg}') + self.cmd('network application-gateway create -g {rg} -n ag1 --sku WAF_v2 --public-ip-address pubip1 --waf-policy waf1 --priority 1001') + + self.cmd('network application-gateway list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?resourceGroup == '{}']) == length(@)".format(resource_group), True) + ]) + + self.cmd('network application-gateway show --resource-group {rg} --name ag1', checks=[ + self.check('type(@)', 'object'), + self.check('name', 'ag1'), + self.check('resourceGroup', resource_group), + self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic') + ]) + self.cmd('network application-gateway show-backend-health -g {rg} -n ag1 ' + '--host-name-from-http-settings --path /test --timeout 100 ' + '--http-settings appGatewayBackendHttpSettings --address-pool appGatewayBackendPool') + + @ResourceGroupPreparer(name_prefix="cli_test_ag_with_non_v2_sku_", location="westus") + def test_ag_with_non_v2_sku(self): + self.kwargs.update({ + "ag_name": self.create_random_name("ag-", 12), + "port_name": self.create_random_name("port-", 12), + "lisener_name": self.create_random_name("lisener-", 12), + "rule_name": self.create_random_name("rule-", 12), + }) + + self.cmd("network application-gateway create -n {ag_name} -g {rg} --sku WAF_Medium") + + self.kwargs["front_ip"] = self.cmd("network application-gateway show -n {ag_name} -g {rg}").get_output_in_json()["frontendIPConfigurations"][0]["name"] + self.cmd("network application-gateway frontend-port create -n {port_name} -g {rg} --gateway-name {ag_name} --port 8080") + self.cmd("network application-gateway http-listener create -n {lisener_name} -g {rg} --gateway-name {ag_name} --frontend-ip {front_ip} --frontend-port {port_name}") + + self.cmd( + "network application-gateway rule create -n {rule_name} -g {rg} --gateway-name {ag_name} --http-listener {lisener_name}", + checks=[ + self.check("name", "{ag_name}"), + self.check("sku.tier", "WAF") + ] + ) + + self.cmd("network application-gateway delete -n {ag_name} -g {rg}") + + @ResourceGroupPreparer(name_prefix='test_network_appgw_creation_with_public_and_private_ip') + def test_network_appgw_creation_with_public_and_private_ip(self, resource_group): + self.kwargs.update({ + "appgw": "applicationGateway", + "ip": "publicIP", + }) + + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + + self.cmd("network application-gateway create -g {rg} -n {appgw} " + "--sku Standard_v2 " + "--enable-private-link " + "--private-ip-address 10.0.0.17 " + "--public-ip-address {ip} " + "--priority 1001") + show_data = self.cmd("network application-gateway show -g {rg} -n {appgw}").get_output_in_json() + + self.assertEqual(len(show_data["frontendIPConfigurations"]), 2) + + # Those assertions are not stable, because the order in array frontendIpConfigurations is not fixed + # self.assertTrue(show_data["frontendIpConfigurations"][0]["publicIpAddress"]["id"].endswith(self.kwargs["ip"])) + # self.assertTrue(show_data["frontendIpConfigurations"][1]["id"].endswith("appGatewayPrivateFrontendIP")) # default name + # self.assertEqual(show_data["frontendIpConfigurations"][1]["privateIpAddress"], "10.0.0.17") + # self.assertEqual(show_data["frontendIpConfigurations"][1]["privateLinkConfiguration"], None) + # service buggy, this properties won't be populcated so fast even in Azure CLI 2.12.0 + # self.assertTrue(show_data["frontendIpConfigurations"][1]["privateLinkConfiguration"]["id"].endswith("PrivateLinkDefaultConfiguration")) + + self.cmd("network application-gateway delete -g {rg} -n {appgw}") + + +class NetworkAppGatewayIndentityScenarioTest(ScenarioTest): + + @live_only() + @ResourceGroupPreparer(name_prefix='cli_test_ag_identity') + @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium') + def test_network_app_gateway_with_identity(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'gw': 'gateway', + 'one_off_identity': 'id1', + 'access_identity': 'id2', + 'ip': 'ip1', + 'cert': 'MyCertificate' + }) + + # create a managed identity + self.cmd('identity create -g {rg} -n {one_off_identity}').get_output_in_json() + access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() + self.kwargs.update({ + 'access_identity_principal': access_identity_result['principalId'] + }) + + self.cmd('keyvault set-policy -g {rg} -n {kv} ' + '--object-id {access_identity_principal} --secret-permissions get list set') + + # create a certificate + keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() + self.kwargs.update({ + 'keyvault_cert_policy': keyvault_cert_policy + }) + self.cmd('keyvault certificate create ' + '--vault-name {kv} ' + '--name {cert} ' + '--policy "{keyvault_cert_policy}"') + cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() + self.kwargs.update({ + 'secret_id': cert_result['sid'] + }) + + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + + # create application-gateway with one_off_identity + self.cmd('network application-gateway create ' + '-g {rg} -n {gw} ' + '--sku Standard_v2 --public-ip-address {ip} ' + '--identity {one_off_identity} ' + '--priority 1001') + self.cmd('network application-gateway show -g {rg} -n {gw}', checks=[ + self.check('identity.type', 'userAssigned') + ]) + + # remove one_off_identity + self.cmd('network application-gateway identity remove -g {rg} --gateway-name {gw}', checks=[ + self.check('identity', None) + ]) + # assign access_identity + self.cmd('network application-gateway identity assign ' + '-g {rg} --gateway-name {gw} --identity {access_identity}', + checks=[ + self.check('identity.type', 'userAssigned') + ]) + self.cmd('network application-gateway identity show -g {rg} --gateway-name {gw}', checks=[ + self.check('type', 'userAssigned') + ]) + + self.cmd('network application-gateway ssl-cert create ' + ' -g {rg} --gateway-name {gw} ' + '--name MySSLCert ' + '--key-vault-secret-id {secret_id}') + + self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gw} -n cert1 --keyvault-secret {secret_id}', checks=[ + self.check('trustedRootCertificates[0].keyVaultSecretId', '{secret_id}') + ]) + + + @ResourceGroupPreparer(name_prefix='cli_test_ag_cert_name_') + @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium', additional_params='--enable-rbac-authorization false') + def test_network_app_gateway_with_cert_name(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'gw': 'gateway', + 'access_identity': 'id1', + 'ip': 'ip1', + 'cert': 'MyCertificate', + 'ssl_cert_name': 'TestCertName' + }) + + # create a managed identity + access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() + self.kwargs.update({ + 'access_identity_principal': access_identity_result['principalId'] + }) + + self.cmd('keyvault set-policy -g {rg} -n {kv} ' + '--object-id {access_identity_principal} --secret-permissions get list set') + + # create a certificate + keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() + self.kwargs.update({ + 'keyvault_cert_policy': keyvault_cert_policy + }) + self.cmd('keyvault certificate create ' + '--vault-name {kv} ' + '--name {cert} ' + '--policy "{keyvault_cert_policy}"') + cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() + self.kwargs.update({ + 'secret_id': cert_result['sid'] + }) + + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + + # create application-gateway with one_off_identity + self.cmd('network application-gateway create ' + '-g {rg} -n {gw} ' + '--sku Standard_v2 --public-ip-address {ip} ' + '--identity {access_identity} ' + '--frontend-port 1000 ' + '--key-vault-secret-id {secret_id} ' + '--ssl-certificate-name {ssl_cert_name} --priority 1001', checks=[ + self.check('applicationGateway.sslCertificates[0].name', self.kwargs['ssl_cert_name']), + self.check('applicationGateway.sslCertificates[0].properties.keyVaultSecretId', self.kwargs['secret_id']), + ]) + + +class NetworkAppGatewayTrustedClientCertScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_trusted_client_cert') + def test_network_app_gateway_with_trusted_client_cert(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'gw': 'gateway', + 'ip': 'ip1', + 'cert': os.path.join(TEST_DIR, 'client.cer'), + 'cert1': os.path.join(TEST_DIR, 'client1.cer'), + 'cname': 'cert_name', + 'cname1': 'cert_name1', + }) + + # create an ag with trusted client cert + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network application-gateway create -g {rg} -n {gw} --sku Standard_v2 --public-ip-address {ip} ' + '--trusted-client-cert name={cname} data="{cert}" --priority 1001', + checks=[self.check('length(applicationGateway.trustedClientCertificates)', 1)]) + + self.cmd('network application-gateway client-cert add -g {rg} --gateway-name {gw} ' + '--name {cname1} --data "{cert1}"', + checks=[self.check('length(trustedClientCertificates)', 2)]) + + self.cmd('network application-gateway client-cert list -g {rg} --gateway-name {gw}', + checks=[self.check('length(@)', 2)]) + + self.cmd('network application-gateway client-cert update -g {rg} --gateway-name {gw} ' + '--name {cname1} --data "{cert}"') + + cert = self.cmd('network application-gateway client-cert show -g {rg} --gateway-name {gw} --name {cname}').get_output_in_json() + + self.cmd('network application-gateway client-cert show -g {rg} --gateway-name {gw} --name {cname1}', + checks=[self.check('data', cert['data'])]) + + self.cmd('network application-gateway client-cert remove -g {rg} --gateway-name {gw} --name {cname1}') + + +class NetworkAppGatewaySslProfileScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_ssl_profile') + def test_network_app_gateway_with_ssl_profile(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'gw': 'gateway', + 'ip': 'ip1', + 'name': 'name', + 'name1': 'name1', + }) + + # create an ag with ssl profile + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd( + "network application-gateway create -n {gw} -g {rg} --public-ip-address {ip} --sku Standard_v2 --priority 1001 " + "--ssl-profile name={name} min-protocol-version=TLSv1_0 cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 policy-type=Custom client-auth-configuration=True", + checks=[ + self.check("length(applicationGateway.sslProfiles)", 1), + self.check("applicationGateway.sslProfiles[0].properties.clientAuthConfiguration.verifyClientCertIssuerDN", True), + self.check("applicationGateway.sslProfiles[0].properties.clientAuthConfiguration.verifyClientRevocation", "None"), + ] + ) + # set client cert revocation option + self.cmd( + "network application-gateway update -n {gw} -g {rg} --ssl-profiles [0].client-auth-configuration.verify-client-revocation=OCSP", + checks=[ + self.check("sslProfiles[0].clientAuthConfiguration.verifyClientCertIssuerDN", True), + self.check("sslProfiles[0].clientAuthConfiguration.verifyClientRevocation", "OCSP"), + ] + ) + + self.cmd('network application-gateway ssl-profile add -g {rg} --gateway-name {gw} --name {name1} ' + '--client-auth-configuration True --min-protocol-version TLSv1_0 ' + '--cipher-suites TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 --policy-type Custom', + checks=[self.check('length(sslProfiles)', 2)]) + + self.cmd('network application-gateway ssl-profile update -g {rg} --gateway-name {gw} --name {name1} ' + '--client-auth-configuration False', + checks=[self.check('sslProfiles[1].clientAuthConfiguration.verifyClientCertIssuerDN', False)]) + + self.cmd('network application-gateway ssl-profile show -g {rg} --gateway-name {gw} --name {name1} ', + checks=[self.check('clientAuthConfiguration.verifyClientCertIssuerDN', False)]) + + self.cmd('network application-gateway ssl-profile list -g {rg} --gateway-name {gw}', + checks=[self.check('length(@)', 2)]) + + self.cmd('network application-gateway ssl-profile remove -g {rg} --gateway-name {gw} --name {name} ') + + +class NetworkAppGatewayZoneScenario(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_zone', location='westus2') + def test_network_ag_zone(self, resource_group): + self.kwargs.update({ + 'gateway': 'ag1', + 'ip': 'pubip1' + }) + + # for public-ip after '2020-08-01', when set '-z 1 3', actually return 'zones:[1,2,3]' + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard -z 1 3 --ip-tags FirstPartyUsage=/NonProd', checks=[ + self.check('length(publicIp.zones)', 3) + ]) + self.cmd('network application-gateway create -g {rg} -n {gateway} --sku Standard_v2 --min-capacity 2 --max-capacity 4 --zones 1 3 --public-ip-address {ip} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') + self.cmd('network application-gateway show -g {rg} -n {gateway}', checks=[ + self.check('zones[0]', 1) + ]) + + +class NetworkAppGatewayAuthCertScenario(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_auth_cert') + def test_network_ag_auth_cert(self, resource_group): + self.kwargs.update({ + 'gateway': 'ag1', + 'cert1': 'cert1', + 'cert1_file': os.path.join(TEST_DIR, 'AuthCert.pfx'), + 'cert2': 'cert2', + 'cert2_file': os.path.join(TEST_DIR, 'AuthCert2.pfx'), + 'cert3': 'cert3', + 'cert3_file': os.path.join(TEST_DIR, 'AuthCert3.pfx'), + 'settings': 'https_settings' + }) + self.cmd('network application-gateway create -g {rg} -n {gateway} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') + self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}" --no-wait') + self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}" --no-wait') + + self.cmd( 'network application-gateway auth-cert update -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert3_file}" --no-wait') + + # test command of auth-cert list + self.cmd('network application-gateway auth-cert list -g {rg} --gateway-name {gateway}', + checks=self.check('length(@)', 2)) + + # test command of auth-cert show + self.cmd('network application-gateway auth-cert show -g {rg} --gateway-name {gateway} -n {cert1}', + checks=self.check('name', 'cert1')) + + # test command of auth-cert delete + self.cmd('network application-gateway auth-cert delete -g {rg} --gateway-name {gateway} -n {cert1} --no-wait') + self.cmd('network application-gateway auth-cert list -g {rg} --gateway-name {gateway}', + checks=self.check('length(@)', 1)) + + self.cmd('network application-gateway auth-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}" --no-wait') + + self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {gateway} -n {settings} --auth-certs {cert1} {cert2} --no-wait --port 443 --protocol https') + self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --auth-certs {cert2} {cert1} --no-wait') + self.cmd('network application-gateway show -g {rg} -n {gateway}', + checks=self.check('length(backendHttpSettingsCollection[1].authenticationCertificates)', 2)) + + +class NetworkAppGatewayTrustedRootCertScenario(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_root_cert') + def test_network_ag_root_cert(self, resource_group): + self.kwargs.update({ + 'gateway': 'ag1', + 'cert1': 'cert1', + 'cert1_file': os.path.join(TEST_DIR, 'test-root-cert.cer'), + 'cert2': 'cert2', + 'cert2_file': os.path.join(TEST_DIR, 'test-root-cert-2.cer'), + 'settings': 'https_settings', + 'ip1': 'myip1' + }) + self.cmd('network public-ip create -g {rg} -n {ip1} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network application-gateway create -g {rg} -n {gateway} --sku Standard_v2 --public-ip-address {ip1} --priority 1001') + self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') + self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert1} --cert-file "{cert1_file}"') + self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}"') + + # test root-cert list + self.cmd('network application-gateway root-cert list -g {rg} --gateway-name {gateway}', + checks=self.check('length(@)', 2)) + # test root-cert show + self.cmd('network application-gateway root-cert show -g {rg} --gateway-name {gateway} -n {cert1}', + checks=self.check('name', 'cert1')) + + # test root-cert delete + self.cmd('network application-gateway root-cert delete -g {rg} --gateway-name {gateway} -n {cert2} --no-wait') + self.cmd('network application-gateway root-cert list -g {rg} --gateway-name {gateway}', + checks=self.check('length(@)', 1)) + self.cmd('network application-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert2} --cert-file "{cert2_file}" --no-wait') + + self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {gateway} -n {settings} --root-certs {cert1} {cert2} --host-name-from-backend-pool true --no-wait --port 443 --protocol https') + self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --root-certs {cert2} {cert1} --no-wait') + self.cmd('network application-gateway show -g {rg} -n {gateway}', + checks=self.check('length(backendHttpSettingsCollection[1].trustedRootCertificates)', 2)) + self.cmd('network application-gateway http-settings update -g {rg} --gateway-name {gateway} -n {settings} --no-wait') + + +class NetworkAppGatewayRedirectConfigScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_basic') + def test_network_app_gateway_redirect_config(self, resource_group): + self.kwargs.update({ + 'gateway': 'ag1', + 'name': 'redirect1', + 'name2': 'redirect2' + }) + self.cmd('network application-gateway create -g {rg} -n {gateway} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {gateway} --exists') + self.cmd('network application-gateway redirect-config create --gateway-name {gateway} -g {rg} -n {name} -t permanent --include-query-string --include-path false --target-listener appGatewayHttpListener --no-wait') + self.cmd('network application-gateway redirect-config show --gateway-name {gateway} -g {rg} -n {name}', checks=[ + self.check('includePath', False), + self.check('includeQueryString', True), + self.check('redirectType', 'Permanent') + ]) + self.cmd('network application-gateway redirect-config update --gateway-name {gateway} -g {rg} -n {name} --include-path --include-query-string false --no-wait') + self.cmd('network application-gateway redirect-config show --gateway-name {gateway} -g {rg} -n {name}', checks=[ + self.check('includePath', True), + self.check('includeQueryString', False), + self.check('redirectType', 'Permanent') + ]) + # test redirect-config list command + self.cmd('network application-gateway redirect-config create --gateway-name {gateway} -g {rg} -n {name2} -t permanent --include-query-string --include-path false --target-listener appGatewayHttpListener --no-wait') + self.cmd('network application-gateway redirect-config list --gateway-name {gateway} -g {rg}', checks=[ + self.check('length(@)', 2) + ]) + # test redirect-config delete command + self.cmd('network application-gateway redirect-config delete --gateway-name {gateway} -g {rg} -n {name2}') + self.cmd('network application-gateway redirect-config list --gateway-name {gateway} -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + + + +class NetworkAppGatewayExistingSubnetScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_existing_subnet') + def test_network_app_gateway_with_existing_subnet(self, resource_group): + + vnet = self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name subnet1').get_output_in_json() + subnet_id = vnet['newVNet']['subnets'][0]['id'] + self.kwargs['subnet_id'] = subnet_id + + # make sure it fails + self.cmd('network application-gateway create -g {rg} -n ag2 --subnet {subnet_id} --subnet-address-prefix 10.0.0.0/28 --tags foo=doo --priority 1001', expect_failure=True) + # now verify it succeeds + self.cmd('network application-gateway create -g {rg} -n ag2 --subnet {subnet_id} --servers 172.0.0.1 www.mydomain.com --priority 1001', checks=[ + self.check('applicationGateway.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), + self.check('applicationGateway.frontendIPConfigurations[0].properties.subnet.id', subnet_id) + ]) + + +class NetworkAppGatewayNoWaitScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_no_wait') + def test_network_app_gateway_no_wait(self, resource_group): + + self.kwargs.update({ + 'tags': {'a': 'b', 'c': 'd'} + }) + + self.cmd('network application-gateway create -g {rg} -n ag1 --no-wait --connection-draining-timeout 180 --priority 1001', checks=self.is_empty()) + self.cmd('network application-gateway create -g {rg} -n ag2 --no-wait --tags a=b c=d --priority 1001', checks=self.is_empty()) + self.cmd('network application-gateway wait -g {rg} -n ag1 --created --interval 120', checks=self.is_empty()) + self.cmd('network application-gateway wait -g {rg} -n ag2 --created --interval 120', checks=self.is_empty()) + self.cmd('network application-gateway show -g {rg} -n ag1', checks=[ + self.check('provisioningState', 'Succeeded'), + self.check('backendHttpSettingsCollection[0].connectionDraining.enabled', True), + self.check('backendHttpSettingsCollection[0].connectionDraining.drainTimeoutInSec', 180) + ]) + self.cmd('network application-gateway show -g {rg} -n ag2', checks=[ + self.check('provisioningState', 'Succeeded'), + self.check('tags', '{tags}') + ]) + self.cmd('network application-gateway delete -g {rg} -n ag2 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n ag2 --deleted') + + +class NetworkAppGatewayPrivateIpScenarioTest20170601(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_private_ip') + def test_network_app_gateway_with_private_ip(self, resource_group): + + self.kwargs.update({ + 'private_ip': '10.0.0.15', + 'public_ip': 'pip-ag3', + 'path': os.path.join(TEST_DIR, 'TestCert.pfx'), + 'pass': 'password' + }) + self.cmd('network public-ip create -g {rg} -n {public_ip} --sku Standard') + self.cmd('network application-gateway waf-policy create -n waf1 -g {rg}') + self.cmd('network application-gateway create -g {rg} -n ag3 --subnet subnet1 --private-ip-address {private_ip} --public-ip-address {public_ip} --sku WAF_v2 --waf-policy waf1 --cert-file "{path}" --cert-password {pass} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n ag3 --exists') + self.cmd('network application-gateway show -g {rg} -n ag3', checks=[ + self.check('frontendIPConfigurations[0].privateIPAddress', '{private_ip}'), + self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Static') + ]) + self.kwargs['path'] = os.path.join(TEST_DIR, 'TestCert2.pfx') + self.cmd('network application-gateway ssl-cert update -g {rg} --gateway-name ag3 -n ag3SslCert --cert-file "{path}" --cert-password {pass}') + self.cmd('network application-gateway wait -g {rg} -n ag3 --updated') + + # test ssl-cert list + self.cmd('network application-gateway ssl-cert list -g {rg} --gateway-name ag3', + checks=[self.check('length(@)', 1)]) + + # test ssl-cert show + self.cmd('network application-gateway ssl-cert show -g {rg} --gateway-name ag3 -n ag3SslCert', + checks=[self.check('name', 'ag3SslCert')]) + + self.kwargs['path'] = os.path.join(TEST_DIR, 'TestCert.pfx') + self.cmd('network application-gateway ssl-cert create -g {rg} --gateway-name ag3 -n ag3SslCert01 --cert-file "{path}" --cert-password {pass} --no-wait') + # test ssl-cert delete + self.cmd('network application-gateway ssl-cert delete -g {rg} --gateway-name ag3 -n ag3SslCert01 --no-wait') + self.cmd('network application-gateway ssl-cert list -g {rg} --gateway-name ag3', checks=[ + self.check('length(@)', 1)]) + + self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 --disabled-ssl-protocols TLSv1_0 TLSv1_1 --no-wait') + self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', + checks=self.check('disabledSslProtocols.length(@)', 2)) + + cipher_suite = 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256' + self.kwargs['cipher'] = cipher_suite + self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 --min-protocol-version TLSv1_2 --cipher-suites {cipher} --no-wait') + self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', checks=[ + self.check('cipherSuites.length(@)', 1), + self.check('minProtocolVersion', 'TLSv1_2'), + self.check('policyType', 'Custom') + ]) + + # supported predefined policy (positive path) + policy_name = 'AppGwSslPolicy20220101' + self.kwargs['policy'] = policy_name + self.cmd('network application-gateway ssl-policy set -g {rg} --gateway-name ag3 -n {policy} --policy-type Predefined --no-wait') + self.cmd('network application-gateway wait -g {rg} -n ag3 --updated') + self.cmd('network application-gateway ssl-policy show -g {rg} --gateway-name ag3', checks=[ + self.check('policyName', policy_name), + self.check('policyType', 'Predefined') + ]) + # test predefined show + self.cmd('network application-gateway ssl-policy predefined show -n {policy}', checks=[ + self.check('name', policy_name) + ]) + + # test predefined list + self.cmd('network application-gateway ssl-policy predefined list', checks=[ + self.check('length(@)', 5)]) + + # test ssl-policy list-options + self.cmd('network application-gateway ssl-policy list-options', checks=[ + self.exists('availableCipherSuites'), + self.exists('availableProtocols'), + self.exists('predefinedPolicies'), + self.check('type', 'Microsoft.Network/ApplicationGatewayAvailableSslOptions'), + ]) + + @ResourceGroupPreparer(name_prefix='test_appgw_with_tcp', location='westus') + def test_appgw_with_tcp(self, resource_group): + self.kwargs.update({ + 'appgw': 'appgw', + 'appgw_frontend_port': 'testFrontendPort', + 'appgw_settings': 'testSettings', + 'appgw_listener': 'testListener', + 'appgw_address_pool': 'testAddressPool', + 'appgw_routing_rule': 'testRule', + 'appgw_public_ip': 'testPublicIp', + 'appgw_rule_type': 'Basic', + 'priority': 1001, + 'port': 8080 + }) + + self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + + self.cmd('network application-gateway create -g {rg} -n {appgw} ' + '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' + '--priority {priority}') + show_appgw_data = self.cmd('network application-gateway show -g {rg} -n {appgw}').get_output_in_json() + frontend_ip = show_appgw_data['frontendIPConfigurations'][0]['name'] + self.kwargs.update({ + 'appgw_frontend_ip': frontend_ip + }) + + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port} --port {port}') + self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' + '--frontend-port {appgw_frontend_port} -n {appgw_listener} --frontend-ip {appgw_frontend_ip}', + checks=(self.check('listeners[0].name', '{appgw_listener}'))) + self.cmd('network application-gateway settings create -g {rg} --gateway-name {appgw} ' + '--name {appgw_settings} --port {port} ', + checks=(self.check('backendSettingsCollection[0].name', '{appgw_settings}'))) + self.cmd( + 'network application-gateway address-pool create -g {rg} --gateway-name {appgw} -n {appgw_address_pool} ' + '--servers 10.0.0.4 10.0.0.5') + self.cmd('network application-gateway routing-rule create -g {rg} --gateway-name {appgw} ' + '--name {appgw_routing_rule} --listener {appgw_listener} --rule-type {appgw_rule_type} ' + '--address-pool {appgw_address_pool} --settings {appgw_settings} --priority 1002', + checks=[ + self.check('routingRules[0].name', '{appgw_routing_rule}') + ]) + + self.cmd('network application-gateway delete --name {appgw} --resource-group {rg}') + +class NetworkAppGatewaySubresourceScenarioTest(ScenarioTest): + + def _create_ag(self): + self.cmd('network application-gateway create -g {rg} -n {ag} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + @ResourceGroupPreparer(name_prefix='cli_test_ag_address_pool') + def test_network_ag_address_pool(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway address-pool', + 'name': 'pool1' + }) + self._create_ag() + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --servers 123.4.5.6 www.mydns.com') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('length(backendAddresses)', 2), + self.check('backendAddresses[0].ipAddress', '123.4.5.6'), + self.check('backendAddresses[1].fqdn', 'www.mydns.com'), + ]) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --servers 5.4.3.2') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('length(backendAddresses)', 1), + self.check('backendAddresses[0].ipAddress', '5.4.3.2') + ]) + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_port') + def test_network_ag_frontend_port(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway frontend-port', + 'name': 'myport' + }) + self._create_ag() + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --port 111') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('name', 'myport'), + self.check('port', 111) + ]) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --port 112') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('name', 'myport'), + self.check('port', 112) + ]) + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_ip_public') + def test_network_ag_frontend_ip_public(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway frontend-ip', + 'name': 'myfrontend', + 'ip1': 'myip1', + 'ip2': 'myip2' + }) + self.cmd('network application-gateway create -g {rg} -n {ag} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + self.cmd('network public-ip create -g {rg} -n {ip1} --sku Basic') + self.cmd('network public-ip create -g {rg} -n {ip2}') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --public-ip-address {ip1}') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('subnet', None) + ]) + + # NOTE: Service states that public IP address cannot be changed. https://github.com/Azure/azure-cli/issues/4133 + # self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --public-ip-address {ip2}') + # self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}') + + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_frontend_ip_private') + def test_network_ag_frontend_ip_private(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway frontend-ip', + 'name': 'frontendip', + 'ip1': 'myip1', + 'vnet1': 'vnet1', + 'vnet2': 'vnet2', + 'subnet': 'subnet1' + }) + self.cmd('network public-ip create -g {rg} -n {ip1}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name {subnet}') + + self.cmd('network application-gateway create -g {rg} -n {ag} --no-wait --public-ip-address {ip1} --vnet-name {vnet1} --subnet {subnet} --priority 1001') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --private-ip-address 10.0.0.10 --vnet-name {vnet1} --subnet {subnet}') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + ]) + + # NOTE: Service states that frontend subnet cannot differ from gateway subnet https://github.com/Azure/azure-cli/issues/4134 + # self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name {subnet} --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.10.0/24') + # self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --private-ip-address 11.0.10.10 --vnet-name {vnet2} --subnet {subnet}') + # self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}') + + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_http_listener') + def test_network_ag_http_listener(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway http-listener', + 'name': 'mylistener' + }) + self._create_ag() + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('hostName', 'www.test.com') + ]) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --host-name www.test2.com') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('hostName', 'www.test2.com') + ]) + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='test_network_ag_http_listener_with_waf_policy') + def test_network_ag_http_listener_with_waf_policy(self): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway http-listener', + 'name': 'mylistener', + 'waf_1': 'waf_1', + 'waf_2': 'waf_2', + 'waf_3': 'waf_3', + 'listener_2': 'listener_2', + }) + + # prepare 2 WAF policies + self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_1}') + self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_2}') + self.cmd('network application-gateway waf-policy create -g {rg} --name {waf_3}') + + self.cmd('network public-ip create -g {rg} -n ip-1 --sku Standard') + + # sku=WAF_v2 is necessary for updating HTTP listener's WAF configuration + self.cmd('network application-gateway waf-policy create -n waf_1 -g {rg}') + create_res = self.cmd('network application-gateway create -g {rg} --name {ag} --public-ip-address ip-1 --sku WAF_v2 --priority 1001 --waf-policy waf_1').get_output_in_json() + self.assertEqual(len(create_res['applicationGateway']['httpListeners']), 1) + self.assertIsNone(create_res['applicationGateway']['httpListeners'][0].get('firewallPolicy')) + + # update the default HTTP listener's WAF policy + update_res = self.cmd('network application-gateway http-listener update -g {rg} --gateway-name {ag} --name appGatewayHttpListener --waf-policy {waf_1}').get_output_in_json() + self.assertTrue(update_res['firewallPolicy']['id'].endswith('waf_1')) + + # create another HTTP listener with WAF policy and update it to another WAF policy + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {ag} --port 9020 --name 9020') + self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} --name {listener_2} --frontend-port 9020 --waf-policy {waf_2}') + update_res = self.cmd('network application-gateway http-listener update -g {rg} --gateway-name {ag} --name {listener_2} --waf-policy {waf_3}').get_output_in_json() + self.assertTrue(update_res['firewallPolicy']['id'].endswith('waf_3')) + + self.cmd('network application-gateway show -g {rg} --name {ag}') + + @ResourceGroupPreparer(name_prefix='cli_test_ag_http_listener') + def test_network_ag_http_listener_with_multi_host_names(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway http-listener', + 'name': 'mylistener', + 'gateway_ip': 'ip1', + 'port': 'cliport', + 'waf': 'waf1', + }) + + self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') + self.cmd('network application-gateway waf-policy create -n {waf} -g {rg}') + self.cmd('network application-gateway create -g {rg} -n {ag} ' + '--sku WAF_v2 ' + '--public-ip-address {gateway_ip} --waf-policy {waf} --priority 1001') + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {ag} -n {port} --port 18080') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --frontend-port {port} --host-names "*.contoso.com" "www.microsoft.com"') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('length(hostNames)', 2), + self.check('hostNames[0]', "*.contoso.com"), + self.check('hostNames[1]', "www.microsoft.com") + ]) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --host-names "*.contoso.com" "www.bing.com"') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('length(hostNames)', 2), + self.check('hostNames[0]', "*.contoso.com"), + self.check('hostNames[1]', "www.bing.com") + ]) + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_http_settings') + def test_network_ag_http_settings(self, resource_group): + + self.kwargs.update({ + 'ag': 'ag1', + 'res': 'application-gateway http-settings', + 'name': 'mysettings', + 'name2': 'mysettings2', + 'ip': 'pip', + 'vnet': 'vnet1', + 'subnet': 'subnet1' + }) + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network vnet create -g {rg} -n {vnet} --address-prefix 10.0.0.0/16') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --default-outbound-access false') + self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet} --public-ip-address {ip} --priority 1001 --sku Standard_v2') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --affinity-cookie-name mycookie --connection-draining-timeout 60 --cookie-based-affinity --host-name-from-backend-pool --protocol https --timeout 50 --port 70') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('affinityCookieName', 'mycookie'), + self.check('connectionDraining.drainTimeoutInSec', 60), + self.check('connectionDraining.enabled', True), + self.check('cookieBasedAffinity', 'Enabled'), + self.check('pickHostNameFromBackendAddress', True), + self.check('port', 70), + self.check('protocol', 'Https'), + self.check('requestTimeout', 50) + ]) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --affinity-cookie-name mycookie2 --connection-draining-timeout 0 --cookie-based-affinity disabled --host-name-from-backend-pool false --protocol http --timeout 40 --port 71') + self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('affinityCookieName', 'mycookie2'), + self.check('connectionDraining.drainTimeoutInSec', 1), + self.check('connectionDraining.enabled', False), + self.check('cookieBasedAffinity', 'Disabled'), + self.check('pickHostNameFromBackendAddress', False), + self.check('port', 71), + self.check('protocol', 'Http'), + self.check('requestTimeout', 40) + ]) + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 2)) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + + self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {name2} --port 443 \ + --protocol Https --cookie-based-affinity disabled --validate-cert-chain-and-expiry false --validate-sni true', checks=[ + self.check('name', '{name2}'), + self.check('port', 443), + self.check('protocol', 'Https'), + self.check('cookieBasedAffinity', 'Disabled'), + self.check('validateCertChainAndExpiry', False), + self.check('validateSNI', True), + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_probe') + def test_network_ag_probe(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'gateway_ip': 'gateway_ip', + 'ag': 'ag1', + 'name': 'myprobe', + 'waf': 'waf1', + }) + + self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') + self.cmd('network application-gateway waf-policy create -n {waf} -g {rg}') + self.cmd('network application-gateway create -g {rg} -n {ag} ' + '--sku WAF_v2 --priority 1001 ' + '--public-ip-address {gateway_ip} --waf-policy {waf}') + + self.cmd('network application-gateway probe create -g {rg} --gateway-name {ag} -n {name} --no-wait ' + '--path /test ' + '--protocol http ' + '--interval 25 ' + '--timeout 100 ' + '--threshold 10 ' + '--min-servers 2 ' + '--host www.test.com ' + '--match-status-codes 200 204 ' + '--host-name-from-http-settings false ' + '--port 2048 ') + self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('path', '/test'), + self.check('protocol', 'Http'), + self.check('interval', 25), + self.check('timeout', 100), + self.check('unhealthyThreshold', 10), + self.check('minServers', 2), + self.check('host', 'www.test.com'), + self.check('length(match.statusCodes)', 2), + self.check('pickHostNameFromBackendHttpSettings', False), + self.check('port', 2048) + ]) + self.cmd('network application-gateway probe update -g {rg} --gateway-name {ag} -n {name} --no-wait ' + '--path /test2 ' + '--protocol https ' + '--interval 26 ' + '--timeout 101 ' + '--threshold 11 ' + '--min-servers 3 ' + '--host "" ' + '--match-status-codes 201 ' + '--host-name-from-http-settings ' + '--port 4096 ') + self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('path', '/test2'), + self.check('protocol', 'Https'), + self.check('interval', 26), + self.check('timeout', 101), + self.check('unhealthyThreshold', 11), + self.check('minServers', 3), + self.check('host', ''), + self.check('length(match.statusCodes)', 1), + self.check('pickHostNameFromBackendHttpSettings', True), + self.check('port', 4096) + ]) + self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + self.cmd('network application-gateway probe delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_probe_with_host_name_from_settings') + def test_network_ag_probe_with_host_name_from_settings(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'gateway_ip': 'gateway_ip', + 'ag': 'ag1', + 'name': 'myprobe' + }) + + self.cmd('network public-ip create -g {rg} -n {gateway_ip} --sku Standard') + self.cmd('network application-gateway create -g {rg} -n {ag} ' + '--sku Standard_v2 --priority 1001 ' + '--public-ip-address {gateway_ip} ') + + self.cmd('network application-gateway probe create -g {rg} --gateway-name {ag} -n {name} --no-wait ' + '--protocol tcp ' + '--interval 25 ' + '--timeout 100 ' + '--threshold 10 ' + '--min-servers 2 ' + '--match-status-codes 200 204 ' + '--host-name-from-settings false ' + '--port 2048 ') + self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('protocol', 'Tcp'), + self.check('interval', 25), + self.check('timeout', 100), + self.check('unhealthyThreshold', 10), + self.check('minServers', 2), + self.check('length(match.statusCodes)', 2), + self.check('pickHostNameFromBackendSettings', False), + self.check('port', 2048) + ]) + self.cmd('network application-gateway probe update -g {rg} --gateway-name {ag} -n {name} --no-wait ' + '--protocol tls ' + '--interval 26 ' + '--timeout 101 ' + '--threshold 11 ' + '--min-servers 3 ' + '--match-status-codes 201 ' + '--host-name-from-settings false ' + '--port 4096 ') + self.cmd('network application-gateway probe show -g {rg} --gateway-name {ag} -n {name}', checks=[ + self.check('protocol', 'Tls'), + self.check('interval', 26), + self.check('timeout', 101), + self.check('unhealthyThreshold', 11), + self.check('minServers', 3), + self.check('length(match.statusCodes)', 1), + self.check('pickHostNameFromBackendSettings', False), + self.check('port', 4096) + ]) + self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 1)) + self.cmd('network application-gateway probe delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network application-gateway probe list -g {rg} --gateway-name {ag}', checks=self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_rule') + def test_network_ag_rule(self, resource_group): + + self.kwargs.update({ + 'ip': 'pip1', + 'ag': 'ag1', + 'res': 'application-gateway rule', + 'name': 'myrule', + 'name2': 'myrule2', + 'set': 'myruleset' + }) + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') + self.cmd('network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + # Make the default rule has priority. + # Otherwise, server will raise ApplicationGatewayRequestRoutingRulePartialPriorityDefined + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n rule1 --priority 1') + + self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') + self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener2 --no-wait --frontend-port appGatewayFrontendPort --host-name www.test2.com') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name} --no-wait --http-listener mylistener --priority 12') + rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}').get_output_in_json() + self.assertTrue(rule['httpListener']['id'].endswith('mylistener')) + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name} --no-wait --http-listener mylistener2 --priority 32') + rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name}').get_output_in_json() + self.assertTrue(rule['httpListener']['id'].endswith('mylistener2')) + + self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') + + # test rewrite-rule set update command + self.cmd('network application-gateway rewrite-rule set update -g {rg} --gateway-name {ag} -n {set}') + + self.cmd('network {res} create -g {rg} --gateway-name {ag} -n {name2} --no-wait --rewrite-rule-set {set} --http-listener mylistener --priority 10') + rule = self.cmd('network {res} show -g {rg} --gateway-name {ag} -n {name2}').get_output_in_json() + self.kwargs['set_id'] = rule['rewriteRuleSet']['id'] + self.cmd('network {res} update -g {rg} --gateway-name {ag} -n {name2} --rewrite-rule-set {set_id} --priority 21', checks=[ + self.check('rewriteRuleSet.id', '{set_id}') + ]) + + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=[ + self.check('length(@)', 3) + ]) + self.cmd('network {res} delete -g {rg} --gateway-name {ag} --no-wait -n {name}') + self.cmd('network {res} list -g {rg} --gateway-name {ag}', checks=[ + self.check('length(@)', 2) + ]) + + @ResourceGroupPreparer(name_prefix="cli_test_ag_rule_default_exists", location="westus") + def test_ag_rule_default_exists(self): + self.kwargs.update({ + "pip": self.create_random_name("public-ip-", 16), + "ag": self.create_random_name("application-gateway-", 24), + "port1": self.create_random_name("frontend-port-", 20), + "port2": self.create_random_name("frontend-port-", 20), + "listener": self.create_random_name("listener-", 16), + "settings": self.create_random_name("settings-", 16), + "http_listener": self.create_random_name("http-listener-", 20), + "routing_rule": self.create_random_name("routing-rule-", 20), + "pool": self.create_random_name("pool-", 12), + "redirect_config": self.create_random_name("redirect-config-", 20), + "rule": self.create_random_name("rule-", 12), + }) + self.cmd("network public-ip create -n {pip} -g {rg} --sku Standard") + output = self.cmd("network application-gateway create -n {ag} -g {rg} --public-ip-address {pip} --sku Standard_v2 --priority 1001").get_output_in_json()["applicationGateway"] + self.kwargs["pool_id"] = output["backendAddressPools"][0]["id"] + self.kwargs["http_settings_id"] = output["backendHttpSettingsCollection"][0]["id"] + + self.cmd("network application-gateway frontend-port create -n {port1} -g {rg} --gateway-name {ag} --port 8080") + self.kwargs["listener_id"] = self.cmd("network application-gateway listener create -n {listener} -g {rg} --gateway-name {ag} --frontend-port {port1} --frontend-ip appGatewayFrontendIP").get_output_in_json()["listeners"][0]["id"] + self.kwargs["settings_id"] = self.cmd("network application-gateway settings create -n {settings} -g {rg} --gateway-name {ag} --port 8080").get_output_in_json()["backendSettingsCollection"][0]["id"] + + self.cmd( + "network application-gateway routing-rule create -n {routing_rule} -g {rg} --gateway-name {ag} --priority 1002", + checks=[ + self.check("routingRules[0].backendAddressPool.id", "{pool_id}"), + self.check("routingRules[0].backendSettings.id", "{settings_id}"), + self.check("routingRules[0].listener.id", "{listener_id}"), + ] + ) + self.cmd("network application-gateway routing-rule delete -n {routing_rule} -g {rg} --gateway-name {ag}") + # default http listener has been associated with default rule + self.cmd("network application-gateway frontend-port create -n {port2} -g {rg} --gateway-name {ag} --port 8082") + self.cmd("network application-gateway http-listener create -n {http_listener} -g {rg} --gateway-name {ag} --frontend-port {port2} --frontend-ip appGatewayFrontendIP") + # multiple pools are valid when redirection exsits + self.cmd("network application-gateway address-pool create -n {pool} -g {rg} --gateway-name {ag}") + self.cmd("network application-gateway frontend-port create -n rd-port -g {rg} --gateway-name {ag} --port 8084") + self.cmd("network application-gateway http-listener create -n rd-listener -g {rg} --gateway-name {ag} --frontend-port rd-port --frontend-ip appGatewayFrontendIP") + self.cmd("network application-gateway redirect-config create -n {redirect_config} -g {rg} --gateway-name {ag} --target-listener rd-listener --type permanent") + self.cmd( + "network application-gateway rule create -n {rule} -g {rg} --gateway-name {ag} --http-listener {http_listener} --redirect-config {redirect_config} --priority 1004", + checks=[ + self.check("length(backendAddressPools)", 2), + self.check("requestRoutingRules[0].backendAddressPool.id", "{pool_id}"), + self.check("requestRoutingRules[0].backendHttpSettings.id", "{http_settings_id}"), + ] + ) + self.cmd("network application-gateway rule delete -n {rule} -g {rg} --gateway-name {ag}") + + @ResourceGroupPreparer(name_prefix='cli_test_ag_url_path_map') + def test_network_ag_url_path_map(self, resource_group): + self.kwargs.update({ + 'ip': 'pip1', + 'ag': 'ag1', + 'name': 'mypathmap', + 'rulename': 'myurlrule', + 'rulename2': 'myurlrule2', + 'pool': 'mypool', + 'set': 'myruleset', + 'settings': 'http_settings', + 'rg': resource_group + }) + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') + self.cmd('network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + self.cmd('network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') + + self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') + self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') + self.cmd('network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {settings} --port 443 --protocol https') + self.cmd('network application-gateway url-path-map create -g {rg} --gateway-name {ag} -n {name} --rule-name {rulename} --paths /mypath1/* --address-pool {pool} ' + '--default-address-pool {pool} --http-settings {settings} --default-http-settings {settings} ' + '--default-rewrite-rule-set {set} --rewrite-rule-set {set}') + + # test url-path-map list + self.cmd('network application-gateway url-path-map list -g {rg} --gateway-name {ag}', + checks=[self.check('length(@)', 1)]) + + # test url-path-map show + self.cmd('network application-gateway url-path-map show -g {rg} --gateway-name {ag} -n {name}', + checks=[self.check('name', 'mypathmap')]) + + self.cmd('network application-gateway url-path-map update -g {rg} --gateway-name {ag} -n {name} --default-rewrite-rule-set {set}') + self.cmd('network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' + '--paths /mypath122/* --address-pool {pool} --http-settings {settings} --rewrite-rule-set {set}') + + # test url-path-map rule delete + self.cmd('network application-gateway url-path-map rule delete -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name}') + + # test url-path-map delete + self.cmd('network application-gateway url-path-map delete -g {rg} --gateway-name {ag} -n {name}') + self.cmd('network application-gateway url-path-map list -g {rg} --gateway-name {ag}', + checks=[self.check('length(@)', 0)]) + + + @ResourceGroupPreparer(name_prefix='cli_test_ag_url_path_map_edge_case') + def test_network_ag_url_path_map_edge_case(self, resource_group): + self.kwargs.update({ + 'ip': 'pip1', + 'ag': 'ag1', + 'name': 'mypathmap', + 'rulename': 'myurlrule', + 'rulename2': 'myurlrule2', + 'pool': 'mypool', + 'set': 'myruleset', + 'settings': 'http_settings', + 'redirect_config': 'myconfig', + 'rg': resource_group + }) + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') + self.cmd( + 'network application-gateway create -g {rg} -n {ag} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + + self.cmd( + 'network application-gateway http-listener create -g {rg} --gateway-name {ag} -n mylistener --no-wait --frontend-port appGatewayFrontendPort --host-name www.test.com') + + self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {ag} -n {set}') + self.cmd('network application-gateway redirect-config create -g {rg} --gateway-name {ag} -n {redirect_config} ' + '--target-listener mylistener --type Permanent') + self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') + self.cmd( + 'network application-gateway http-settings create -g {rg} --gateway-name {ag} -n {settings} --port 443 --protocol https') + self.cmd( + 'network application-gateway url-path-map create -g {rg} --gateway-name {ag} -n {name} --rule-name {rulename} --paths /mypath1/* ' + '--redirect-config {redirect_config} --default-redirect-config {redirect_config}') + self.cmd( + 'network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' + '--paths /mypath122/* --address-pool {pool} --http-settings {settings}') + with self.assertRaisesRegex(CLIError, "Cannot reference a BackendAddressPool when Redirect Configuration is specified."): + self.cmd( + 'network application-gateway url-path-map rule create -g {rg} --gateway-name {ag} -n {rulename2} --path-map-name {name} ' + '--paths /mypath122/* --address-pool {pool} --http-settings {settings} --redirect-config {redirect_config}') + + @ResourceGroupPreparer(name_prefix='cli_test_ag_listener') + def test_network_ag_listener(self, resource_group): + self.kwargs.update({ + 'appgw': 'appgw', + 'appgw_frontend_port': 'testFrontendPort01', + 'appgw_listener': 'testListener', + 'appgw_public_ip': 'testPublicIp', + 'appgw_rule_type': 'Basic', + 'res': 'application-gateway listener', + 'priority': 1001, + 'port1': 8080, + 'port2': 8081, + }) + + self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') + + self.cmd('network application-gateway create -g {rg} -n {appgw} ' + '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' + '--priority {priority}') + + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port} --port {port1}') + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n testFrontendPort02 --port {port2}') + + self.cmd('network {res} create -g {rg} --gateway-name {appgw} --frontend-port {appgw_frontend_port} ' + '-n {appgw_listener} --frontend-ip appGatewayFrontendIP') + + self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_listener}', + checks=(self.check('name', '{appgw_listener}'))) + + self.cmd('network {res} update -g {rg} --gateway-name {appgw} --frontend-port testFrontendPort02 -n {appgw_listener}') + + listener = self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_listener}').get_output_in_json() + self.assertTrue(listener['frontendPort']['id'].endswith('testFrontendPort02')) + + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 1))) + + self.cmd('network {res} delete -g {rg} --gateway-name {appgw} -n {appgw_listener}') + + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 0))) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_listener_with_host_names') + @KeyVaultPreparer(name_prefix='cli-test-keyvault-', sku='premium', additional_params='--enable-rbac-authorization false') + def test_network_ag_listener_with_host_names(self, resource_group): + self.kwargs.update({ + 'appgw': 'appgw', + 'appgw_frontend_port': 'testFrontendPort01', + 'appgw_listener': 'testListener', + 'appgw_public_ip': 'testPublicIp', + 'access_identity': 'id1', + 'priority': 1001, + 'cert': 'MyCertificate', + 'port': 8080, + 'ssl_cert_name': 'TestCertName', + }) + + # create a managed identity + access_identity_result = self.cmd('identity create -g {rg} -n {access_identity}').get_output_in_json() + self.kwargs.update({ + 'access_identity_principal': access_identity_result['principalId'] + }) + + self.cmd('keyvault set-policy -g {rg} -n {kv} ' + '--object-id {access_identity_principal} --secret-permissions get list set') + + # create a certificate + keyvault_cert_policy = self.cmd('az keyvault certificate get-default-policy').get_output_in_json() + self.kwargs.update({ + 'keyvault_cert_policy': keyvault_cert_policy + }) + self.cmd('keyvault certificate create ' + '--vault-name {kv} ' + '--name {cert} ' + '--policy "{keyvault_cert_policy}"') + cert_result = self.cmd('keyvault certificate show --vault-name {kv} --name {cert}').get_output_in_json() + self.kwargs.update({ + 'secret_id': cert_result['sid'] + }) + + self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') + + # create application-gateway with one_off_identity + self.cmd('network application-gateway create ' + '-g {rg} -n {appgw} ' + '--sku Standard_v2 --public-ip-address {appgw_public_ip} ' + '--identity {access_identity} ' + '--frontend-port 1000 ' + '--key-vault-secret-id {secret_id} ' + '--ssl-certificate-name {ssl_cert_name} --priority {priority}', checks=[ + self.check('applicationGateway.sslCertificates[0].name', self.kwargs['ssl_cert_name']), + self.check('applicationGateway.sslCertificates[0].properties.keyVaultSecretId', self.kwargs['secret_id']), + ]) + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port} --port {port}') + + self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} -n {appgw_listener} ' + '--host-names "*.contoso.com" "www.microsoft.com" --frontend-port {appgw_frontend_port} ' + '--frontend-ip appGatewayFrontendIP --ssl-cert {ssl_cert_name}') + self.cmd('network application-gateway listener show -g {rg} --gateway-name {appgw} -n {appgw_listener}', checks=[ + self.check('length(hostNames)', 2), + self.check('hostNames[0]', "*.contoso.com"), + self.check('hostNames[1]', "www.microsoft.com") + ]) + self.cmd('network application-gateway listener update -g {rg} --gateway-name {appgw} -n {appgw_listener} ' + '--host-names "*.contoso.com" "www.bing.com"') + self.cmd('network application-gateway listener show -g {rg} --gateway-name {appgw} -n {appgw_listener}', checks=[ + self.check('length(hostNames)', 2), + self.check('hostNames[0]', "*.contoso.com"), + self.check('hostNames[1]', "www.bing.com") + ]) + self.cmd('network application-gateway listener list -g {rg} --gateway-name {appgw}', self.check('length(@)', 1)) + self.cmd('network application-gateway listener delete -g {rg} --gateway-name {appgw} -n {appgw_listener}') + self.cmd('network application-gateway listener list -g {rg} --gateway-name {appgw}', self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_settings') + def test_network_ag_settings(self, resource_group): + self.kwargs.update({ + 'appgw': 'appgw', + 'appgw_frontend_port1': 'testFrontendPort01', + 'appgw_frontend_port2': 'testFrontendPort02', + 'appgw_settings': 'testSettings', + 'appgw_public_ip': 'testPublicIp', + 'appgw_rule_type': 'Basic', + 'res': 'application-gateway settings', + 'priority': 1001, + 'port1': 8080, + 'port2': 8081 + }) + + self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') + + self.cmd('network application-gateway create -g {rg} -n {appgw} ' + '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' + '--priority {priority}') + + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port1} --port {port1}') + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port2} --port {port2}') + + self.cmd('network {res} create -g {rg} --gateway-name {appgw} ' + '--name {appgw_settings} --port {port1} ') + + self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_settings}', + checks=(self.check('name', '{appgw_settings}'))) + + self.cmd('network {res} update -g {rg} --gateway-name {appgw} ' + '--name {appgw_settings} --port {port2}') + + self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_settings}', + checks=(self.check('port', 8081))) + + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 1))) + + self.cmd('network {res} delete --gateway-name {appgw} --name {appgw_settings} --resource-group {rg}') + + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 0))) + + @ResourceGroupPreparer(name_prefix='cli_test_ag_routing_rule') + def test_network_ag_routing_rule(self, resource_group): + self.kwargs.update({ + 'appgw': 'appgw', + 'appgw_frontend_port1': 'testFrontendPort01', + 'appgw_frontend_port2': 'testFrontendPort02', + 'appgw_settings': 'testSettings', + 'appgw_listener1': 'testListener01', + 'appgw_listener2': 'testListener02', + 'appgw_address_pool': 'testAddressPool', + 'appgw_routing_rule': 'testRule', + 'appgw_public_ip': 'testPublicIp', + 'appgw_rule_type': 'Basic', + 'res': 'application-gateway routing-rule', + 'priority': 1001, + 'port1': 8080, + 'port2': 8081 + }) + + self.cmd('network public-ip create -g {rg} -n {appgw_public_ip} --sku Standard') + + self.cmd('network application-gateway create -g {rg} -n {appgw} ' + '--public-ip-address {appgw_public_ip} --sku Standard_v2 ' + '--priority {priority}') + + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port1} --port {port1}') + self.cmd('network application-gateway frontend-port create -g {rg} --gateway-name {appgw} ' + '-n {appgw_frontend_port2} --port {port2}') + + self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' + '--frontend-port {appgw_frontend_port1} -n {appgw_listener1} --frontend-ip appGatewayFrontendIP', + checks=(self.check('listeners[0].name', '{appgw_listener1}'))) + + self.cmd('network application-gateway listener create -g {rg} --gateway-name {appgw} ' + '--frontend-port {appgw_frontend_port2} -n {appgw_listener2} --frontend-ip appGatewayFrontendIP', + checks=(self.check('listeners[1].name', '{appgw_listener2}'))) + + self.cmd('network application-gateway settings create -g {rg} --gateway-name {appgw} ' + '--name {appgw_settings} --port {port1} ', + checks=(self.check('backendSettingsCollection[0].name', '{appgw_settings}'))) + self.cmd( + 'network application-gateway address-pool create -g {rg} --gateway-name {appgw} -n {appgw_address_pool} ' + '--servers 10.0.0.4 10.0.0.5') + self.cmd('network {res} create -g {rg} --gateway-name {appgw} ' + '--name {appgw_routing_rule} --listener {appgw_listener1} --rule-type {appgw_rule_type} ' + '--address-pool {appgw_address_pool} --settings {appgw_settings} --priority 1002') + + self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_routing_rule}', + checks=(self.check('name', '{appgw_routing_rule}'))) + + self.cmd('network {res} update -g {rg} --gateway-name {appgw} --name {appgw_routing_rule} ' + '--listener {appgw_listener2} --rule-type {appgw_rule_type} ' + '--address-pool {appgw_address_pool}') + + routing_rule = self.cmd('network {res} show -g {rg} --gateway-name {appgw} -n {appgw_routing_rule}').get_output_in_json() + self.assertTrue(routing_rule['listener']['id'].endswith('testListener02')) + + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 1))) + self.cmd('network {res} delete --gateway-name {appgw} --resource-group {rg} -n {appgw_routing_rule}') + self.cmd('network {res} list -g {rg} --gateway-name {appgw}', + checks=(self.check('length(@)', 0))) + + + @ResourceGroupPreparer(name_prefix='cli_test_ags_new_prop') + def test_network_ags_enable_l4_client_ip_preservation(self, resource_group): + self.kwargs.update({ + 'public-ip-name': self.create_random_name(prefix='public',length=15), + 'vnet-name': self.create_random_name(prefix='vnet',length=15), + 'vnet-address': '10.10.0.0/16', + 'subnet-address': '10.10.0.0/24', + 'subnet-name': self.create_random_name(prefix='subnet',length=15), + 'gateway-name': self.create_random_name(prefix='gateway',length=15), + 'setting-name': self.create_random_name(prefix='setting',length=15), + 'port': 8080, + }) + + self.cmd('network public-ip create ' + '--resource-group {rg} ' + '--name {public-ip-name} ' + '--sku Standard ' + '--ip-tags FirstPartyUsage=/NonProd') + + self.cmd('network vnet create ' + '--resource-group {rg} ' + '--name {vnet-name} ' + '--address-prefix {vnet-address}') + + self.cmd('network vnet subnet create ' + '--resource-group {rg} ' + '--name {subnet-name} ' + '--vnet-name {vnet-name} ' + '--address-prefix {subnet-address} ' + '--default-outbound false') + + self.cmd('network application-gateway create ' + '--resource-group {rg} ' + '--name {gateway-name} ' + '--sku Standard_v2 ' + '--public-ip-address {public-ip-name} ' + '--vnet-name {vnet-name} ' + '--subnet {subnet-name} ' + '--priority 1001') + + self.cmd('network application-gateway settings create ' + '--resource-group {rg} ' + '--name {setting-name} ' + '--gateway-name {gateway-name} ' + '--port {port}') + + self.cmd('network application-gateway settings show ' + '--resource-group {rg} ' + '--name {setting-name} ' + '--gateway-name {gateway-name}', + checks=(self.check('enableL4ClientIpPreservation', False))) + + self.cmd('network application-gateway settings update ' + '--resource-group {rg} ' + '--name {setting-name} ' + '--gateway-name {gateway-name} ' + '--enable-l4-client-ip true', + checks=(self.check('enableL4ClientIpPreservation', True))) + + self.cmd('network application-gateway settings list ' + '--resource-group {rg} ' + '--gateway-name {gateway-name}', + checks = self.check('length(@)', 1)) + + self.cmd('network application-gateway settings delete ' + '--resource-group {rg} ' + '--name {setting-name} ' + '--gateway-name {gateway-name}') + + self.cmd('network application-gateway settings list ' + '--resource-group {rg} ' + '--gateway-name {gateway-name}', + checks=self.check('length(@)', 0)) + + + @ResourceGroupPreparer(name_prefix='cli_test_agp_new_prop') + def test_network_ags_enable_probe_proxy_protocol_header(self, resource_group): + self.kwargs.update({ + 'public-ip-name': self.create_random_name(prefix='public',length=15), + 'vnet-name': self.create_random_name(prefix='vnet',length=15), + 'vnet-address': '10.10.0.0/16', + 'subnet-address': '10.10.0.0/24', + 'subnet-name': self.create_random_name(prefix='subnet',length=15), + 'gateway-name': self.create_random_name(prefix='gateway',length=15), + 'probe-name': self.create_random_name(prefix='probe',length=15), + }) + + self.cmd('network public-ip create ' + '--resource-group {rg} ' + '--name {public-ip-name} ' + '--sku Standard ' + '--ip-tags FirstPartyUsage=/NonProd') + + self.cmd('network vnet create ' + '--resource-group {rg} ' + '--name {vnet-name} ' + '--address-prefix {vnet-address}') + + self.cmd('network vnet subnet create ' + '--resource-group {rg} ' + '--name {subnet-name} ' + '--vnet-name {vnet-name} ' + '--address-prefix {subnet-address} ' + '--default-outbound false') + + self.cmd('network application-gateway create ' + '--resource-group {rg} ' + '--name {gateway-name} ' + '--sku Standard_v2 ' + '--public-ip-address {public-ip-name} ' + '--vnet-name {vnet-name} ' + '--subnet {subnet-name} ' + '--priority 1001') + + self.cmd('network application-gateway probe create ' + '--resource-group {rg} ' + '--name {probe-name} ' + '--gateway-name {gateway-name} ' + '--protocol TCP') + + self.cmd('network application-gateway probe show ' + '--resource-group {rg} ' + '--name {probe-name} ' + '--gateway-name {gateway-name}', + checks=(self.check('enableProbeProxyProtocolHeader', False))) + + self.cmd('network application-gateway probe update ' + '--resource-group {rg} ' + '--name {probe-name} ' + '--gateway-name {gateway-name} ' + '--enable-proxy-header true', + checks=(self.check('enableProbeProxyProtocolHeader', True))) + + self.cmd('network application-gateway probe list ' + '--resource-group {rg} ' + '--gateway-name {gateway-name}', + checks=self.check('length(@)', 1)) + + self.cmd('network application-gateway probe delete ' + '--resource-group {rg} ' + '--name {probe-name} ' + '--gateway-name {gateway-name}') + + self.cmd('network application-gateway probe list ' + '--resource-group {rg} ' + '--gateway-name {gateway-name}', + checks=self.check('length(@)', 0)) + + +class NetworkAppGatewayRewriteRuleset(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_rewrite_rulesets') + def test_network_app_gateway_rewrite_rulesets(self, resource_group): + + self.kwargs.update({ + 'gw': 'gw1', + 'ip': 'pip1', + 'set': 'ruleset1', + 'rule': 'rule1', + 'rule2': 'rule2', + 'rule3': 'rule3', + 'rule4': 'rule4', + 'var': 'http_req_Authorization' + }) + self.cmd('network public-ip create -g {rg} -n {ip} --sku Standard') + self.cmd('network application-gateway create -g {rg} -n {gw} --public-ip-address {ip} --sku Standard_v2 --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {gw} --exists') + + # create ruleset + self.cmd('network application-gateway rewrite-rule set create -g {rg} --gateway-name {gw} -n {set} --no-wait') + self.cmd('network application-gateway rewrite-rule set show -g {rg} --gateway-name {gw} -n {set}') + + # manage rewrite rules + self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --sequence 123 --request-headers foo=bar --response-headers cat=hat --no-wait') + self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --sequence 321 --request-headers bar=foo --response-headers hat=cat --no-wait') + self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --set ruleSequence=321 --remove actionSet.responseHeaderConfigurations 0 --no-wait') + self.cmd('network application-gateway rewrite-rule show -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule}') + self.cmd('network application-gateway rewrite-rule list -g {rg} --gateway-name {gw} --rule-set-name {set}') + self.cmd('network application-gateway rewrite-rule list-request-headers') + self.cmd('network application-gateway rewrite-rule list-response-headers') + + # manage rewrite rules with url configuration + self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} ' + '--sequence 123 --request-headers foo=bar --response-headers cat=hat ' + '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', + checks=[ + self.check('actionSet.urlConfiguration.modifiedPath', '/def'), + self.check('actionSet.urlConfiguration.modifiedQueryString', 'a=b&c=d%20f'), + self.check('actionSet.urlConfiguration.reroute', False) + ]) + self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} ' + '--sequence 321 --request-headers bar=foo --response-headers hat=cat ' + '--modified-path "/def2" --modified-query-string "a=b&c=d%20f12" --enable-reroute', + checks=[ + self.check('actionSet.urlConfiguration.modifiedPath', '/def2'), + self.check('actionSet.urlConfiguration.modifiedQueryString', 'a=b&c=d%20f12'), + self.check('actionSet.urlConfiguration.reroute', True) + ]) + self.cmd('network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2} --set ruleSequence=321 --remove actionSet.responseHeaderConfigurations 0 --no-wait') + self.cmd('network application-gateway rewrite-rule show -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule2}') + + # ISSUE#17373 create rewrite rule without + self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule3} --sequence 123 --modified-path "/" --no-wait') + + # manage rewrite rules with response-header-configurations + self.cmd('network application-gateway rewrite-rule create -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule4} ' + '--sequence 123 --response-header-configurations [{{"header-name":Set-Cookie,"header-value":hat1,"header-value-matcher":{{"ignore-case":true,"negate":true,"pattern":"(https?)//.*azurewebsites.net(.*)$"}}}}] --request-headers foo=bar ' + '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', + checks=[ + self.check('actionSet.responseHeaderConfigurations[0].headerName', 'Set-Cookie'), + self.check('actionSet.responseHeaderConfigurations[0].headerValue', 'hat1'), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.ignoreCase', True), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.negate', True), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.pattern', "(https?)//.*azurewebsites.net(.*)$"), + ]) + self.cmd( + 'network application-gateway rewrite-rule update -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule4} ' + '--sequence 123 --response-header-configurations [{{"header-name":Set-Cookie,"header-value":hat2,"header-value-matcher":{{"ignore-case":true,"negate":false,"pattern":"(https?)//.*azurewebsites.net(.*)$"}}}}] --request-headers foo=bar ' + '--modified-path "/def" --modified-query-string "a=b&c=d%20f"', + checks=[ + self.check('actionSet.responseHeaderConfigurations[0].headerName', 'Set-Cookie'), + self.check('actionSet.responseHeaderConfigurations[0].headerValue', 'hat2'), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.ignoreCase', True), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.negate', False), + self.check('actionSet.responseHeaderConfigurations[0].headerValueMatcher.pattern', + "(https?)//.*azurewebsites.net(.*)$"), + ]) + + # manage rewrite rule conditions + self.cmd('network application-gateway rewrite-rule condition create -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --pattern "^Bearer" --ignore-case false --negate --no-wait') + self.cmd('network application-gateway rewrite-rule condition update -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --pattern "^Bearers" --no-wait') + self.cmd('network application-gateway rewrite-rule condition show -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var}') + self.cmd('network application-gateway rewrite-rule condition list -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule}') + self.cmd('network application-gateway rewrite-rule condition delete -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule} --variable {var} --no-wait') + self.cmd('network application-gateway rewrite-rule condition list -g {rg} --gateway-name {gw} --rule-set-name {set} --rule-name {rule}') + self.cmd('network application-gateway rewrite-rule condition list-server-variables') + + self.cmd('network application-gateway rewrite-rule delete -g {rg} --gateway-name {gw} --rule-set-name {set} -n {rule} --no-wait') + self.cmd('network application-gateway rewrite-rule list -g {rg} --gateway-name {gw} --rule-set-name {set}') + + self.cmd('network application-gateway rewrite-rule set delete -g {rg} --gateway-name {gw} -n {set} --no-wait') + self.cmd('network application-gateway rewrite-rule set list -g {rg} --gateway-name {gw}') + + +class NetworkAppGatewayPublicIpScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ag_public_ip') + def test_network_app_gateway_with_public_ip(self, resource_group): + + self.kwargs['ip'] = 'publicip4' + self.cmd('network application-gateway create -g {rg} -n test4 --subnet subnet1 --vnet-name vnet4 --vnet-address-prefix 10.0.0.1/16 --subnet-address-prefix 10.0.0.1/28 --public-ip-address {ip} --priority 1001', checks=[ + self.check("applicationGateway.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{ip}')", True), + self.check('applicationGateway.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic') + ]) + + +class NetworkAppGatewayWafConfigScenarioTest20170301(ScenarioTest): + + @unittest.skip('SKU for this scenario is deprecated.') + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_config') + def test_network_app_gateway_waf_config(self, resource_group): + + self.kwargs.update({ + 'ip': 'pip1', + 'ag': 'ag1' + }) + self.cmd('network application-gateway create -g {rg} -n {ag} --subnet subnet1 --vnet-name vnet1 --public-ip-address {ip} --sku WAF_Medium --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists') + self.cmd('network application-gateway show -g {rg} -n {ag}', checks=[ + self.check("frontendIPConfigurations[0].publicIPAddress.contains(id, '{ip}')", True), + self.check('frontendIPConfigurations[0].privateIPAllocationMethod', 'Dynamic') + ]) + self.cmd('network application-gateway waf-config set -g {rg} --gateway-name {ag} --enabled true --firewall-mode prevention --rule-set-version 2.2.9 ' + '--disabled-rule-groups crs_30_http_policy --disabled-rules 981175 981176 ' + '--exclusion RequestHeaderNames StartsWith abc --exclusion RequestArgNames Equals def') + self.cmd('network application-gateway waf-config show -g {rg} --gateway-name {ag}', checks=[ + self.check('enabled', True), + self.check('firewallMode', 'Prevention'), + self.check('length(disabledRuleGroups)', 2), + self.check('length(disabledRuleGroups[1].rules)', 2), + self.check('length(exclusions)', 2) + ]) + # test list rule sets + self.cmd('network application-gateway waf-config list-rule-sets --group *', checks=[ + self.check('length(@)', 6) + ]) + + self.cmd('network application-gateway waf-config list-dynamic-rule-sets -l westus', + self.check('type(@)', 'array')) + + +class NetworkAppGatewayWafPolicyScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_', location='westcentralus') + def test_network_app_gateway_waf_policy_with_application_gateway(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'custom-rule1': 'rule1', + 'custom-rule2': 'rule2', + 'ip1': 'pip1', + 'ag1': 'ag1', + 'ip2': 'pip2', + 'ag2': 'ag2', + 'rg': resource_group, + 'csr_grp1': 'REQUEST-931-APPLICATION-ATTACK-RFI', + 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION' + }) + + # create a waf policy + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') + self.cmd('network application-gateway waf-policy update -g {rg} -n {waf} --tags test=best', + checks=self.check('tags.test', 'best')) + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}') + self.cmd('network application-gateway waf-policy list -g {rg}', + checks=self.check('length(@)', 1)) + + # test waf-policy delete + self.cmd('network application-gateway waf-policy delete -g {rg} -n {waf}') + self.cmd('network application-gateway waf-policy list -g {rg}', + checks=[ + self.check('length(@)', 0) + ]) + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --type OWASP --version 3.2') + + # add two custom rules of this waf-policy + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {custom-rule1} ' + '--priority 50 --action log --rule-type MatchRule ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]', + checks=self.check('priority', 50)) + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {custom-rule2} ' + '--priority 100 --action log --rule-type MatchRule ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]') + + # test custom-rule list + self.cmd('network application-gateway waf-policy custom-rule list -g {rg} ' + '--policy-name {waf}', + checks=[ + self.check('length(@)', 2) + ]) + + # add two managed rule set to the managed rules of this waf-policy + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.2 ' + '--group-name {csr_grp1} --rule rule-id=931120 --rule rule-id=931130') + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.2 ' + '--group-name {csr_grp2} --rule rule-id=913100') + + # update some policy settings of this waf-policy + self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' + '--state Enabled --file-upload-limit-in-mb 64 --mode Prevention') + + # test waf-policy policy-setting list + self.cmd('network application-gateway waf-policy policy-setting list -g {rg} --policy-name {waf}', checks=[ + self.check("type(@)", "object") + ]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type Microsoft_BotManagerRuleSet --version 1.0', + checks=[ + self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), + self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.0') + ]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type Microsoft_BotManagerRuleSet --version 1.1', + checks=[ + self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), + self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.1') + ]) + + # add one exclusion rule to the managed rules of this waf-policy + self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' + '--match-variable "RequestHeaderNames" --selector-match-operator "StartsWith" --selector "Bing"') + + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('customRules | length(@)', 2), + self.check('customRules[0].priority', 50), + self.check('customRules[1].priority', 100), + self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.2'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '931120'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100'), + self.check('managedRules.managedRuleSets[1].ruleSetType', 'Microsoft_BotManagerRuleSet'), + self.check('managedRules.managedRuleSets[1].ruleSetVersion', '1.1'), + self.check('policySettings.fileUploadLimitInMb', 64), + self.check('policySettings.maxRequestBodySizeInKb', 128), + self.check('policySettings.mode', 'Prevention'), + self.check('policySettings.requestBodyCheck', False), + self.check('policySettings.state', 'Enabled') + ]) + + # prepare two IPs + self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard --ip-tags FirstPartyUsage=/NonProd') + self.cmd('network public-ip create -g {rg} -n {ip2} --sku standard --ip-tags FirstPartyUsage=/NonProd') + + self.cmd('network vnet create -g {rg} -n vnet1 --address-prefix 10.0.0.0/16') + self.cmd('network vnet subnet create -g {rg} --vnet-name vnet1 -n subnet1 --address-prefix 10.0.0.0/24 --default-outbound false') + + self.cmd('network vnet create -g {rg} -n vnet2 --address-prefix 10.0.0.0/16') + self.cmd('network vnet subnet create -g {rg} --vnet-name vnet2 -n subnet2 --address-prefix 10.0.0.0/24 --default-outbound false') + + # create two application gateways and assign with the same waf-policy + self.cmd('network application-gateway create -g {rg} -n {ag1} --subnet subnet1 --vnet-name vnet1 ' + '--public-ip-address {ip1} --sku WAF_v2 --waf-policy {waf} --priority 1001') + self.cmd('network application-gateway create -g {rg} -n {ag2} --subnet subnet2 --vnet-name vnet2 ' + '--public-ip-address {ip2} --sku WAF_v2 --waf-policy {waf} --priority 1001') + + self.cmd('network application-gateway show -g {rg} -n {ag1}', + checks=self.check("firewallPolicy.contains(id, '{waf}')", True)) + self.cmd('network application-gateway show -g {rg} -n {ag2}', + checks=self.check("firewallPolicy.contains(id, '{waf}')", True)) + + # test assigned application-gateways + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('applicationGateways | length(@)', 2), + self.check("contains(applicationGateways[0].id, '{ag1}')", True), + self.check("contains(applicationGateways[1].id, '{ag2}')", True) + ]) + + # test custom-rule delete + self.cmd('network application-gateway waf-policy custom-rule delete -g {rg} ' + '--policy-name {waf} -n {custom-rule2}') + self.cmd('network application-gateway waf-policy custom-rule list -g {rg} ' + '--policy-name {waf}', + checks=[ + self.check('length(@)', 1) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_custom_rule_') + def test_network_app_gateway_waf_custom_rule(self, resource_group): + from azure.cli.core.azclierror import ArgumentUsageError + self.kwargs.update({ + 'waf': 'agp1', + 'rule': 'rule1', + 'ip': 'pip1', + 'ag': 'ag1', + 'rg': resource_group, + 'custom-rule1':'custom-rule1' + }) + + # create a waf-policy with empty custom rule + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('customRules | length(@)', 0) + ]) + + # create a custom rule + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {rule} ' + '--priority 50 --action LOG --rule-type MatchRule ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.1.0/24","10.0.0.0/24"]}}]', + checks=[ + self.check('priority', 50), + self.check('ruleType', 'MatchRule'), + self.check('action', 'Log'), + self.check('matchConditions | length(@)', 1), + self.check("state", "Enabled") + ]) + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('customRules | length(@)', 1) + ]) + self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' + '--policy-name {waf} -n {rule}', + checks=[ + self.check('priority', 50), + self.check('ruleType', 'MatchRule'), + self.check('action', 'Log'), + self.check('matchConditions | length(@)', 1) + ]) + # validate match condition + with self.assertRaisesRegex(ArgumentUsageError, 'requires --values'): + self.cmd("network application-gateway waf-policy custom-rule match-condition add -g {rg} " + "--policy-name {waf} -n {rule} " + "--match-variables RequestHeaders.value --operator Contains --transform lowercase") + + # add match condition to the previous created custom rule + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule} ' + '--match-variables RequestHeaders.value --operator contains --values foo boo --transform lowercase') + self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' + '--policy-name {waf} -n {rule}', + checks=[ + self.check('priority', 50), + self.check('ruleType', 'MatchRule'), + self.check('action', 'Log'), + self.check('matchConditions | length(@)', 2) + ]) + + # update one of properties + self.cmd('network application-gateway waf-policy custom-rule update -g {rg} --state disabled ' + '--policy-name {waf} -n {rule} ' + '--priority 75', + checks=[ + self.check('priority', 75), + self.check("state", "Disabled") + ]) + + # add another match condition to the same custom rule + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule} ' + '--match-variables RequestHeaders.value --operator contains ' + '--values remove this --transform uppercase') + self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' + '--policy-name {waf} -n {rule}', + checks=[ + self.check('priority', 75), + self.check('ruleType', 'MatchRule'), + self.check('action', 'Log'), + self.check('matchConditions | length(@)', 3) + ]) + self.cmd('network application-gateway waf-policy custom-rule match-condition list -n {rule} -g {rg} ' + '--policy-name {waf}', + checks=[ + self.check('length(@)', 3) + ]) + + # remove one of match condition of custom rule + self.cmd('network application-gateway waf-policy custom-rule match-condition remove -g {rg} ' + '--policy-name {waf} -n {rule} ' + '--index 0') + self.cmd('network application-gateway waf-policy custom-rule show -g {rg} ' + '--policy-name {waf} -n {rule}', + checks=[ + self.check('priority', 75), + self.check('ruleType', 'MatchRule'), + self.check('action', 'Log'), + self.check('matchConditions | length(@)', 2) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_custom_rule_v2_') + def test_network_app_gateway_waf_custom_rule_v2(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'rule': 'rule1', + 'rule2': 'rule2', + 'rule3': 'rule3', + 'ip': 'pip1', + 'ag': 'ag1', + 'custom-rule1': 'custom-rule1' + }) + # create a waf-policy with empty custom rule + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') + + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') + self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector hello --type OWASP --version 3.2 --group-name REQUEST-930-APPLICATION-ATTACK-LFI --rule-ids 930120 ') + self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector hello --type OWASP --version 3.2 --group-name REQUEST-932-APPLICATION-ATTACK-RCE') + self.cmd('network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator EndsWith --selector hello --type OWASP --version 3.2') + self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} --match-variable RequestArgNames --selector-match-operator StartsWith --selector test') + self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} --match-variable RequestArgValues --selector-match-operator StartsWith --selector test') + self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' + '--log-scrubbing-state Enabled --scrubbing-rules [{{"state":"Enabled","match-variable":"RequestArgNames","selector-match-operator":"Equals","selector":"test"}},{{"state":"Enabled","match-variable":"RequestIPAddress","selector-match-operator":"EqualsAny","selector":null}}]') + + # create a custom rule + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {rule} ' + '--priority 1 ' + '--action Block ' + '--rule-type MatchRule ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]') + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {rule2} ' + '--priority 2 ' + '--action Block ' + '--rule-type MatchRule ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]') + + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule} --match-variables RemoteAddr ' + '--operator IPMatch --values "192.168.1.0/24" "10.0.0.0/24" --negate false') + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule2} --negate false ' + '--match-variables RemoteAddr --operator IPMatch --values "192.168.1.0/24" ') + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule2} ' + '--match-variables RequestHeaders.UserAgent --operator Contains --values "Windows"') + + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} -n {rule3} ' + '--priority 3 ' + '--action Block ' + '--rule-type RateLimitRule ' + '--rate-limit-duration FiveMins ' + '--rate-limit-threshold 15 ' + '--group-by-user-session [{{group-by-variables:[{{variable-name:"GeoLocation"}}]}}] ' + '--match-conditions [{{"variables":[{{"variable_name":"RemoteAddr"}}],"operator":"IPMatch","values":["192.168.2.0/24","10.0.2.0/24"]}}]', + checks=[self.check('name', '{rule3}'), + self.check('groupByUserSession[0].groupByVariables[0].variableName', 'GeoLocation'), + self.check('rateLimitDuration', 'FiveMins'), + self.check('rateLimitThreshold', '15')]) + + self.cmd('network application-gateway waf-policy custom-rule update -g {rg} ' + '--policy-name {waf} -n {rule3} ' + '--rate-limit-duration OneMin ' + '--rate-limit-threshold 10 ' + '--group-by-user-session [{{group-by-variables:[{{variable-name:"ClientAddr"}}]}}]', + checks=[self.check('name', '{rule3}'), + self.check('groupByUserSession[0].groupByVariables[0].variableName', 'ClientAddr'), + self.check('rateLimitDuration', 'OneMin'), + self.check('rateLimitThreshold', '10')]) + self.cmd('network application-gateway waf-policy custom-rule match-condition add -g {rg} ' + '--policy-name {waf} -n {rule3} --negate true ' + '--match-variables RemoteAddr --operator IPMatch --values "192.168.1.0/24" "10.0.0.0/24"') + + self.cmd('network application-gateway waf-policy custom-rule create -g {rg} ' + '--policy-name {waf} --name ClientIPRateLimitRule ' + '--action Block --priority 90 --rule-type RateLimitRule --rate-limit-threshold 100 ' + '--group-by-user-session [{{group-by-variables:[{{variable-name:"ClientAddrXffHeader"}}]}}] ' + '--match-conditions [{{"variables":[{{"variable_name":"RequestHeaders"}}],"operator":"IPMatch","values":["198.51.100.0/24"]}}]') + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_setting_') + def test_network_app_gateway_waf_policy_setting(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ag': 'ag1', + 'rg': resource_group, + }) + + # check default policy setting values + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ + self.check('policySettings.fileUploadLimitInMb', 100), + self.check('policySettings.maxRequestBodySizeInKb', 128), + self.check('policySettings.mode', 'Detection'), + self.check('policySettings.requestBodyCheck', True), + self.check('policySettings.state', 'Disabled') + ]) + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') + + # randomly update some properties + self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' + '--state Enabled --file-upload-limit-in-mb 64 --mode Prevention --js-cookie-exp-time 100', + checks=[ + self.check('policySettings.fileUploadLimitInMb', 64), + self.check('policySettings.maxRequestBodySizeInKb', 128), + self.check('policySettings.mode', 'Prevention'), + self.check('policySettings.requestBodyCheck', False), + self.check('policySettings.state', 'Enabled'), + self.check('policySettings.jsChallengeCookieExpirationInMins', 100) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_setting_v2_') + def test_network_app_gateway_waf_policy_setting_v2(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ag': 'ag1', + 'rg': resource_group, + }) + + # check default policy setting values + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ + self.check('policySettings.fileUploadLimitInMb', 100), + self.check('policySettings.maxRequestBodySizeInKb', 128), + self.check('policySettings.mode', 'Detection'), + self.check('policySettings.requestBodyCheck', True), + self.check('policySettings.state', 'Disabled') + ]) + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} --type OWASP --version 3.2 --group-name "REQUEST-931-APPLICATION-ATTACK-RFI" --rule rule-id=931120 state=Enabled action=Log --rule rule-id=931130 state=Disabled action=AnomalyScoring') + # randomly update some properties + self.cmd('network application-gateway waf-policy policy-setting update -g {rg} --policy-name {waf} ' + '--request-body-inspect-limit-in-kb 64 --file-upload-enforcement True --request-body-enforcement False ' + '--log-scrubbing-state Enabled --scrubbing-rules [{{"state":"Enabled","match-variable":"RequestArgNames","selector-match-operator":"Equals","selector":"test"}},{{"state":"Enabled","match-variable":"RequestIPAddress","selector-match-operator":"EqualsAny","selector":null}}]', + checks=[ + self.check('policySettings.requestBodyInspectLimitInKB', 64), + self.check('policySettings.requestBodyEnforcement', False), + self.check('policySettings.fileUploadEnforcement', True), + self.check('policySettings.logScrubbing.scrubbingRules | length(@)', 2), + self.check('policySettings.logScrubbing.state', 'Enabled') + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_') + def test_network_app_gateway_waf_policy_managed_rules(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ip': 'pip1', + 'ag': 'ag1', + 'rg': resource_group, + 'csr_grp1': 'REQUEST-921-PROTOCOL-ATTACK', + 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION', + 'csr_grp3': 'REQUEST-931-APPLICATION-ATTACK-RFI' + }) + + # create a waf-policy with default type and version + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}', checks=[ + self.check('name', '{waf}'), + self.check('managedRules.managedRuleSets[0].ruleSetType', 'Microsoft_DefaultRuleSet'), + self.check('managedRules.managedRuleSets[0].ruleSetVersion', '2.1'), + ]) + self.cmd('network application-gateway waf-policy delete -g {rg} -n {waf}') + + # create a waf-policy + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --version 3.0 --type OWASP') + + # case 1: Initialize(add) managed rule set + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.0 ' + '--group-name {csr_grp1} --rule rule-id=921100 --rule rule-id=921110 sensitivity=low') + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.0'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921100'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].sensitivity', 'Low') + ]) + + # case 2: Append(add) another managed rule set to same rule group + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.0 ' + '--group-name {csr_grp1} --rule rule-id=921150 sensitivity=medium') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.0'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 3), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].ruleId', '921150'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].sensitivity', 'Medium') + ]) + + # case 3: Add another managed rule set of different rule group + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.0 ' + '--group-name {csr_grp2} --rule rule-id=913100') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.0'), + self.check('managedRuleSets[0].ruleGroupOverrides[1].rules | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), + self.check('managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100') + ]) + + # case 4: override(update) existing managed rule set + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.0 ' + '--group-name {csr_grp1} --rule rule-id=921100 --rule rule-id=921150') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.0'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921100'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '921150'), + ]) + + # case 5: clear manage rule set by group {csr_grp1} and only {csr_grp2} left + self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp1} ') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', checks=[ + self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp2']), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '913100'), + ]) + + # case 6: change managed rules of OWASP from 3.1 to 3.0 + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1') + + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 0) + ]) + + # case 7: override existing rules with one rule for OWASP 3.1 + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name REQUEST-911-METHOD-ENFORCEMENT ' + '--rule rule-id=911100') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '911100') + ]) + + # case 8: validate per rule action + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.2') + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type Microsoft_DefaultRuleSet --version 2.1') + + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.2 ' + '--group-name {csr_grp3} ' + '--rule rule-id=931120 state=Enabled action=Log ' + '--rule rule-id=931130 state=Disabled action=AnomalyScoring') + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.2'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp3']), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '931120'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].state', 'Enabled'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].action', 'Log'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '931130'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].state', 'Disabled'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[1].action', 'AnomalyScoring') + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_') + def test_network_app_gateway_waf_policy_with_version_and_type(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ip': 'pip1', + 'ag': 'ag1', + 'rg': resource_group, + 'csr_grp1': 'REQUEST-921-PROTOCOL-ATTACK', + 'csr_grp2': 'REQUEST-913-SCANNER-DETECTION' + }) + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf} --version 3.1 --type OWASP') + + # case 1: Initialize(add) managed rule set + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp1} --rule rule-id=921120 --rule rule-id=921110') + self.cmd('network application-gateway waf-policy show -g {rg} -n {waf}', checks=[ + self.check('managedRules.managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRules.managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRules.managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921120') + ]) + + # case 2: Append(add) another managed rule set to same rule group + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp1} --rule rule-id=921150') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 3), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[2].ruleId', '921150') + ]) + + # # case 3: Add another managed rule set of different rule group + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp2} --rule rule-id=913100') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides[1].rules | length(@)', 1), + self.check('managedRuleSets[0].ruleGroupOverrides[1].ruleGroupName', self.kwargs['csr_grp2']), + self.check('managedRuleSets[0].ruleGroupOverrides[1].rules[0].ruleId', '913100') + ]) + + # case 4: override(update) existing managed rule set + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp1} --rule rule-id=921130 --rule rule-id=921140') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules | length(@)', 2), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp1']), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[0].ruleId', '921130'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].rules[1].ruleId', '921140') + ]) + + # # case 5: clear manage rule set by group {csr_grp1} + self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} --policy-name {waf} ' + '--type OWASP --version 3.1 ' + '--group-name {csr_grp1} ') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf}', + checks=[ + self.check('managedRuleSets[0].ruleSetType', 'OWASP'), + self.check('managedRuleSets[0].ruleSetVersion', '3.1'), + self.check('managedRuleSets[0].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp2']) + ]) + + self.kwargs.update({ + 'waf2': 'agp2', + 'csr_grp3': 'ExcessiveRequests' + }) + + # case 6: support Microsoft_HTTPDDoSRuleSet type, Medium is default sensitivity for this type if not specified + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf2} --version 3.2 --type owasp') + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} --policy-name {waf2} ' + '--type Microsoft_HTTPDDoSRuleSet --version 1.0 --group-name {csr_grp3} ' + '--rule rule-id=500100 ' + '--rule rule-id=500110 sensitivity=low') + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} --policy-name {waf2}', checks=[ + self.check('managedRuleSets[1].ruleSetType', 'Microsoft_HTTPDDoSRuleSet'), + self.check('managedRuleSets[1].ruleSetVersion', '1.0'), + self.check('managedRuleSets[1].ruleGroupOverrides[0].ruleGroupName', self.kwargs['csr_grp3']), + self.check('managedRuleSets[1].ruleGroupOverrides[0].rules[0].sensitivity', 'Medium'), + self.check('managedRuleSets[1].ruleGroupOverrides[0].rules[1].sensitivity', 'Low') + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_managed_rules_exclusion') + def test_network_app_gateway_waf_policy_managed_rules_exclusions(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ip': 'pip1', + 'ag': 'ag1', + 'rg': resource_group + }) + + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') + + # add one exclusion rule + self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' + '--match-variable "RequestHeaderNames" --selector-match-operator "StartsWith" --selector "Bing"') + self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', + checks=[ + self.check('exclusions | length(@)', 1) + ]) + + # add another exclusion rule + self.cmd('network application-gateway waf-policy managed-rule exclusion add -g {rg} --policy-name {waf} ' + '--match-variable "RequestHeaderNames" --selector-match-operator "Contains" --selector "Azure"') + self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', + checks=[ + self.check('exclusions | length(@)', 2) + ]) + + # clear all exclusion rules + self.cmd('network application-gateway waf-policy managed-rule exclusion remove -g {rg} --policy-name {waf} ') + self.cmd('network application-gateway waf-policy managed-rule exclusion list -g {rg} --policy-name {waf}', + checks=[ + self.check('exclusions | length(@)', 0) + ]) + + @ResourceGroupPreparer(name_prefix="cli_test_app_gateway_waf_policy_exclusion_rule_set_") + def test_network_app_gateway_waf_policy_exclusion_rule_set(self, resource_group): + self.kwargs.update({ + "waf": "agp", + "rule_group1": "REQUEST-921-PROTOCOL-ATTACK", + "rule_group2": "REQUEST-920-PROTOCOL-ENFORCEMENT", + }) + # create a waf-policy + self.cmd("network application-gateway waf-policy create -n {waf} -g {rg} --version 3.2 --type OWASP") + # add one rule group to exclusion + self.cmd( + "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ + --match-variable RequestHeaderValues --match-operator Contains --selector Google \ + --type OWASP --version 3.2 \ + --group-name {rule_group1} --rule-ids 921140 921150", + checks=[ + self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group1"]), + self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules | length(@)", 2), + self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "921140"), + self.check("managedRules.exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[1].ruleId", "921150"), + ] + ) + # add another rule group to exclusion (with different matchers) + self.cmd( + "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ + --match-variable RequestHeaderNames --match-operator StartsWith --selector Bing \ + --type OWASP --version 3.2 \ + --group-name {rule_group2} --rule-ids 920340", + checks=[ + self.check("managedRules.exclusions | length(@)", 2), + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group2"]), + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "920340"), + ] + ) + # add a rule group to the second exclusion + self.cmd( + "network application-gateway waf-policy managed-rule exclusion rule-set add -g {rg} --policy-name {waf} \ + --match-variable RequestHeaderNames --match-operator StartsWith --selector Bing \ + --type OWASP --version 3.2 \ + --group-name {rule_group1} --rule-ids 921140 921150", + checks=[ + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].ruleGroupName", self.kwargs["rule_group1"]), + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules | length(@)", 2), + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules[0].ruleId", "921140"), + self.check("managedRules.exclusions[1].exclusionManagedRuleSets[0].ruleGroups[1].rules[1].ruleId", "921150"), + ] + ) + # remove the first rule group + self.cmd( + "network application-gateway waf-policy managed-rule exclusion rule-set remove -g {rg} --policy-name {waf} \ + --match-variable RequestHeaderValues --match-operator Contains --selector Google \ + --type OWASP --version 3.2 --group-name {rule_group1}" + ) + self.cmd( + "network application-gateway waf-policy managed-rule exclusion rule-set list -g {rg} --policy-name {waf}", + checks=[ + self.check("exclusions | length(@)", 1), + self.check("exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].ruleGroupName", self.kwargs["rule_group2"]), + self.check("exclusions[0].exclusionManagedRuleSets[0].ruleGroups[0].rules[0].ruleId", "920340"), + ] + ) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_exception_', location='eastus2') + def test_network_app_gateway_waf_policy_exception(self, resource_group): + self.kwargs.update({ + 'waf': 'agp1', + 'ip': 'pip1', + 'ag': 'ag1', + 'rg': resource_group + }) + + self.cmd('network application-gateway waf-policy create -g {rg} -n {waf}') + + self.cmd('network application-gateway waf-policy managed-rule exception add -g {rg} --policy-name {waf} ' + '--match-variable "RequestURI" --value-match-operator "Contains" --values "health" "account/images" "default.aspx" ' + '--rule-sets [0].rule-set-type=OWASP [0].rule-set-version=3.2') + self.cmd('network application-gateway waf-policy managed-rule exception list -g {rg} --policy-name {waf}', + checks=[ + self.check('exceptions | length(@)', 1) + ]) + self.cmd('network application-gateway waf-policy managed-rule exception remove -g {rg} --policy-name {waf}') + self.cmd('network application-gateway waf-policy managed-rule exception list -g {rg} --policy-name {waf}', + checks=[ + self.not_exists('exceptions') + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_app_gateway_waf_policy_compute_disabled_rule') + def test_network_app_gateway_waf_policy_compute_disabled_rule(self, resource_group): + self.kwargs.update({ + 'policy_name': self.create_random_name('waf', 15), + 'policy_type': 'OWASP', + 'policy_version': 3.2, + 'rule_group_name': 'REQUEST-921-PROTOCOL-ATTACK', + 'rule_id': '921120' + }) + + self.cmd('network application-gateway waf-policy create -g {rg} ' + '-n {policy_name} ' + '--type {policy_type} ' + '--version {policy_version}') + + self.cmd('network application-gateway waf-policy managed-rule rule-set add -g {rg} ' + '--policy-name {policy_name} ' + '--type {policy_type} ' + '--version {policy_version} ' + '--group-name {rule_group_name} ' + '--rule rule-id={rule_id}', + checks=[ + self.exists('managedRules.managedRuleSets[0].computedDisabledRules'), + self.check('managedRules.managedRuleSets[0].computedDisabledRules | length(@)', 1), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), + ]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} ' + '--policy-name {policy_name} ' + '--type {policy_type} ' + '--version {policy_version} ' + '--group-name {rule_group_name} ' + '--rule rule-id={rule_id} state=Enabled', + checks=[self.not_exists('managedRules.managedRuleSets[0].computedDisabledRules')]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set update -g {rg} ' + '--policy-name {policy_name} ' + '--type {policy_type} ' + '--version {policy_version} ' + '--group-name {rule_group_name} ' + '--rule rule-id={rule_id} state=Disabled', + checks=[ + self.exists('managedRules.managedRuleSets[0].computedDisabledRules'), + self.check('managedRules.managedRuleSets[0].computedDisabledRules | length(@)', 1), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), + self.check('managedRules.managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), + ]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set list -g {rg} ' + '--policy-name {policy_name}', + checks=[ + self.exists('managedRuleSets[0].computedDisabledRules'), + self.check('managedRuleSets[0].computedDisabledRules | length(@)', 1), + self.check('managedRuleSets[0].computedDisabledRules[0].ruleGroupName', self.kwargs['rule_group_name']), + self.check('managedRuleSets[0].computedDisabledRules[0].rules | length(@)', 1), + self.check('managedRuleSets[0].computedDisabledRules[0].rules[0]', self.kwargs['rule_id']), + ]) + + self.cmd('network application-gateway waf-policy managed-rule rule-set remove -g {rg} ' + '--policy-name {policy_name} ' + '--type {policy_type} ' + '--version {policy_version} ' + '--group-name {rule_group_name}', + checks=[self.not_exists('managedRules.managedRuleSets[0].computedDisabledRules')]) + + +class NetworkDdosProtectionScenarioTest(LiveScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_ddos_protection', location='eastus2') + def test_network_ddos_protection_plan(self, resource_group): + + self.kwargs.update({ + 'vnet1': 'vnet1', + 'vnet2': 'vnet2', + 'ddos': 'ddos1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet1}') + self.kwargs['vnet2_id'] = self.cmd('network vnet create -g {rg} -n {vnet2}').get_output_in_json()['newVNet']['id'] + # can be attached through DDoS create + self.kwargs['ddos_id'] = self.cmd('network ddos-protection create -g {rg} -n {ddos} --vnets {vnet1} {vnet2_id} --tags foo=doo').get_output_in_json()['id'] + self.cmd('network ddos-protection show -g {rg} -n {ddos}', + checks=[self.check('name', '{ddos}'), + self.check('provisioningState', 'Succeeded'), + self.check('length(virtualNetworks)', 2)]) + + # can be detached through VNet update + self.cmd('network vnet update -g {rg} -n {vnet1} --ddos-protection-plan ""') + self.cmd('network vnet update -g {rg} -n {vnet2} --ddos-protection-plan ""') + self.cmd('network ddos-protection show -g {rg} -n {ddos}') + + # can be attached through VNet update + self.cmd('network vnet update -g {rg} -n {vnet1} --ddos-protection-plan {ddos}') + self.cmd('network vnet update -g {rg} -n {vnet2} --ddos-protection-plan {ddos_id}') + self.cmd('network ddos-protection show -g {rg} -n {ddos}') + + # can be detached through DDoS update + self.cmd('network ddos-protection update -g {rg} -n {ddos} --tags doo=foo --vnets ""') + self.cmd('network ddos-protection show -g {rg} -n {ddos}', + checks=[self.check('name', '{ddos}'), + self.check('provisioningState', 'Succeeded'), + self.check('virtualNetworks', None)]) + + # can be attached through DDoS update + self.cmd('network ddos-protection update -g {rg} -n {ddos} --vnets {vnet2_id} --tags foo=boo') + self.cmd('network ddos-protection show -g {rg} -n {ddos}', + checks=[self.check('name', '{ddos}'), + self.check('provisioningState', 'Succeeded'), + self.check('length(virtualNetworks)', 1)]) + + self.cmd('network ddos-protection list -g {rg}', checks=[self.check('length(@)', 1)]) + with self.assertRaises(Exception): + self.cmd('network ddos-protection delete -g {rg} -n {ddos}') + + # remove all vnets and retry + self.cmd('network ddos-protection update -g {rg} -n {ddos} --vnets ""') + self.cmd('network ddos-protection delete -g {rg} -n {ddos}') + + +class NetworkPublicIpScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_public_ip', location="eastus2euap") + def test_network_public_ip(self, resource_group): + self.kwargs.update({ + 'ip1': 'pubipdns', + 'ip2': 'pubipnodns', + 'ip3': 'pubip3', + 'dns': 'woot1', + 'zone': '1 2 3', + 'location': 'eastus2', + 'ip_tags': 'RoutingPreference=Internet', + 'version': 'ipv4', + 'sku': 'standard' + }) + self.cmd('network public-ip create -g {rg} -n {ip1} --dns-name {dns} --dns-name-scope TenantReuse --allocation-method static', checks=[ + self.check('publicIp.provisioningState', 'Succeeded'), + self.check('publicIp.publicIPAllocationMethod', 'Static'), + self.check('publicIp.dnsSettings.domainNameLabel', '{dns}'), + self.check('publicIp.dnsSettings.domainNameLabelScope', 'TenantReuse') + ]) + self.cmd('network public-ip create -g {rg} -n {ip2}', checks=[ + self.check('publicIp.provisioningState', 'Succeeded'), + self.check('publicIp.publicIPAllocationMethod', 'Static'), + self.check('publicIp.dnsSettings', None) + ]) + + self.cmd('network public-ip create -g {rg} -n {ip3}' + ' --version {version} ' + '--sku {sku} ' + '--zone {zone} ' + '-l {location} ' + '--ip-tags {ip_tags} ', + checks=[ + self.check('publicIp.provisioningState', 'Succeeded'), + self.check('publicIp.publicIPAllocationMethod', 'Static'), + self.check('publicIp.dnsSettings', None), + self.check('publicIp.ipTags[0].ipTagType', 'RoutingPreference'), + self.check('publicIp.ipTags[0].tag', 'Internet'), + ]) + + self.cmd( + 'network public-ip update -g {rg} -n {ip2} --allocation-method static --dns-name wowza2 --idle-timeout 10 --ip-tags null --tags foo=doo', + checks=[ + self.check('publicIPAllocationMethod', 'Static'), + self.check('dnsSettings.domainNameLabel', 'wowza2'), + self.check('idleTimeoutInMinutes', 10), + self.check('tags.foo', 'doo'), + self.check("ipTags", []) + ]) + + self.cmd('network public-ip list -g {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + + self.cmd('network public-ip show -g {rg} -n {ip1}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{ip1}'), + self.check('resourceGroup', '{rg}') + ]) + + self.cmd('network public-ip delete -g {rg} -n {ip1}') + self.cmd('network public-ip list -g {rg}', + checks=self.check("length[?name == '{ip1}']", None)) + + @ResourceGroupPreparer(name_prefix='cli_test_public_ip_zone', location='eastus2') + def test_network_public_ip_zone(self, resource_group): + self.cmd('network public-ip create -g {rg} -n ip --sku Standard -z 1 2 3', checks=[ + self.check('length(publicIp.zones)', 3) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_public_ip_ddos_settings', location='eastus2') + def test_network_public_ip_ddos_settings(self, resource_group): + + self.kwargs.update({ + 'ip1': 'pubipddos', + 'ddos': 'ddos1', + }) + + self.kwargs['ddos_id'] = self.cmd('network ddos-protection create -g {rg} -n {ddos}').get_output_in_json()['id'] + + self.cmd( + 'network public-ip create -g {rg} -n {ip1} --protection-mode Enabled --sku Standard --ddos-protection-plan {ddos}', + checks=[ + self.check('publicIp.ddosSettings.protectionMode', 'Enabled'), + self.check('publicIp.ddosSettings.ddosProtectionPlan.id', '{ddos_id}'), + self.check('publicIp.name', '{ip1}'), + self.check('publicIp.provisioningState', 'Succeeded') + ]) + + # test ddos protection status + self.cmd('network application-gateway create -g {rg} -n testag --public-ip-address {ip1} --sku Standard_v2 --priority 1001') + self.cmd('network public-ip ddos-protection show -g {rg} -n {ip1}', self.check('isWorkloadProtected', True)) + self.cmd('network public-ip update -g {rg} -n {ip1} --protection-mode Disabled --ddos-protection-plan null', + checks=[ + self.check('ddosSettings.protectionMode', 'Disabled'), + self.check('ddosSettings.ddosProtectionPlan', None), + self.check('name', '{ip1}'), + self.check('provisioningState', 'Succeeded') + ]) + self.cmd('network ddos-protection delete -g {rg} -n {ddos}') + + self.cmd('network application-gateway delete -g {rg} -n testag') + self.cmd('network public-ip delete -g {rg} -n {ip1}') + self.cmd('network public-ip list -g {rg}', + checks=self.check("length[?name == '{ip1}']", None)) + + +class NetworkZonedPublicIpScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_zoned_public_ip') + def test_network_zoned_public_ip(self, resource_group): + self.kwargs['ip'] = 'pubip' + self.cmd('network public-ip create -g {rg} -n {ip} -l centralus -z 2 --sku standard', + checks=self.check('publicIp.zones[0]', '2')) + + self.cmd( + 'network public-ip show -g {rg} -n {ip}', + checks=[ + self.check('name', '{ip}'), + self.check('publicIPAddressVersion', 'IPv4') + ] + ) + + +class NetworkRouteFilterScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_network_route_filter') + def test_network_route_filter(self, resource_group): + self.kwargs['filter'] = 'filter1' + self.kwargs['rg'] = resource_group + self.cmd('network route-filter create -g {rg} -n {filter} --tags foo=doo') + self.cmd('network route-filter update -g {rg} -n {filter}') + self.cmd('network route-filter show -g {rg} -n {filter}') + self.cmd('network route-filter list -g {rg}') + + + self.cmd('network route-filter rule list-service-communities') + self.cmd('network route-filter rule create -g {rg} --filter-name {filter} -n rule1 --communities 12076:5040 12076:5030 --access allow') + self.cmd('network route-filter rule update -g {rg} --filter-name {filter} -n rule1') + self.cmd('network route-filter rule show -g {rg} --filter-name {filter} -n rule1') + self.cmd('network route-filter rule list -g {rg} --filter-name {filter}') + self.cmd('network route-filter rule delete -g {rg} --filter-name {filter} -n rule1') + + self.cmd('network route-filter delete -g {rg} -n {filter}') + + +class NetworkExpressRouteScenarioTest(ScenarioTest): + + def _test_express_route_peering(self): + + def _create_peering(peering, peer_asn, vlan, primary_prefix, secondary_prefix): + self.kwargs.update({ + 'peering': peering, + 'asn': peer_asn, + 'vlan': vlan, + 'pri_prefix': primary_prefix, + 'sec_prefix': secondary_prefix + }) + self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type {peering} --peer-asn {asn} --vlan-id {vlan} --primary-peer-subnet {pri_prefix} --secondary-peer-subnet {sec_prefix}') + + # create private peerings + _create_peering('AzurePrivatePeering', 10001, 101, '102.0.0.0/30', '103.0.0.0/30') + + self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3') + self.cmd('network express-route peering show -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ + self.check('microsoftPeeringConfig.advertisedPublicPrefixes[0]', '104.0.0.0/30'), + self.check('microsoftPeeringConfig.customerASN', 10000), + self.check('microsoftPeeringConfig.routingRegistryName', 'LEVEL3') + ]) + + self.cmd('network express-route peering delete -g {rg} --circuit-name {er} -n MicrosoftPeering') + + self.cmd('network express-route peering list --resource-group {rg} --circuit-name {er}', + checks=self.check('length(@)', 1)) + + self.cmd('network express-route peering update -g {rg} --circuit-name {er} -n AzurePrivatePeering --set vlanId=200', + checks=self.check('vlanId', 200)) + + def _test_express_route_auth(self): + + self.cmd('network express-route auth create -g {rg} --circuit-name {er} -n auth1', + checks=self.check('authorizationUseStatus', 'Available')) + + self.cmd('network express-route auth list --resource-group {rg} --circuit-name {er}', + checks=self.check('length(@)', 1)) + + self.cmd('network express-route auth show -g {rg} --circuit-name {er} -n auth1', + checks=self.check('authorizationUseStatus', 'Available')) + + self.cmd('network express-route auth delete -g {rg} --circuit-name {er} -n auth1') + + self.cmd('network express-route auth list --resource-group {rg} --circuit-name {er}', checks=self.is_empty()) + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route') + def test_network_express_route(self, resource_group): + + self.kwargs = { + 'rg': resource_group, + 'er': 'circuit1', + 'rt': 'Microsoft.Network/expressRouteCircuits' + } + + self.cmd('network express-route list-service-providers', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == 'Microsoft.Network/expressRouteServiceProviders']) == length(@)", True) + ]) + + # Premium SKU required to create MicrosoftPeering settings + self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium --tags foo=doo') + self.cmd('network express-route list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True) + ]) + self.cmd('network express-route list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network express-route show --resource-group {rg} --name {er}', checks=[ + self.check('type(@)', 'object'), + self.check('type', '{rt}'), + self.check('name', '{er}'), + self.check('resourceGroup', '{rg}'), + self.check('tags.foo', 'doo') + ]) + self.cmd('network express-route get-stats --resource-group {rg} --name {er}', + checks=self.check('type(@)', 'object')) + + self.cmd('network express-route update -g {rg} -n {er} --set tags.test=Test', checks=[ + self.check('tags.test', 'Test') + ]) + + self.cmd('network express-route update -g {rg} -n {er} --tags foo=boo', + checks=self.check('tags.foo', 'boo')) + + self._test_express_route_auth() + + self._test_express_route_peering() + + # because the circuit isn't actually provisioned, these commands will not return anything useful + # so we will just verify that the command makes it through the SDK without error. + self.cmd('network express-route list-arp-tables --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') + self.cmd('network express-route list-route-tables --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') + self.cmd('network express-route list-route-tables-summary --resource-group {rg} --name {er} --peering-name azureprivatepeering --path primary') + + self.cmd('network express-route delete --resource-group {rg} --name {er}') + # Expecting no results as we just deleted the only express route in the resource group + self.cmd('network express-route list --resource-group {rg}', checks=self.is_empty()) + + with self.assertRaisesRegex(CLIError, 'Please provide a complete resource ID'): + self.cmd('network express-route gateway connection show --ids /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.Network/expressRouteGateways/aaa') + + @unittest.skip('Test is wrong, please fix. rg not found') + @ResourceGroupPreparer(name_prefix='cli_test_express_route') + def test_network_express_route_connection_routing_configuration(self, resource_group): + self.kwargs = { + 'rg': 'dedharrtv3final', + 'gw': '16297a6ff5314c0f8d0eb580aa7861b3-eastus-er-gw', + 'connection': 'yuerconnection', + 'peering': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/expressRouteCircuits/clicktfinal/peerings/AzurePrivatePeering', + 'route_table1': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/virtualHubs/blhub/hubRouteTables/routetable1', + 'route_table2': '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/dedharrtv3final/providers/Microsoft.Network/virtualHubs/blhub/hubRouteTables/routetable2' + } + + self.cmd('network express-route gateway connection update ' + '-n {connection} ' + '-g {rg} ' + '--gateway-name {gw} ' + '--peering {peering} ' + '--associated-route-table {route_table1} ' + '--propagated-route-tables {route_table1} {route_table2} ' + '--labels label1 label2', + checks=[ + self.check('provisioningState', 'Succeeded'), + self.check('name', self.kwargs['connection']), + self.check('routingConfiguration.associatedRouteTable.id', self.kwargs['route_table1']), + self.check('length(routingConfiguration.propagatedRouteTables.ids)', 2), + self.check('routingConfiguration.propagatedRouteTables.ids[0].id', self.kwargs['route_table1']), + self.check('routingConfiguration.propagatedRouteTables.ids[1].id', self.kwargs['route_table2']), + self.check('length(routingConfiguration.propagatedRouteTables.labels)', 2), + self.check('routingConfiguration.propagatedRouteTables.labels[0]', 'label1'), + self.check('routingConfiguration.propagatedRouteTables.labels[1]', 'label2')]) + + self.cmd('network express-route gateway connection show -n {connection} -g {rg} --gateway-name {gw}', checks=[ + self.check('provisioningState', 'Succeeded'), + self.check('name', self.kwargs['connection']), + self.check('routingConfiguration.associatedRouteTable.id', self.kwargs['route_table1']), + self.check('length(routingConfiguration.propagatedRouteTables.ids)', 2), + self.check('routingConfiguration.propagatedRouteTables.ids[0].id', self.kwargs['route_table1']), + self.check('routingConfiguration.propagatedRouteTables.ids[1].id', self.kwargs['route_table2']), + self.check('length(routingConfiguration.propagatedRouteTables.labels)', 2), + self.check('routingConfiguration.propagatedRouteTables.labels[0]', 'label1'), + self.check('routingConfiguration.propagatedRouteTables.labels[1]', 'label2') + ]) + + @unittest.skip('The required extension command has not been release') + @ResourceGroupPreparer(name_prefix='cli_test_express_route_gateway_connection_inbound_outbound_routemap') + def test_express_route_gateway_connection_inbound_outbound_routemap(self, resource_group): + self.kwargs.update({ + 'vwan': self.create_random_name('vwan', 10), + 'vhub': self.create_random_name('vhub', 10), + 'er': self.create_random_name("er", 10), + 'ergateway': self.create_random_name("ergw", 16), + 'ergatewayconn': self.create_random_name("ergw", 16), + "route_map_name": self.create_random_name("routemap-", 16), + "route_map_name_2": self.create_random_name("routemap-", 16), + "route_map_name_3": self.create_random_name("routemap-", 16), + "route_map_name_4": self.create_random_name("routemap-", 16) + }) + + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') + route_map_id = self.cmd("network vhub route-map create -n {route_map_name} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] + route_map_id_2 = self.cmd("network vhub route-map create -n {route_map_name_2} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] + route_map_id_3 = self.cmd("network vhub route-map create -n {route_map_name_3} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] + route_map_id_4 = self.cmd("network vhub route-map create -n {route_map_name_4} -g {rg} --vhub-name {vhub}").get_output_in_json()['id'] + self.kwargs.update({ + 'route_map_id': route_map_id, + 'route_map_id_2': route_map_id_2, + 'route_map_id_3': route_map_id_3, + 'route_map_id_4': route_map_id_4 + }) + self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium') + self.cmd('network express-route gateway create -g {rg} -n {ergateway} --virtual-hub {vhub}') + # self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') + peer_id = self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3').get_output_in_json()['id'] + self.kwargs.update({ + 'peer_id': peer_id + }) + + with self.assertRaises(Exception): + self.cmd('network express-route gateway connection create -g {rg} -n {ergatewayconn} --gateway-name {ergateway} --peering {peer_id} --inbound-route-map {{id:{route_map_id}}} --outbound-route-map {{id:{route_map_id_2}}}') + self.cmd('network express-route gateway connection show -n {ergatewayconn} -g {rg} --gateway-name {ergateway}', checks=[ + self.check('routingConfiguration.inboundRouteMap.id', '{route_map_id}'), + self.check('routingConfiguration.outboundRouteMap.id', '{route_map_id_2}') + ]) + with self.assertRaises(Exception): + self.cmd('network express-route gateway connection update -g {rg} -n {ergatewayconn} --gateway-name {ergateway} --inbound-route-map {{id:{route_map_id_3}}} --outbound-route-map {{id:{route_map_id_4}}}') + self.cmd('network express-route gateway connection show -n {ergatewayconn} -g {rg} --gateway-name {ergateway}', checks=[ + self.check('routingConfiguration.inboundRouteMap.id', '{route_map_id_3}'), + self.check('routingConfiguration.outboundRouteMap.id', '{route_map_id_4}') + ]) + + +class NetworkExpressRoutePortScenarioTest(ScenarioTest): + + def __init__(self, method_name): + super().__init__(method_name, recording_processors=[ + ExpressRoutePortLOAContentReplacer() + ]) + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_express_route_port', location='eastus') + @KeyVaultPreparer(name_prefix='test-er-port-kv', location='eastus', additional_params='--enable-rbac-authorization false') + def test_network_express_route_port(self, resource_group, key_vault): + self.kwargs.update({ + 'rg': resource_group, + 'location': 'eastus', + 'name': 'expressRouteTest', + 'peeringRG': 'Equinix-Ashburn-DC2', + 'encapsulation': 'QinQ', + 'bandwidth': '10 Gbps', + 'cipher': 'GcmAes128', + 'kv': key_vault, + 'CAK_name': 'CAK', + 'CAK_value': 'b4355b9ccaf727d2ba7744ee991ce00e', + 'CKN_name': 'CKN', + 'CKN_value': '93e9ce8469eff0536784fc4ad253b5a6', + }) + self.kwargs['CAK_id'] = self.cmd('keyvault secret set --name {CAK_name} --vault-name {kv} --value {CAK_value}').get_output_in_json()['id'] + self.kwargs['CKN_id'] = self.cmd('keyvault secret set --name {CKN_name} --vault-name {kv} --value {CKN_value}').get_output_in_json()['id'] + identity = self.cmd('identity create -g {rg} -n {name}').get_output_in_json() + self.cmd('keyvault set-policy -n {kv} -g {rg} --secret-permissions get --object-id ' + identity['principalId']) + + self.cmd('network express-route port location list') + + self.cmd('network express-route port location show -l {peeringRG}', checks=[ + self.check('name', self.kwargs['peeringRG']) + ]) + + self.cmd('network express-route port create -g {rg} -n {name} --location {location} --peering-location {peeringRG} --encapsulation {encapsulation} --bandwidth {bandwidth}', checks=[ + self.check('name', self.kwargs['name']), + self.check('length(links)', 2), + ]) + self.cmd('network express-route port list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network express-route port show -g {rg} -n {name}') + + self.cmd('network express-route port identity assign -g {rg} -n {name} --identity ' + identity['id']) + + self.cmd('network express-route port identity show -g {rg} -n {name}') + + self.cmd('network express-route port link list -g {rg} --port-name {name}', checks=[ + self.check('length(@)', 2) + ]) + self.cmd('network express-route port link show -g {rg} --port-name {name} -n link1', checks=[ + self.check('name', 'link1') + ]) + + self.cmd('network express-route port link update -g {rg} --port-name {name} -n link1 ' + '--macsec-ckn-secret-identifier {CKN_id} --macsec-cak-secret-identifier {CAK_id} ' + '--macsec-cipher {cipher} --admin-state', checks=[ + self.check('adminState', 'Enabled'), + self.check('macSecConfig.cakSecretIdentifier', self.kwargs['CAK_id']), + self.check('macSecConfig.cknSecretIdentifier', self.kwargs['CKN_id']), + self.check('macSecConfig.cipher', self.kwargs['cipher']), + ]) + + self.cmd('network express-route port generate-loa --customer-name MyCustomer -g {rg} --name {name} -f loa1') + + +class NetworkExpressRouteIPv6PeeringScenarioTest(ScenarioTest): + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route_ipv6_peering') + def test_network_express_route_ipv6_peering(self, resource_group): + + self.kwargs['er'] = 'circuit1' + + # Premium SKU required to create MicrosoftPeering settings + self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" --peering-location Area51 --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type MicrosoftPeering --peer-asn 10002 --vlan-id 103 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30 --advertised-public-prefixes 104.0.0.0/30 --customer-asn 10000 --routing-registry-name level3') + self.cmd('network express-route peering update -g {rg} --circuit-name {er} -n MicrosoftPeering --ip-version ipv6 --primary-peer-subnet 2001:db00::/126 --secondary-peer-subnet 2002:db00::/126 --advertised-public-prefixes 2001:db00::/126 --customer-asn 100001 --routing-registry-name level3') + self.cmd('network express-route peering show -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ + self.check('microsoftPeeringConfig.advertisedPublicPrefixes[0]', '104.0.0.0/30'), + self.check('microsoftPeeringConfig.customerASN', 10000), + self.check('microsoftPeeringConfig.routingRegistryName', 'LEVEL3'), + self.check('ipv6PeeringConfig.microsoftPeeringConfig.advertisedPublicPrefixes[0]', '2001:db00::/126'), + self.check('ipv6PeeringConfig.microsoftPeeringConfig.customerASN', 100001), + self.check('ipv6PeeringConfig.state', 'Enabled') + ]) + self.cmd('network express-route peering get-stats -g {rg} --circuit-name {er} -n MicrosoftPeering', checks=[ + self.check('type(@)', 'object'), + ]) + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route_ipv6_peering2', location='eastus') + def test_network_express_route_ipv6_peering2(self, resource_group): + self.kwargs['er'] = 'test_circuit' + # create with ipv6 + self.cmd('network express-route create -g {rg} -n {er} --bandwidth 50 --provider "Ibiza Test Provider" ' + '--peering-location Area51 --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er} --peering-type AzurePrivatePeering ' + '--peer-asn 10002 --vlan-id 103 --ip-version ipv6 --primary-peer-subnet 2002:db00::/126 ' + '--secondary-peer-subnet 2003:db00::/126', + checks=[self.check('ipv6PeeringConfig.primaryPeerAddressPrefix', '2002:db00::/126'), + self.check('ipv6PeeringConfig.secondaryPeerAddressPrefix', '2003:db00::/126')]) + + +class NetworkExpressRouteGlobalReachScenarioTest(ScenarioTest): + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route_global_reach') + def test_network_express_route_global_reach(self, resource_group): + from azure.core.exceptions import HttpResponseError + self.kwargs.update({ + 'er1': 'er1', + 'er2': 'er2', + 'conn12': 'conn12', + }) + + self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') + + self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') + + # These commands won't succeed because circuit creation requires a manual step from the service. + with self.assertRaisesRegex(HttpResponseError, 'is Not Provisioned'): + self.cmd('network express-route peering connection create -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --peer-circuit {er2} --address-prefix 104.0.0.0/29') + self.cmd('network express-route peering connection show -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') + self.cmd('network express-route peering connection list -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering') + self.cmd('network express-route peering connection delete -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route_peer_connection') + def test_network_express_route_peer_connection(self, resource_group): + from azure.core.exceptions import ResourceNotFoundError + self.kwargs.update({ + 'er1': 'er1', + 'er2': 'er2', + 'peconn12': 'peconn12', + }) + + self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') + + self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') + + # cannot create it, so this test will fail due to resource is not found. + with self.assertRaisesRegex(ResourceNotFoundError, 'NotFound'): + self.cmd('network express-route peering peer-connection show -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {peconn12}') + self.cmd('network express-route peering peer-connection list -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering') + + @record_only() # record_only as the express route is extremely expensive, contact service team for an available ER + @ResourceGroupPreparer(name_prefix='cli_test_express_route_global_reach_config') + def test_network_express_route_global_reach_config(self, resource_group): + from azure.core.exceptions import HttpResponseError + self.kwargs.update({ + 'er1': 'er1', + 'er2': 'er2', + 'conn12': 'conn12', + }) + + self.cmd('network express-route create -g {rg} -n {er1} --allow-global-reach --bandwidth 50 --peering-location Area51 --provider "Microsoft ER Test" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er1} --peering-type AzurePrivatePeering --peer-asn 10001 --vlan-id 101 --primary-peer-subnet 102.0.0.0/30 --secondary-peer-subnet 103.0.0.0/30') + + self.cmd('network express-route create -g {rg} -n {er2} --allow-global-reach --bandwidth 50 --peering-location "Denver Test" --provider "Test Provider NW" --sku-tier Premium') + self.cmd('network express-route peering create -g {rg} --circuit-name {er2} --peering-type AzurePrivatePeering --peer-asn 10002 --vlan-id 102 --primary-peer-subnet 104.0.0.0/30 --secondary-peer-subnet 105.0.0.0/30') + + # These commands won't succeed because circuit creation requires a manual step from the service. + with self.assertRaisesRegex(HttpResponseError, 'is Not Provisioned'): + self.cmd('network express-route peering connection create -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --peer-circuit {er2} --address-prefix 104.0.0.0/29') + with self.assertRaisesRegex(HttpResponseError, 'ParentResourceIsInFailedState'): + self.cmd('network express-route peering connection ipv6-config set -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12} --address-prefix .../125') + with self.assertRaisesRegex(HttpResponseError, 'ParentResourceIsInFailedState'): + self.cmd('network express-route peering connection ipv6-config remove -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') + self.cmd('network express-route peering connection delete -g {rg} --circuit-name {er1} --peering-name AzurePrivatePeering -n {conn12}') + + +class NetworkCrossRegionLoadBalancerScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_cr_load_balancer') + def test_network_cross_region_lb(self, resource_group): + + self.kwargs.update({ + 'lb': 'cross-region-lb', + 'rg': resource_group, + 'rt': 'Microsoft.Network/loadBalancers', + 'pub_ip': 'publicip4' + }) + + # test lb create with min params (new ip) + self.cmd('network cross-region-lb create -n {lb}1 -g {rg}', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}') + ]) + + # test internet facing load balancer with new static public IP + self.cmd('network cross-region-lb create -n {lb}2 -g {rg} --public-ip-address-allocation static --tags foo=doo') + self.cmd('network public-ip show -g {rg} -n PublicIP{lb}2', checks=[ + self.check('publicIPAllocationMethod', 'Static'), + self.check('tags.foo', 'doo') + ]) + + # test internet facing load balancer with existing public IP (by name) + self.cmd('network public-ip create -n {pub_ip} -g {rg} --sku Standard --tier Global') + self.cmd('network cross-region-lb create -n {lb}3 -g {rg} --public-ip-address {pub_ip}', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), + self.check("loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{pub_ip}')", True) + ]) + + self.cmd('network cross-region-lb list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True) + ]) + self.cmd('network cross-region-lb list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network cross-region-lb show --resource-group {rg} --name {lb}1', checks=[ + self.check('type(@)', 'object'), + self.check('type', '{rt}'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{lb}1') + ]) + # test cross-region-lb update + self.cmd( + 'network cross-region-lb update --resource-group {rg} --name {lb}1 --set tags.CostCenter=MyBusinessGroup', + checks=[ + self.check('tags.CostCenter', 'MyBusinessGroup') + ]) + self.cmd('network cross-region-lb delete --resource-group {rg} --name {lb}1') + # Expecting no results as we just deleted the only lb in the resource group + self.cmd('network cross-region-lb list --resource-group {rg}', checks=self.check('length(@)', 2)) + + @ResourceGroupPreparer(name_prefix='cli_test_cross_region_load_balancer_ip_config') + def test_network_cross_region_load_balancer_ip_config(self, resource_group): + + for i in range(1, 4): # create 3 public IPs to use for the test + self.cmd('network public-ip create -g {{rg}} -n publicip{} --sku Standard --tier Global'.format(i)) + + # create internet-facing LB with public IP (lb1) + self.cmd('network cross-region-lb create -g {rg} -n lb1 --public-ip-address publicip1') + + # Test frontend IP configuration for internet-facing LB + self.cmd('network cross-region-lb frontend-ip create -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip2') + self.cmd('network cross-region-lb frontend-ip list -g {rg} --lb-name lb1', + checks=self.check('length(@)', 2)) + self.cmd('network cross-region-lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip3') + self.cmd('network cross-region-lb frontend-ip show -g {rg} --lb-name lb1 -n ipconfig1', + checks=self.check("publicIPAddress.contains(id, 'publicip3')", True)) + + # test generic update + self.kwargs['ip2_id'] = resource_id(subscription=self.get_subscription_id(), resource_group=self.kwargs['rg'], namespace='Microsoft.Network', type='publicIPAddresses', name='publicip2') + self.cmd('network cross-region-lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --set publicIPAddress.id="{ip2_id}"', + checks=self.check("publicIPAddress.contains(id, 'publicip2')", True)) + self.cmd('network cross-region-lb frontend-ip delete -g {rg} --lb-name lb1 -n ipconfig1') + self.cmd('network cross-region-lb frontend-ip list -g {rg} --lb-name lb1', + checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_address_pool', location='eastus2') + def test_network_cross_region_lb_address_pool(self, resource_group): + + self.kwargs.update({ + 'lb': self.create_random_name('cross_region_lb', 24), + 'rg': resource_group + }) + + self.cmd('network cross-region-lb create -g {rg} -n {lb}') + + for i in range(1, 4): + self.cmd('network cross-region-lb address-pool create -g {{rg}} --lb-name {{lb}} -n bap{}'.format(i), + checks=self.check('name', 'bap{}'.format(i))) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 4)) + self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', + checks=self.check('name', 'bap1')) + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', + checks=self.is_empty()) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 3)) + + @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_address_pool_addresses', location='eastus2') + def test_network_cross_region_lb_address_pool_addresses(self, resource_group): + + self.kwargs.update({ + 'regional_lb1': self.create_random_name('regional_lb', 24), + 'regional_lb2': self.create_random_name('regional_lb', 24), + 'lb': self.create_random_name('cross_region_lb', 24), + 'address_pool': self.create_random_name('address_pool', 24), + 'backend_address1': self.create_random_name('backend_address', 24), + 'backend_address2': self.create_random_name('backend_address', 24), + 'rg': resource_group, + 'lb_address_pool_file_path': os.path.join(TEST_DIR, 'test-cross-region-lb-address-pool-config.json') + }) + + regional_lb_frontend_ip_address1 = self.cmd('network lb create -n {regional_lb1} -g {rg} --sku Standard').get_output_in_json()['loadBalancer']['frontendIPConfigurations'][0]['id'] + regional_lb_frontend_ip_address2 = self.cmd('network lb create -n {regional_lb2} -g {rg} --sku Standard').get_output_in_json()['loadBalancer']['frontendIPConfigurations'][0]['id'] + + self.kwargs.update({ + 'regional_lb_frontend_ip_address1': regional_lb_frontend_ip_address1, + 'regional_lb_frontend_ip_address2': regional_lb_frontend_ip_address2 + }) + self.cmd('network cross-region-lb create -g {rg} -n {lb}') + + self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n {address_pool} ' + '--backend-address name={backend_address1} frontend-ip-address={regional_lb_frontend_ip_address1} ' + '--admin-state Up', + checks=[self.check('name', self.kwargs['address_pool']), + self.check('loadBalancerBackendAddresses[0].adminState', 'Up'), + ]) + + self.cmd('network cross-region-lb address-pool update -g {rg} --lb-name {lb} -n {address_pool} ' + '--backend-address name={backend_address1} frontend-ip-address={regional_lb_frontend_ip_address1} admin-state=Down', + checks=[self.check('name', self.kwargs['address_pool']), + self.check('loadBalancerBackendAddresses[0].adminState', 'Down'), + ]) + + self.cmd('network cross-region-lb address-pool address add -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2} --frontend-ip-address {regional_lb_frontend_ip_address2} --admin-state Down', + checks=[self.check('name', self.kwargs['address_pool']), + self.check('loadBalancerBackendAddresses[1].adminState', 'Down'), + ]) + + self.cmd( + 'network cross-region-lb address-pool address update -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2} --admin-state Up', + checks=[self.check('name', self.kwargs['address_pool']), + self.check('loadBalancerBackendAddresses[1].adminState', 'Up'), + ]) + + self.cmd('network cross-region-lb address-pool address remove -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address2}') + + self.cmd('network cross-region-lb address-pool address list -g {rg} --lb-name {lb} --pool-name {address_pool}', checks=self.check('length(@)', 1)) + + self.cmd('network cross-region-lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + self.cmd('network cross-region-lb address-pool show -g {rg} --lb-name {lb} -n {address_pool}', + checks=self.check('name', self.kwargs['address_pool'])) + self.cmd('network cross-region-lb address-pool address remove -g {rg} --lb-name {lb} --pool-name {address_pool} --name {backend_address1}') + self.cmd('network cross-region-lb address-pool delete -g {rg} --lb-name {lb} -n {address_pool}', + checks=self.is_empty()) + self.cmd('network cross-region-lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 1)) + + @ResourceGroupPreparer(name_prefix='cli_test_cross_region_lb_rules') + def test_network_cross_region_lb_rules(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.cmd('network cross-region-lb create -g {rg} -n {lb}') + + self.cmd('network cross-region-lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-port 60 --backend-port 60 --protocol tcp', + checks=[ + self.check('enableTcpReset', False), + self.check('idleTimeoutInMinutes', 4)]) + self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n bap1') + self.cmd('network cross-region-lb address-pool create -g {rg} --lb-name {lb} -n bap2') + self.cmd('network cross-region-lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name LoadBalancerFrontEnd --frontend-port 40 --backend-pool-name bap1 --backend-port 40 --protocol tcp') + + self.cmd('network cross-region-lb rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + self.cmd('network cross-region-lb rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --load-distribution sourceip --protocol udp') + self.cmd('network cross-region-lb rule update -g {rg} --lb-name {lb} -n rule2 --backend-pool-name bap2 --load-distribution sourceipprotocol') + self.cmd('network cross-region-lb rule show -g {rg} --lb-name {lb} -n rule1', checks=[ + self.check('enableFloatingIP', True), + self.check('idleTimeoutInMinutes', 4), + self.check('loadDistribution', 'SourceIP'), + self.check('protocol', 'Udp') + ]) + + self.cmd('network cross-region-lb rule show -g {rg} --lb-name {lb} -n rule2', checks=[ + self.check("backendAddressPool.contains(id, 'bap2')", True), + self.check('loadDistribution', 'SourceIPProtocol') + ]) + self.cmd('network cross-region-lb rule delete -g {rg} --lb-name {lb} -n rule1') + self.cmd('network cross-region-lb rule delete -g {rg} --lb-name {lb} -n rule2') + self.cmd('network cross-region-lb rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 0)) + + +class NetworkLoadBalancerScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_load_balancer', location='eastus2') + def test_network_lb(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb', + 'rt': 'Microsoft.Network/loadBalancers', + 'vnet': 'mytestvnet', + 'pri_ip': '10.0.0.15', + 'pub_ip': 'publicip4' + }) + + # test lb create with min params (new ip) + self.cmd('network lb create -n {lb}1 -g {rg}', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}') + ]) + + # test internet facing load balancer with new static public IP + self.cmd('network lb create -n {lb}2 -g {rg} --public-ip-address-allocation static --tags foo=doo') + self.cmd('network public-ip show -g {rg} -n PublicIP{lb}2', checks=[ + self.check('publicIPAllocationMethod', 'Static'), + self.check('tags.foo', 'doo') + ]) + + # test internal load balancer create (existing subnet ID) + self.kwargs['subnet_id'] = self.cmd('network vnet create -n {vnet} -g {rg} --subnet-name default').get_output_in_json()['newVNet']['subnets'][0]['id'] + self.cmd('network lb create -n {lb}3 -g {rg} --subnet {subnet_id} --private-ip-address {pri_ip}', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Static'), + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAddress', '{pri_ip}'), + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), + self.check("loadBalancer.frontendIPConfigurations[0].properties.subnet.id", '{subnet_id}') + ]) + + # test internet facing load balancer with existing public IP (by name) + self.cmd('network public-ip create -n {pub_ip} -g {rg}') + self.cmd('network lb create -n {lb}4 -g {rg} --public-ip-address {pub_ip}', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].properties.privateIPAllocationMethod', 'Dynamic'), + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), + self.check("loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.contains(id, '{pub_ip}')", True) + ]) + + self.cmd('network lb list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True) + ]) + self.cmd('network lb list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network lb show --resource-group {rg} --name {lb}1', checks=[ + self.check('type(@)', 'object'), + self.check('type', '{rt}'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{lb}1') + ]) + self.cmd('network lb delete --resource-group {rg} --name {lb}1') + # Expecting no results as we just deleted the only lb in the resource group + self.cmd('network lb list --resource-group {rg}', + checks=self.check('length(@)', 3)) + + @live_only() + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_network_lb_with_cross_subscription_id_', location='eastus2euap') + @ResourceGroupPreparer(name_prefix='cli_test_network_lb_with_cross_subscription_id_', location='eastus2euap', + parameter_name='aux_resource_group', subscription=AUX_SUBSCRIPTION) + def test_network_lb_with_cross_subscription_id(self, resource_group, aux_resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'rg2': aux_resource_group, + 'aux_sub': AUX_SUBSCRIPTION, + 'lb': self.create_random_name("lb", 12), + 'vnet': self.create_random_name("vnet", 12), + "subnet": self.create_random_name("subnet", 12), + 'lb2': self.create_random_name("lb2", 12), + 'publicip': self.create_random_name("publicip", 12), + }) + + vnet = self.cmd('network vnet create -n {vnet} -g {rg2} --subnet-name {subnet} --subscription {aux_sub}', checks=[ + self.check('newVNet.name', '{vnet}'), + ]).get_output_in_json() + + self.cmd('network vnet subnet update -n {subnet} -g {rg2} --vnet-name {vnet} --default-outbound-access false --subscription {aux_sub}') + + self.kwargs['vnet_id'] = vnet['newVNet']['id'] + self.kwargs['subnet_id'] = vnet['newVNet']['subnets'][0]['id'] + + self.cmd('network lb create -g {rg} -n {lb} --subnet {subnet_id} --sku Standard', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), + ]) + + public_ip_address_id = self.cmd('network public-ip create -g {rg2} -n {publicip} --subscription {aux_sub} --ip-tags FirstPartyUsage=/NonProd', checks=[ + self.check('publicIp.name', '{publicip}') + ]).get_output_in_json()['publicIp']['id'] + + self.kwargs['publicip_id'] = public_ip_address_id + + self.cmd('network lb create -g {rg} -n {lb2} --public-ip-address {publicip_id} --sku Standard', checks=[ + self.check('loadBalancer.frontendIPConfigurations[0].resourceGroup', '{rg}'), + self.check('loadBalancer.frontendIPConfigurations[0].properties.publicIPAddress.id', '{publicip_id}'), + ]) + + +class NetworkLoadBalancerIpConfigScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_load_balancer_ip_config', location='westus') + def test_network_load_balancer_ip_config(self, resource_group): + + for i in range(1, 4): # create 3 public IPs to use for the test + self.cmd('network public-ip create -g {{rg}} -n publicip{}'.format(i)) + + # create internet-facing LB with public IP (lb1) + self.cmd('network lb create -g {rg} -n lb1 --public-ip-address publicip1') + + # create internal LB (lb2) + self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') + self.cmd('network vnet subnet create -g {rg} --vnet-name vnet1 -n subnet2 --address-prefix 10.0.1.0/24 --default-outbound false') + self.cmd('network lb create -g {rg} -n lb2 --subnet subnet1 --vnet-name vnet1') + + # Test frontend IP configuration for internet-facing LB + self.cmd('network lb frontend-ip create -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip2') + self.cmd('network lb frontend-ip list -g {rg} --lb-name lb1', + checks=self.check('length(@)', 2)) + self.cmd('network lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address publicip3') + self.cmd('network lb frontend-ip show -g {rg} --lb-name lb1 -n ipconfig1', + checks=self.check("publicIPAddress.contains(id, 'publicip3')", True)) + + # test generic update + self.kwargs['ip2_id'] = resource_id(subscription=self.get_subscription_id(), resource_group=self.kwargs['rg'], namespace='Microsoft.Network', type='publicIPAddresses', name='publicip2') + self.cmd('network lb frontend-ip update -g {rg} --lb-name lb1 -n ipconfig1 --public-ip-address "{ip2_id}"', + checks=self.check("publicIPAddress.contains(id, 'publicip2')", True)) + self.cmd('network lb frontend-ip delete -g {rg} --lb-name lb1 -n ipconfig1') + self.cmd('network lb frontend-ip list -g {rg} --lb-name lb1', + checks=self.check('length(@)', 1)) + + # Test frontend IP configuration for internal LB + self.cmd('network lb frontend-ip create -g {rg} --lb-name lb2 -n ipconfig2 --vnet-name vnet1 --subnet subnet1 --private-ip-address 10.0.0.99') + self.cmd('network lb frontend-ip list -g {rg} --lb-name lb2', + checks=self.check('length(@)', 2)) + self.cmd('network lb frontend-ip update -g {rg} --lb-name lb2 -n ipconfig2 --subnet subnet2 --vnet-name vnet1 --private-ip-address 10.0.1.100') + self.cmd('network lb frontend-ip show -g {rg} --lb-name lb2 -n ipconfig2', + checks=self.check("subnet.contains(id, 'subnet2')", True)) + + +class NetworkLoadBalancerOutboundRulesScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_lb_outbound_rules', location='eastus2') + def test_network_load_balancer_outbound_rules(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'loc': resource_group_location, + 'lb': 'lb1', + 'prefix': 'prefix1', + 'frontend1': 'LoadBalancerFrontEnd', + 'frontend2': 'prefixFrontEnd', + 'backend': 'lb1bepool', + 'rule1': 'rule1', + 'rule2': 'rule2' + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku Standard') + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') + self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {frontend2} --public-ip-prefix {prefix}') + self.cmd('network lb outbound-rule create -g {rg} --lb-name {lb} -n {rule1} --address-pool {backend} --enable-tcp-reset --frontend-ip-configs {frontend1} --outbound-ports 512 --protocol Tcp', checks=[ + self.check('enableTcpReset', True), + self.check('protocol', 'Tcp'), + self.check('allocatedOutboundPorts', 512), + self.check("contains(backendAddressPool.id, '{backend}')", True), + self.check("contains(frontendIPConfigurations[0].id, '{frontend1}')", True) + ]) + self.cmd('network lb outbound-rule create -g {rg} --lb-name {lb} -n {rule2} --address-pool {backend} --frontend-ip-configs {frontend2} --idle-timeout 20 --protocol all', checks=[ + self.check('idleTimeoutInMinutes', 20), + self.check("contains(backendAddressPool.id, '{backend}')", True), + self.check("contains(frontendIPConfigurations[0].id, '{frontend2}')", True) + ]) + self.cmd('network lb outbound-rule update -g {rg} --lb-name {lb} -n {rule2} --idle-timeout 25', + checks=self.check('idleTimeoutInMinutes', 25)) + self.cmd('network lb outbound-rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + self.cmd('network lb outbound-rule show -g {rg} --lb-name {lb} -n {rule1}', checks=[ + self.check('enableTcpReset', True), + self.check('protocol', 'Tcp'), + self.check('allocatedOutboundPorts', 512), + self.check("contains(backendAddressPool.id, '{backend}')", True), + self.check("contains(frontendIPConfigurations[0].id, '{frontend1}')", True) + ]) + self.cmd('network lb outbound-rule delete -g {rg} --lb-name {lb} -n {rule1}') + self.cmd('network lb outbound-rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 1)) + + +class NetworkLoadBalancerSubresourceScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules', location='eastus2') + def test_network_lb_nat_rules(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.cmd('network lb create -g {rg} -n {lb}') + + for count in range(1, 3): + self.cmd('network lb inbound-nat-rule create -g {{rg}} --lb-name {{lb}} -n rule{0} --protocol tcp --frontend-port {0} --backend-port {0} --frontend-ip-name LoadBalancerFrontEnd'.format(count)) + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --frontend-port 3 --backend-port 3') + self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 3)) + self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --idle-timeout 10') + self.cmd('network lb inbound-nat-rule show -g {rg} --lb-name {lb} -n rule1', checks=[ + self.check('enableFloatingIP', True), + self.check('idleTimeoutInMinutes', 10) + ]) + # test generic update + self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule1 --set idleTimeoutInMinutes=5', + checks=self.check('idleTimeoutInMinutes', 5)) + + for count in range(1, 4): + self.cmd('network lb inbound-nat-rule delete -g {{rg}} --lb-name {{lb}} -n rule{}'.format(count)) + self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules_v2', location='eastus2') + def test_network_lb_nat_rules_v2(self, resource_group): + self.kwargs['lb'] = 'lb1' + self.cmd('network lb create -g {rg} -n {lb} --sku Standard') + + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --backend-port 3 ' + '--frontend-port-range-start 0 --frontend-port-range-end 3', checks=[ + self.check('name', 'rule3'), + self.check('frontendPortRangeStart', 0), + self.check('frontendPortRangeEnd', 3)]) + self.cmd('network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule3 --floating-ip true --idle-timeout 10 --frontend-port-range-end 5', + checks=self.check('frontendPortRangeEnd', 5)) + self.cmd('network lb inbound-nat-rule delete -g {rg} --lb-name {lb} -n rule3') + + @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_rules_v3', location='eastus2euap') + def test_network_lb_nat_rules_v3(self, resource_group): + self.kwargs.update({ + 'lb': 'lb1', + 'backend': 'lb1bepool', + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku Standard') + + # test lb inbound-nat-rule create with new param --backend-pool-name + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule3 --protocol tcp --backend-port 30 ' + '--frontend-port-range-start 0 --frontend-port-range-end 3 --backend-pool-name {backend}', checks=[ + self.check('name', 'rule3'), + self.check('frontendPortRangeStart', 0), + self.check('frontendPortRangeEnd', 3), + self.check("contains(backendAddressPool.id, '{backend}')", True)]) + self.cmd( + 'network lb inbound-nat-rule update -g {rg} --lb-name {lb} -n rule3 --floating-ip true --idle-timeout 10 --frontend-port-range-end 5', + checks=self.check('frontendPortRangeEnd', 5)) + self.cmd('network lb inbound-nat-rule delete -g {rg} --lb-name {lb} -n rule3') + + @ResourceGroupPreparer(name_prefix='cli_test_lb_nat_pools', location='eastus2') + def test_network_lb_nat_pools(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.cmd('network lb create -g {rg} -n {lb}') + + for count in range(1000, 4000, 1000): + self.cmd('network lb inbound-nat-pool create -g {{rg}} --lb-name {{lb}} -n rule{0} --protocol tcp --frontend-port-range-start {0} --frontend-port-range-end {1} --backend-port {0}'.format(count, count + 999)) + self.cmd('network lb inbound-nat-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 3)) + self.cmd('network lb inbound-nat-pool update -g {rg} --lb-name {lb} -n rule1000 --protocol udp --backend-port 50 --floating-ip --idle-timeout 20') + self.cmd('network lb inbound-nat-pool show -g {rg} --lb-name {lb} -n rule1000', checks=[ + self.check('protocol', 'Udp'), + self.check('backendPort', 50), + self.check('enableFloatingIP', True), + self.check('idleTimeoutInMinutes', 20) + ]) + # test generic update + self.cmd('network lb inbound-nat-pool update -g {rg} --lb-name {lb} -n rule1000 --set protocol=Tcp', + checks=self.check('protocol', 'Tcp')) + + for count in range(1000, 4000, 1000): + self.cmd('network lb inbound-nat-pool delete -g {{rg}} --lb-name {{lb}} -n rule{}'.format(count)) + self.cmd('network lb inbound-nat-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool', location='eastus2') + def test_network_lb_address_pool(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.cmd('network lb create -g {rg} -n {lb}') + + for i in range(1, 4): + self.cmd('network lb address-pool create -g {{rg}} --lb-name {{lb}} -n bap{}'.format(i), + checks=self.check('name', 'bap{}'.format(i))) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 4)) + self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', + checks=self.check('name', 'bap1')) + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', + checks=self.is_empty()) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 3)) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool_with_sync_mode', location='eastus2') + def test_network_lb_address_pool_with_sync_mode(self, resource_group): + + self.kwargs.update({ + 'lb': self.create_random_name('lb', 10), + 'ap1': self.create_random_name('ap1', 10), + 'ap2': self.create_random_name('ap2', 10), + 'vnet': self.create_random_name('vnet', 10), + }) + self.cmd('network lb create -g {rg} -n {lb}') + self.cmd('network vnet create -g {rg} -n {vnet}') + + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {ap1} --sync-mode Manual --vnet {vnet}') + self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n {ap1}', + checks=[self.check('name', '{ap1}'), + self.check('syncMode', 'Manual')]) + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {ap2}') + self.cmd('network lb address-pool update -g {rg} --lb-name {lb} -n {ap2} --sync-mode Automatic --vnet {vnet}', + checks=self.check('syncMode', 'Automatic')) + + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n {ap1}', + checks=self.is_empty()) + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n {ap2}', + checks=self.is_empty()) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_address_pool_addresses', location='eastus2') + def test_network_lb_address_pool_addresses(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb1', + 'vnet': 'clitestvnet', + 'nic': 'clitestnic', + 'rg': resource_group, + 'lb_address_pool_file_path': os.path.join(TEST_DIR, 'test-address-pool-config.json'), + 'subnet_name': 'subnetx' + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name subnet1') + self.cmd('network vnet subnet create -g {rg} -n {subnet_name} --vnet-name {vnet} --address-prefixes 10.0.1.0/24 --default-outbound false') + self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name {vnet}') + self.cmd('network lb create -g {rg} -n {lb} --sku Standard') + + self.kwargs['subnet'] = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json()['subnets'][0]['id'] + + # create with vnet + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet} ' + '--backend-address name=addr1 ip-address=10.0.0.1 ' + '--backend-address name=addr2 ip-address=10.0.0.2 ' + '--backend-address name=addr3 ip-address=10.0.0.3 ' + '--drain-period 10', + checks=self.check('name', 'bap1')) + + # create with subnet + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2 --vnet {vnet} --admin-state None ' + '--backend-address name=addr1 ip-address=10.0.0.1 subnet={subnet} ' + '--backend-address name=addr2 ip-address=10.0.1.1 subnet={subnet_name} ' + '--backend-address name=addr3 ip-address=10.0.0.3 subnet={subnet} ' + '--drain-period 10', + checks=[ + self.check('name', 'bap2'), + self.check('drainPeriodInSeconds', 10), + self.check('loadBalancerBackendAddresses[0].adminState', 'None'), + self.check('loadBalancerBackendAddresses[1].adminState', 'None'), + self.check('loadBalancerBackendAddresses[2].adminState', 'None') + ]) + + # update backend pool + self.cmd('network lb address-pool update -g {rg} --lb-name {lb} -n bap2 --vnet {vnet} --admin-state None ' + '--backend-address name=addr1 ip-address=10.0.0.3 subnet={subnet} ' + '--backend-address name=addr2 ip-address=10.0.1.2 subnet={subnet_name} ' + '--backend-address name=addr3 ip-address=10.0.0.5 subnet={subnet} ' + '--drain-period 20', + checks=[ + self.check('loadBalancerBackendAddresses[0].ipAddress', '10.0.0.3'), + self.check('loadBalancerBackendAddresses[1].ipAddress', '10.0.1.2'), + self.check('loadBalancerBackendAddresses[2].ipAddress', '10.0.0.5'), + self.check('drainPeriodInSeconds', 20), + self.check('loadBalancerBackendAddresses[0].adminState', 'None'), + self.check('loadBalancerBackendAddresses[1].adminState', 'None'), + self.check('loadBalancerBackendAddresses[2].adminState', 'None') + ]) + + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap2 ') + + self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr6 --vnet {vnet} --ip-address 10.0.0.6 --admin-state None', + checks=[ + self.check('name', 'bap1'), + self.check('loadBalancerBackendAddresses[3].adminState', 'None') + ]) + + self.cmd('network lb address-pool address remove -g {rg} --lb-name {lb} --pool-name bap1 --name addr2') + + self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '3')) + + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1', + checks=self.check('name', 'bap1')) + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', + checks=self.is_empty()) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 1)) + + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet} ' + '--backend-addresses @"{lb_address_pool_file_path}"', + checks=self.check('name', 'bap1')) + self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '2')) + self.cmd('network lb address-pool delete -g {rg} --lb-name {lb} -n bap1', checks=self.is_empty()) + self.cmd('network lb address-pool list -g {rg} --lb-name {lb}', checks=self.check('length(@)', 1)) + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1 --vnet {vnet}', checks=self.check('name', 'bap1')) + + self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr6 --vnet {vnet} --ip-address 10.0.0.6', checks=self.check('name', 'bap1')) + + self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '1')) + + self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr7 --subnet {subnet} --ip-address 10.0.0.7', checks=self.check('name', 'bap1')) + + self.cmd('network lb address-pool address add -g {rg} --lb-name {lb} --pool-name bap1 --name addr8 --vnet {vnet} --subnet {subnet_name} --ip-address 10.0.1.3', checks=self.check('name', 'bap1')) + + self.cmd('network lb address-pool address list -g {rg} --lb-name {lb} --pool-name bap1', checks=self.check('length(@)', '3')) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_probes', location='eastus2') + def test_network_lb_probes(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.kwargs['lb2'] = 'lb2' + self.kwargs['probe5'] = 'probe5' + self.cmd('network lb create -g {rg} -n {lb}') + + for i in range(1, 4): + self.cmd('network lb probe create -g {{rg}} --lb-name {{lb}} -n probe{0} --port {0} --protocol http --path "/test{0}"'.format(i)) + self.cmd('network lb probe list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 3)) + self.cmd('network lb probe update -g {rg} --lb-name {lb} -n probe1 --interval 20 --threshold 5') + self.cmd('network lb probe update -g {rg} --lb-name {lb} -n probe2 --protocol tcp --path ""') + self.cmd('network lb probe show -g {rg} --lb-name {lb} -n probe1', checks=[ + self.check('intervalInSeconds', 20), + self.check('numberOfProbes', 5) + ]) + + self.cmd('network lb probe show -g {rg} --lb-name {lb} -n probe2', checks=[ + self.check('protocol', 'Tcp'), + self.check('path', None) + ]) + self.cmd('network lb probe delete -g {rg} --lb-name {lb} -n probe3') + self.cmd('network lb probe list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + + # test standard LB supports https probe + self.cmd('network lb create -g {rg} -n {lb2} --sku standard') + self.cmd('network lb probe create -g {rg} --lb-name {lb2} -n probe1 --port 443 --protocol https --path "/test1"') + self.cmd('network lb probe list -g {rg} --lb-name {lb2}', checks=self.check('[0].protocol', 'Https')) + + # test --probe-threshold parameter + self.cmd('network lb probe create -g {rg} --lb-name {lb2} -n {probe5} --port 443 --protocol https --path "/test1" --probe-threshold 5', checks=self.check('probeThreshold', 5)) + self.cmd('network lb probe show -g {rg} --lb-name {lb2} -n {probe5}', checks=self.check('probeThreshold', 5)) + self.cmd('network lb probe update -g {rg} --lb-name {lb2} -n {probe5} --port 443 --protocol https --path "/test1" --probe-threshold 6', checks=self.check('probeThreshold', 6)) + self.cmd('network lb probe show -g {rg} --lb-name {lb2} -n {probe5}', checks=self.check('probeThreshold', 6)) + self.cmd('network lb probe list -g {rg} --lb-name {lb2}', checks=[ + self.check('length(@)', 2), + self.check('[1].probeThreshold', 6) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_lb_rules', location='eastus2') + def test_network_lb_rules(self, resource_group): + + self.kwargs['lb'] = 'lb1' + self.cmd('network lb create -g {rg} -n {lb}') + + self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-port 60 --backend-port 60 --protocol tcp') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') + self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name LoadBalancerFrontEnd --frontend-port 40 --backend-pool-name bap1 --backend-port 40 --protocol tcp') + + self.cmd('network lb rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 2)) + self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule1 --floating-ip true --idle-timeout 20 --load-distribution sourceip --protocol udp') + self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule2 --backend-pool-name bap2 --load-distribution sourceipprotocol') + self.cmd('network lb rule show -g {rg} --lb-name {lb} -n rule1', checks=[ + self.check('enableFloatingIP', True), + self.check('idleTimeoutInMinutes', 20), + self.check('loadDistribution', 'SourceIP'), + self.check('protocol', 'Udp') + ]) + # test generic update + self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule1 --set idleTimeoutInMinutes=5', + checks=self.check('idleTimeoutInMinutes', 5)) + + self.cmd('network lb rule show -g {rg} --lb-name {lb} -n rule2', checks=[ + self.check("backendAddressPool.contains(id, 'bap2')", True), + self.check('loadDistribution', 'SourceIPProtocol') + ]) + self.cmd('network lb rule delete -g {rg} --lb-name {lb} -n rule1') + self.cmd('network lb rule delete -g {rg} --lb-name {lb} -n rule2') + self.cmd('network lb rule list -g {rg} --lb-name {lb}', + checks=self.check('length(@)', 0)) + + @ResourceGroupPreparer(name_prefix="cli_test_network_lb_port_mapping_") + def test_network_lb_port_mapping(self): + self.kwargs.update({ + "lb": "test-lb", + "rule": "test-nat", + "pool": "test-pool", + "start": 3389, + "end": 4000, + "vnet": "test-vnet", + "subnet": "test-subnet", + "ip": "10.0.0.1", + "address": "test-address", + }) + + # prepare backend address pool + self.cmd("network lb create -n {lb} -g {rg} --sku standard") + self.cmd("network lb address-pool create -n {pool} -g {rg} --lb-name {lb}") + self.cmd("network vnet create -n {vnet} -g {rg} --subnet-name {subnet}") + self.cmd( + "network lb address-pool address add -n {address} -g {rg} --lb-name {lb} --pool-name {pool} " + "--vnet {vnet} --ip-address {ip}" + ) + self.cmd( + "network lb inbound-nat-rule create -n {rule} -g {rg} --lb-name {lb} --backend-pool-name {pool} " + "--backend-port {start} --frontend-port-range-start {start} --frontend-port-range-end {end} --protocol tcp" + ) + + self.cmd( + "network lb list-mapping -n {lb} -g {rg} --backend-pool-name {pool} --request ip={ip}", + checks=[ + self.check("inboundNatRulePortMappings[0].inboundNatRuleName", "{rule}"), + self.check("inboundNatRulePortMappings[0].backendPort", self.kwargs["start"]), + self.check("inboundNatRulePortMappings[0].frontendPort", self.kwargs["start"]), + self.check("inboundNatRulePortMappings[0].protocol", "Tcp"), + ] + ) + + +class NetworkLocalGatewayScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='local_gateway_scenario') + def test_network_local_gateway(self, resource_group): + + self.kwargs.update({ + 'lgw1': 'lgw1', + 'lgw2': 'lgw2', + 'rt': 'Microsoft.Network/localNetworkGateways' + }) + self.cmd('network local-gateway create --resource-group {rg} --name {lgw1} --gateway-ip-address 10.1.1.1 --local-address-prefixes 10.0.1.0/24 --tags foo=doo') + self.cmd('network local-gateway update --resource-group {rg} --name {lgw1} --tags foo=boo', + checks=self.check('tags.foo', 'boo')) + self.cmd('network local-gateway show --resource-group {rg} --name {lgw1}', checks=[ + self.check('type', '{rt}'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{lgw1}')]) + + self.cmd('network local-gateway create --resource-group {rg} --name {lgw2} --gateway-ip-address 10.1.1.2 --local-address-prefixes 10.0.2.0/24', + checks=self.check('localNetworkAddressSpace.addressPrefixes[0]', '10.0.2.0/24')) + + self.cmd('network local-gateway list --resource-group {rg}', + checks=self.check('length(@)', 2)) + + self.cmd('network local-gateway delete --resource-group {rg} --name {lgw1}') + self.cmd('network local-gateway list --resource-group {rg}', + checks=self.check('length(@)', 1)) + + +class NetworkNicScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_nic_scenario', location='eastus2') + def test_network_nic(self, resource_group): + + self.kwargs.update({ + 'nic': 'cli-test-nic', + 'rt': 'Microsoft.Network/networkInterfaces', + 'subnet': 'mysubnet', + 'vnet': 'myvnet', + 'nsg1': 'mynsg', + 'nsg2': 'myothernsg', + 'lb': 'mylb', + 'pri_ip': '10.0.0.15', + 'pub_ip': 'publicip1' + }) + + self.kwargs['subnet_id'] = self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}').get_output_in_json()['newVNet']['subnets'][0]['id'] + self.cmd('network nsg create -g {rg} -n {nsg1}') + self.kwargs['nsg_id'] = self.cmd('network nsg show -g {rg} -n {nsg1}').get_output_in_json()['id'] + + # test network nsg update + self.cmd('network nsg update -g {rg} -n {nsg1} --set tags.CostCenter=MyBusinessGroup') + self.cmd('network nsg show -g {rg} -n {nsg1}', checks=[ + self.check('tags.CostCenter', 'MyBusinessGroup') + ]) + self.cmd('network nsg create -g {rg} -n {nsg2}') + self.cmd('network public-ip create -g {rg} -n {pub_ip}') + self.kwargs['pub_ip_id'] = self.cmd('network public-ip show -g {rg} -n {pub_ip}').get_output_in_json()['id'] + self.cmd('network lb create -g {rg} -n {lb}') + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule1 --protocol tcp --frontend-port 100 --backend-port 100 --frontend-ip-name LoadBalancerFrontEnd') + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule2 --protocol tcp --frontend-port 200 --backend-port 200 --frontend-ip-name LoadBalancerFrontEnd') + self.kwargs['rule_ids'] = ' '.join(self.cmd('network lb inbound-nat-rule list -g {rg} --lb-name {lb} --query "[].id"').get_output_in_json()) + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') + self.kwargs['address_pool_ids'] = ' '.join(self.cmd('network lb address-pool list -g {rg} --lb-name {lb} --query "[].id"').get_output_in_json()) + + # create with minimum parameters + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet}', checks=[ + self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), + self.check('NewNIC.provisioningState', 'Succeeded') + ]) + # exercise optional parameters + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet_id} --ip-forwarding --private-ip-address {pri_ip} --public-ip-address {pub_ip} --internal-dns-name test --dns-servers 100.1.2.3 --lb-address-pools {address_pool_ids} --lb-inbound-nat-rules {rule_ids} --accelerated-networking --tags foo=doo', checks=[ + self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Static'), + self.check('NewNIC.ipConfigurations[0].privateIPAddress', '{pri_ip}'), + self.check('NewNIC.enableIPForwarding', True), + self.check('NewNIC.enableAcceleratedNetworking', True), + self.check('NewNIC.provisioningState', 'Succeeded'), + self.check('NewNIC.dnsSettings.internalDnsNameLabel', 'test'), + self.check('length(NewNIC.dnsSettings.dnsServers)', 1) + ]) + self.cmd('network lb list-nic -g {rg} -n {lb}', checks=[ + self.check('length(@)', 1) + ]) + # exercise creating with NSG + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet} --network-security-group {nsg1}', checks=[ + self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), + self.check('NewNIC.enableIPForwarding', False), + self.check("NewNIC.networkSecurityGroup.contains(id, '{nsg1}')", True), + self.check('NewNIC.provisioningState', 'Succeeded') + ]) + # exercise creating with NSG and Public IP + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet} --vnet-name {vnet} --network-security-group {nsg_id} --public-ip-address {pub_ip_id}', checks=[ + self.check('NewNIC.ipConfigurations[0].privateIPAllocationMethod', 'Dynamic'), + self.check('NewNIC.enableIPForwarding', False), + self.check("NewNIC.networkSecurityGroup.contains(id, '{nsg1}')", True), + self.check('NewNIC.provisioningState', 'Succeeded') + ]) + self.cmd('network nic list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?contains(id, 'networkInterfaces')]) == length(@)", True) + ]) + self.cmd('network nic list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network nic show --resource-group {rg} --name {nic}', checks=[ + self.check('type(@)', 'object'), + self.check('type', '{rt}'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{nic}') + ]) + self.cmd('network nic update -g {rg} -n {nic} --internal-dns-name noodle --ip-forwarding true --accelerated-networking false --dns-servers "[]" --network-security-group {nsg2}', checks=[ + self.check('enableIPForwarding', True), + self.check('enableAcceleratedNetworking', False), + self.check('dnsSettings.internalDnsNameLabel', 'noodle'), + self.check('length(dnsSettings.dnsServers)', 0), + self.check("networkSecurityGroup.contains(id, '{nsg2}')", True) + ]) + # test generic update + self.cmd('network nic update -g {rg} -n {nic} --set dnsSettings.internalDnsNameLabel=doodle --set enableIPForwarding=false', checks=[ + self.check('enableIPForwarding', False), + self.check('dnsSettings.internalDnsNameLabel', 'doodle') + ]) + + self.cmd('network nic delete --resource-group {rg} --name {nic}') + self.cmd('network nic list -g {rg}', checks=self.is_empty()) + + @ResourceGroupPreparer(name_prefix='test_network_nic_auxiliary', location='eastus') + def test_network_nic_auxiliary(self, resource_group): + self.kwargs.update({ + 'vnet': self.create_random_name('vnet', 10), + 'subnet': self.create_random_name('subnet', 10), + 'nic': self.create_random_name('nic', 10), + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network nic create -g {rg} -n {nic} --vnet-name {vnet} --subnet {subnet} --auxiliary-mode MaxConnections --auxiliary-sku A1 --accelerated-networking true --tags fastpathenabled=true', checks=[ + self.check('NewNIC.auxiliaryMode', 'MaxConnections'), + self.check('NewNIC.auxiliarySku', 'A1'), + self.check('NewNIC.enableAcceleratedNetworking', True), + self.check('NewNIC.tags.fastpathenabled', 'true') + ]) + self.cmd('network nic update -g {rg} -n {nic} --auxiliary-mode AcceleratedConnections --auxiliary-sku A2', checks=[ + self.check('auxiliaryMode', 'AcceleratedConnections'), + self.check('auxiliarySku', 'A2'), + self.check('enableAcceleratedNetworking', True), + self.check('tags.fastpathenabled', 'true') + ]) + + +class NetworkNicAppGatewayScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_nic_app_gateway', location='eastus') + def test_network_nic_app_gateway(self, resource_group): + from azure.core.exceptions import HttpResponseError + import json + + self.kwargs.update({ + 'nic': 'nic1', + 'ag': 'ag1', + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'ip': 'ip1', + 'lb': 'lb1', + 'bap': 'bap1', + 'pool1': 'appGatewayBackendPool', + 'pool2': 'bepool2', + 'config1': 'ipconfig1', + 'config2': 'ipconfig2' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1}') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.1.0/24 --default-outbound false') + self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet1} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists --timeout 120') + self.kwargs['ipaddres'] = json.dumps( + { + "ip_address": "10.20.0.69" + } + ) + self.cmd("network application-gateway address-pool update -g {rg} --gateway-name {ag} -n {pool1} --add backendAddresses \'{ipaddres}\'", checks=[ + self.check('length(backendAddresses)', 1) + ]) + self.kwargs['ipaddres'] = json.dumps( + { + "ip_address": "10.20.0.70" + } + ) + self.cmd("network application-gateway address-pool update -g {rg} --gateway-name {ag} -n {pool1} --add backendAddresses \'{ipaddres}\'", checks=[ + self.check('length(backendAddresses)', 2) + ]) + self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool2} --no-wait') + self.cmd('network lb create -g {rg} -n {lb}') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap}') + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet2} --vnet-name {vnet} --gateway-name {ag} --app-gateway-address-pools {pool1}', + checks=self.check('length(NewNIC.ipConfigurations[0].applicationGatewayBackendAddressPools)', 1)) + with self.assertRaisesRegex(HttpResponseError, 'not supported for secondary IpConfigurations'): + self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n {config2} --subnet {subnet2} --vnet-name {vnet} --gateway-name {ag} --app-gateway-address-pools {pool2}') + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config1} --gateway-name {ag} --app-gateway-address-pools {pool1} {pool2}', + checks=self.check('length(applicationGatewayBackendAddressPools)', 2)) + self.cmd('az network nic ip-config address-pool add -g {rg} --nic-name {nic} --lb-name {lb} --address-pool {bap} --ip-config-name {config1}') + + +class NetworkNicSubresourceScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_nic_subresource') + def test_network_nic_subresources(self, resource_group): + + self.kwargs['nic'] = 'nic1' + + self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') + self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name vnet1') + self.cmd('network nic ip-config list -g {rg} --nic-name {nic}', + checks=self.check('length(@)', 1)) + self.cmd('network nic ip-config show -g {rg} --nic-name {nic} -n ipconfig1', checks=[ + self.check('name', 'ipconfig1'), + self.check('privateIPAllocationMethod', 'Dynamic') + ]) + self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n ipconfig2 --make-primary', + checks=self.check('primary', True)) + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n ipconfig1 --make-primary', + checks=self.check('primary', True)) + self.cmd('network nic ip-config delete -g {rg} --nic-name {nic} -n ipconfig2') + + # test various sets + self.kwargs.update({ + 'vnet': 'vnet2', + 'subnet': 'subnet2', + 'ip': 'publicip2', + 'lb': 'lb1', + 'config': 'ipconfig1' + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.kwargs['ip_id'] = self.cmd('network public-ip show -g {rg} -n {ip}').get_output_in_json()['id'] + self.cmd('network lb create -g {rg} -n {lb}') + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule1 --protocol tcp --frontend-port 100 --backend-port 100 --frontend-ip-name LoadBalancerFrontEnd') + self.cmd('network lb inbound-nat-rule create -g {rg} --lb-name {lb} -n rule2 --protocol tcp --frontend-port 200 --backend-port 200 --frontend-ip-name LoadBalancerFrontEnd') + self.kwargs['rule1_id'] = self.cmd('network lb inbound-nat-rule show -g {rg} --lb-name {lb} -n rule1').get_output_in_json()['id'] + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap1') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n bap2') + self.kwargs['bap1_id'] = self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n bap1').get_output_in_json()['id'] + + self.kwargs['private_ip'] = '10.0.0.15' + # test ability to set load balancer IDs + # includes the default backend pool + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --lb-name {lb} --lb-address-pools {bap1_id} bap2 --lb-inbound-nat-rules {rule1_id} rule2 --private-ip-address {private_ip}', checks=[ + self.check('length(loadBalancerBackendAddressPools)', 2), + self.check('length(loadBalancerInboundNatRules)', 2), + self.check('privateIPAddress', '{private_ip}'), + self.check('privateIPAllocationMethod', 'Static')]) + # test generic update + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --set privateIPAddress=10.0.0.50', + checks=self.check('privateIPAddress', '10.0.0.50')) + + # test ability to add and remove IDs one at a time with subcommands + self.cmd('network nic ip-config inbound-nat-rule remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --inbound-nat-rule rule1') + self.cmd('network nic ip-config inbound-nat-rule add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --inbound-nat-rule rule1', + checks=self.check('length(loadBalancerInboundNatRules)', 2)) + + self.cmd('network nic ip-config address-pool remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool bap1') + self.cmd('network nic ip-config address-pool add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool bap1', + checks=self.check('length(loadBalancerBackendAddressPools)', 2)) + + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --private-ip-address "" --public-ip-address {ip_id}', checks=[ + self.check('privateIPAllocationMethod', 'Dynamic'), + self.check("publicIPAddress.contains(id, '{ip_id}')", True) + ]) + + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {config} --subnet {subnet} --vnet-name {vnet}', + checks=self.check("subnet.contains(id, '{subnet}')", True)) + + @ResourceGroupPreparer(name_prefix="cli_test_multiple_ipconfigs_update_with_asg_", location="westus") + def test_multiple_ipconfigs_update_with_asg(self): + self.kwargs.update({ + "nic_name": self.create_random_name("nic-", 8), + "vnet_name": self.create_random_name("vnet-", 12), + "subnet_name": self.create_random_name("subnet-", 12), + "asg_name": self.create_random_name("asg-", 8), + }) + + self.cmd("network vnet create -n {vnet_name} -g {rg} --subnet-name {subnet_name}") + self.cmd("network nic create -n {nic_name} -g {rg} --vnet-name {vnet_name} --subnet {subnet_name}") + self.cmd("network nic ip-config create -n ipconfig2 -g {rg} --nic-name {nic_name}") + self.kwargs["asg_id"] = self.cmd("network asg create -n {asg_name} -g {rg}").get_output_in_json()["id"] + + self.cmd("network nic ip-config update -n ipconfig1 -g {rg} --nic-name {nic_name} --asgs {asg_name}") + self.cmd( + "network nic show -n {nic_name} -g {rg}", + checks=[ + self.check("ipConfigurations | length(@)", 2), + self.check("ipConfigurations[0].name", "ipconfig1"), + self.check("ipConfigurations[1].name", "ipconfig2"), + self.check("ipConfigurations[0].applicationSecurityGroups[0].id", "{asg_id}"), + self.check("ipConfigurations[1].applicationSecurityGroups[0].id", "{asg_id}"), + ] + ) + + @ResourceGroupPreparer(name_prefix="cli_test_multiple_ipconfigs_update_with_shorthand_", location="westus") + def test_multiple_ipconfigs_remove_by_shorthand(self): + self.kwargs.update({ + "nic": self.create_random_name("nic-", 8), + "vnet": self.create_random_name("vnet-", 12), + "subnet": self.create_random_name("subnet-", 12), + }) + + self.cmd("network vnet create -n {vnet} -g {rg} --subnet-name {subnet}") + self.cmd("network nic create -n {nic} -g {rg} --vnet-name {vnet} --subnet {subnet}") + + # `ipconfg1` implicitly created + self.cmd("network nic ip-config create -n ipconfig2 -g {rg} --nic-name {nic}") + self.cmd("network nic ip-config create -n ipconfig3 -g {rg} --nic-name {nic}") + self.cmd("network nic ip-config create -n ipconfig4 -g {rg} --nic-name {nic}") + self.cmd("network nic ip-config create -n ipconfig5 -g {rg} --nic-name {nic}") + + self.cmd( + "network nic update -n {nic} -g {rg} --ip-configurations [1]=null [2]=null [4]=null", + checks=[ + self.check("ipConfigurations | length(@)", 2), + self.check("ipConfigurations[0].name", "ipconfig1"), + self.check("ipConfigurations[1].name", "ipconfig4"), + ] + ) + + @ResourceGroupPreparer(name_prefix='cli_test_nic_lb_address_pools', location='eastus2') + def test_network_nic_lb_address_pools(self, resource_group): + + self.kwargs.update({ + 'nic': 'nic1', + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'config': 'ipconfig1', + 'lb': 'lb1', + 'pool': 'pool1' + }) + + self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name subnet1') + self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name vnet1') + + self.cmd('network lb create -g {rg} -n {lb}') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {pool}') + self.kwargs['lb_pool_id'] = self.cmd('network lb address-pool show -g {rg} --lb-name {lb} -n {pool}').get_output_in_json()['id'] + + self.cmd('network nic ip-config address-pool add -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool {pool}', + checks=self.check('length(loadBalancerBackendAddressPools)', 1)) + self.cmd('network nic ip-config address-pool remove -g {rg} --lb-name {lb} --nic-name {nic} --ip-config-name {config} --address-pool {pool}') + self.cmd('network nic ip-config address-pool add -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {lb_pool_id}', + checks=self.check('length(loadBalancerBackendAddressPools)', 1)) + self.cmd('network nic ip-config address-pool remove -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {lb_pool_id}') + + @ResourceGroupPreparer(name_prefix='cli_test_nic_ag_address_pools') + def test_network_nic_ag_address_pools(self, resource_group): + + self.kwargs.update({ + 'nic': 'nic1', + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'config': 'ipconfig1', + 'ag': 'ag1', + 'pool': 'pool1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1}') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.1.0/24 --default-outbound false') + self.cmd('network application-gateway create -g {rg} -n {ag} --vnet-name {vnet} --subnet {subnet1} --priority 1001 --no-wait') + self.cmd('network application-gateway wait -g {rg} -n {ag} --exists --timeout 120') + self.cmd('network application-gateway address-pool create -g {rg} --gateway-name {ag} -n {pool} --no-wait') + self.kwargs['ag_pool_id'] = self.cmd('network application-gateway address-pool show -g {rg} --gateway-name {ag} -n {pool}').get_output_in_json()['id'] + + self.cmd('network nic create -g {rg} -n {nic} --subnet {subnet2} --vnet-name {vnet}') + + self.cmd('network nic ip-config address-pool add -g {rg} --gateway-name {ag} --nic-name {nic} --ip-config-name {config} --address-pool {pool}', + checks=self.check('length(applicationGatewayBackendAddressPools)', 1)) + self.cmd('network nic ip-config address-pool remove -g {rg} --gateway-name {ag} --nic-name {nic} --ip-config-name {config} --address-pool {pool}') + self.cmd('network nic ip-config address-pool add -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {ag_pool_id}', + checks=self.check('length(applicationGatewayBackendAddressPools)', 1)) + self.cmd('network nic ip-config address-pool remove -g {rg} --nic-name {nic} --ip-config-name {config} --address-pool {ag_pool_id}') + + @ResourceGroupPreparer(name_prefix='cli_test_nic_ip_config_private_ip_address_prefix_length') + def test_network_nic_nic_ip_config_private_ip_address_prefix_length(self, resource_group): + self.kwargs.update({ + 'nic': self.create_random_name('nic', 10), + 'vnet': self.create_random_name('vnet', 10), + 'subnet': self.create_random_name('subnet', 10), + 'config1': self.create_random_name('config', 10), + 'config2': self.create_random_name('config', 10) + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet} --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') + self.cmd('network nic create -g {rg} -n {nic} --vnet-name {vnet} --subnet {subnet} --accelerated-networking true ') + self.cmd('network nic ip-config create -g {rg} -n {config1} --nic-name {nic} --private-ip-address-version IPv4 --private-ip-address-prefix-length 28 --make-primary false', checks=[ + self.check('privateIPAddressPrefixLength', 28) + ]) + + self.cmd('network nic ip-config create -g {rg} -n {config2} --nic-name {nic} --private-ip-address-version IPv4 ', checks=[ + self.check('privateIPAddressPrefixLength', None) + ]) + self.cmd('network nic ip-config update -g {rg} -n {config2} --nic-name {nic} --private-ip-address-prefix-length 28', checks=[ + self.check('privateIPAddressPrefixLength', 28) + ]) + + +class NetworkNicConvenienceCommandsScenarioTest(ScenarioTest): + + @AllowLargeResponse(size_kb=99999) + @ResourceGroupPreparer(name_prefix='cli_nic_convenience_test') + def test_network_nic_convenience_commands(self, resource_group): + self.kwargs.update({ + 'vm': 'conveniencevm1', + 'subnet': 'subnet1', + 'vnet': 'vnet1' + }) + + self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --admin-username myusername --admin-password aBcD1234!@#$ --authentication-type password --subnet {subnet} --vnet-name {vnet} --nsg-rule None') + + # Disable default outbound access + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') + + self.kwargs['nic_id'] = self.cmd('vm show -g {rg} -n {vm} --query "networkProfile.networkInterfaces[0].id"').get_output_in_json() + self.cmd('network nic list-effective-nsg --ids {nic_id}', + checks=self.greater_than('length(@)', 0)) + self.cmd('network nic show-effective-route-table --ids {nic_id}', + checks=self.greater_than('length(@)', 0)) + self.cmd('network nic show-effective-route-table --ids {nic_id} -o table') + + +class NetworkExtendedNSGScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_extended_nsg') + def test_network_extended_nsg(self, resource_group): + + self.kwargs.update({ + 'nsg': 'nsg1', + 'rule': 'rule1' + }) + self.cmd('network nsg create --name {nsg} -g {rg}') + self.cmd('network nsg rule create --access allow --destination-address-prefixes 10.0.0.0/24 11.0.0.0/24 --direction inbound --nsg-name {nsg} -g {rg} --source-address-prefixes * -n {rule} --source-port-ranges 700-900 1000-1100 --priority 1000', checks=[ + self.check('length(destinationAddressPrefixes)', 2), + self.check('destinationAddressPrefix', None), + self.check('length(sourceAddressPrefixes)', 0), + self.check('sourceAddressPrefix', '*'), + self.check('length(sourcePortRanges)', 2), + self.check('sourcePortRange', None), + self.check('length(destinationPortRanges)', 0), + self.check('destinationPortRange', '80') + ]) + self.cmd('network nsg rule update --destination-address-prefixes Internet --nsg-name {nsg} -g {rg} --source-address-prefixes 10.0.0.0/24 11.0.0.0/24 -n {rule} --source-port-ranges * --destination-port-ranges 500-1000 2000 3000', checks=[ + self.check('length(destinationAddressPrefixes)', 0), + self.check('destinationAddressPrefix', 'Internet'), + self.check('length(sourceAddressPrefixes)', 2), + self.check('sourceAddressPrefix', None), + self.check('length(sourcePortRanges)', 0), + self.check('sourcePortRange', '*'), + self.check('length(destinationPortRanges)', 3), + self.check('destinationPortRange', None) + ]) + + +class NetworkSecurityGroupScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_nsg') + def test_network_nsg(self, resource_group): + + self.kwargs.update({ + 'nsg': 'test-nsg1', + 'rule': 'web', + 'rt': 'Microsoft.Network/networkSecurityGroups' + }) + + self.cmd('network nsg create --name {nsg} -g {rg} --tags foo=doo') + self.cmd('network nsg rule create --access allow --destination-address-prefixes 1234 --direction inbound --nsg-name {nsg} --protocol * -g {rg} --source-address-prefixes 789 -n {rule} --source-port-ranges * --destination-port-ranges 4444 --priority 1000') + + self.cmd('network nsg list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True) + ]) + self.cmd('network nsg list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network nsg show --resource-group {rg} --name {nsg}', checks=[ + self.check('type(@)', 'object'), + self.check('type', '{rt}'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{nsg}') + ]) + # Test for the manually added nsg rule + self.cmd('network nsg rule list --resource-group {rg} --nsg-name {nsg}', checks=[ + self.check('type(@)', 'array'), + self.check('length(@)', 1), + self.check("length([?resourceGroup == '{rg}']) == length(@)", True) + ]) + self.cmd('network nsg rule list --resource-group {rg} --nsg-name {nsg} -o table') + self.cmd('network nsg rule show --resource-group {rg} --nsg-name {nsg} --name {rule}', checks=[ + self.check('type(@)', 'object'), + self.check('resourceGroup', '{rg}'), + self.check('name', '{rule}') + ]) + + self.kwargs.update({ + 'access': 'DENY', + 'prefix': '111', + 'dir': 'Outbound', + 'protocol': 'Tcp', + 'ports': '1234-1235', + 'desc': 'greatrule', + 'priority': 888 + }) + self.cmd('network nsg rule update -g {rg} --nsg-name {nsg} -n {rule} --direction {dir} --access {access} --destination-address-prefixes {prefix} --protocol {protocol} --source-address-prefixes {prefix} --source-port-ranges {ports} --destination-port-ranges {ports} --priority {priority} --description {desc}', checks=[ + self.check('access', 'Deny'), + self.check('direction', '{dir}'), + self.check('destinationAddressPrefix', '{prefix}'), + self.check('protocol', '{protocol}'), + self.check('sourceAddressPrefix', '{prefix}'), + self.check('sourcePortRange', '{ports}'), + self.check('priority', '{priority}'), + self.check('description', '{desc}') + ]) + + # test generic update + self.cmd('network nsg rule update -g {rg} --nsg-name {nsg} -n {rule} --set description="cool"', + checks=self.check('description', 'cool')) + + self.kwargs.update({ + 'nsg2': 'test-nsg2', + 'asg': 'test-asg1', + 'asg2': 'test-asg2', + 'rule2': 'test-rule2', + 'prefix': '1234', + }) + # test --destination-asgs in nsg rule + self.cmd('network nsg create --name {nsg2} -g {rg}') + self.cmd('network asg create --name {asg} -g {rg}') + self.cmd('network asg create --name {asg2} -g {rg}') + self.cmd('network nsg rule create -g {rg} --nsg-name {nsg2} -n {rule2} --priority 500 --source-address-prefixes Internet --destination-port-ranges 80 8080 --destination-asgs {asg} --access Allow --protocol Tcp', + checks=[self.check('name', '{rule2}'), + self.check('ends_with(@.destinationApplicationSecurityGroups[0].id, `/{asg}`)', True)]) + self.cmd('network nsg rule update -g {rg} --nsg-name {nsg2} -n {rule2} --destination-asgs {asg2}', + checks=[self.check('name', '{rule2}'), + self.check('ends_with(@.destinationApplicationSecurityGroups[0].id, `/{asg2}`)', True)]) + self.cmd('network nsg rule update -g {rg} --nsg-name {nsg2} -n {rule2} --destination-asgs "" --destination-address-prefix {prefix}', + checks=[self.check('name', '{rule2}'), + self.check('destinationApplicationSecurityGroups', None)]) + + self.cmd('network nsg rule delete --resource-group {rg} --nsg-name {nsg} --name {rule}') + self.cmd('network nsg rule delete --resource-group {rg} --nsg-name {nsg2} --name {rule2}') + # Delete the network security group + self.cmd('network nsg delete --resource-group {rg} --name {nsg}') + self.cmd('network nsg delete --resource-group {rg} --name {nsg2}') + # Expecting no results as we just deleted the only security group in the resource group + self.cmd('network nsg list --resource-group {rg}', checks=self.is_empty()) + + +class NetworkRouteTableOperationScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_route_table') + def test_network_route_table_operation(self, resource_group): + + self.kwargs.update({ + 'table': 'cli-test-route-table', + 'route': 'my-route', + 'rt': 'Microsoft.Network/routeTables' + }) + + self.cmd('network route-table create -n {table} -g {rg} --tags foo=doo', + checks=self.check('tags.foo', 'doo')) + self.cmd('network route-table update -n {table} -g {rg} --tags foo=boo --disable-bgp-route-propagation', checks=[ + self.check('tags.foo', 'boo') + ]) + self.cmd('network route-table route create --address-prefix 10.0.5.0/24 -n {route} -g {rg} --next-hop-type None --route-table-name {table}') + + self.cmd('network route-table list', + checks=self.check('type(@)', 'array')) + self.cmd('network route-table list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check('length(@)', 1), + self.check('[0].name', '{table}'), + self.check('[0].type', '{rt}') + ]) + self.cmd('network route-table show --resource-group {rg} --name {table}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{table}'), + self.check('type', '{rt}') + ]) + self.cmd('network route-table route list --resource-group {rg} --route-table-name {table}', + checks=self.check('type(@)', 'array')) + self.cmd('network route-table route show --resource-group {rg} --route-table-name {table} --name {route}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{route}'), + ]) + # test route-table route update + self.cmd('network route-table route update -g {rg} -n {route} --route-table-name {table} --next-hop-type VirtualNetworkGateway' , checks=[ + self.check('nextHopType', 'VirtualNetworkGateway') + ]) + + self.cmd('network route-table route delete --resource-group {rg} --route-table-name {table} --name {route}') + self.cmd('network route-table route list --resource-group {rg} --route-table-name {table}', checks=self.is_empty()) + self.cmd('network route-table delete --resource-group {rg} --name {table}') + self.cmd('network route-table list --resource-group {rg}', checks=self.is_empty()) + + +class NetworkVNetScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_vnet_test') + def test_network_vnet(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'rt': 'Microsoft.Network/virtualNetworks' + }) + + self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ + self.check('newVNet.provisioningState', 'Succeeded'), + self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16'), + self.check('newVNet.subnets[0].privateEndpointNetworkPolicies', 'Disabled') + ]) + self.cmd('network vnet check-ip-address -g {rg} -n {vnet} --ip-address 10.0.0.50', + checks=self.check('available', True)) + + self.cmd('network vnet check-ip-address -g {rg} -n {vnet} --ip-address 10.0.0.0', + checks=self.check('available', False)) + + self.cmd('network vnet list', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True) + ]) + self.cmd('network vnet list --resource-group {rg}', checks=[ + self.check('type(@)', 'array'), + self.check("length([?type == '{rt}']) == length(@)", True), + ]) + self.cmd("network vnet list -o table") + self.cmd('network vnet show --resource-group {rg} --name {vnet}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{vnet}'), + self.check('type', '{rt}') + ]) + self.kwargs['prefixes'] = '20.0.0.0/16 10.0.0.0/16' + self.cmd('network vnet update --resource-group {rg} --name {vnet} --address-prefixes {prefixes} --dns-servers 1.2.3.4', checks=[ + self.check('length(addressSpace.addressPrefixes)', 2), + self.check('dhcpOptions.dnsServers[0]', '1.2.3.4') + ]) + self.cmd('network vnet update -g {rg} -n {vnet} --dns-servers null', checks=[ + self.check('length(addressSpace.addressPrefixes)', 2), + self.check('dhcpOptions.dnsServers', []) + ]) + + # test generic update + self.cmd('network vnet update --resource-group {rg} --name {vnet} --set addressSpace.addressPrefixes[0]="20.0.0.0/24"', + checks=self.check('addressSpace.addressPrefixes[0]', '20.0.0.0/24')) + + self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 20.0.0.0/24 --default-outbound false') + self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', + checks=self.check('type(@)', 'array')) + self.cmd('network vnet subnet show --resource-group {rg} --vnet-name {vnet} --name {subnet}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{subnet}'), + ]) + + self.cmd('network vnet subnet delete --resource-group {rg} --vnet-name {vnet} --name {subnet}') + self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', + checks=self.check("length([?name == '{subnet}'])", 0)) + + self.cmd('network vnet list --resource-group {rg}', + checks=self.check("length([?name == '{vnet}'])", 1)) + self.cmd('network vnet delete --resource-group {rg} --name {vnet}') + self.cmd('network vnet list --resource-group {rg}', checks=self.is_empty()) + + @live_only() + @ResourceGroupPreparer(name_prefix='cli_vnet_with_ipam_pool_test', location='westus') + @AllowLargeResponse(size_kb=99999) + def test_network_vnet_subnet_with_ipam_pool(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'rg': resource_group, + 'location': resource_group_location, + 'manager': 'manager1', + 'pool': 'pool1', + 'vnet': 'vnet1', + 'subnet': 'subnet1' + }) + self.cmd('extension add -n virtual-network-manager') + self.kwargs['sub_id'] = self.get_subscription_id() + self.cmd('network manager create -g {rg} -n {manager} -l {location} --scope-accesses "SecurityAdmin" "Connectivity" --network-manager-scopes subscriptions="/subscriptions/{sub_id}"') + self.kwargs['pool_id'] = self.cmd('network manager ipam-pool create --manager-name {manager} -g {rg} --name {pool} --address-prefix 10.1.0.0/16').get_output_in_json()['id'] + + self.cmd('network vnet create -g {rg} -n {vnet} --ipam-allocations [0].id={pool_id} [0].number-of-ip-addresses=10', checks=[ + self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].id', '{pool_id}'), + self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].numberOfIpAddresses', 10), + self.check('newVNet.addressSpace.ipamPoolPrefixAllocations[0].resourceGroup', '{rg}') + ]) + + self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet} --ipam-allocations [0].id={pool_id} [0].number-of-ip-addresses=5', checks=[ + self.check('ipamPoolPrefixAllocations[0].id', '{pool_id}'), + self.check('ipamPoolPrefixAllocations[0].numberOfIpAddresses', 5), + self.check('ipamPoolPrefixAllocations[0].resourceGroup', '{rg}') + ]) + + @ResourceGroupPreparer(name_prefix='cli_vnet_with_subnet_nsg_test') + def test_network_vnet_with_subnet_nsg(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'nsg': 'nsg', + 'rt': 'Microsoft.Network/virtualNetworks', + 'prefixes': '20.0.0.0/16 10.0.0.0/16' + }) + result = self.cmd('network nsg create --resource-group {rg} --name {nsg}').get_output_in_json() + self.kwargs['nsg_id'] = result['NewNSG']['id'] + self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefixes {prefixes} ' + '--subnet-name {subnet} --subnet-prefixes 20.0.0.0/24 --nsg {nsg}') + self.cmd('network vnet subnet list --resource-group {rg} --vnet-name {vnet}', + checks=self.check('type(@)', 'array')) + self.cmd('network vnet subnet show --resource-group {rg} --vnet-name {vnet} --name {subnet}', checks=[ + self.check('type(@)', 'object'), + self.check('name', '{subnet}'), + self.check('networkSecurityGroup.id', '{nsg_id}') + ]) + + self.cmd('network vnet subnet delete --resource-group {rg} --vnet-name {vnet} --name {subnet}') + + @ResourceGroupPreparer(name_prefix='cli_vnet_test') + def test_network_vnet_list_available_ips(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'rt': 'Microsoft.Network/virtualNetworks', + 'rg': resource_group + }) + + self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ + self.check('newVNet.provisioningState', 'Succeeded'), + self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16') + ]) + self.kwargs['prefixes'] = '20.0.0.0/16 10.0.0.0/16' + self.cmd('network vnet update --resource-group {rg} --name {vnet} --address-prefixes {prefixes} --dns-servers 1.2.3.4', checks=[ + self.check('length(addressSpace.addressPrefixes)', 2), + self.check('dhcpOptions.dnsServers[0]', '1.2.3.4') + ]) + + self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 20.0.0.0/24 --default-outbound false') + + self.cmd('network vnet list-available-ips -g {rg} --name {vnet}', checks=[ + self.check('length(@)', 5) + ]) + + @ResourceGroupPreparer(name_prefix='cli_vnet_with_bgp_community') + def test_network_vnet_with_bgp_community(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + }) + + self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default --bgp-community "12076:20000"', checks=[ + self.check('newVNet.bgpCommunities.regionalCommunity', '12076:50006'), + self.check('newVNet.bgpCommunities.virtualNetworkCommunity', '12076:20000') + ]) + + self.cmd('network vnet update --resource-group {rg} --name {vnet} --bgp-community "12076:20001"', checks=[ + self.check('bgpCommunities.regionalCommunity', '12076:50006'), + self.check('bgpCommunities.virtualNetworkCommunity', '12076:20001') + ]) + + @ResourceGroupPreparer(name_prefix='cli_vnet_with_encryption') + def test_network_vnet_with_encryption(self, resource_group): + self.kwargs.update({ + 'allowUnencrypted': 'AllowUnencrypted', + 'dropUnencrypted': 'DropUnencrypted', + }) + # only create with --enable-encryption and --encryption-enforcement-policy + self.cmd('network vnet create --address-prefixes 10.0.0.0/16 -n MyVnet1 -g {rg} --subnet-name Mysubnet --subnet-prefixes 10.0.0.0/24 --enable-encryption true --encryption-enforcement-policy allowUnencrypted') + self.cmd('network vnet create --address-prefixes 10.1.0.0/16 -n MyVnet2 -g {rg} --subnet-name MySubnet --subnet-prefixes 10.1.0.0/24 --enable-encryption true --encryption-enforcement-policy dropUnencrypted') + self.cmd('network vnet show -n MyVnet1 -g {rg}', checks=[ + self.check('encryption.enabled', True), + self.check('encryption.enforcement', '{allowUnencrypted}'), + ]) + self.cmd('network vnet show -n MyVnet2 -g {rg}', checks=[ + self.check('encryption.enabled', True), + self.check('encryption.enforcement', '{dropUnencrypted}'), + ]) + # only create with --enable-encryption + self.cmd('network vnet create --address-prefixes 10.2.0.0/16 --name MyVnet3 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.2.0.0/24 --enable-encryption false') + self.cmd('network vnet create --address-prefixes 10.3.0.0/16 --name MyVnet4 --resource-group {rg} --subnet-name MySubnet --subnet-prefixes 10.3.0.0/24 --enable-encryption true', expect_failure=True) + self.cmd('network vnet update --name MyVnet3 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy allowUnencrypted', checks=[ + self.check('encryption.enabled', True), + self.check('encryption.enforcement', '{allowUnencrypted}'), + ]) + self.cmd('network vnet update --name MyVnet3 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy dropUnencrypted', checks=[ + self.check('encryption.enabled', True), + self.check('encryption.enforcement', '{dropUnencrypted}'), + ]) + # create without encryption + self.cmd('network vnet create --address-prefixes 10.5.0.0/16 --name MyVnet6 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.5.0.0/24') + self.cmd('network vnet create --address-prefixes 10.6.0.0/16 --name MyVnet7 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.6.0.0/24') + self.cmd('network vnet create --address-prefixes 10.7.0.0/16 --name MyVnet8 --resource-group {rg} --subnet-name Mysubnet --subnet-prefixes 10.7.0.0/24') + # update + self.cmd('network vnet update --name MyVnet6 --resource-group {rg} --enable-encryption true', expect_failure=True) + self.cmd('network vnet update --name MyVnet7 --resource-group {rg} --encryption-enforcement-policy dropUnencrypted', expect_failure=True) + self.cmd('network vnet update --name MyVnet8 --resource-group {rg} --enable-encryption true --encryption-enforcement-policy dropUnencrypted', checks=[ + self.check('encryption.enabled', True), + self.check('encryption.enforcement', '{dropUnencrypted}'), + ]) + # vnet peering + self.cmd('network vnet peering create --name MyVnet1ToMyVnet2 --remote-vnet MyVnet2 --resource-group {rg} --vnet-name MyVnet1') + self.cmd('network vnet peering show --name MyVnet1ToMyVnet2 --vnet-name MyVnet1 -g {rg}', checks=[ + self.check('remoteVirtualNetworkEncryption.enabled', True), + self.check('remoteVirtualNetworkEncryption.enforcement', '{dropUnencrypted}'), + ]) + + @ResourceGroupPreparer(name_prefix='cli_vnet_subnet_test') + def test_network_vnet_subnet_list_available_ips(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'rt': 'Microsoft.Network/virtualNetworks', + 'rg': resource_group + }) + + self.cmd('network vnet create --resource-group {rg} --name {vnet} --subnet-name default', checks=[ + self.check('newVNet.provisioningState', 'Succeeded'), + self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16') + ]) + + self.cmd( + 'network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix 10.0.1.0/24 --default-outbound false') + + self.cmd('network vnet subnet list-available-ips -g {rg} --vnet-name {vnet} --name {subnet}', checks=[ + self.check('length(@)', 5) + ]) + +class NetworkVNetCachingScenarioTest(ScenarioTest): + @live_only() + @ResourceGroupPreparer(name_prefix='cli_test_vnet_ids_query') + def test_network_vnet_ids_query(self, resource_group): + import json + + # This test ensures that --query works with --ids + self.kwargs.update({ + 'vnet1': 'vnet1', + 'vnet2': 'vnet2' + }) + self.kwargs['id1'] = self.cmd('network vnet create -g {rg} -n {vnet1}').get_output_in_json()['newVNet']['id'] + self.kwargs['id2'] = self.cmd('network vnet create -g {rg} -n {vnet2}').get_output_in_json()['newVNet']['id'] + self.cmd('network vnet show --ids {id1} {id2} --query "[].name"', checks=[ + self.check('length(@)', 2), + self.check("contains(@, '{vnet1}')", True), + self.check("contains(@, '{vnet2}')", True), + ]) + + # This test ensures you can pipe a list of IDs to --ids + self.kwargs['ids'] = self.cmd('network vnet list -g {rg} --query "[].id" -otsv').output + self.cmd('network vnet show --ids {ids}', + checks=self.check('length(@)', 2)) + + # This test ensures you can pipe JSON output to --ids Windows-style + # ensures a single JSON string has its ids parsed out + self.kwargs['json'] = json.dumps(self.cmd('network vnet list -g {rg}').get_output_in_json()) + self.cmd('network vnet show --ids \'{json}\'', + checks=self.check('length(@)', 2)) + + # This test ensures you can pipe JSON output to --ids bash-style + # ensures that a JSON string where each line is interpretted individually + # is reassembled and treated as a single json string + json_obj = self.cmd('network vnet list -g {rg}').get_output_in_json() + for item in json_obj: + del item['etag'] + split_json = json.dumps(json_obj, indent=4).split() + split_string = ' '.join(split_json).replace('{', '{{').replace('}', '}}').replace('"', '\\"') + self.cmd('network vnet show --ids {}'.format(split_string), + checks=self.check('length(@)', 2)) + + +class NetworkVNetPeeringScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_vnet_flowtimeout', location='centraluseuap') + def test_network_vnet_flowtimeout(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'time': 10, + 'time1': 20, + }) + + self.cmd('network vnet create -g {rg} -n vnet --flowtimeout {time}', + checks=self.check('newVNet.flowTimeoutInMinutes', '{time}')) + self.cmd('network vnet update -g {rg} -n vnet --flowtimeout {time1}', + checks=self.check('flowTimeoutInMinutes', '{time1}')) + + @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering') + def test_network_vnet_peering(self, resource_group): + + # create two vnets with non-overlapping prefixes + self.cmd('network vnet create -g {rg} -n vnet1') + self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name GatewaySubnet --address-prefix 11.0.0.0/16 --subnet-prefix 11.0.0.0/24') + # create supporting resources for gateway + self.cmd('network public-ip create -g {rg} -n ip1') + ip_id = self.cmd('network public-ip show -g {rg} -n ip1 --query id').get_output_in_json() + vnet_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() + + self.kwargs.update({ + 'ip_id': ip_id, + 'vnet_id': vnet_id + }) + # create the gateway on vnet2 + self.cmd('network vnet-gateway create -g {rg} -n gateway1 --public-ip-address {ip_id} --vnet {vnet_id} --tags foo=doo --sku VpnGw1') + + vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() + vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() + + self.kwargs.update({ + 'vnet1_id': vnet1_id, + 'vnet2_id': vnet2_id + }) + # set up gateway sharing from vnet1 to vnet2. test that remote-vnet indeed accepts name or id. + self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --allow-gateway-transit', checks=[ + self.check('allowGatewayTransit', True), + self.check('remoteVirtualNetwork.id', '{vnet1_id}'), + self.check('peeringState', 'Initiated') + ]) + self.cmd('network vnet peering create -g {rg} -n peering1 --vnet-name vnet1 --remote-vnet vnet2 --use-remote-gateways --allow-forwarded-traffic', checks=[ + self.check('useRemoteGateways', True), + self.check('remoteVirtualNetwork.id', '{vnet2_id}'), + self.check('peeringState', 'Connected'), + self.check('allowVirtualNetworkAccess', False) + ]) + self.cmd('network vnet peering show -g {rg} -n peering1 --vnet-name vnet1', + checks=self.check('name', 'peering1')) + self.cmd('network vnet peering list -g {rg} --vnet-name vnet2', checks=[ + self.check('[0].name', 'peering2'), + self.check('length(@)', 1) + ]) + self.cmd('network vnet peering update -g {rg} -n peering1 --vnet-name vnet1 --set useRemoteGateways=false', checks=[ + self.check('useRemoteGateways', False), + self.check('allowForwardedTraffic', True) + ]) + self.cmd('network vnet peering delete -g {rg} -n peering1 --vnet-name vnet1') + self.cmd('network vnet peering list -g {rg} --vnet-name vnet1', + checks=self.is_empty()) + # must delete the second peering and the gateway or the resource group delete will fail + self.cmd('network vnet peering delete -g {rg} -n peering2 --vnet-name vnet2') + self.cmd('network vnet-gateway delete -g {rg} -n gateway1') + + @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering') + def test_network_vnet_peering_sync(self, resource_group): + + # create two vnets with non-overlapping prefixes + self.cmd('network vnet create -g {rg} -n vnet1') + self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name GatewaySubnet --address-prefix 11.0.0.0/16 --subnet-prefix 11.0.0.0/24') + # create supporting resources for gateway + self.cmd('network public-ip create -g {rg} -n ip1') + ip_id = self.cmd('network public-ip show -g {rg} -n ip1 --query id').get_output_in_json() + vnet_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() + + self.kwargs.update({ + 'ip_id': ip_id, + 'vnet_id': vnet_id + }) + # create the gateway on vnet2 + self.cmd('network vnet-gateway create -g {rg} -n gateway1 --public-ip-address {ip_id} --vnet {vnet_id} --tags foo=doo --sku VpnGw1') + + vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() + vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() + + self.kwargs.update({ + 'vnet1_id': vnet1_id, + 'vnet2_id': vnet2_id + }) + # set up gateway sharing from vnet1 to vnet2. test that remote-vnet indeed accepts name or id. + self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --allow-gateway-transit', checks=[ + self.check('allowGatewayTransit', True), + self.check('remoteVirtualNetwork.id', '{vnet1_id}'), + self.check('peeringState', 'Initiated') + ]) + self.cmd('network vnet peering create -g {rg} -n peering1 --vnet-name vnet1 --remote-vnet vnet2 --use-remote-gateways --allow-forwarded-traffic', checks=[ + self.check('useRemoteGateways', True), + self.check('remoteVirtualNetwork.id', '{vnet2_id}'), + self.check('peeringState', 'Connected'), + self.check('allowVirtualNetworkAccess', False) + ]) + + self.cmd('network vnet peering sync -g {rg} -n peering1 --vnet-name vnet1') + + @ResourceGroupPreparer(name_prefix='cli_test_vnet_peering_with_params') + def test_network_vnet_peering_with_params(self, resource_group): + + # create two vnets with non-overlapping prefixes + self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name Subnet1 --address-prefixes 10.0.0.0/27 10.0.1.0/27 --subnet-prefixes 10.0.0.0/27') + self.cmd('network vnet create -g {rg} -n vnet2 --subnet-name Subnet2 --address-prefixes 20.0.0.0/27 --subnet-prefixes 20.0.0.0/27') + + vnet1_id = self.cmd('network vnet show -g {rg} -n vnet1 --query id').get_output_in_json() + vnet2_id = self.cmd('network vnet show -g {rg} -n vnet2 --query id').get_output_in_json() + + self.kwargs.update({ + 'vnet1_id': vnet1_id, + 'vnet2_id': vnet2_id + }) + self.cmd('network vnet peering create -g {rg} -n peering2 --vnet-name vnet2 --remote-vnet {vnet1_id} --peer-complete-vnets false --local-subnet-names Subnet2 --remote-subnet-names Subnet1 --allow-vnet-access --allow-forwarded-traffic --allow-gateway-transit false --use-remote-gateways false --enable-only-ipv6 false', checks=[ + self.check('allowForwardedTraffic', True), + self.check('allowGatewayTransit', False), + self.check('allowVirtualNetworkAccess', True), + self.check('useRemoteGateways', False), + self.check('peerCompleteVnets', False), + self.check('enableOnlyIPv6Peering', False), + self.check('remoteVirtualNetwork.id', '{vnet1_id}'), + self.check('remoteSubnetNames[0]', 'Subnet1'), + self.check('localSubnetNames[0]', 'Subnet2'), + ]) + self.cmd( + "network vnet peering update -n peering2 -g {rg} --vnet-name vnet2 --remote-vnet {vnet1_id} " + "--allow-vnet-access false --allow-forwarded-traffic false --allow-gateway-transit true", + checks=[ + self.check("allowForwardedTraffic", False), + self.check("allowGatewayTransit", True), + self.check("allowVirtualNetworkAccess", False), + ] + ) + + +class NetworkVpnConnectionIpSecPolicy(ScenarioTest): + @live_only() + @ResourceGroupPreparer(name_prefix='test_vpn_connection_aux_', location='westus') + @ResourceGroupPreparer(name_prefix='test_vpn_connection_aux_', location='westus', + parameter_name='aux_resource_group', subscription=AUX_SUBSCRIPTION) + def test_vpn_connection_aux(self, resource_group, aux_resource_group, resource_group_location,): + self.kwargs.update({ + 'rg': resource_group, + 'rg2': aux_resource_group, + 'location': resource_group_location, + 'aux_sub': AUX_SUBSCRIPTION, + 'vnet1': 'vnet1', + 'vnet_prefix1': '10.11.0.0/16', + 'vnet_prefix2': '10.12.0.0/16', + 'fe_sub1': 'FrontEnd', + 'fe_sub_prefix1': '10.11.0.0/24', + 'be_sub1': 'BackEnd', + 'be_sub_prefix1': '10.12.0.0/24', + 'gw_sub1': 'GatewaySubnet', + 'gw_sub_prefix1': '10.12.255.0/27', + 'gw1ip': 'pip1', + 'gw1': 'gw1', + 'gw1_sku': 'VpnGw1', + 'lgw1': 'lgw1', + 'lgw1ip': '131.107.72.22', + 'lgw1_prefix1': '10.61.0.0/16', + 'lgw1_prefix2': '10.62.0.0/16', + 'conn1': 'conn1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2}') + self.cmd( + 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {fe_sub1} --address-prefix {fe_sub_prefix1} --default-outbound false') + self.cmd( + 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {be_sub1} --address-prefix {be_sub_prefix1} --default-outbound false') + self.cmd( + 'network vnet subnet create -g {rg} --vnet-name {vnet1} -n {gw_sub1} --address-prefix {gw_sub_prefix1} --default-outbound false') + self.cmd('network public-ip create -g {rg} -n {gw1ip}') + + self.cmd( + 'network vnet-gateway create -g {rg} -l {location} -n {gw1} --public-ip-address {gw1ip} --vnet {vnet1} --sku {gw1_sku}') + self.kwargs["local_gateway_id"] = self.cmd( + 'network local-gateway create -g {rg2} -l {location} -n {lgw1} --gateway-ip-address {lgw1ip} --local-address-prefixes {lgw1_prefix1} {lgw1_prefix2} --subscription {aux_sub}').get_output_in_json()["id"] + + self.cmd( + 'network vpn-connection create -g {rg} -l {location} -n {conn1} --vnet-gateway1 {gw1} --local-gateway2 {local_gateway_id} --shared-key AzureA1b2C3', + checks=[ + self.check("resource.localNetworkGateway2.id", "{local_gateway_id}"), + ] + ) + + @ResourceGroupPreparer(name_prefix='cli_test_vpn_connection_ipsec') + def test_network_vpn_connection_ipsec(self, resource_group): + + self.kwargs.update({ + 'vnet1': 'vnet1', + 'vnet_prefix1': '10.11.0.0/16', + 'vnet_prefix2': '10.12.0.0/16', + 'fe_sub1': 'FrontEnd', + 'fe_sub_prefix1': '10.11.0.0/24', + 'be_sub1': 'BackEnd', + 'be_sub_prefix1': '10.12.0.0/24', + 'gw_sub1': 'GatewaySubnet', + 'gw_sub_prefix1': '10.12.255.0/27', + 'gw1ip': 'pip1', + 'gw1': 'gw1', + 'gw1_sku': 'VpnGw1', + 'lgw1': 'lgw1', + 'lgw1ip': '131.107.72.22', + 'lgw1_prefix1': '10.61.0.0/16', + 'lgw1_prefix2': '10.62.0.0/16', + 'conn1': 'conn1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2}') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {fe_sub1} --address-prefix {fe_sub_prefix1} --default-outbound false') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {be_sub1} --address-prefix {be_sub_prefix1} --default-outbound false') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet1} -n {gw_sub1} --address-prefix {gw_sub_prefix1} --default-outbound false') + self.cmd('network public-ip create -g {rg} -n {gw1ip}') + + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --public-ip-address {gw1ip} --vnet {vnet1} --sku {gw1_sku}') + self.cmd('network local-gateway create -g {rg} -n {lgw1} --gateway-ip-address {lgw1ip} --local-address-prefixes {lgw1_prefix1} {lgw1_prefix2}') + self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {gw1} --local-gateway2 {lgw1} --shared-key AzureA1b2C3') + self.cmd('network vpn-connection list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network vpn-connection list -g {rg} --vnet-gateway {gw1}', checks=[ + self.check('length(@)', 1) + ]) + + # test vpn connection show + self.cmd('network vpn-connection show -g {rg} -n {conn1}', checks=[ + self.check('name', 'conn1') + ]) + # test vpn connection show-device-config-script + self.cmd('network vpn-connection show-device-config-script -g {rg} -n {conn1} --vendor "Cisco" --device-family "Cisco-ISR(IOS)" --firmware-version "Cisco-ISR-15.x--IKEv2+BGP"') + self.cmd('network vpn-connection ipsec-policy add -g {rg} --connection-name {conn1} --ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 --ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 --sa-lifetime 7200 --sa-max-size 2048') + self.cmd('network vpn-connection ipsec-policy list -g {rg} --connection-name {conn1}', checks=self.check('length(@)', 1)) + self.cmd('network vpn-connection ipsec-policy clear -g {rg} --connection-name {conn1}') + self.cmd('network vpn-connection ipsec-policy list -g {rg} --connection-name {conn1}', checks=self.check('length(@)', 0)) + + +class NetworkVpnConnectionNatRule(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_vpn_connection_nat_rule') + def test_network_vpn_connection_nat_rule(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet', + 'lgw1': 'lgw1', + 'lgw1ip': '131.107.72.22', + 'lgw1_prefix1': '10.61.0.0/16', + 'lgw1_prefix2': '10.62.0.0/16', + 'conn1': 'conn1', + 'subnet': 'GatewaySubnet', + 'vg': 'vnet-gateway-name', + 'ip': 'ip-name', + 'sku': 'VpnGw2', + 'nat': 'nat-name', + 'nat1': 'nat-name1', + 'i_map': '10.4.0.0/24', + 'i_map1': '10.5.0.0/24', + 'e_map': '192.168.21.0/24', + 'e_map1': '192.168.22.0/24', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network public-ip create -g {rg} -n {ip}') + + vg = self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku} ' + '--nat-rule name={nat} mode=IngressSnat internal-mappings={i_map} external-mappings={e_map} ' + '--nat-rule name={nat1} mode=EgressSnat internal-mappings={i_map1} external-mappings={e_map1}', + checks=[self.check('length(vnetGateway.natRules)', 2)]).get_output_in_json() + + self.kwargs.update({'id': vg['vnetGateway']['natRules'][0]['id']}) + self.kwargs.update({'id1': vg['vnetGateway']['natRules'][1]['id']}) + + self.cmd('network local-gateway create -g {rg} -n {lgw1} --gateway-ip-address {lgw1ip} ' + '--local-address-prefixes {lgw1_prefix1} {lgw1_prefix2}') + self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {vg} --local-gateway2 {lgw1} ' + '--shared-key AzureA1b2C3 --ingress-nat-rule {id}', + checks=[self.check('length(resource.ingressNatRules)', 1)]) + + self.cmd('network vpn-connection delete -g {rg} -n {conn1}') + + self.cmd('network vpn-connection create -g {rg} -n {conn1} --vnet-gateway1 {vg} --local-gateway2 {lgw1} ' + '--shared-key AzureA1b2C3 --egress-nat-rule {id1}', + checks=[self.check('length(resource.egressNatRules)', 1)]) + + +class VNetGatewayManagedIdentityScenarioTest(ScenarioTest): + @ResourceGroupPreparer(location='eastus', name_prefix='test_vnet_gateway_mi') + @AllowLargeResponse(size_kb=9999) + def test_vnet_gateway_managed_identity(self, resource_group): + subscription_id = self.get_subscription_id() + self.kwargs.update({ + 'rg': resource_group, + 'identity_name': 'myUamIdentity', + 'identity_name_2': 'myUamIdentity2', + 'vnet_name': 'myVNet', + 'pip_name': 'myGWpip', + 'gateway_name': 'myTestGW', + 'subscription': subscription_id, + 'location': 'eastus' + }) + + # create managed identity 1 + identity_result = self.cmd('identity create -g {rg} -n {identity_name}', checks=[ + self.check('name', '{identity_name}'), + self.check('location', '{location}'), + self.exists('clientId'), + self.exists('principalId'), + self.exists('id') + ]).get_output_in_json() + self.kwargs['identity_id'] = identity_result['id'] + + # create managed identity 2 (for update test) + identity_result_2 = self.cmd('identity create -g {rg} -n {identity_name_2}', checks=[ + self.check('name', '{identity_name_2}'), + self.check('location', '{location}'), + self.exists('clientId'), + self.exists('principalId'), + self.exists('id') + ]).get_output_in_json() + self.kwargs['identity_id_2'] = identity_result_2['id'] + + # create vnet with subnet + self.cmd('network vnet create -g {rg} -n {vnet_name} ' + '--address-prefix 10.0.0.0/16 ' + '--subnet-name GatewaySubnet ' + '--subnet-prefix 10.0.255.0/24', checks=[ + self.check('newVNet.name', '{vnet_name}'), + self.check('newVNet.addressSpace.addressPrefixes[0]', '10.0.0.0/16'), + self.check('newVNet.subnets[0].name', 'GatewaySubnet'), + self.check('newVNet.subnets[0].addressPrefix', '10.0.255.0/24') + ]) + + # create public ip + self.cmd('network public-ip create -g {rg} -n {pip_name} ' + '--allocation-method Static ' + '--sku Standard ' + '--ip-tags FirstPartyUsage=/NonProd ' + '--zone 1 2 3', checks=[ + self.check('publicIp.name', '{pip_name}'), + self.check('publicIp.publicIPAllocationMethod', 'Static'), + self.check('publicIp.sku.name', 'Standard'), + self.check('length(publicIp.zones)', 3) + ]) + + # create vnet-gateway with user-assigned managed identity + self.cmd('network vnet-gateway create -g {rg} -n {gateway_name} ' + '--public-ip-address {pip_name} ' + '--vnet {vnet_name} ' + '--gateway-type Vpn ' + '--vpn-type RouteBased ' + '--sku VpnGw2AZ ' + '--mi-user-assigned {identity_id}', checks=[ + self.check('vnetGateway.name', '{gateway_name}'), + self.check('vnetGateway.gatewayType', 'Vpn'), + self.check('vnetGateway.vpnType', 'RouteBased'), + self.check('vnetGateway.sku.name', 'VpnGw2AZ'), + self.check('vnetGateway.sku.tier', 'VpnGw2AZ'), + self.check('vnetGateway.identity.type', 'userAssigned'), + self.exists('vnetGateway.identity.userAssignedIdentities') + ]) + + # verify identity configuration + self.cmd('network vnet-gateway show -g {rg} -n {gateway_name}', checks=[ + self.check('name', '{gateway_name}'), + self.check('identity.type', 'userAssigned'), + self.exists('identity.userAssignedIdentities') + ]) + + identity_show_result = self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ + self.check('type', 'userAssigned'), + self.exists('userAssignedIdentities') + ]).get_output_in_json() + + # Verify the first user-assigned identity details + assert self.kwargs['identity_id'] in identity_show_result['userAssignedIdentities'] + + # update vnet-gateway to use a different managed identity + # Note: VPN Gateway currently only allows one user-assigned identity at a time, + # so we need to remove the existing identity before assigning a new one + self.cmd('network vnet-gateway identity remove -g {rg} -n {gateway_name} --user-assigned', checks=[ + self.check('type', 'none') + ]) + + # Then assign the new identity + self.cmd('network vnet-gateway identity assign -g {rg} -n {gateway_name} ' + '--user-assigned {identity_id_2}', checks=[ + self.check('type', 'userAssigned'), + self.exists('userAssignedIdentities') + ]) + + # verify the identity was updated to the second identity + identity_show_result_updated = self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ + self.check('type', 'userAssigned'), + self.exists('userAssignedIdentities') + ]).get_output_in_json() + + # verify the second user-assigned identity is now configured + assert self.kwargs['identity_id_2'] in identity_show_result_updated['userAssignedIdentities'] + + # remove user-assigned identity + self.cmd('network vnet-gateway identity remove -g {rg} -n {gateway_name} --user-assigned', checks=[ + self.check('type', 'none') + ]) + + # double check identity is really deleted + self.cmd('network vnet-gateway show -g {rg} -n {gateway_name}', checks=[ + self.check('name', '{gateway_name}'), + self.check('identity.type', 'none'), + self.check('provisioningState', 'Succeeded') + ]) + + # verify identity show returns none type + self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ + self.check('type', 'none') + ]) + + # update to add identity back (testing update from none to userAssigned) + self.cmd('network vnet-gateway identity assign -g {rg} -n {gateway_name} ' + '--user-assigned {identity_id}', checks=[ + self.check('type', 'userAssigned'), + self.exists('userAssignedIdentities') + ]) + + self.cmd('network vnet-gateway identity show -g {rg} -n {gateway_name}', checks=[ + self.check('type', 'userAssigned'), + self.exists('userAssignedIdentities') + ]) + + self.cmd('network vnet-gateway delete -g {rg} -n {gateway_name}') + + self.cmd('network vnet-gateway list -g {rg}', checks=[ + self.check('length(@)', 0) + ]) + + +class VpnConnectionAuthenticationScenarioTest(ScenarioTest): + + @staticmethod + def _get_now_utc(): + import datetime + try: + from datetime import timezone + return datetime.datetime.now(timezone.utc) + except ImportError: + return datetime.datetime.utcnow() + + @staticmethod + def _format_subject_dn(common_name: str): + return "CN={}, OU=IT, O=Test Organization, L=Redmond, S=Washington, C=US".format(common_name) + + @staticmethod + def generate_ca_chain(root_cert_path, intermediate_cert_path): + """ + Generate a valid certificate chain: + Root CA -> Intermediate CA + Return: (root_key, root_cert, inter_key, inter_cert) + """ + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.primitives import hashes, serialization + from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.backends import default_backend + import datetime + + now = VpnConnectionAuthenticationScenarioTest._get_now_utc() + + os.makedirs(os.path.dirname(root_cert_path), exist_ok=True) + + # ===== Root CA ===== + root_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ) + + root_subject = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Root CA Org"), + x509.NameAttribute(NameOID.COMMON_NAME, u"Test Root CA"), + ]) + + root_public_key = root_key.public_key() + root_ski = x509.SubjectKeyIdentifier.from_public_key(root_public_key) + + root_cert = x509.CertificateBuilder().subject_name( + root_subject + ).issuer_name( + root_subject + ).public_key( + root_public_key + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + now - datetime.timedelta(minutes=5) + ).not_valid_after( + now + datetime.timedelta(days=3650) + ).add_extension( + x509.BasicConstraints(ca=True, path_length=1), + critical=True, + ).add_extension( + x509.KeyUsage( + digital_signature=True, + key_cert_sign=True, + crl_sign=True, + key_encipherment=False, + content_commitment=False, + data_encipherment=False, + key_agreement=False, + encipher_only=False, + decipher_only=False, + ), + critical=True, + ).add_extension( + root_ski, + critical=False, + ).sign(root_key, hashes.SHA256(), default_backend()) + + # Write Root cert (public only) + with open(root_cert_path, 'wb') as f: + f.write(root_cert.public_bytes(serialization.Encoding.PEM)) + + # ===== Intermediate CA (signed by Root) ===== + intermediate_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ) + + intermediate_subject = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Intermediate CA Org"), + x509.NameAttribute(NameOID.COMMON_NAME, u"Test Intermediate CA"), + ]) + + intermediate_public_key = intermediate_key.public_key() + intermediate_ski = x509.SubjectKeyIdentifier.from_public_key(intermediate_public_key) + intermediate_aki = x509.AuthorityKeyIdentifier.from_issuer_public_key(root_public_key) + + intermediate_cert = x509.CertificateBuilder().subject_name( + intermediate_subject + ).issuer_name( + root_subject + ).public_key( + intermediate_public_key + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + now - datetime.timedelta(minutes=5) + ).not_valid_after( + now + datetime.timedelta(days=1825) + ).add_extension( + x509.BasicConstraints(ca=True, path_length=0), + critical=True, + ).add_extension( + x509.KeyUsage( + digital_signature=True, + key_cert_sign=True, + crl_sign=True, + key_encipherment=False, + content_commitment=False, + data_encipherment=False, + key_agreement=False, + encipher_only=False, + decipher_only=False, + ), + critical=True, + ).add_extension( + intermediate_ski, + critical=False, + ).add_extension( + intermediate_aki, + critical=False, + ).sign(root_key, hashes.SHA256(), default_backend()) + + # Write Intermediate cert (public only) + with open(intermediate_cert_path, 'wb') as f: + f.write(intermediate_cert.public_bytes(serialization.Encoding.PEM)) + + return root_key, root_cert, intermediate_key, intermediate_cert + + except ImportError as e: + raise Exception(f"cryptography package is required. Error: {e}") + + @staticmethod + def generate_leaf_certificate(common_name, signer_key, signer_cert, is_ca=False, days=365): + """ + Generate a leaf certificate signed by signer_cert. + Return: (leaf_private_key, leaf_cert) + """ + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID, ExtendedKeyUsageOID + from cryptography.hazmat.primitives import hashes + from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.backends import default_backend + import datetime + + now = VpnConnectionAuthenticationScenarioTest._get_now_utc() + + private_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ) + + subject = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"Redmond"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Organization"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"IT"), + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + ]) + + public_key = private_key.public_key() + ski = x509.SubjectKeyIdentifier.from_public_key(public_key) + aki = x509.AuthorityKeyIdentifier.from_issuer_public_key(signer_key.public_key()) + + builder = x509.CertificateBuilder().subject_name( + subject + ).issuer_name( + signer_cert.subject + ).public_key( + public_key + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + now - datetime.timedelta(minutes=5) + ).not_valid_after( + now + datetime.timedelta(days=days) + ) + + # Leaf cert constraints + builder = builder.add_extension( + x509.BasicConstraints(ca=is_ca, path_length=None if not is_ca else 0), + critical=True, + ) + + # EKU: Both client & server auth are required for certificate auth + builder = builder.add_extension( + x509.ExtendedKeyUsage([ + ExtendedKeyUsageOID.SERVER_AUTH, + ExtendedKeyUsageOID.CLIENT_AUTH, + ]), + critical=False, + ) + + # Key usage for leaf + builder = builder.add_extension( + x509.KeyUsage( + digital_signature=True, + key_encipherment=True, + key_cert_sign=False, + crl_sign=False, + content_commitment=False, + data_encipherment=False, + key_agreement=False, + encipher_only=False, + decipher_only=False, + ), + critical=True, + ) + + builder = builder.add_extension(ski, critical=False) + builder = builder.add_extension(aki, critical=False) + + cert = builder.sign(signer_key, hashes.SHA256(), default_backend()) + return private_key, cert + + except ImportError as e: + raise Exception(f"cryptography package (>= 3.0) is required for certificate generation. " + f"Install it with: pip install 'cryptography>=3.0'. Error: {e}") + + @staticmethod + def write_pem_cert(cert, cert_path): + try: + from cryptography.hazmat.primitives import serialization + os.makedirs(os.path.dirname(cert_path), exist_ok=True) + with open(cert_path, 'wb') as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) + except ImportError as e: + raise Exception(f"cryptography package is required. Error: {e}") + + @staticmethod + def generate_outbound_pfx_with_chain(pfx_path, password, leaf_private_key, leaf_cert, chain_certs): + """ + Generate outbound PFX that includes: + - leaf cert + private key + - CA chain (intermediate + root) via 'cas' + """ + try: + from cryptography.hazmat.primitives import serialization + from cryptography.hazmat.primitives.serialization.pkcs12 import serialize_key_and_certificates, load_key_and_certificates + + os.makedirs(os.path.dirname(pfx_path), exist_ok=True) + + pfx_data = serialize_key_and_certificates( + name=b"test-vpn-outbound", + key=leaf_private_key, + cert=leaf_cert, + cas=chain_certs, # IMPORTANT: include CA chain + encryption_algorithm=serialization.BestAvailableEncryption(password.encode()) + ) + + with open(pfx_path, 'wb') as f: + f.write(pfx_data) + + _k, _c, _addl = load_key_and_certificates(pfx_data, password.encode()) + + except ImportError as e: + raise Exception(f"cryptography package is required for PFX generation. Error: {e}") + + @live_only() + @ResourceGroupPreparer(location='eastus', name_prefix='test_vpn_connection_auth') + @KeyVaultPreparer(name_prefix='cli-mi-vpn-cert-kv-', sku='premium', + additional_params='--enable-rbac-authorization false') + @AllowLargeResponse(size_kb=9999) + def test_vpn_connection_authentication(self, resource_group): + import json + import tempfile + import shutil + + subscription_id = self.get_subscription_id() + self.kwargs.update({ + 'rg': resource_group, + 'location': 'eastus', + 'vnet_name': 'myVNet', + 'vnet_gateway_name': 'myVnetGateway', + 'local_gateway_name': 'myLocalGateway', + 'pip_name': 'myGatewayIP', + 'connection_name': 'myVpnConnection', + 'identity_name': 'myIdentity', + 'cert_name': 'vpn-gateway-cert', + 'shared_key': 'Abc123', + 'subscription': subscription_id + }) + + # create temporary directory for test certificates + temp_dir = tempfile.mkdtemp() + outbound_cert_path = os.path.join(temp_dir, 'VpnGatewayoutboundcert.pfx') + + # public cert files for inbound chain (PEM with BEGIN/END CERT) + inbound_cert1_path = os.path.join(temp_dir, 'VpnGatewayInboundCert.cer') # Intermediate CA (public) + inbound_cert2_path = os.path.join(temp_dir, 'VpnGatewayAuthCert.cer') # Root CA (public) + + try: + root_key, root_cert, inter_key, inter_cert = self.generate_ca_chain( + root_cert_path=inbound_cert2_path, # Root CA public + intermediate_cert_path=inbound_cert1_path # Intermediate CA public + ) + + outbound_cn = "test-vpn-outbound.local" + outbound_key, outbound_leaf_cert = self.generate_leaf_certificate( + common_name=outbound_cn, + signer_key=inter_key, + signer_cert=inter_cert + ) + self.generate_outbound_pfx_with_chain( + pfx_path=outbound_cert_path, + password="AAAAAAAA", + leaf_private_key=outbound_key, + leaf_cert=outbound_leaf_cert, + chain_certs=[inter_cert, root_cert] # include chain + ) + + # generate inbound leaf cert (signed by Intermediate) + inbound_cn = "test-vpn-inbound.local" + _in_key, inbound_leaf_cert = self.generate_leaf_certificate( + common_name=inbound_cn, + signer_key=inter_key, + signer_cert=inter_cert + ) + self.kwargs['subject_name'] = self._format_subject_dn(inbound_cn) + + # create managed identity + identity_result = self.cmd('identity create -g {rg} -n {identity_name}', checks=[ + self.check('name', '{identity_name}'), + self.exists('principalId') + ]).get_output_in_json() + self.kwargs['identity_id'] = identity_result['id'] + self.kwargs['principal_id'] = identity_result['principalId'] + + # grant managed identity access to KV + self.cmd('keyvault set-policy -n {kv} ' + '--object-id {principal_id} ' + '--certificate-permissions get list ' + '--secret-permissions get list') + + # import outbound certificate to KV + self.cmd(f'keyvault certificate import -n {{cert_name}} --vault-name {{kv}} ' + f'--file "{outbound_cert_path}" --password "AAAAAAAA"', checks=[ + self.check('name', '{cert_name}') + ]) + + # get certificate url (OutboundAuthCertificate) + cert_info = self.cmd('keyvault certificate show -n {cert_name} --vault-name {kv}').get_output_in_json() + self.kwargs['cert_url'] = cert_info['id'] + + # read inbound certificate chain (public keys only) + # Azure docs recommend at least two certs (Root + Intermediate) + def read_cert_base64(file_path): + with open(file_path, 'r') as f: + content = f.read() + cert_data = content.replace('-----BEGIN CERTIFICATE-----', '') + cert_data = cert_data.replace('-----END CERTIFICATE-----', '') + cert_data = cert_data.replace('\n', '').replace('\r', '').strip() + return cert_data + + inbound_root_base64 = read_cert_base64(inbound_cert2_path) + inbound_intermediate_base64 = read_cert_base64(inbound_cert1_path) + + # create virtual network with gateway subnet + self.cmd('network vnet create -g {rg} -n {vnet_name} ' + '--address-prefix 10.0.0.0/16 ' + '--subnet-name GatewaySubnet ' + '--subnet-prefix 10.0.255.0/24', checks=[ + self.check('newVNet.name', '{vnet_name}'), + self.check('newVNet.subnets[0].name', 'GatewaySubnet') + ]) + + # create public ip + self.cmd('network public-ip create -g {rg} -n {pip_name} ' + '--allocation-method Static ' + '--ip-tags FirstPartyUsage=/NonProd ' + '--sku Standard', checks=[ + self.check('publicIp.name', '{pip_name}') + ]) + + # create vnet gateway with managed identity + self.cmd('network vnet-gateway create -g {rg} -n {vnet_gateway_name} ' + '--public-ip-address {pip_name} ' + '--vnet {vnet_name} ' + '--gateway-type Vpn ' + '--vpn-type RouteBased ' + '--sku VpnGw1 ' + '--mi-user-assigned {identity_id}', checks=[ + self.check('vnetGateway.name', '{vnet_gateway_name}'), + self.check('vnetGateway.gatewayType', 'Vpn'), + self.exists('vnetGateway.identity') + ]) + + # create local gateway + self.cmd('network local-gateway create -g {rg} -n {local_gateway_name} ' + '--gateway-ip-address 192.168.4.5 ' + '--local-address-prefixes 192.168.0.0/16', checks=[ + self.check('name', '{local_gateway_name}') + ]) + + # create vpn connection with certificate authentication + cert_auth_config = { + "outboundAuthCertificate": self.kwargs['cert_url'], + "inboundAuthCertificateChain": [inbound_root_base64, inbound_intermediate_base64], + "inboundAuthCertificateSubjectName": self.kwargs['subject_name'] + } + self.kwargs['cert_auth'] = json.dumps(cert_auth_config) + self.cmd('network vpn-connection create -g {rg} -n {connection_name} ' + '--vnet-gateway1 {vnet_gateway_name} ' + '--local-gateway2 {local_gateway_name} ' + '--shared-key {shared_key} ' + '--auth-type Certificate ' + '--cert-auth \'{cert_auth}\'', checks=[ + self.check('resource.connectionType', 'IPsec') + ]) + + # verify connection with certificate authentication + connection = self.cmd('network vpn-connection show -g {rg} -n {connection_name}', checks=[ + self.check('name', '{connection_name}'), + self.check('authenticationType', 'Certificate'), + self.exists('certificateAuthentication') + ]).get_output_in_json() + + # verify certificate authentication configuration + cert_config = connection['certificateAuthentication'] + self.assertEqual(cert_config['outboundAuthCertificate'], self.kwargs['cert_url']) + self.assertEqual(cert_config['inboundAuthCertificateSubjectName'], self.kwargs['subject_name']) + self.assertEqual(len(cert_config['inboundAuthCertificateChain']), 2) + + # update certificate authentication + new_cert_auth_config = { + "outboundAuthCertificate": self.kwargs['cert_url'], + "inboundAuthCertificateChain": [inbound_root_base64, inbound_intermediate_base64], + "inboundAuthCertificateSubjectName": self.kwargs['subject_name'] + "-new" + } + self.kwargs['new_cert_auth'] = json.dumps(new_cert_auth_config) + self.cmd('network vpn-connection update -g {rg} -n {connection_name} ' + '--cert-auth \'{new_cert_auth}\'', checks=[ + self.check('name', '{connection_name}'), + self.check('authenticationType', 'Certificate') + ]) + + # delete connection + self.cmd('network vpn-connection delete -g {rg} -n {connection_name}') + + # create connection with PSK for comparison + self.cmd('network vpn-connection create -g {rg} -n {connection_name} ' + '--vnet-gateway1 {vnet_gateway_name} ' + '--local-gateway2 {local_gateway_name} ' + '--shared-key {shared_key}') + + # verify PSK connection + psk_connection = self.cmd('network vpn-connection show -g {rg} -n {connection_name}').get_output_in_json() + if 'authenticationType' in psk_connection: + self.assertIn(psk_connection['authenticationType'], ['PSK', None]) + + finally: + # clean up temporary certificates + if os.path.exists(temp_dir): + shutil.rmtree(temp_dir) + + +class NetworkVnetGatewayIpSecPolicy(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_vnet_gateway_ipsec') + def test_network_vnet_gateway_ipsec(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'ip': 'pip1', + 'gw': 'gw1', + 'gw_sku': 'VpnGw2', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} ' + '--sku {gw_sku} --gateway-type Vpn --vpn-type RouteBased ' + '--address-prefix 172.16.0.0/24 --client-protocol IkeV2') + self.cmd('network vnet-gateway ipsec-policy add -g {rg} --gateway-name {gw} ' + '--ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 ' + '--ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 ' + '--sa-lifetime 7200 --sa-max-size 2048', + checks=[self.check('dhGroup', 'DHGroup24'), + self.check('ikeEncryption', 'AES256'), + self.check('ikeIntegrity', 'SHA384'), + self.check('ipsecEncryption', 'GCMAES256'), + self.check('ipsecIntegrity', 'GCMAES256'), + self.check('pfsGroup', 'PFS24'), + self.check('saDataSizeKilobytes', 2048), + self.check('saLifeTimeSeconds', 7200)]) + + self.cmd('network vnet-gateway ipsec-policy list -g {rg} --gateway-name {gw}', + checks=[self.check('length(@)', 1)]) + self.cmd('network vnet-gateway ipsec-policy clear -g {rg} --gateway-name {gw}') + self.cmd('network vnet-gateway ipsec-policy list -g {rg} --gateway-name {gw}', + checks=[self.check('length(@)', 0)]) + self.cmd('network vnet-gateway vpn-client show-health -g {rg} -n {gw}') + self.cmd('network vnet-gateway show-supported-devices -g {rg} -n {gw} -o tsv') + + +class NetworkVnetGatewayMigration(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_vnet_gateway_migration', location='westus') + def test_network_vnet_gateway_migration(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'pub_ip': 'public_ip1', + 'gw': 'gateway1', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --address-prefix 10.0.0.0/16 --subnet-name GatewaySubnet --subnet-prefix 10.0.0.0/24') + self.cmd('network public-ip create -g {rg} -n {pub_ip} --sku Basic') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --sku VpnGw1 --vpn-gateway-generation Generation1 ' + '--vnet {vnet} --public-ip-address {pub_ip} --vpn-type RouteBased', + checks=[ + self.check('virtualNetworkGatewayMigrationStatus.state', None), + self.check('virtualNetworkGatewayMigrationStatus.phase', None) + ]) + + # prepare migration + self.cmd('network vnet-gateway migration prepare -g {rg} -n {gw} --migration-type UpgradeDeploymentToStandardIP') + self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ + self.check('virtualNetworkGatewayMigrationStatus.state', 'InProgress'), + self.check('virtualNetworkGatewayMigrationStatus.phase', 'PrepareSucceeded') + ]) + + # execute migration + self.cmd('network vnet-gateway migration execute -g {rg} -n {gw}') + self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ + self.check('virtualNetworkGatewayMigrationStatus.state', 'InProgress'), + self.check('virtualNetworkGatewayMigrationStatus.phase', 'ExecuteSucceeded') + ]) + + # commit migration + self.cmd('network vnet-gateway migration commit -g {rg} -n {gw}') + self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ + self.check('virtualNetworkGatewayMigrationStatus.state', 'Succeeded'), + self.check('virtualNetworkGatewayMigrationStatus.phase', 'CommitSucceeded') + ]) + + +class NetworkVnetGatewayMultiAuth(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_multi_auth') + def test_network_vnet_gateway_multi_auth(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet', + 'ip': 'pip', + 'gw': 'gw', + 'gw_sku': 'VpnGw2', + 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', + 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', + 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9', + 'root_cert_name': 'root-cert', + 'root_cert_data': os.path.join(TEST_DIR, 'test-root-cert.cer'), + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' + '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN ' + '--aad-audience {aad_audience} --aad-issuer {aad_issuer} --aad-tenant {aad_tenant} ' + '--root-cert-name {root_cert_name} --root-cert-data "{root_cert_data}" ' + '--radius-secret 111_aaa --radius-server 30.1.1.15 --vpn-auth-type AAD Certificate Radius', + checks=[self.check('length(vnetGateway.vpnClientConfiguration.vpnAuthenticationTypes)', 3)]) + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_multi_auth1') + def test_network_vnet_gateway_multi_auth1(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet', + 'ip': 'pip', + 'gw': 'gw', + 'gw_sku': 'VpnGw2', + 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', + 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', + 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9', + 'root_cert_name': 'root-cert', + 'root_cert_data': os.path.join(TEST_DIR, 'test-root-cert.cer'), + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' + '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN') + self.cmd('network vnet-gateway update -g {rg} -n {gw} --vpn-auth-type AAD Certificate Radius ' + '--aad-audience {aad_audience} --aad-issuer {aad_issuer} --aad-tenant {aad_tenant} ' + '--root-cert-name {root_cert_name} --root-cert-data "{root_cert_data}" ' + '--radius-secret 111_aaa --radius-server 30.1.1.15', + checks=[self.check('length(vpnClientConfiguration.vpnAuthenticationTypes)', 3)]) + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_allow_traffic') + def test_network_vnet_gateway_allow_traffic(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet', + 'ip': 'pip', + 'gw': 'gw', + 'gw_sku': 'VpnGw2', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} ' + '--gateway-type Vpn --vpn-type RouteBased --address-prefix 40.1.0.0/24 --client-protocol OpenVPN ' + '--allow-remote-vnet-traffic true --allow-vwan-traffic true', + checks=[self.check('vnetGateway.allowRemoteVnetTraffic', True), + self.check('vnetGateway.allowVirtualWanTraffic', True)]) + self.cmd('network vnet-gateway update -g {rg} -n {gw} --allow-remote-vnet-traffic false --allow-vwan-traffic false', + checks=[self.check('allowRemoteVnetTraffic', False), + self.check('allowVirtualWanTraffic', False)]) + + +class NetworkExpressRouteGatewayScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_no_pip') + def test_network_vnet_gateway_expressroute_without_public_ip(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet', + 'gw': 'gw', + 'sku': 'Standard', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + result = self.cmd('network vnet-gateway create -g {rg} -n {gw} --vnet {vnet} ' + '--gateway-type ExpressRoute --sku {sku}').get_output_in_json() + + ip_configs = result['vnetGateway']['ipConfigurations'] + self.assertEqual(1, len(ip_configs)) + + ip_config = ip_configs[0] + self.assertEqual('Dynamic', ip_config['privateIPAllocationMethod']) + self.assertTrue(ip_config['subnet']['id'].endswith('/subnets/GatewaySubnet')) + self.assertFalse(ip_config.get('publicIPAddress')) + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_with_pip') + def test_network_vnet_gateway_expressroute_with_public_ip(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet', + 'pip': 'pip', + 'gw': 'gw', + 'sku': 'Standard', + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + public_ip = self.cmd('network public-ip create -g {rg} -n {pip}').get_output_in_json()['publicIp']['id'] + self.kwargs['pip_id'] = public_ip + print(self.kwargs['pip_id']) + result = self.cmd('network vnet-gateway create -g {rg} -n {gw} --vnet {vnet} ' + '--gateway-type ExpressRoute --sku {sku} --public-ip-addresses {pip}').get_output_in_json() + + ip_configs = result['vnetGateway']['ipConfigurations'] + self.assertEqual(1, len(ip_configs)) + + ip_config = ip_configs[0] + print(ip_config) + self.assertEqual('Dynamic', ip_config['privateIPAllocationMethod']) + self.assertTrue(ip_config['subnet']['id'].endswith('/subnets/GatewaySubnet')) + # public ip is ommitted by design with auto-assigned ip + self.assertFalse(ip_config.get('publicIPAddress')) + + +class NetworkVirtualRouter(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_virtual_router', location='WestCentralUS') + @unittest.skip('Skip as service has bug for deleting peering') + def test_network_virtual_router_scenario(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'rg': resource_group, + 'location': resource_group_location, + 'vnet': 'vnet1', + 'ip': 'pip1', + 'gw': 'gw1', + 'gw_sku': 'HighPerformance', + 'vrouter': 'vrouter1', + 'vrouter_peering': 'peering1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet -l {location} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {ip} -l {location}') + self.cmd('network vnet-gateway create -g {rg} -n {gw} --public-ip-address {ip} --vnet {vnet} --sku {gw_sku} --gateway-type ExpressRoute -l {location}') + + self.cmd('network vrouter create -n {vrouter} -l {location} -g {rg} --hosted-gateway {gw}', checks=[ + self.check('type', 'Microsoft.Network/VirtualRouters'), + self.check('name', '{vrouter}') + ]) + + self.cmd('network vrouter show -n {vrouter} -g {rg}', checks=[ + self.check('name', '{vrouter}') + ]) + + self.cmd('network vrouter list -g {rg}', checks=[ + self.check('@[0].name', '{vrouter}') + ]) + + self.cmd('network vrouter peering create -n {vrouter_peering} --peer-asn 10000 --peer-ip 10.0.0.0 -g {rg} --vrouter-name {vrouter}', checks=[ + self.check('name', '{vrouter_peering}') + ]) + + self.cmd('network vrouter peering update -n {vrouter_peering} --peer-asn 11000 --peer-ip 11.0.0.0 -g {rg} --vrouter-name {vrouter}', checks=[ + self.check('peerAsn', '11000'), + self.check('peerIp', '11.0.0.0') + ]) + + self.cmd('network vrouter peering show -n {vrouter_peering} -g {rg} --vrouter-name {vrouter}', checks=[ + self.check('name', '{vrouter_peering}') + ]) + + self.cmd('network vrouter peering list -g {rg} --vrouter-name {vrouter}', checks=[ + self.check('@[0].name', '{vrouter_peering}'), + self.check('length(@)', 1) + ]) + + self.cmd('network vrouter peering delete -n {vrouter_peering} -g {rg} --vrouter-name {vrouter}') + + self.cmd('network vrouter delete -g {rg} -n {vrouter}') + + # @record_only() # this feature need resource from service team for now. + @unittest.skip('rg not found') + @ResourceGroupPreparer(name_prefix='cli_test_virtual_router', location='eastus2euap') + def test_vrouter_with_virtual_hub_support(self, resource_group, resource_group_location): + self.kwargs.update({ + 'rg': 'test_vrouter_with_virtual_hub_support', # the subscription needs to be a specified one given by service team + 'location': resource_group_location, + 'vnet': 'vnet2', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'vrouter': 'vrouter2', + 'peer': 'peer1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} ' + '--location {location} ' + '--subnet-name {subnet1} ' + '--address-prefix 10.0.0.0/24') + + # a cleanup program runs in short peoridically to assign subnets a NSG within that subscription + # which will block subnet is assigned to the virtual router + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --remove networkSecurityGroup') + vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() + + self.kwargs.update({ + 'subnet1_id': vnet['subnets'][0]['id'] + }) + + self.cmd('network vrouter create -g {rg} -l {location} -n {vrouter} --hosted-subnet {subnet1_id}', checks=[ + self.check('type', 'Microsoft.Network/virtualHubs'), + self.check('ipConfigurations', None), + self.check('provisioningState', 'Succeeded') + ]) + + self.cmd('network vrouter list -g {rg}') + + self.cmd('network vrouter show -g {rg} -n {vrouter}', checks=[ + self.check('virtualRouterAsn', 65515), + self.check('length(virtualRouterIps)', 2), + ]) + + self.cmd('network vrouter peering create -g {rg} --vrouter-name {vrouter} -n {peer} ' + '--peer-asn 11000 --peer-ip 10.0.0.120') + + self.cmd('network vrouter peering list -g {rg} --vrouter-name {vrouter}') + + self.cmd('network vrouter peering show -g {rg} --vrouter-name {vrouter} -n {peer}') + + # unable to update unless the ASN's range is required + # self.cmd('network vrouter peering update -g {rg} --vrouter-name {vrouter} -n {peer} --peer-ip 10.0.0.0') + + self.cmd('network vrouter peering delete -g {rg} --vrouter-name {vrouter} -n {peer}') + + self.cmd('network vrouter delete -g {rg} -n {vrouter}') + + +class NetworkVirtualHubRouter(ScenarioTest): + @ResourceGroupPreparer(name_prefix='cli_test_virtual_hub_router', location='centraluseuap') + def test_network_virtual_hub_router_scenario(self, resource_group, resource_group_location): + self.kwargs.update({ + 'rg': resource_group, + 'location': resource_group_location, + 'vnet': 'vnet2', + 'vhr_ip1': 'vhrip1', + 'subnet1': 'RouteServerSubnet', + 'vrouter': 'vrouter2', + 'peer': 'peer1' + }) + + self.cmd('network vnet create -g {rg} -n {vnet} ' + '--location {location} ' + '--subnet-name {subnet1} ' + '--address-prefix 10.0.0.0/24') + + # a cleanup program runs in short peoridically to assign subnets a NSG within that subscription + # which will block subnet is assigned to the virtual router + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --remove networkSecurityGroup') + vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() + self.cmd('network public-ip create -g {rg} -n {vhr_ip1} --sku Standard') + + self.kwargs.update({ + 'subnet1_id': vnet['subnets'][0]['id'] + }) + + self.cmd('network routeserver create -g {rg} -l {location} -n {vrouter} --auto-scale-config min-capacity=3 ' + '--hosted-subnet {subnet1_id} --public-ip-address {vhr_ip1} --hub-routing-preference aspath', + checks=[ + self.check('type', 'Microsoft.Network/virtualHubs'), + self.check('ipConfigurations', None), + self.check('provisioningState', 'Succeeded'), + self.check("hubRoutingPreference", "ASPath"), + self.check('virtualRouterAutoScaleConfiguration.minCapacity', 3) + ]) + + self.cmd('network routeserver update -g {rg} --name {vrouter} --allow-b2b-traffic --hub-routing-preference expressroute', checks=[ + self.check('allowBranchToBranchTraffic', True), + self.check("hubRoutingPreference", "ExpressRoute") + ]) + + self.cmd('network routeserver list -g {rg}') + + self.cmd('network routeserver show -g {rg} -n {vrouter}', checks=[ + self.check('virtualRouterAsn', 65515), + self.check('length(virtualRouterIps)', 2), + ]) + + self.cmd('network routeserver peering create -g {rg} --routeserver {vrouter} -n {peer} ' + '--peer-asn 11000 --peer-ip 10.0.0.120') + + self.cmd('network routeserver peering list -g {rg} --routeserver {vrouter}') + + self.cmd('network routeserver peering show -g {rg} --routeserver {vrouter} -n {peer}') + + self.cmd('network routeserver peering list-advertised-routes -g {rg} --routeserver {vrouter} -n {peer}', + checks=[self.check("contains(keys(@), 'RouteServiceRole_IN_0')", True)]) + + self.cmd('network routeserver peering list-learned-routes -g {rg} --routeserver {vrouter} -n {peer}', + checks=[self.check("contains(keys(@), 'RouteServiceRole_IN_1')", True)]) + + # unable to update unless the ASN's range is required + # self.cmd('network routeserver peering update -g {rg} --routeserver {vrouter} -n {peer} --peer-ip 10.0.0.0') + + self.cmd('network routeserver peering delete -g {rg} --routeserver {vrouter} -n {peer} -y') + + self.cmd('network routeserver delete -g {rg} -n {vrouter} -y') + + +class NetworkSubnetScenarioTests(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_subnet_set_test') + def test_network_subnet_set(self, resource_group): + + self.kwargs.update({ + 'vnet': 'vnet1', + 'vnet_prefix': '123.0.0.0/16', + 'subnet': 'default', + 'subnet_prefix': '123.0.0.0/24', + 'subnet_prefix2': '123.0.5.0/24', + 'nsg': 'test-vnet-nsg' + }) + + self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefix {vnet_prefix} --subnet-name {subnet} --subnet-prefix {subnet_prefix}') + self.cmd('network nsg create --resource-group {rg} --name {nsg}') + + # Test we can update the address space and nsg + self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix {subnet_prefix2} --network-security-group {nsg}', checks=[ + self.check('addressPrefix', '{subnet_prefix2}'), + self.check('ends_with(@.networkSecurityGroup.id, `/{nsg}`)', True) + ]) + + # test generic update + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --set addressPrefix=123.0.0.0/24', + checks=self.check('addressPrefix', '123.0.0.0/24')) + + # Test we can get rid of the nsg. + self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefix {subnet_prefix2} --network-security-group null', + checks=self.check('networkSecurityGroup', None)) + + self.cmd('network vnet delete --resource-group {rg} --name {vnet}') + self.cmd('network nsg delete --resource-group {rg} --name {nsg}') + + @ResourceGroupPreparer(name_prefix='cli_subnet_detach_nat_gateway_', location="eastus2") + def test_subnet_detach_nat_gateway(self, resource_group, resource_group_location): + self.kwargs.update({ + 'vnet': 'vnet1', + 'vnet_prefix': '123.0.0.0/16', + 'subnet': 'default', + 'subnet_prefix': '123.0.0.0/24', + 'nat': 'test-nat', + 'idle_timeout': 4, + 'sku': "Standard", + 'ip_addr': "pip", + 'ip_prefix': "prefix", + 'idle_timeout_updated': 5, + 'zone': 2, + 'location': resource_group_location, + 'resource_type': 'Microsoft.Network/NatGateways' + }) + + self.cmd('network public-ip create -g {rg} -n {ip_addr} --location {location} --zone {zone} --sku Standard ') + self.cmd('network public-ip prefix create --length 29 --location {location} --name {ip_prefix} --resource-group {rg} --zone {zone}') + self.cmd('network nat gateway create --resource-group {rg} --location {location} --public-ip-prefixes {ip_prefix} --name {nat} --public-ip-addresses {ip_addr} --idle-timeout {idle_timeout} --zone {zone}') + self.cmd('network vnet create --resource-group {rg} --name {vnet} --address-prefix {vnet_prefix}') + + self.cmd('network vnet subnet create --resource-group {rg} --vnet-name {vnet} --name {subnet} --address-prefixes {subnet_prefix} --nat-gateway {nat} --default-outbound false', + checks=self.check('ends_with(@.natGateway.id, `/{nat}`)', True)) + self.cmd('network vnet subnet update --resource-group {rg} --vnet-name {vnet} --name {subnet} --nat-gateway null', + checks=self.check('natGateway', None)) + + @ResourceGroupPreparer(name_prefix='cli_subnet_endpoint_service_test', location="eastus2") + def test_network_subnet_endpoint_service(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + 'subnet3': 'subnet3', + 'publicip': 'testip1', + 'publicip2': 'testip2' + }) + result = self.cmd('network vnet list-endpoint-services -l westus').get_output_in_json() + self.assertGreaterEqual(len(result), 2) + + public_ip1 = self.cmd('network public-ip create -g {rg} -n {publicip}').get_output_in_json() + public_ip2 = self.cmd('network public-ip create -g {rg} -n {publicip2}').get_output_in_json() + self.kwargs.update({ + 'public_ip1': public_ip1['publicIp']['id'], + 'public_ip2': public_ip2['publicIp']['id'] + }) + self.cmd('network vnet create -g {rg} -n {vnet}') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet1} --address-prefix 10.0.1.0/24 --service-endpoints Microsoft.Storage --default-outbound false', + checks=self.check('serviceEndpoints[0].service', 'Microsoft.Storage')) + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --service-endpoints null', + checks=self.check('serviceEndpoints', None)) + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefix 10.0.2.0/24 --endpoints [{{"service":Microsoft.Storage,"network-identifier":{public_ip1}}}] --default-outbound false', + checks=[self.check('serviceEndpoints[0].service', 'Microsoft.Storage'), + self.check('serviceEndpoints[0].networkIdentifier.id', '{public_ip1}')]) + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet2} --service-endpoints null', + checks=self.check('serviceEndpoints', None)) + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet3} --address-prefix 10.0.3.0/24 --default-outbound false') + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet3} --endpoints [{{"service":Microsoft.Storage,"network-identifier":{public_ip2}}}]', + checks=[self.check('serviceEndpoints[0].service', 'Microsoft.Storage'), + self.check('serviceEndpoints[0].networkIdentifier.id', '{public_ip2}')]) + + @ResourceGroupPreparer(name_prefix='cli_subnet_delegation') + def test_network_subnet_delegation(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1', + }) + result = self.cmd('network vnet subnet list-available-delegations -l westcentralus').get_output_in_json() + self.assertTrue(len(result) > 1, True) + result = self.cmd('network vnet subnet list-available-delegations -g {rg}').get_output_in_json() + self.assertTrue(len(result) > 1, True) + + self.cmd('network vnet create -g {rg} -n {vnet} -l westcentralus') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --delegations Microsoft.Web.serverFarms --default-outbound false', checks=[ + self.check('delegations[0].serviceName', 'Microsoft.Web/serverFarms') + ]) + # verify the update command, and that CLI validation will accept either serviceName or Name + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --delegations Microsoft.Sql/managedInstances', + checks=self.check('delegations[0].serviceName', 'Microsoft.Sql/managedInstances')) + + @ResourceGroupPreparer(name_prefix='test_subnet_with_private_endpoint_option') + def test_subnet_with_private_endpoint_and_private_link_options(self, resource_group): + self.kwargs.update({ + 'vnet': 'MyVnet', + 'subnet1': 'MySubnet1', + 'subnet2': 'MySubnet2', + 'subnet3': 'MySubnet3', + }) + + self.cmd('network vnet create -g {rg} -n {vnet}') + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' + '--address-prefixes 10.0.1.0/24 ' + '--name {subnet1} ' + '--disable-private-endpoint-network-policies true ' + '--default-outbound false', checks=[ + self.check('addressPrefix', '10.0.1.0/24'), + self.check('privateEndpointNetworkPolicies', 'Disabled'), + self.check('privateLinkServiceNetworkPolicies', 'Enabled') + ]) + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' + '--address-prefixes 10.0.2.0/24 ' + '--name {subnet2} ' + '--disable-private-link-service-network-policies true ' + '--default-outbound false', checks=[ + self.check('addressPrefix', '10.0.2.0/24'), + self.check('privateEndpointNetworkPolicies', 'Disabled'), + self.check('privateLinkServiceNetworkPolicies', 'Disabled') + ]) + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} ' + '--address-prefixes 10.0.3.0/24 ' + '--name {subnet3} ' + '--disable-private-endpoint-network-policies true ' + '--disable-private-link-service-network-policies true ' + '--default-outbound false', checks=[ + self.check('addressPrefix', '10.0.3.0/24'), + self.check('privateEndpointNetworkPolicies', 'Disabled'), + self.check('privateLinkServiceNetworkPolicies', 'Disabled') + ]) + + @ResourceGroupPreparer(name_prefix='cli_subnet_default_outbound_access') + def test_network_subnet_default_outbound_access(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + }) + self.cmd('network vnet create -g {rg} -n {vnet} -l westcentralus') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet1} --address-prefixes 10.0.3.0/24 --default-outbound-access false', + self.check('defaultOutboundAccess', False)) + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet1} --default-outbound-access true', + self.check('defaultOutboundAccess', True)) + + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet2} --address-prefixes 10.0.4.0/24 --default-outbound-access true', + self.check('defaultOutboundAccess', True)) + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet2} --default-outbound-access false', + self.check('defaultOutboundAccess', False)) + + self.cmd('network vnet subnet show -g {rg} --vnet-name {vnet} -n {subnet2}', + self.check('defaultOutboundAccess', False)) + + @ResourceGroupPreparer(name_prefix='cli_subnet_with_sharing_scope', location='westcentralus') + def test_network_subnet_with_sharing_scope(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet1', + 'subnet': 'subnet1' + }) + self.cmd('az network vnet create -g {rg} -n {vnet} -l westcentralus --address-prefixes 10.0.0.0/16') + self.cmd('az network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefixes 10.0.0.0/16 --default-outbound false --sharing-scope Tenant') + self.cmd('network vnet subnet show -g {rg} --vnet-name {vnet} -n {subnet}', + checks=self.check('sharingScope', 'Tenant')) + + +class NetworkActiveActiveCrossPremiseScenarioTest(ScenarioTest): # pylint: disable=too-many-instance-attributes + + @ResourceGroupPreparer(name_prefix='cli_test_active_active_cross_premise_connection', location='westus2') + def test_network_active_active_cross_premise_connection(self, resource_group): + self.kwargs.update({ + 'vnet1': 'vnet1', + 'vnet_prefix1': '10.11.0.0/16', + 'vnet_prefix2': '10.12.0.0/16', + 'vnet1_asn': 65010, + 'gw_subnet': 'GatewaySubnet', + 'gw_subnet_prefix': '10.12.255.0/27', + 'gw_ip1': 'gwip1', + 'gw_ip2': 'gwip2', + 'gw1': 'gw1', + 'lgw2': 'lgw2', + 'lgw_ip': '131.107.72.22', + 'lgw_prefix': '10.52.255.253/32', + 'bgp_peer1': '10.52.255.253', + 'lgw_asn': 65050, + 'lgw_loc': 'eastus', + 'conn_151': 'Vnet1toSite5_1', + 'conn_152': 'Vnet1toSite5_2', + 'shared_key': 'abc123', + 'shared_key2': 'a1b2c3', + 'lgw3': 'lgw3', + 'lgw3_ip': '131.107.72.23', + 'lgw3_prefix': '10.52.255.254/32', + 'bgp_peer2': '10.52.255.254' + }) + + self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet_prefix1} {vnet_prefix2} --subnet-name {gw_subnet} --subnet-prefix {gw_subnet_prefix}') + + self.cmd('network public-ip create -g {rg} -n {gw_ip1} --sku Standard --zone 1 2 3') + self.cmd('network public-ip create -g {rg} -n {gw_ip2} --sku Standard --zone 1 2 3') + + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --sku VpnGw1AZ --asn {vnet1_asn} --public-ip-addresses {gw_ip1} {gw_ip2} --tags foo=doo') + self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') + + import time + time.sleep(3 * 60) # 3min + + self.cmd('network vnet-gateway update -g {rg} -n {gw1} --tags foo=boo --no-wait') + self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --updated') + + self.cmd('network local-gateway create -g {rg} -n {lgw2} -l {lgw_loc} --gateway-ip-address {lgw_ip} --local-address-prefixes {lgw_prefix} --asn {lgw_asn} --bgp-peering-address {bgp_peer1}') + self.cmd('network vpn-connection create -g {rg} -n {conn_151} --vnet-gateway1 {gw1} --local-gateway2 {lgw2} --shared-key {shared_key} --enable-bgp') + self.cmd('network vpn-connection shared-key reset -g {rg} --connection-name {conn_151} --key-length 128') + sk1 = self.cmd( + 'network vpn-connection shared-key show -g {rg} --connection-name {conn_151}').get_output_in_json() + self.cmd('network vpn-connection shared-key update -g {rg} --connection-name {conn_151} --value {shared_key2}') + sk2 = self.cmd('network vpn-connection shared-key show -g {rg} --connection-name {conn_151}', + checks=self.check('value', '{shared_key2}')).get_output_in_json() + + self.assertNotEqual(sk1, sk2) + + self.cmd('network local-gateway create -g {rg} -n {lgw3} -l {lgw_loc} --gateway-ip-address {lgw3_ip} --local-address-prefixes {lgw3_prefix} --asn {lgw_asn} --bgp-peering-address {bgp_peer2}') + self.cmd('network vpn-connection create -g {rg} -n {conn_152} --vnet-gateway1 {gw1} --local-gateway2 {lgw3} --shared-key {shared_key} --enable-bgp') + +class NetworkActiveActiveVnetScenarioTest(ScenarioTest): # pylint: disable=too-many-instance-attributes + + def __init__(self, method_name): + self.sas_replacer = StorageAccountSASReplacer() + super().__init__(method_name, recording_processors=[ + self.sas_replacer + ]) + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_active_active_vnet_vnet_connection') + @StorageAccountPreparer(name_prefix='clitestvpncnn') + def test_network_active_active_vnet_connection(self, resource_group, storage_account): + from datetime import datetime, timedelta + self.kwargs.update({ + 'subnet': 'GatewaySubnet', + 'vnet1': 'vnet1', + 'vnet1_prefix': '10.21.0.0/16', + 'vnet1_asn': 65010, + 'gw1': 'vgw1', + 'gw1_prefix': '10.21.255.0/27', + 'gw1_ip1': 'gw1ip1', + 'gw1_ip2': 'gw1ip2', + 'vnet2': 'vnet2', + 'vnet2_prefix': '10.22.0.0/16', + 'vnet2_asn': 65020, + 'gw2': 'vgw2', + 'gw2_prefix': '10.22.255.0/27', + 'gw2_ip1': 'gw2ip1', + 'gw2_ip2': 'gw2ip2', + 'key': 'abc123', + 'conn12': 'vnet1to2', + 'conn21': 'vnet2to1', + 'bgp_peer1': '10.52.255.253', + 'bgp_peer2': '10.53.255.253', + 'storage_account': storage_account, + 'ctn': self.create_random_name(prefix='clitestvpngw', length=24), + 'expiry': (datetime.utcnow() + timedelta(hours=3)).strftime('%Y-%m-%dT%H:%MZ') + }) + + self.cmd('storage container create --account-name {storage_account} --name {ctn}') + sas = self.cmd( + 'storage blob generate-sas -n src --account-name {storage_account} -c {ctn} --permissions acrwd --expiry {expiry} -otsv').output.strip() + self.kwargs['sas_url'] = 'https://{}.blob.azure.com/{}?{}'.format(self.kwargs['storage_account'], + self.kwargs['ctn'], sas) + self.sas_replacer.add_sas_token(sas) + + # Create one VNet with two public IPs + self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefix {vnet1_prefix} --subnet-name {subnet} --subnet-prefix {gw1_prefix}') + self.cmd('network public-ip create -g {rg} -n {gw1_ip1}') + self.cmd('network public-ip create -g {rg} -n {gw1_ip2}') + + # Create second VNet with two public IPs + self.cmd('network vnet create -g {rg} -n {vnet2} --address-prefix {vnet2_prefix} --subnet-name {subnet} --subnet-prefix {gw2_prefix}') + self.cmd('network public-ip create -g {rg} -n {gw2_ip1}') + self.cmd('network public-ip create -g {rg} -n {gw2_ip2}') + + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --sku VpnGw1 --asn {vnet1_asn} --public-ip-addresses {gw1_ip1} {gw1_ip2} --bgp-peering-address {bgp_peer1} --no-wait') + self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2} --sku VpnGw1 --asn {vnet2_asn} --public-ip-addresses {gw2_ip1} {gw2_ip2} --bgp-peering-address {bgp_peer2} --no-wait') + + # wait for gateway completion to finish + self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') + self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') + + # create and connect the VNet gateways + self.cmd('network vpn-connection create -g {rg} -n {conn12} --vnet-gateway1 {gw1} --vnet-gateway2 {gw2} --shared-key {key} --enable-bgp') + self.cmd('network vpn-connection create -g {rg} -n {conn21} --vnet-gateway1 {gw2} --vnet-gateway2 {gw1} --shared-key {key} --enable-bgp') + self.cmd('network vpn-connection list-ike-sas -g {rg} -n {conn12}') + output = self.cmd('network vpn-connection packet-capture start -g {rg} -n {conn12}').output.strip() + self.assertTrue('Successful' in output, 'Expected Successful in output.\nActual: {}'.format(output)) + # currently we cannot create traffic by cli command. So it will return an error when stop. + with self.assertRaisesRegex(HttpResponseError, 'The response did not contain any data'): + self.cmd('network vpn-connection packet-capture stop -g {rg} -n {conn12} --sas-url {sas_url}') + + +class NetworkVpnGatewayScenarioTest(ScenarioTest): + + def __init__(self, method_name): + self.sas_replacer = StorageAccountSASReplacer() + super().__init__(method_name, recording_processors=[ + self.sas_replacer + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway') + def test_network_vpn_gateway(self, resource_group): + + self.kwargs.update({ + 'vnet1': 'myvnet1', + 'vnet2': 'myvnet2', + 'vnet3': 'myvnet3', + 'gw1': 'gateway1', + 'gw2': 'gateway2', + 'gw3': 'gateway3', + 'ip1': 'pubip1', + 'ip2': 'pubip2', + 'ip3': 'pubip3', + 'custom_routes1': "101.168.0.6/32", + 'custom_routes2': "102.168.0.6/32" + }) + + self.cmd('network public-ip create -n {ip1} -g {rg}') + self.cmd('network public-ip create -n {ip2} -g {rg}') + self.cmd('network public-ip create -n {ip3} -g {rg}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') + self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name GatewaySubnet --address-prefix 10.1.0.0/16') + self.cmd('network vnet create -g {rg} -n {vnet3} --subnet-name GatewaySubnet --address-prefix 10.2.0.0/16') + + self.kwargs.update({'sub': self.get_subscription_id()}) + self.kwargs.update({ + 'vnet1_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet1}'.format(**self.kwargs), + 'vnet2_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet2}'.format(**self.kwargs) + }) + + with self.assertRaisesRegex(HttpResponseError, 'InvalidGatewaySkuSpecifiedForGatewayDeploymentType'): + self.cmd( + 'network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1_id} --public-ip-address {ip1} --gateway-type ExpressRoute --vpn-gateway-generation Generation1') + + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1_id} --public-ip-address {ip1} --vpn-gateway-generation Generation1 --custom-routes {custom_routes1} --sku VpnGw1 --no-wait') + self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2_id} --public-ip-address {ip2} --sku VpnGw1 --no-wait') + self.cmd('network vnet-gateway create -g {rg} -n {gw3} --vnet {vnet3} --public-ip-address {ip3} --no-wait --sku VpnGw1 --asn 12345 --bgp-peering-address 10.2.250.250 --peer-weight 50') + + self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') + self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') + self.cmd('network vnet-gateway wait -g {rg} -n {gw3} --created') + + self.cmd('network vnet-gateway show -g {rg} -n {gw1}', checks=[ + self.check('gatewayType', 'Vpn'), + self.check('sku.capacity', 2), + self.check('sku.name', 'VpnGw1'), + self.check('vpnType', 'RouteBased'), + self.check('vpnGatewayGeneration', 'Generation1'), + self.check('enableBgp', False), + self.check('customRoutes.addressPrefixes[0]', self.kwargs['custom_routes1']) + ]) + + self.cmd('network vnet-gateway update -g {rg} -n {gw1} --custom-routes {custom_routes1} {custom_routes2}', checks=[ + self.check('length(customRoutes.addressPrefixes)', 2) + ]) + + self.cmd('network vnet-gateway show -g {rg} -n {gw2}', checks=[ + self.check('gatewayType', 'Vpn'), + self.check('sku.capacity', 2), + self.check('sku.name', 'VpnGw1'), + self.check('vpnType', 'RouteBased'), + self.check('enableBgp', False) + ]) + self.cmd('network vnet-gateway show -g {rg} -n {gw3}', checks=[ + self.check('sku.name', 'VpnGw1'), + self.check('enableBgp', True), + self.check('bgpSettings.asn', 12345), + self.check('bgpSettings.bgpPeeringAddress', '10.2.250.250'), + self.check('bgpSettings.peerWeight', 50), + self.check('enableHighBandwidthVpnGateway', False) + ]) + + self.kwargs.update({ + 'conn12': 'conn1to2', + 'conn21': 'conn2to1', + 'gw1_id': '/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworkGateways/{gw1}'.format(**self.kwargs) + }) + + self.cmd('network vpn-connection create -n {conn12} -g {rg} --shared-key 123 --vnet-gateway1 {gw1_id} --vnet-gateway2 {gw2} --tags foo=doo') + self.cmd('network vpn-connection update -n {conn12} -g {rg} --routing-weight 25 --tags foo=boo', + checks=self.check('routingWeight', 25)) + self.cmd('network vpn-connection create -n {conn21} -g {rg} --shared-key 123 --vnet-gateway2 {gw1_id} --vnet-gateway1 {gw2}') + + self.cmd('network vnet-gateway list-learned-routes -g {rg} -n {gw1}') + self.cmd('network vnet-gateway list-advertised-routes -g {rg} -n {gw1} --peer 10.1.1.1') + self.cmd('network vnet-gateway list-bgp-peer-status -g {rg} -n {gw1} --peer 10.1.1.1') + self.cmd('network vpn-connection list -g {rg} --vnet-gateway {gw1}', checks=[ + self.check('length(@)', 1) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_sku_', location='westus3') + def test_network_vpn_gateway_sku(self, resource_group): + self.kwargs.update({ + 'vnet1': 'myvnet1', + 'gw1': 'gateway1', + 'ip1': 'pubip1', + 'custom_routes1': "101.168.0.6/32", + 'custom_routes2': "102.168.0.6/32" + }) + + self.cmd('network public-ip create -n {ip1} -g {rg}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') + + self.cmd( + "network vnet-gateway create -n {gw1} -g {rg} --public-ip-address {ip1} --vnet {vnet1} --gateway-type ExpressRoute --resiliency-model SingleHomed --sku ErGwScale --min-scale-unit 3 --max-scale-unit 5", + checks=[ + self.check("vnetGateway.autoScaleConfiguration.bounds.max", 5), + self.check("vnetGateway.autoScaleConfiguration.bounds.min", 3), + self.check("vnetGateway.resiliencyModel", "SingleHomed"), + ] + ) + self.cmd( + "network vnet-gateway update -n {gw1} -g {rg} --min-scale-unit 4 --max-scale-unit 8", + checks=[ + self.check("autoScaleConfiguration.bounds.max", 8), + self.check("autoScaleConfiguration.bounds.min", 4), + ] + ) + + @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_aad_') + def test_network_vpn_gateway_aad(self, resource_group): + self.kwargs.update({ + 'vnet': 'vnet', + 'gw': 'gw', + 'ip': 'ip', + 'aad_tenant': 'https://login.microsoftonline.com/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4', + 'aad_issuer': 'https://sts.windows.net/0ab2c4f4-81e6-44cc-a0b2-b3a47a1443f4/', + 'aad_audience': 'a21fce82-76af-45e6-8583-a08cb3b956f9' + }) + + self.cmd('network public-ip create -g {rg} -n {ip} ') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network vnet-gateway create -g {rg} -n {gw} ' + '--vnet {vnet} --public-ip-address {ip} ' + '--gateway-type Vpn --vpn-type RouteBased ' + '--sku VpnGw1 ' + '--client-protocol OpenVPN ' + '--address-prefixes 201.169.0.0/16 ') + self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ + self.check('sku.name', 'VpnGw1'), + self.check('enableBgp', False), + self.check('vpnType', 'RouteBased'), + self.check('vpnClientConfiguration.vpnClientProtocols[0]', "OpenVPN") + ]) + + self.cmd('network vnet-gateway aad assign -g {rg} --gateway-name {gw} ' + '--tenant {aad_tenant} ' + '--audience {aad_audience} ' + '--issuer {aad_issuer} ') + self.cmd('network vnet-gateway show -g {rg} -n {gw}', checks=[ + self.check('vpnClientConfiguration.aadTenant', self.kwargs['aad_tenant']), + self.check('vpnClientConfiguration.aadIssuer', self.kwargs['aad_issuer']), + self.check('vpnClientConfiguration.aadAudience', self.kwargs['aad_audience']) + ]) + self.cmd('network vnet-gateway aad show -g {rg} --gateway-name {gw}', checks=[ + self.check('aadTenant', self.kwargs['aad_tenant']) + ]) + + self.cmd('network vnet-gateway aad remove -g {rg} --gateway-name {gw}').get_output_in_json() + self.cmd('network vnet-gateway aad show -g {rg} --gateway-name {gw}', checks=[ + self.check('aadTenant', None), + self.check('aadIssuer', None), + self.check('aadAudience', None) + ]) + + @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_disconnect_connects_') + def test_network_vpn_gateway_disconnect_connects(self, resource_group): + self.kwargs.update({ + 'vnet1': 'myvnet1', + 'vnet2': 'myvnet2', + 'gw1': 'gateway1', + 'gw2': 'gateway2', + 'ip1': 'pubip1', + 'ip2': 'pubip2', + }) + + self.cmd('network public-ip create -n {ip1} -g {rg}') + self.cmd('network public-ip create -n {ip2} -g {rg}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16') + self.cmd('network vnet create -g {rg} -n {vnet2} --subnet-name GatewaySubnet --address-prefix 10.1.0.0/16') + + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --public-ip-address {ip1} ' + '--sku VpnGw1 --gateway-type Vpn --vpn-type RouteBased ' + '--vpn-gateway-generation Generation1 ' + '--address-prefixes 172.16.0.0/24 --client-protocol IkeV2 ' + '--no-wait') + self.cmd('network vnet-gateway create -g {rg} -n {gw2} --vnet {vnet2} --public-ip-address {ip2} ' + '--sku VpnGw1 --gateway-type Vpn --vpn-type RouteBased ' + '--vpn-gateway-generation Generation1 --no-wait') + + self.cmd('network vnet-gateway wait -g {rg} -n {gw1} --created') + self.cmd('network vnet-gateway wait -g {rg} -n {gw2} --created') + + self.kwargs.update({ + 'conn12': 'conn1to2', + 'conn21': 'conn2to1', + }) + + self.cmd('network vpn-connection create -n {conn12} -g {rg} --shared-key 123 ' + '--vnet-gateway1 {gw1} --vnet-gateway2 {gw2}') + self.cmd('network vpn-connection create -n {conn21} -g {rg} --shared-key 123 ' + '--vnet-gateway2 {gw1} --vnet-gateway1 {gw2}') + self.cmd('network vnet-gateway disconnect-vpn-connections -g {rg} -n {gw1} --vpn-connections {conn12}') + + @AllowLargeResponse() + @ResourceGroupPreparer(name_prefix='cli_test_vpn_gateway_package_capture', location='westus') + @StorageAccountPreparer(name_prefix='clitestvpngw') + def test_network_vpn_gateway_package_capture(self, resource_group, storage_account): + from datetime import datetime, timedelta + self.kwargs.update({ + 'vnet1': 'myvnet1', + 'gw1': 'gateway1', + 'gw1_sku': 'VpnGw1', + 'ip1': 'pubip1', + 'storage_account': storage_account, + 'ctn': self.create_random_name(prefix='clitestvpngw', length=24), + 'expiry': (datetime.utcnow() + timedelta(hours=3)).strftime('%Y-%m-%dT%H:%MZ') + }) + + self.cmd('storage container create --account-name {storage_account} --name {ctn}') + sas = self.cmd( + 'storage blob generate-sas -n src --account-name {storage_account} -c {ctn} --permissions acrwd --expiry {expiry} -otsv').output.strip() + self.kwargs['sas_url'] = 'https://{}.blob.azure.com/{}?{}'.format(self.kwargs['storage_account'], + self.kwargs['ctn'], sas) + self.sas_replacer.add_sas_token(sas) + + self.cmd('network public-ip create -n {ip1} -g {rg}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name GatewaySubnet --address-prefix 10.0.0.0/16 --subnet-prefix 10.0.0.0/24') + self.cmd('network vnet-gateway create -g {rg} -n {gw1} --vnet {vnet1} --public-ip-address {ip1} --sku {gw1_sku}') + output = self.cmd('network vnet-gateway packet-capture start -g {rg} -n {gw1}').output.strip() + self.assertTrue('Successful' in output, 'Expected Successful in output.\nActual: {}'.format(output)) + # currently we cannot create traffic by cli command. So it will return an error when stop. + with self.assertRaisesRegex(HttpResponseError, 'The response did not contain any data'): + self.cmd('network vnet-gateway packet-capture stop -g {rg} -n {gw1} --sas-url {sas_url}') + + +class NetworkVpnClientPackageScenarioTest(ScenarioTest): + + @staticmethod + def _generate_p2s_root_cert_public_file(cert_path, common_name="VpnGatewayAuthCert"): + """ + Generate a self-signed Root CA public certificate file for P2S root-cert upload. + The file content is PEM (BEGIN/END CERTIFICATE), which is acceptable for public cert data. + """ + try: + from cryptography import x509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.primitives import hashes, serialization + from cryptography.hazmat.primitives.asymmetric import rsa + from cryptography.hazmat.backends import default_backend + import datetime + + # timezone-aware now + try: + from datetime import timezone + now = datetime.datetime.now(timezone.utc) + except ImportError: + now = datetime.datetime.utcnow() + + # Root key (private key not exported; we only write public cert) + root_key = rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ) + + subject = x509.Name([ + x509.NameAttribute(NameOID.COUNTRY_NAME, u"US"), + x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, u"Washington"), + x509.NameAttribute(NameOID.LOCALITY_NAME, u"Redmond"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, u"Test Organization"), + x509.NameAttribute(NameOID.ORGANIZATIONAL_UNIT_NAME, u"IT"), + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + ]) + + cert = x509.CertificateBuilder().subject_name( + subject + ).issuer_name( + subject # self-signed root + ).public_key( + root_key.public_key() + ).serial_number( + x509.random_serial_number() + ).not_valid_before( + now - datetime.timedelta(minutes=5) + ).not_valid_after( + now + datetime.timedelta(days=3650) + ).add_extension( + x509.BasicConstraints(ca=True, path_length=1), + critical=True, + ).add_extension( + x509.KeyUsage( + digital_signature=True, + key_cert_sign=True, + crl_sign=True, + key_encipherment=False, + content_commitment=False, + data_encipherment=False, + key_agreement=False, + encipher_only=False, + decipher_only=False, + ), + critical=True, + ).add_extension( + x509.SubjectKeyIdentifier.from_public_key(root_key.public_key()), + critical=False, + ).sign(root_key, hashes.SHA256(), default_backend()) + + os.makedirs(os.path.dirname(cert_path), exist_ok=True) + with open(cert_path, "wb") as f: + # write public cert as PEM (public only) + f.write(cert.public_bytes(serialization.Encoding.PEM)) + + except ImportError as e: + raise Exception("cryptography package is required for certificate generation. ") + + @ResourceGroupPreparer('cli_test_vpn_client_package') + def test_vpn_client_package(self, resource_group): + import tempfile + import shutil + + # create a temporary folder for generated public root cert + temp_dir = tempfile.mkdtemp() + cert_path = os.path.join(temp_dir, 'VpnGatewayAuthCert.cer') + + try: + # generate a root cert public file dynamically (avoid static cert dependency) + self._generate_p2s_root_cert_public_file(cert_path) + + self.kwargs.update({ + 'vnet': 'vnet1', + 'public_ip': 'pip1', + 'gateway_prefix': '100.1.1.0/24', + 'gateway': 'vgw1', + 'gw_sku': 'VpnGw1AZ', + 'cert': 'cert1', + 'cert_path': cert_path, + }) + + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n {public_ip}') + self.cmd('network vnet-gateway create -g {rg} -n {gateway} --address-prefix {gateway_prefix} --vnet {vnet} --public-ip-address {public_ip} --sku {gw_sku}') + self.cmd('network vnet-gateway root-cert create -g {rg} --gateway-name {gateway} -n {cert} --public-cert-data "{cert_path}"') + + # test vnet-gateway revoked-cert create + self.cmd('network vnet-gateway revoked-cert create -g {rg} -n MyCer --gateway-name {gateway} --thumbprint e806da0b7fe24f47e76fa269dc4ed76dac4b39d0') + + # test vnet-gateway revoked-cert delete + self.cmd('network vnet-gateway revoked-cert delete -g {rg} -n MyCer --gateway-name {gateway}') + + output = self.cmd('network vnet-gateway vpn-client generate -g {rg} -n {gateway}').get_output_in_json() + self.assertTrue('.zip' in output, 'Expected ZIP file in output.\nActual: {}'.format(str(output))) + + output = self.cmd('network vnet-gateway vpn-client show-url -g {rg} -n {gateway}').get_output_in_json() + self.assertTrue('.zip' in output, 'Expected ZIP file in output.\nActual: {}'.format(str(output))) + + self.cmd('network vnet-gateway vpn-client ipsec-policy set -g {rg} -n {gateway} --ike-encryption AES256 --ike-integrity SHA384 --dh-group DHGroup24 --ipsec-encryption GCMAES256 --ipsec-integrity GCMAES256 --pfs-group PFS24 --sa-lifetime 7200 --sa-max-size 2048') + self.cmd('network vnet-gateway vpn-client ipsec-policy show -g {rg} -n {gateway}', checks=[ + self.check('dhGroup', 'DHGroup24'), + self.check('ikeEncryption', 'AES256'), + self.check('ikeIntegrity', 'SHA384'), + self.check('ipsecEncryption', 'GCMAES256'), + self.check('ipsecIntegrity', 'GCMAES256'), + self.check('pfsGroup', 'PFS24'), + self.check('saDataSizeKilobytes', 2048), + self.check('saLifeTimeSeconds', 7200), + ]) + + finally: + if os.path.exists(temp_dir): + shutil.rmtree(temp_dir) + + +class NetworkTrafficManagerScenarioTest(ScenarioTest): + + @ResourceGroupPreparer('cli_test_traffic_manager') + def test_network_traffic_manager(self, resource_group): + + self.kwargs.update({ + 'tm': 'mytmprofile', + 'endpoint': 'myendpoint', + 'dns': 'mytrafficmanager001100a' + }) + + self.cmd('network traffic-manager profile check-dns -n myfoobar1') + self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method priority --unique-dns-name {dns} --tags foo=doo', + checks=self.check('TrafficManagerProfile.trafficRoutingMethod', 'Priority')) + self.cmd('network traffic-manager profile show -g {rg} -n {tm}', + checks=self.check('dnsConfig.relativeName', '{dns}')) + self.cmd('network traffic-manager profile update -n {tm} -g {rg} --routing-method weighted --tags foo=boo', + checks=self.check('trafficRoutingMethod', 'Weighted')) + self.cmd('network traffic-manager profile list -g {rg}') + + # Endpoint tests + self.cmd('network traffic-manager endpoint create -n {endpoint} --profile-name {tm} -g {rg} --type externalEndpoints --weight 50 --target www.microsoft.com', + checks=self.check('type', 'Microsoft.Network/trafficManagerProfiles/externalEndpoints')) + self.cmd('network traffic-manager endpoint update -n {endpoint} --profile-name {tm} -g {rg} --type externalEndpoints --weight 25 --target www.contoso.com', checks=[ + self.check('weight', 25), + self.check('target', 'www.contoso.com') + ]) + self.cmd('network traffic-manager endpoint show -g {rg} --profile-name {tm} -t externalEndpoints -n {endpoint}') + self.cmd('network traffic-manager endpoint list -g {rg} --profile-name {tm} -t externalEndpoints', + checks=self.check('length(@)', 1)) + + # test show-geographic-hierarchy + self.cmd('network traffic-manager endpoint show-geographic-hierarchy', checks=[ + self.check('type', 'Microsoft.Network/trafficManagerGeographicHierarchies') + ]) + + # ensure a profile with endpoints can be updated + self.cmd('network traffic-manager profile update -n {tm} -g {rg}') + + self.cmd('network traffic-manager endpoint delete -g {rg} --profile-name {tm} -t externalEndpoints -n {endpoint}') + self.cmd('network traffic-manager endpoint list -g {rg} --profile-name {tm} -t externalEndpoints', + checks=self.check('length(@)', 0)) + + self.cmd('network traffic-manager profile delete -g {rg} -n {tm}') + + @ResourceGroupPreparer('cli_test_traffic_manager2') + def test_network_traffic_manager2(self, resource_group): + self.kwargs.update({ + 'tm': 'mytmprofile2', + 'dns': 'mytrafficmanager001100a2' + }) + self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method Multivalue --unique-dns-name {dns} --max-return 3 --tags foo=doo', + checks=self.check('TrafficManagerProfile.trafficRoutingMethod', 'MultiValue')) + + self.cmd('network traffic-manager profile update -n {tm} -g {rg} --routing-method MultiValue --max-return 4 --tags foo=boo', + checks=self.check('maxReturn', 4)) + + @ResourceGroupPreparer('cli_test_traffic_manager_subnet') + def test_network_traffic_manager_subnet_routing(self, resource_group): + + self.kwargs.update({ + 'tm': 'tm1', + 'endpoint': 'ep1', + 'dns': self.create_random_name('testtm', 20), + 'pip': 'ip1', + 'ip_dns': self.create_random_name('testpip', 20) + }) + + self.cmd('network traffic-manager profile create -n {tm} -g {rg} --routing-method subnet --unique-dns-name {dns} --custom-headers foo=bar --status-code-ranges 200-202', checks=[ + self.check('TrafficManagerProfile.monitorConfig.expectedStatusCodeRanges[0].min', 200), + self.check('TrafficManagerProfile.monitorConfig.expectedStatusCodeRanges[0].max', 202), + self.check('TrafficManagerProfile.monitorConfig.customHeaders[0].name', 'foo'), + self.check('TrafficManagerProfile.monitorConfig.customHeaders[0].value', 'bar') + ]) + self.kwargs['ip_id'] = self.cmd('network public-ip create -g {rg} -n {pip} --dns-name {ip_dns} --query publicIp.id').get_output_in_json() + self.cmd('network traffic-manager profile update -n {tm} -g {rg} --status-code-ranges 200-204 --custom-headers foo=doo test=best', checks=[ + self.check('monitorConfig.expectedStatusCodeRanges[0].min', 200), + self.check('monitorConfig.expectedStatusCodeRanges[0].max', 204), + self.check('monitorConfig.customHeaders[0].name', 'foo'), + self.check('monitorConfig.customHeaders[0].value', 'doo'), + self.check('monitorConfig.customHeaders[1].name', 'test'), + self.check('monitorConfig.customHeaders[1].value', 'best') + ]) + + # Endpoint tests + self.cmd('network traffic-manager endpoint create -n {endpoint} --profile-name {tm} -g {rg} --type azureEndpoints --target-resource-id {ip_id} --subnets 10.0.0.0 --custom-headers test=best', checks=[ + self.check('customHeaders[0].name', 'test'), + self.check('customHeaders[0].value', 'best'), + self.check('subnets[0].first', '10.0.0.0') + ]) + self.cmd('network traffic-manager endpoint update -n {endpoint} --type azureEndpoints --profile-name {tm} -g {rg} --subnets 10.0.0.0:24', checks=[ + self.check('subnets[0].first', '10.0.0.0'), + self.check('subnets[0].scope', '24') + ]) + self.cmd('network traffic-manager endpoint update -n {endpoint} --type azureEndpoints --profile-name {tm} -g {rg} --subnets 10.0.0.0-11.0.0.0', checks=[ + self.check('subnets[0].first', '10.0.0.0'), + self.check('subnets[0].last', '11.0.0.0') + ]) + + @ResourceGroupPreparer('cli_test_traffic_manager_always_serve') + def test_network_traffic_manager_always_serve(self, resource_group): + self.kwargs.update({ + "profile": self.create_random_name("profile-", 12), + "endpoint": self.create_random_name("endpoint-", 16), + "dns": "mytrafficmanager001100a1", + }) + + self.cmd("network traffic-manager profile create -n {profile} -g {rg} --routing-method weighted --unique-dns-name {dns}") + self.cmd( + "network traffic-manager endpoint create -n {endpoint} -g {rg} --profile-name {profile} " + "--type externalEndpoints --weight 50 --target www.microsoft.com --always-serve Enabled", + checks=[ + self.check("type", "Microsoft.Network/trafficManagerProfiles/externalEndpoints"), + self.check("alwaysServe", "Enabled"), + ] + ) + self.cmd( + "network traffic-manager endpoint update -n {endpoint} -g {rg} --profile-name {profile} " + "--type externalEndpoints --weight 25 --target www.contoso.com --always-serve Disabled", + checks=[ + self.check("weight", 25), + self.check("target", "www.contoso.com"), + self.check("alwaysServe", "Disabled"), + ] + ) + + +class NetworkWatcherConfigureScenarioTest(LiveScenarioTest): + + @ResourceGroupPreparer(name_prefix='cli_test_nw', location='westcentralus') + def test_network_watcher_configure(self, resource_group): + self.cmd('network watcher configure -g {rg} --locations westus westus2 westcentralus eastus canadaeast --enabled') + self.cmd('network watcher configure --locations westus westus2 eastus canadaeast --tags foo=doo') + self.cmd('network watcher configure -l westus2 --enabled false') + self.cmd('network watcher list') + + +class NetworkWatcherScenarioTest(ScenarioTest): + from unittest import mock + + def _mock_thread_count(self): + return 1 + + @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) + @ResourceGroupPreparer(name_prefix='cli_test_nw_vm', location='westcentralus') + @AllowLargeResponse() + def test_network_watcher_vm(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'loc': 'westcentralus', + 'vm': 'vm1', + 'nsg': 'nsg1', + 'capture': 'capture1', + 'private-ip': '10.0.0.9', + 'subnet': 'subnet1', + 'vnet': 'vnet1' + }) + + vm = self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --authentication-type password --admin-username deploy ' + '--admin-password PassPass10!) --nsg {nsg} --nsg-rule None --private-ip-address {private-ip} --subnet {subnet} --vnet-name {vnet}').get_output_in_json() + + # Disable default outbound access + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') + + self.kwargs['vm_id'] = vm['id'] + self.cmd('vm extension set -g {rg} --vm-name {vm} -n NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher') + + self.cmd('network watcher test-connectivity -g {rg} --source-resource {vm} --dest-address www.microsoft.com --dest-port 80 --valid-status-codes 200 202') + self.cmd('network watcher run-configuration-diagnostic --resource {vm_id} --direction Inbound --protocol TCP --source 12.11.12.14 --destination 10.1.1.4 --port 12100') + self.cmd('network watcher show-topology -g {rg}') + self.cmd('network watcher test-ip-flow -g {rg} --vm {vm} --direction inbound --local {private-ip}:22 --protocol tcp --remote 100.1.2.3:*') + self.cmd('network watcher test-ip-flow -g {rg} --vm {vm} --direction outbound --local {private-ip}:* --protocol tcp --remote 100.1.2.3:80') + self.cmd('network watcher show-security-group-view -g {rg} --vm {vm}') + self.cmd('network watcher show-next-hop -g {rg} --vm {vm} --source-ip 10.0.0.9 --dest-ip 10.0.0.6') + + @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) + @ResourceGroupPreparer(name_prefix='cli_test_nw_packet_capture', location='westus2') + @AllowLargeResponse() + def test_network_watcher_packet_capture(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'loc': resource_group_location, + 'vm': 'vm1', + 'capture1': 'capture1', + 'capture2': 'capture2', + 'subnet': 'subnet1', + 'vnet': 'vnet1' + }) + + self.cmd('vm create -g {rg} -n {vm} --image Canonical:UbuntuServer:18.04-LTS:latest --authentication-type password --admin-username deploy ' + '--admin-password PassPass10!) --nsg {vm} --subnet {subnet} --vnet-name {vnet} --nsg-rule None') + + # Disable default outbound access + self.cmd('network vnet subnet update -g {rg} --vnet-name {vnet} -n {subnet} --default-outbound-access false') + + self.cmd('vm extension set -g {rg} --vm-name {vm} -n NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher') + + self.cmd('network watcher packet-capture create -g {rg} --vm {vm} -n {capture1} --file-path capture/capture.cap') + self.cmd('network watcher packet-capture create -g {rg} --vm {vm} -n {capture2} --file-path capture/capture.cap --target-type AzureVM') + self.cmd('network watcher packet-capture show -l {loc} -n {capture1}') + self.cmd('network watcher packet-capture stop -l {loc} -n {capture1}') + self.cmd('network watcher packet-capture show-status -l {loc} -n {capture1}') + self.cmd('network watcher packet-capture list -l {loc}') + self.cmd('network watcher packet-capture delete -l {loc} -n {capture1}') + self.cmd('network watcher packet-capture delete -l {loc} -n {capture2}') + self.cmd('network watcher packet-capture list -l {loc}') + + @mock.patch('azure.cli.command_modules.vm._actions._get_thread_count', _mock_thread_count) + @ResourceGroupPreparer(name_prefix='cli_test_nw_packet_capture_vmss_as_target', location='westcentralus') + @AllowLargeResponse() + def test_network_watcher_packet_capture_vmss_as_target(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'loc': resource_group_location, + 'vmss': 'vmssForPcap', + 'capture': 'captureVmss', + 'capture1': 'captureVMSS1', + 'capture2': 'captureVMSS2' + }) + self.cmd('vmss create -g {rg} --name {vmss} --image Canonical:UbuntuServer:18.04-LTS:latest --location {loc} --admin-username azureuser --generate-ssh-keys --upgrade-policy-mode Automatic') + self.cmd('vmss extension set --name NetworkWatcherAgentLinux --publisher Microsoft.Azure.NetworkWatcher --resource-group {rg} --vmss-name {vmss}') + + self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture} --target-type AzureVMSS --file-path capture/capture.cap', checks=[ + self.check('provisioningState', 'Succeeded') + ]) + self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture1} --target-type AzureVMSS --file-path capture/capture.cap --exclude 1') + self.cmd('network watcher packet-capture create -g {rg} --target {vmss} -n {capture2} --target-type AzureVMSS --file-path capture/capture.cap --include 0 1') + self.cmd('network watcher packet-capture show -l {loc} -n {capture}') + self.cmd('network watcher packet-capture stop -l {loc} -n {capture}') + self.cmd('network watcher packet-capture show-status -l {loc} -n {capture}') + self.cmd('network watcher packet-capture list -l {loc}') + self.cmd('network watcher packet-capture delete -l {loc} -n {capture}') + self.cmd('network watcher packet-capture delete -l {loc} -n {capture1}') + self.cmd('network watcher packet-capture delete -l {loc} -n {capture2}') + self.cmd('network watcher packet-capture list -l {loc}') + + @ResourceGroupPreparer(name_prefix='cli_test_nw_troubleshooting', location='westcentralus') + @StorageAccountPreparer(name_prefix='clitestnw', location='westcentralus') + @AllowLargeResponse() + def test_network_watcher_troubleshooting(self, resource_group, resource_group_location, storage_account): + + self.kwargs.update({ + 'loc': resource_group_location, + 'sa': storage_account + }) + + # set up resource to troubleshoot + self.cmd('storage container create -n troubleshooting --account-name {sa}') + sa = self.cmd('storage account show -g {rg} -n {sa}').get_output_in_json() + self.kwargs['storage_path'] = sa['primaryEndpoints']['blob'] + 'troubleshooting' + self.cmd('network vnet create -g {rg} -n vnet1 --subnet-name GatewaySubnet') + self.cmd('network public-ip create -g {rg} -n vgw1-pip') + self.cmd('network vnet-gateway create -g {rg} -n vgw1 --vnet vnet1 --public-ip-address vgw1-pip') + + # test troubleshooting + self.cmd('network watcher troubleshooting start --resource vgw1 -t vnetGateway -g {rg} --storage-account {sa} --storage-path {storage_path}') + self.cmd('network watcher troubleshooting show --resource vgw1 -t vnetGateway -g {rg}') + + +class ServiceEndpointScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='network_service_endpoint_scenario_test', location='westcentralus') + def test_network_service_endpoints(self, resource_group, resource_group_location): + + self.kwargs.update({ + 'policy': 'policy1', + 'pd_name': 'storage-def', + 'sub': self.get_subscription_id(), + 'vnet': 'vnet1', + 'subnet': 'subnet1', + 'loc': resource_group_location + }) + + self.cmd('network service-endpoint list -l {loc}') + + # test policy CRUD + self.cmd('network service-endpoint policy create -g {rg} -n {policy} --tags test=best', + checks=self.check('tags.test', 'best')) + self.cmd('network service-endpoint policy update -g {rg} -n {policy} --tags test=nest', + checks=self.check('tags.test', 'nest')) + self.cmd('network service-endpoint policy list -g {rg}', + checks=self.check('length(@)', 1)) + self.cmd('network service-endpoint policy show -g {rg} -n {policy}', + checks=self.check('tags.test', 'nest')) + self.cmd('network service-endpoint policy delete -g {rg} -n {policy}') + self.cmd('network service-endpoint policy list -g {rg}', + checks=self.check('length(@)', 0)) + + # test policy definition CRUD + self.cmd('network service-endpoint policy create -g {rg} -n {policy} --tags test=best') + self.cmd('network service-endpoint policy-definition create -g {rg} --policy-name {policy} -n {pd_name} --service Microsoft.Storage --description "Test Def" --service-resources /subscriptions/{sub}', checks=[ + self.check("length(serviceResources)", 1), + self.check('service', 'Microsoft.Storage'), + self.check('description', 'Test Def') + ]) + self.cmd('network service-endpoint policy-definition update -g {rg} --policy-name {policy} -n {pd_name} --description "Better description"', + self.check('description', 'Better description')) + self.cmd('network service-endpoint policy-definition list -g {rg} --policy-name {policy}', + checks=self.check('length(@)', 1)) + self.cmd('network service-endpoint policy-definition show -g {rg} --policy-name {policy} -n {pd_name}', + checks=self.check('description', 'Better description')) + self.cmd('network service-endpoint policy-definition delete -g {rg} --policy-name {policy} -n {pd_name}') + self.cmd('network service-endpoint policy-definition list -g {rg} --policy-name {policy}', + checks=self.check('length(@)', 0)) + + # create a subnet with the policy + self.cmd('network service-endpoint policy-definition create -g {rg} --policy-name {policy} -n {pd_name} --service Microsoft.Storage --service-resources /subscriptions/{sub}') + self.cmd('network vnet create -g {rg} -n {vnet}') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n {subnet} --address-prefix 10.0.0.0/24 --service-endpoints Microsoft.Storage --service-endpoint-policy {policy} --default-outbound false', + checks=self.check("contains(serviceEndpointPolicies[0].id, '{policy}')", True)) + + +class NetworkProfileScenarioTest(ScenarioTest): + + @live_only() + @ResourceGroupPreparer(name_prefix='test_network_profile') + def test_network_profile(self, resource_group): + + # no e2e scenario without create. Testing path to service only. + self.cmd('network profile list') + self.cmd('network profile list -g {rg}') + with self.assertRaisesRegex(SystemExit, '3'): + self.cmd('network profile show -g {rg} -n dummy') + self.cmd('network profile delete -g {rg} -n dummy -y') + + +class NetworkServiceAliasesScenarioTest(ScenarioTest): + + @AllowLargeResponse(size_kb=99999) + @ResourceGroupPreparer(name_prefix='test_network_service_aliases') + def test_network_service_aliases(self, resource_group): + self.kwargs.update({ + 'rg': resource_group + }) + self.cmd('network list-service-aliases -l centralus', checks=self.check('type(@)', 'array')) + self.cmd('network list-service-aliases -l centralus -g {rg}', checks=self.check('type(@)', 'array')) + + # test list-service-tags + self.cmd('network list-service-tags -l centralus', checks=self.check('type(@)', 'object')) + + +class NetworkVirtualNetworkGatewayNatRule(ScenarioTest): + + @ResourceGroupPreparer() + def test_network_vnet_gateway_nat_rule(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'ip': 'ip', + 'ip1': 'ip1', + 'vnet': 'vnet', + 'vnet1': 'vnet1', + 'subnet': 'GatewaySubnet', + 'vg': 'vnet-gateway-name', + 'vg1': 'vnet-gateway-name1', + 'sku': 'VpnGw2', + }) + + # minimal parameters + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku} ' + '--nat-rule name=nat internal-mappings=10.4.0.0/24 external-mappings=192.168.21.0/24 ', + checks=[self.check('length(vnetGateway.natRules)', 1)]) + self.cmd("network vnet-gateway show -n {vg} -g {rg}") + self.cmd("network vnet-gateway list -g {rg}") + + # minimal parameters(ip-config-id can only be set when type is Dynamic, and only allowlist sub-ids support Dynamic) + self.cmd('network public-ip create -g {rg} -n {ip1}') + self.cmd('network vnet create -g {rg} -n {vnet1} --subnet-name {subnet}') + self.cmd('network vnet-gateway create -g {rg} -n {vg1} --vnet {vnet1} --public-ip-address {ip1} --sku {sku} ' + '--nat-rule name=nat type=Static mode=EgressSnat internal-mappings=10.4.0.0/24 ' + 'external-mappings=192.168.21.0/24', + checks=[self.check('length(vnetGateway.natRules)', 1)]) + + # test vnet-gateway reset + self.cmd('network vnet-gateway reset -g {rg} -n {vg}') + + @ResourceGroupPreparer() + def test_network_vnet_gateway_nat_rule_sub_cmd(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'ip': 'ip', + 'vnet': 'vnet', + 'subnet': 'GatewaySubnet', + 'vg': 'vnet-gateway-name', + 'sku': 'VpnGw2', + 'nat': 'nat-rule-name', + 'nat1': 'nat-rule-name1', + }) + + # minimal parameters + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network vnet-gateway create -g {rg} -n {vg} --vnet {vnet} --public-ip-address {ip} --sku {sku}') + + # sub cmd + self.cmd('network vnet-gateway nat-rule add -g {rg} --gateway-name {vg} --name {nat} ' + '--internal-mappings 10.4.0.0/24 --external-mappings 192.168.21.0/24', + checks=[self.check('length(natRules)', 1)]) + + self.cmd('network vnet-gateway nat-rule add -g {rg} --gateway-name {vg} --name {nat1} ' + '--internal-mappings 10.3.0.0/24 --external-mappings 192.168.22.0/24', + checks=[self.check('length(natRules)', 2)]) + + self.cmd('network vnet-gateway nat-rule list -g {rg} --gateway-name {vg} ', + checks=[self.check('length(@)', 2)]) + + self.cmd('network vnet-gateway nat-rule remove -g {rg} --gateway-name {vg} --name {nat}', + checks=[self.check('length(natRules)', 1)]) + + +class NetworkSecurityPartnerProviderScenarioTest(ScenarioTest): + def __init__(self, method_name, config_file=None, recording_dir=None, recording_name=None, recording_processors=None, + replay_processors=None, recording_patches=None, replay_patches=None): + super().__init__(method_name) + self.cmd('extension add -n virtual-wan') + + @unittest.skip('Decouple with virtual-wan bump API version') + @ResourceGroupPreparer(name_prefix='cli_test_security_partner_provider_', location='westus') + @AllowLargeResponse() + def test_network_security_partner_provider(self): + self.kwargs.update({ + 'vwan': 'clitestvwan', + 'vhub': 'clitestvhub', + 'gateway': 'cligateway', + 'name': 'clisecuritypartnerprovider' + }) + + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') + self.cmd('network vpn-gateway create -g {rg} -n {gateway} --vhub {vhub}') + + self.cmd('network security-partner-provider create -n {name} -g {rg} --vhub {vhub} --provider Checkpoint', checks=[ + self.check('name', '{name}'), + self.check('securityProviderName', 'Checkpoint') + ]) + self.cmd('network security-partner-provider show -n {name} -g {rg}', checks=[ + self.check('name', '{name}'), + self.check('securityProviderName', 'Checkpoint') + ]) + self.cmd('network security-partner-provider update -n {name} -g {rg} --tag a=b', checks=[ + self.check('tags.a', 'b') + ]) + self.cmd('network security-partner-provider list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network security-partner-provider list', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network security-partner-provider delete -n {name} -g {rg}') + + +class NetworkVirtualApplianceScenarioTest(ScenarioTest): + def setUp(self): + super().setUp() + self.cmd('extension add -n virtual-wan') + + def tearDown(self): + # avoid influence other test when parallel run + # self.cmd('extension remove -n virtual-wan') + super().tearDown() + + @unittest.skip('GatewayError') + @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance') + @AllowLargeResponse() + def test_network_virtual_appliance(self, resource_group): + self.kwargs.update({ + 'vwan': 'clitestvwan', + 'vhub': 'clitestvhub', + 'name': 'cli-virtual-appliance', + 'site': 'cli-site', + 'blob': 'https://azurecliprod.blob.core.windows.net/cli-extensions/account-0.1.0-py2.py3-none-any.whl', + 'rg': resource_group + }) + + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') + + self.cmd('network virtual-appliance create -n {name} -g {rg} --vhub {vhub} --vendor "barracudasdwanrelease" ' + '--scale-unit 2 -v latest --asn 10000 --init-config "echo $abc" ' + '--boot-blobs {blob} {blob} --cloud-blobs {blob} {blob}', + checks=[ + self.check('name', '{name}'), + self.check('length(bootStrapConfigurationBlobs)', 2), + self.check('length(cloudInitConfigurationBlobs)', 2), + self.check('virtualApplianceAsn', 10000), + self.check('cloudInitConfiguration', "echo $abc") + ]) + self.cmd('network virtual-appliance update -n {name} -g {rg} --asn 20000 --init-config "echo $abcd"', checks=[ + self.check('virtualApplianceAsn', 20000), + self.check('cloudInitConfiguration', "echo $abcd") + ]) + self.cmd('network virtual-appliance show -n {name} -g {rg}', checks=[ + self.check('name', '{name}'), + self.check('length(bootStrapConfigurationBlobs)', 2), + self.check('length(cloudInitConfigurationBlobs)', 2), + self.check('virtualApplianceAsn', 20000), + self.check('cloudInitConfiguration', "echo $abcd") + ]) + self.cmd('network virtual-appliance list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + self.cmd('network virtual-appliance list', checks=[ + self.check('length(@)', 1) + ]) + + self.cmd('network virtual-appliance sku list', checks=[ + self.check('length(@)', 3) + ]) + self.cmd('network virtual-appliance sku show --name "barracudasdwanrelease"', checks=[ + self.check('name', 'barracudasdwanrelease') + ]) + + self.cmd('network virtual-appliance site create -n {site} -g {rg} --appliance-name {name} --address-prefix 10.0.0.0/24 --allow --default --optimize', checks=[ + self.check('name', '{site}'), + self.check('o365Policy.breakOutCategories.allow', True), + self.check('o365Policy.breakOutCategories.default', True), + self.check('o365Policy.breakOutCategories.optimize', True), + self.check('addressPrefix', '10.0.0.0/24') + ]) + self.cmd('network virtual-appliance site update -n {site} -g {rg} --appliance-name {name} --address-prefix 10.0.0.1/24 --allow false --default false --optimize false', checks=[ + self.check('name', '{site}'), + self.check('o365Policy.breakOutCategories.allow', False), + self.check('o365Policy.breakOutCategories.default', False), + self.check('o365Policy.breakOutCategories.optimize', False), + self.check('addressPrefix', '10.0.0.1/24') + ]) + self.cmd('network virtual-appliance site show -n {site} -g {rg} --appliance-name {name}', checks=[ + self.check('name', '{site}'), + self.check('o365Policy.breakOutCategories.allow', False), + self.check('o365Policy.breakOutCategories.default', False), + self.check('o365Policy.breakOutCategories.optimize', False), + self.check('addressPrefix', '10.0.0.1/24') + ]) + self.cmd('network virtual-appliance site list -g {rg} --appliance-name {name}', checks=[ + # self.check('length(@)', 1) + ]) + self.cmd('network virtual-appliance site delete -n {site} -g {rg} --appliance-name {name} -y') + self.cmd('network virtual-appliance delete -n {name} -g {rg} -y') + + + +class NetworkVirtualApplianceIdentityScenarioTest(ScenarioTest): + @live_only() + @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance_identity') + @AllowLargeResponse(size_kb=9999) + def test_network_virtual_appliance_identity(self, resource_group): + from time import sleep + self.kwargs.update({ + 'vwan': 'clitestvwan', + 'vhub': 'clittestvhub', + 'nva_name1': 'cli-virtual-appliance1', + 'nva_name2': 'cli-virtual-appliance2', + 'nva_name3': 'cli-virtual-appliance3', + 'nva_name4': 'cli-virtual-appliance4', + 'nva_name5': 'cli-virtual-appliance5', + 'nva_name6': 'cli-virtual-appliance6', + 'rg': resource_group, + 'ua_Identity1': 'cli-ua-identity1', + 'ua_Identity2': 'cli-ua-identity2' + }) + self.cmd('extension add -n virtual-wan') + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + retry_count = 0 + while routing_state != 'Provisioned': + if retry_count == 20: + break + retry_count += 1 + sleep(360) + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + identityProperty1 = '{"type":"SystemAssigned"}' + self.kwargs.update({ + 'identityProperty1': identityProperty1 + }) + self.cmd('network virtual-appliance create -n {nva_name3} -g {rg} --vhub {vhub} --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', + checks=[ + self.check('name', '{nva_name3}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance show -g {rg} -n {nva_name3}', + checks=[ + self.check('name', '{nva_name3}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance create -n {nva_name4} -g {rg} --vhub {vhub} --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', + checks=[ + self.check('name', '{nva_name4}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance show -g {rg} -n {nva_name4}', + checks=[ + self.check('name', '{nva_name4}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance create -n {nva_name1} -g {rg} --vhub {vhub} --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" --identity {identityProperty1}', + checks=[ + self.check('name', '{nva_name1}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'SystemAssigned') + ]) + self.cmd('network virtual-appliance show -g {rg} -n {nva_name1}', + checks=[ + self.check('name', '{nva_name1}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'SystemAssigned') + ]) + self.cmd('network virtual-appliance delete -n {nva_name1} -g {rg} -y') + self.cmd('identity create -g {rg} -n {ua_Identity1}').get_output_in_json() + subscriptionId = self.get_subscription_id() + uaIdentity1 = self.kwargs.get('ua_Identity1') + resourceGroup = self.kwargs.get('rg') + identityProperty2 = '{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/"' + subscriptionId + '"/resourceGroups/"' + resourceGroup + '"/providers/Microsoft.ManagedIdentity/userAssignedIdentities/"' + uaIdentity1 + ':{}}}' + self.kwargs.update({ + 'identityProperty2': identityProperty2 + }) + self.cmd('network virtual-appliance create -n {nva_name2} -g {rg} --vhub {vhub} --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" --identity {identityProperty2} ', + checks=[ + self.check('name', '{nva_name2}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'UserAssigned') + ]) + self.cmd('network virtual-appliance show -g {rg} -n {nva_name2}', + checks=[ + self.check('name', '{nva_name2}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'UserAssigned') + ]) + self.cmd('network virtual-appliance delete -n {nva_name2} -g {rg} -y') + identityProperty3 = '{"type":"SystemAssigned"}' + self.kwargs.update({ + 'identityProperty3': identityProperty3 + }) + self.cmd('network virtual-appliance update -g {rg} -n {nva_name3} --identity {identityProperty3}', + checks=[ + self.check('name', '{nva_name3}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'SystemAssigned') + ]) + self.cmd('network virtual-appliance delete -n {nva_name3} -g {rg} -y') + + self.cmd('identity create -g {rg} -n {ua_Identity2}').get_output_in_json() + uaIdentity2 = self.kwargs.get('ua_Identity2') + identityProperty4 = '{"type":"UserAssigned","userAssignedIdentities":{"/subscriptions/"' + subscriptionId + '"/resourceGroups/"' + resourceGroup + '"/providers/Microsoft.ManagedIdentity/userAssignedIdentities/"' + uaIdentity2 + ':{}}}' + self.kwargs.update({ + 'identityProperty4': identityProperty4 + }) + self.cmd('network virtual-appliance update -g {rg} -n {nva_name4} --identity {identityProperty4}', + checks=[ + self.check('name', '{nva_name4}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc'), + self.check('identity.type', 'UserAssigned') + ]) + self.cmd('network virtual-appliance delete -n {nva_name4} -g {rg} -y') + +class NetworkVirtualApplianceConnectionScenarioTest(ScenarioTest): + @live_only() + @ResourceGroupPreparer(location='westcentralus', name_prefix='test_network_virtual_appliance_connection') + @AllowLargeResponse(size_kb=9999) + def test_network_virtual_appliance_connection(self, resource_group): + from time import sleep + subscriptionId = self.get_subscription_id() + self.kwargs.update({ + 'vwan': 'clitestvwan', + 'vhub': 'clittestvhub', + 'nva_name': 'clivirtualappliance', + 'rg': resource_group, + 'name': 'defaultConnection', + 'subscription': subscriptionId + }) + self.cmd('extension add -n virtual-wan') + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard') + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard') + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + retry_count = 0 + while routing_state != 'Provisioned': + if retry_count == 20: + break + retry_count += 1 + sleep(360) + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + self.cmd('network virtual-appliance create -n {nva_name} -g {rg} --vhub {vhub} --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc" ', + checks=[ + self.check('name', '{nva_name}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', + checks=[ + self.check('name', '{nva_name}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + self.cmd('network virtual-appliance connection show -n {name} -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ + self.check('name', '{name}') + ]) + + self.cmd('network virtual-appliance connection list -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ + self.check('length(@)', 1) + ]) + + self.cmd('network virtual-appliance connection update ' + '-n {name} ' + '-g {rg} ' + '--nva {nva_name} ' + '--labels [label1,label2] ') + + self.cmd('network virtual-appliance connection show -n {name} -g {rg} --nva {nva_name} --subscription {subscription}', checks=[ + self.check('length(properties.routingConfiguration.propagatedRouteTables.labels)', 2), + self.check('properties.routingConfiguration.propagatedRouteTables.labels[0]', 'label1') + ]) + + @record_only() + def test_get_boot(self): + self.cmd('network virtual-appliance get-boot-diagnostic-log -n chkptbd1031 -g nashoktest --scs-sas-url "https://stonashoktest.blob.core.windows.net/testcontainer/example.txt?sp=rw&st=2025-03-07T03:47:49Z&se=2025-03-08T11:47:49Z&skoid=7f5b7efd-fa3f-4fbd-9430-8cf0f0ca6822&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2025-03-07T03:47:49Z&ske=2025-03-08T11:47:49Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=b&sig=TOSsTfWx3e6ti7YLmeYms%2B3hAwMUSTlilE%2F08iht%2BUc%3D" --css-sas-url "https://stonashoktest.blob.core.windows.net/testcontainer/pstestscreenshot.png?sp=rw&st=2025-03-07T03:48:23Z&se=2025-03-08T11:48:23Z&skoid=7f5b7efd-fa3f-4fbd-9430-8cf0f0ca6822&sktid=72f988bf-86f1-41af-91ab-2d7cd011db47&skt=2025-03-07T03:48:23Z&ske=2025-03-08T11:48:23Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=b&sig=4rU9xYe4T6t8GDUI0SVOhywiQWxIEtRSytpzq0xKwWY%3D"') + + +class NetworkVirtualApplianceReimageScenarioTest(ScenarioTest): + @live_only() + @ResourceGroupPreparer(location='eastus2euap', name_prefix='test_network_virtual_appliance_reimage') + @AllowLargeResponse(size_kb=9999) + def test_network_virtual_appliance_reimage(self, resource_group): + from time import sleep + + # Variables to use in the test + subscriptionId = self.get_subscription_id() + self.kwargs.update({ + 'vwan': 'clitestvwan', # Virtual WAN name + 'vhub': 'clivhub', # Virtual Hub name + 'nva_name': 'clivirtualappliancereimage', # NVA name + 'rg': resource_group, + 'name': 'defaultConnection', + 'subscription': subscriptionId, + 'instance_id' : 0 + }) + + # Add the required extension + self.cmd('extension add -n virtual-wan') + + # Create Virtual WAN + self.cmd('network vwan create -n {vwan} -g {rg} --type Standard', checks=[ + self.check('name', '{vwan}'), + self.check('type', 'Microsoft.Network/virtualWans') + ]) + + # Create Virtual Hub within the Virtual WAN + self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.5.0.0/16 --sku Standard', checks=[ + self.check('name', '{vhub}'), + ]) + + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + retry_count = 0 + while routing_state != 'Provisioned': + if retry_count == 20: + break + retry_count += 1 + sleep(360) + routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] + + # Create the NVA + self.cmd('network virtual-appliance create -n {nva_name} -g {rg} --vhub clivhub --vendor "checkpoint" ' + '--scale-unit 2 -v latest --asn 64512 --init-config "echo $abc"', + checks=[ + self.check('name', '{nva_name}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + + # Verify the NVA exists + self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', + checks=[ + self.check('name', '{nva_name}'), + self.check('virtualApplianceAsn', 64512), + self.check('cloudInitConfiguration', 'echo $abc') + ]) + + # Trigger the reimage operation (you won't get useful data in response, just confirm the request is accepted) + response = self.cmd('network virtual-appliance reimage -g {rg} --network-virtual-appliance-name {nva_name} --subscription {subscription} --instance-ids {instance_id}') + + # Wait for the reimage operation to complete and check provisioning state + provisioning_state = self.cmd('network virtual-appliance show -g {rg} -n {nva_name}').get_output_in_json()['provisioningState'] + retry_count = 0 + while provisioning_state != 'Succeeded': + if retry_count == 20: + raise Exception(f"Reimage operation did not complete successfully. Last known provisioningState: {provisioning_state}") + retry_count += 1 + sleep(60) + provisioning_state = self.cmd('network virtual-appliance show -g {rg} -n {nva_name}').get_output_in_json()['provisioningState'] + + # Ensure that the provisioning state is 'Succeeded' after reimaging + self.cmd('network virtual-appliance show -g {rg} -n {nva_name}', + checks=[ + self.check('provisioningState', 'Succeeded') + ]) + +class NetworkVirtualApplianceVnetScenarioTest(ScenarioTest): + + @AllowLargeResponse() + @ResourceGroupPreparer(location='eastus2euap', name_prefix='test_nva_vnet') + def test_network_virtual_appliance_vnet_interface_config(self, resource_group): + from time import sleep + + def _get_request_id(ex: Exception) -> str: + try: + headers = getattr(getattr(ex, 'response', None), 'headers', {}) or {} + return headers.get('x-ms-request-id', 'N/A') + except Exception: + return 'N/A' + + def _is_transient_update_error(ex: Exception) -> bool: + msg = str(ex) + return ('NvaOperationNotAllowed' in msg) or ('nvaoperationnotallowed' in msg.lower()) + + # -------- (0) args -------- + self.kwargs.update({ + 'rg': resource_group, + 'vnet': 'cli-nva-vnet', + 'addrSpace': '10.10.0.0/16', + + 'subnetPriv': 'ApplianceSubnet', # nic0 + 'privPrefix': '10.10.1.0/24', + + 'subnetPub': 'ApplianceSubnetPublic', # nic1 + 'pubPrefix': '10.10.2.0/24', + + 'name': 'cli-virtual-appliance-vnet', + 'vendor': 'barracudasdwanrelease', + 'version': 'latest', + 'asn': '10000', + 'scale': '10', + 'asnUpdated': '20000', + }) + + # ------- (1) network dependencies ------- + self.cmd( + 'network vnet create ' + '-g {rg} -n {vnet} -l eastus2euap ' + '--address-prefixes {addrSpace} ' + '--subnet-name {subnetPriv} --subnet-prefix {privPrefix}', + checks=[self.check('newVNet.subnets[0].name', '{subnetPriv}')] + ) + self.cmd( + 'network vnet subnet create ' + '-g {rg} --vnet-name {vnet} -n {subnetPub} ' + '--address-prefixes {pubPrefix}', + checks=[self.check('name', '{subnetPub}')] + ) + + vnet = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json() + sub_priv_id = next(s['id'] for s in vnet['subnets'] if s['name'] == self.kwargs['subnetPriv']) + sub_pub_id = next(s['id'] for s in vnet['subnets'] if s['name'] == self.kwargs['subnetPub']) + + # ------- (2) init interface config ------- + iface_init = ( + "[{name:'nic0',subnet:{id:'%s'},type:['PrivateNic']}," + "{name:'nic1',subnet:{id:'%s'},type:['PublicNic']}]" + ) % (sub_priv_id, sub_pub_id) + self.kwargs.update({'iface_init': iface_init}) + + # ------- (3) create ------- + self.cmd( + "network virtual-appliance create " + "-n {name} -g {rg} " + "--vendor {vendor} --scale-unit {scale} -v {version} --asn {asn} " + "--interface-configs '{iface_init}'", + checks=[ + self.check('name', '{name}'), + self.check('length(nvaInterfaceConfigurations)', 2), + self.check('virtualApplianceAsn', '{asn}') + ] + ) + + # ------- (3.1) list ------- + self.cmd( + 'network virtual-appliance list -g {rg}', + checks=[self.check('length(@)', 1), self.check('[0].name', '{name}')] + ) + + # ------- (4) loop until succeeded -------- + retry_count = 0 + while True: + show = self.cmd('network virtual-appliance show -g {rg} -n {name}').get_output_in_json() + state = show.get('provisioningState') + + if state == 'Succeeded': + break + retry_count += 1 + if retry_count >= 20: + raise Exception(f'Operation not complete: provisioningState={state}, retry_count={retry_count}') + sleep(60) + + # -------- (5) wait 15 min -------- + sleep(15 * 60) + + max_retries = 5 + attempt = 0 + while True: + try: + self.cmd( + 'network virtual-appliance update -n {name} -g {rg} --asn {asnUpdated}', + checks=[ + self.check('name', '{name}'), + self.check('virtualApplianceAsn', '{asnUpdated}'), + self.check('length(nvaInterfaceConfigurations)', 2), + self.check('nvaInterfaceConfigurations[0].name', 'nic0'), + self.check('nvaInterfaceConfigurations[1].name', 'nic1'), + ] + ) + break + except Exception as ex: + attempt += 1 + req_id = _get_request_id(ex) + if attempt > max_retries or not _is_transient_update_error(ex): + raise Exception( + f'UPDATE failed after {attempt} attempt(s). ' + f'x-ms-request-id={req_id}. Error={ex}' + ) + sleep(10 * 60) + + # ------- (6) verify show ------- + show = self.cmd('network virtual-appliance show -n {name} -g {rg}').get_output_in_json() + iface_count = len(show['nvaInterfaceConfigurations']) + expected_nics = len(show['virtualApplianceNics']) + + self.cmd( + 'network virtual-appliance show -n {name} -g {rg}', + checks=[ + self.check('name', '{name}'), + self.check('virtualApplianceAsn', '{asnUpdated}'), + self.check('length(nvaInterfaceConfigurations)', iface_count), + self.check('length(virtualApplianceNics)', expected_nics) + ] + ) + + # ------- (7) delete with retries ------- + retry_count = 0 + while True: + show = self.cmd('network virtual-appliance show -n {name} -g {rg}').get_output_in_json() + state = show.get('provisioningState') + if state in ('Succeeded', 'Failed'): + break + retry_count += 1 + if retry_count >= 10: + print(f'WARN: provisioningState={state}, proceed to delete anyway.') + break + sleep(60) + + def _is_transient_nva_error(ex: Exception) -> bool: + msg = str(ex).lower() + return ('nvaoperationnotallowed' in msg) or ('nvaoperationfailed' in msg) + + max_del_retries = 6 + attempt = 0 + while True: + try: + self.cmd('network virtual-appliance delete -n {name} -g {rg} -y') + break + except Exception as ex: + attempt += 1 + if attempt > max_del_retries or not _is_transient_nva_error(ex): + print(f'WARN: NVA delete failed ({ex}); fallback to --no-wait and RG delete.') + try: + self.cmd('network virtual-appliance delete -n {name} -g {rg} -y --no-wait') + except Exception as ex2: + print(f'WARN: async NVA delete also failed: {ex2}') + try: + self.cmd('group delete --name {rg} --yes --no-wait') + except Exception as ex3: + print(f'WARN: RG delete initiation failed: {ex3}') + break + print( + f'INFO: NVA delete transient failure (attempt {attempt}/{max_del_retries}). Sleep 10 minutes then retry...') + sleep(10 * 60) + + # ------- (8) verify deletion ------- + self.cmd('network virtual-appliance show -n {name} -g {rg}', expect_failure=True) + + +class NetworkExtendedLocation(ScenarioTest): + @ResourceGroupPreparer(name_prefix='test_network_lb_edge_zone', location='eastus2euap') + def test_network_lb_edge_zone(self, resource_group): + + self.kwargs.update({ + 'lb': 'lb', + 'lb1': 'lb1', + 'sku': 'standard', + 'ip': 'pubip1', + 'edge_name': 'microsoftrrdclab1' + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku {sku} --public-ip-address {ip} --edge-zone {edge_name}') + self.cmd('network lb show -g {rg} -n {lb}', checks=self.check('extendedLocation.name', '{edge_name}')) + + self.cmd('network lb create -g {rg} -n {lb1} --vnet-name vnet1 --subnet subnet1 --edge-zone {edge_name}') + + @ResourceGroupPreparer(name_prefix='test_network_nic_edge_zone', location='eastus2euap') + def test_network_nic_edge_zone(self, resource_group): + + self.kwargs.update({ + 'vnet': 'clitestvnet', + 'nic': 'clitestnic', + 'rg': resource_group, + 'edge_name': 'microsoftdclabs1' + }) + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name subnet1 --edge-zone {edge_name}', + checks=self.check('newVNet.extendedLocation.name', '{edge_name}')) + self.cmd('network nic create -g {rg} -n {nic} --subnet subnet1 --vnet-name {vnet} --edge-zone {edge_name}', + checks=self.check('NewNIC.extendedLocation.name', '{edge_name}')) + + @ResourceGroupPreparer(name_prefix='test_network_public_ip_edge_zone', location='eastus2euap') + def test_network_public_ip_edge_zone(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'ip1': 'pubip1', + 'edge_name': 'microsoftrrdclab1' + }) + + self.cmd('network public-ip create -g {rg} -n {ip1} --edge-zone {edge_name} --sku Standard', + checks=self.check('publicIp.extendedLocation.name', '{edge_name}')) + + @ResourceGroupPreparer(name_prefix='test_network_public_ip_prefix_edge_zone', location='eastus2euap') + def test_network_public_ip_prefix_edge_zone(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'ip1': 'pubip1-prefix', + 'edge_name': 'microsoftrrdclab1' + }) + + self.cmd('network public-ip prefix create -g {rg} -n {ip1} --length 30 --edge-zone {edge_name}', + checks=self.check('extendedLocation.name', '{edge_name}')) + + @ResourceGroupPreparer(name_prefix='test_network_public_ip_prefix_with_tier', location='eastus2euap') + def test_network_public_ip_prefix_with_tier(self, resource_group): + self.kwargs.update({ + 'prefix1': self.create_random_name('prefix', 15), + 'prefix2': self.create_random_name('prefix', 15), + }) + + self.cmd('network public-ip prefix create -g {rg} -n {prefix1} --length 28 --tier regional', + checks=self.check('sku.tier', 'Regional')) + self.cmd('network public-ip prefix create -g {rg} -n {prefix2} --length 28 --tier global', + checks=self.check('sku.tier', 'Global')) + + # @unittest.skip('wait for service ready') + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_edge_zone', location='southeastasia') + def test_network_vnet_gateway_edge_zone(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'ip1': 'pubip1', + 'vnet': 'vnet', + 'edge_name': 'microsoftrrdclab1' + }) + self.cmd('network public-ip create -g {rg} -n {ip1}') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name GatewaySubnet') + self.cmd('network vnet-gateway create -g {rg} -n vnet-gateway --vnet {vnet} --public-ip-address {ip1} ' + '--edge-zone {edge_name}', + checks=self.check('vnetGateway.extendedLocation.name', '{edge_name}')) + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_local_gateway', location='eastus2euap') + def test_network_vnet_gateway_local_gateway(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'vnet': 'vnet', + 'gateway_type': 'LocalGateway', + 'edge_name': 'microsoftrrdclab3', + }) + self.cmd('az network vnet create -g {rg} -n {vnet} --location eastus2euap --address-prefix 10.30.0.0/16 --edge-zone {edge_name}') + self.kwargs['edge_zone_vnet_id'] = self.cmd('network vnet show -g {rg} -n {vnet}').get_output_in_json()['id'] + self.cmd('network vnet-gateway create -g {rg} -n vnet-gateway --vnet {vnet} --gateway-type {gateway_type} --edge-zone {edge_name} ' + '--edge-zone-vnet-id {edge_zone_vnet_id}', + checks=self.check('vnetGateway.vNetExtendedLocationResourceId', '{edge_zone_vnet_id}')) + + @ResourceGroupPreparer(name_prefix='test_network_vnet_gateway_with_enable_private_ip_address', location='eastus') + def test_network_vnet_gateway_with_enable_private_ip_address(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'ip': self.create_random_name('ip-', 10), + 'vnet': self.create_random_name('vnet-', 10), + 'vnet_gateway': self.create_random_name('vg-', 10), + }) + + self.cmd('network vnet create -g {rg} -n {vnet} -l eastus --address-prefix 10.1.0.0/16 --subnet-name Frontend --subnet-prefix 10.1.0.0/24') + self.cmd('network vnet subnet create -g {rg} --vnet-name {vnet} -n GatewaySubnet --address-prefix 10.1.255.0/27 --default-outbound false') + self.cmd('network public-ip create -g {rg} -n {ip}') + self.cmd('network vnet-gateway create -g {rg} -n {vnet_gateway} --vnet {vnet} --public-ip-address {ip} --gateway-type Vpn --sku VpnGw2 --vpn-gateway-generation Generation2 --enable-private-ip true -l eastus --no-wait') + self.cmd('network vnet-gateway show -g {rg} -n {vnet_gateway}', checks=self.check("enablePrivateIpAddress", True)) + self.cmd('network vnet-gateway wait -g {rg} -n {vnet_gateway} --created') + self.cmd('network vnet-gateway update -g {rg} -n {vnet_gateway} --enable-private-ip false') + self.cmd('network vnet-gateway show -g {rg} -n {vnet_gateway}', checks=self.check("enablePrivateIpAddress", False)) + + @ResourceGroupPreparer(name_prefix='test_network_private_endpoint_edge_zone', location='eastus2euap') + def test_network_private_endpoint_edge_zone(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'lb': 'lb', + 'vnet': 'vnet', + 'edge_name': 'microsoftdclabs1', + 'subnet1': 'subnet1', + 'subnet2': 'subnet2', + }) + self.cmd('network lb create -g {rg} -n {lb} --public-ip-address ip --sku Standard') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet1} --edge-zone {edge_name}') + self.cmd('network vnet subnet update -g {rg} -n {subnet1} --vnet-name {vnet} ' + '--disable-private-link-service-network-policies') + self.cmd('network vnet subnet create -g {rg} -n {subnet2} --vnet-name {vnet} ' + '--address-prefixes 10.0.2.0/24 --default-outbound false') + self.cmd('network vnet subnet update -g {rg} -n {subnet2} --vnet-name {vnet} ' + '--disable-private-endpoint-network-policies') + + pls = self.cmd('network private-link-service create -g {rg} -n pls --vnet-name {vnet} --subnet {subnet1} ' + '--lb-name {lb} --lb-frontend-ip-configs LoadBalancerFrontEnd --edge-zone {edge_name}', + checks=self.check('extendedLocation.name', '{edge_name}')).get_output_in_json() + self.kwargs['pls_id'] = pls['id'] + self.cmd('network private-endpoint create -g {rg} -n pe --vnet-name {vnet} --subnet {subnet2} ' + '--private-connection-resource-id {pls_id} --connection-name cn --edge-zone {edge_name}', + checks=self.check('extendedLocation.name', '{edge_name}')) + + +class NetworkLoadBalancerWithSkuGateway(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_lb_tunnel_interface', location='eastus') + def test_network_lb_tunnel_interface(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'lb': 'lb', + 'sku': 'Gateway', + 'vnet': 'vnet', + 'subnet': 'subnet', + 'bap': 'backend-address-pool-name', + 'type': 'External', + 'type1': 'Internal', + 'protocol': 'vxlan', + 'identifier': '950', + 'identifier1': '960', + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku {sku} --vnet-name {vnet} --subnet {subnet}') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap} --vnet {vnet}') + + # default + self.cmd('network lb address-pool tunnel-interface add -g {rg} --lb-name {lb} --address-pool {bap} ' + '--type {type} --protocol {protocol} --identifier {identifier} --port 15000', + checks=self.check('length(tunnelInterfaces)', 2)) + self.cmd('network lb address-pool tunnel-interface list -g {rg} --lb-name {lb} --address-pool {bap}', + checks=self.check('length(@)', 2)) + self.cmd('network lb address-pool tunnel-interface remove -g {rg} --lb-name {lb} --address-pool {bap} ' + '--index 0') + self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap} ' + '--type {type1} --protocol {protocol} --identifier {identifier1} --port 10000 --index 0', + checks=self.check('tunnelInterfaces[0].type', '{type1}')) + + @ResourceGroupPreparer(name_prefix='test_network_lb_front_ip', location='westus') + def test_network_lb_front_ip(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'lb': 'lb', + 'lb1': 'lb1', + 'vnet': 'vnet', + 'subnet': 'subnet', + 'ip': 'public-ip', + 'ip1': 'public-ip1', + 'fip': 'load-balancer-frontend-end', + 'prefix': 'prefix', + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku Standard --public-ip-address {ip}') + self.cmd('network lb create -g {rg} -n {lb1} --sku Gateway --vnet-name {vnet} --subnet {subnet} ') + self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard') + self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {fip} --public-ip-address {ip1}', + checks=self.not_exists('gatewayLoadBalancer')) + result = self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb1} -n {fip} ' + '--vnet-name {vnet} --subnet {subnet}').get_output_in_json() + # test --gateway-lb + self.kwargs['id'] = result['id'] + self.cmd('network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --gateway-lb {id}', + checks=self.exists('gatewayLoadBalancer')) + + self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --gateway-lb null", + checks=self.check('gatewayLoadBalancer', None)) + self.cmd("network lb frontend-ip list -g {rg} --lb-name {lb}", + checks=self.check('length(@)', 2)) + self.cmd("network lb frontend-ip delete -g {rg} --lb-name {lb} -n LoadBalancerFrontEnd") + self.cmd("network lb frontend-ip list -g {rg} --lb-name {lb}", + checks=self.check('length(@)', 1)) + self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --public-ip-address null " + "--vnet-name {vnet} --subnet {subnet}", + checks=[ + self.check('publicIPAddress', None), + self.check("subnet.id.contains(@, '{subnet}')", True), + self.check("subnet.id.contains(@, '{vnet}')", True) + ]) + self.cmd('network public-ip prefix create -g {rg} -n {prefix} --length 30') + self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --subnet null " + "--public-ip-prefix {prefix}", + checks=[ + self.check("publicIPPrefix.id.contains(@, '{prefix}')", True), + self.check("subnet", None), + ]) + self.cmd("network lb frontend-ip update -g {rg} --lb-name {lb} -n {fip} --public-ip-address {ip1} " + "--public-ip-prefix null", + checks=[ + self.check("publicIPAddress.id.contains(@, '{ip1}')", True), + self.check("publicIPPrefix", None), + ]) + + @ResourceGroupPreparer(name_prefix='test_network_nic_front_ip', location='eastus2euap') + def test_network_nic_front_ip(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'lb': 'lb', + 'vnet': 'vnet', + 'vnet1': 'vnet1', + 'subnet': 'subnet', + 'subnet1': 'subnet1', + 'ip': 'public-ip', + 'ip1': 'public-ip1', + 'fip': 'load-balancer-frontend-end', + 'nic': 'nic-name', + 'nip': 'nic-ip-config-name', + }) + + self.cmd('network public-ip create -g {rg} -n {ip} --sku standard') + self.cmd('network public-ip create -g {rg} -n {ip1} --sku standard') + self.cmd('network vnet create -g {rg} -n {vnet} --subnet-name {subnet}') + self.cmd('network nic create -g {rg} -n {nic} --public-ip-address {ip} --vnet-name {vnet} --subnet {subnet}') + self.cmd('network lb create -g {rg} -n {lb} --sku Gateway --vnet-name {vnet1} --subnet {subnet1} ') + result = self.cmd('network lb frontend-ip create -g {rg} --lb-name {lb} -n {fip} ' + '--vnet-name {vnet1} --subnet {subnet1}').get_output_in_json() + self.kwargs['id'] = result['id'] + self.cmd('network nic ip-config create -g {rg} --nic-name {nic} -n {nip} --make-primary ' + '--public-ip-address {ip1}', + checks=self.not_exists('gatewayLoadBalancer')) + + # test --gateway-lb + self.cmd('network nic ip-config update -g {rg} --nic-name {nic} -n {nip} --gateway-lb {id}', + checks=self.exists('gatewayLoadBalancer')) + + @ResourceGroupPreparer(name_prefix='test_network_lb_rule_backend_address_pools', location='eastus2euap') + def test_network_lb_rule_backend_address_pools(self, resource_group): + + self.kwargs.update({ + 'rg': resource_group, + 'lb': 'lb', + 'fip': 'LoadBalancerFrontEnd', + 'bap1': 'address-pool-name1', + 'bap2': 'address-pool-name2', + 'bap3': 'address-pool-name3', + 'type': 'External', + 'protocol': 'vxlan', + 'identifier': '901', + 'identifier1': '902', + 'port': '10700', + 'fport': '0', + 'bport': '0' + }) + + self.cmd('network lb create -g {rg} -n {lb} --sku Gateway --vnet-name vnet --subnet subnet') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap1}') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap2}') + self.cmd('network lb address-pool create -g {rg} --lb-name {lb} -n {bap3}') + self.cmd('network lb address-pool tunnel-interface add -g {rg} --lb-name {lb} --address-pool {bap1} --type {type} --protocol {protocol} --identifier {identifier}') + self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap2} --type {type} --index 0') + self.cmd('network lb address-pool tunnel-interface update -g {rg} --lb-name {lb} --address-pool {bap3} --port {port} --identifier {identifier1} --index 0') + + # test --backend-pool-name + self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule1 --frontend-ip-name {fip} ' + '--frontend-port {fport} --protocol All --backend-port {bport} --backend-pool-name {bap1} ', + checks=[self.exists('backendAddressPool'), + self.check('length(backendAddressPools)', 1)]) + self.cmd('network lb rule delete --lb-name {lb} -g {rg} -n rule1') + # test --backend-pools-name + self.cmd('network lb rule create -g {rg} --lb-name {lb} -n rule2 --frontend-ip-name {fip} ' + '--frontend-port {fport} --backend-pools-name {bap3} {bap2} --protocol All --backend-port {bport}', + checks=[self.not_exists('backendAddressPool'), + self.check('length(backendAddressPools)', 2)]) + self.cmd('network lb rule update -g {rg} --lb-name {lb} -n rule2 --frontend-ip-name {fip} ' + '--backend-pools-name {bap1} ', + checks=[self.check('length(backendAddressPools)', 1)]) + class NetworkVnetGatewayFailoverAPIsTest(ScenarioTest): @live_only() @@ -166,7 +8945,7 @@ def test_network_vnet_gateway_get_routes_and_resiliency_information(self, resour self.check('type(components)', 'array') ]) -class NetworkERGatewayFailoverSimulationScenarioTest(ScenarioTest): +class NetworkExpressRouteGatewayFailoverSimulationScenarioTest(ScenarioTest): @live_only() def test_start_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER resource_group = "tamil-vwan-test" @@ -239,7 +9018,7 @@ def test_stop_site_failover_test(self): # live_only as the express route is extr class NetworkExpressRouteGatewayRoutesResiliencyScenarioTest(ScenarioTest): @live_only() # live_only as express route gateways require expensive resources - @ResourceGroupPreparer(name_prefix='test_express_route_gateway_routes', location='eastus') + @ResourceGroupPreparer(name_prefix='test_express_route_gateway_routes_resiliency', location='eastus') @AllowLargeResponse(size_kb=9999) def test_network_express_route_gateway_routes_and_resiliency(self, resource_group): """ @@ -319,5 +9098,127 @@ def test_network_express_route_gateway_routes_and_resiliency(self, resource_grou if 'recommendations' in component: self.assertIsInstance(component['recommendations'], list) + +class NetworkVirtualNetworkApplianceScenario(ScenarioTest): + @ResourceGroupPreparer(name_prefix='test_vna', location='eastus') + def test_network_virtual_network_appliance(self, resource_group): + self.kwargs.update({ + 'vnet1': 'vnet1', + 'vnet2': 'vnet2', + 'vnet_address': '10.10.0.0/16', + 'subnet': 'VirtualNetworkApplianceSubnet', + 'subnet_address': '10.10.0.0/24', + 'vna1': 'vna1', + 'vna2': 'vna2', + 'tag1': 'tag1', + 'tag2': 'tag2', + }) + + # Create vnet, subnet for first vna + self.cmd('network vnet create -g {rg} -n {vnet1} --address-prefixes {vnet_address}') + + self.kwargs['subnet1_id'] = self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet1} --address-prefix {subnet_address} --default-outbound false --query id').get_output_in_json() + + # Create first vna + self.cmd('network virtual-network-appliance create -g {rg} -n {vna1} --bandwidth-in-gbps 50 --subnet \"{{id:{subnet1_id}}}\" --tags \"{{name:{tag1}}}\"') + + self.cmd('network virtual-network-appliance show -g {rg} -n {vna1}', checks=[ + self.check('tags.name', '{tag1}'), + self.check('subnet.id', '{subnet1_id}'), + self.check('bandwidthInGbps', 50), + ]) + + self.cmd('network virtual-network-appliance update -g {rg} -n {vna1} --tags \"{{name:{tag2}}}\"', checks=[ + self.check('tags.name', '{tag2}'), + ]) + + self.cmd('network virtual-network-appliance list -g {rg}', checks=[ + self.check('length(@)', 1) + ]) + + # Create vnet, subnet for second vna + self.cmd('network vnet create -g {rg} -n {vnet2} --address-prefixes {vnet_address}') + + self.kwargs['subnet2_id'] = self.cmd('network vnet subnet create -g {rg} -n {subnet} --vnet-name {vnet2} --address-prefix {subnet_address} --default-outbound false --query id').get_output_in_json() + + # Create second vna + vna2_id = self.cmd('network virtual-network-appliance create -g {rg} -n {vna2} --bandwidth-in-gbps 50 --subnet \"{{id:{subnet2_id}}}\" --query id').get_output_in_json() + + self.cmd('network virtual-network-appliance list -g {rg}', checks=[ + self.check('length(@)', 2) + ]) + + self.cmd('network virtual-network-appliance delete -g {rg} -n {vna1} -y') + + vna_list = self.cmd('network virtual-network-appliance list -g {rg}', checks=[ + self.check('length(@)', 1) + ]).get_output_in_json() + + self.assertTrue(vna_list[0].get('id') == vna2_id) + + +class DdosCustomPolicyScenarioTest(ScenarioTest): + @ResourceGroupPreparer(name_prefix='test_ddos_cuspol', location='eastus') + def test_ddos_custom_policy(self, resource_group): + self.kwargs.update({ + 'policy_name': 'policy1', + 'detection_mode': 'TrafficThreshold', + 'detection_rule_name1': 'RuleName1', + 'traffic_type1': 'Tcp', + 'packets_per_second1': '1000000', + 'detection_rule_name2': 'RuleName2', + 'traffic_type2': 'Udp', + 'packets_per_second2': '200000', + 'detection_rule_name3': 'RuleName3', + }) + + self.cmd('network ddos-custom-policy create -g {rg} -n {policy_name} --detection-rule-name {detection_rule_name1} ' + '--detection-mode {detection_mode} --traffic-type {traffic_type1} --packets-per-second {packets_per_second1}', checks=[ + self.check('length(detectionRules)', 1), + self.check('detectionRules[0].name', '{detection_rule_name1}'), + self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), + self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), + self.check('name', '{policy_name}'), + ]) + + self.cmd('network ddos-custom-policy show -g {rg} -n {policy_name}', checks=[ + self.check('length(detectionRules)', 1), + self.check('detectionRules[0].name', '{detection_rule_name1}'), + self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), + self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), + self.check('name', '{policy_name}'), + ]) + + self.cmd('network ddos-custom-policy create -g {rg} -n {policy_name} --detection-rule-name {detection_rule_name2} ' + '--detection-mode {detection_mode} --traffic-type {traffic_type2} --packets-per-second {packets_per_second2}', checks=[ + self.check('length(detectionRules)', 2), + self.check('detectionRules[0].name', '{detection_rule_name1}'), + self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), + self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), + self.check('detectionRules[1].name', '{detection_rule_name2}'), + self.check('detectionRules[1].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), + self.check('detectionRules[1].trafficDetectionRule.trafficType', '{traffic_type2}'), + self.check('name', '{policy_name}'), + ]) + + self.cmd('network ddos-custom-policy update -g {rg} -n {policy_name} --set detectionRules[0].name={detection_rule_name3}', checks=[ + self.check('length(detectionRules)', 2), + self.check('detectionRules[0].name', '{detection_rule_name3}'), + self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second1}'), + self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type1}'), + self.check('detectionRules[1].name', '{detection_rule_name2}'), + self.check('detectionRules[1].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), + self.check('detectionRules[1].trafficDetectionRule.trafficType', '{traffic_type2}'), + ]) + + self.cmd('network ddos-custom-policy update -g {rg} -n {policy_name} --remove detectionRules 0', checks=[ + self.check('length(detectionRules)', 1), + self.check('detectionRules[0].name', '{detection_rule_name2}'), + self.check('detectionRules[0].trafficDetectionRule.packetsPerSecond', '{packets_per_second2}'), + self.check('detectionRules[0].trafficDetectionRule.trafficType', '{traffic_type2}'), + ]) + + self.cmd('network ddos-custom-policy delete -g {rg} -n {policy_name} -y', checks=self.is_empty()) + if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() From 763cfa49656cb54b2de5dc77624c7a3a6c5045f8 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 6 Apr 2026 15:43:37 +0530 Subject: [PATCH 7/8] Fixed express-route-gateway to express-route gateway --- .../network/express_route/gateway/__init__.py | 6 + .../_get_failover_all_tests_detail.py | 4 +- .../_get_failover_single_test_detail.py | 4 +- .../gateway}/_get_resiliency_information.py | 4 +- .../gateway}/_get_routes_information.py | 4 +- .../gateway}/_start_site_failover_test.py | 4 +- .../gateway}/_stop_site_failover_test.py | 4 +- .../express_route_gateway/__cmd_group.py | 23 - .../network/express_route_gateway/__init__.py | 17 - ...s_route_gateway_routes_and_resiliency.yaml | 2104 +---------------- .../test_start_site_failover_test.yaml | 183 +- .../test_stop_site_failover_test.yaml | 358 ++- .../tests/latest/test_network_commands.py | 90 +- 13 files changed, 519 insertions(+), 2286 deletions(-) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_get_failover_all_tests_detail.py (98%) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_get_failover_single_test_detail.py (98%) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_get_resiliency_information.py (98%) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_get_routes_information.py (98%) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_start_site_failover_test.py (97%) rename src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/{express_route_gateway => express_route/gateway}/_stop_site_failover_test.py (98%) delete mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py delete mode 100644 src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/__init__.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/__init__.py index db73033039b..2b414f6d280 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/__init__.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/__init__.py @@ -15,3 +15,9 @@ from ._show import * from ._update import * from ._wait import * +from ._get_failover_all_tests_detail import * +from ._get_failover_single_test_detail import * +from ._get_resiliency_information import * +from ._get_routes_information import * +from ._start_site_failover_test import * +from ._stop_site_failover_test import * diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_all_tests_detail.py similarity index 98% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_all_tests_detail.py index 60182d6ce39..27a3f9b6b25 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_all_tests_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_all_tests_detail.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway get-failover-all-tests-detail", + "network express-route gateway get-failover-all-tests-detail", ) class GetFailoverAllTestsDetail(AAZCommand): """This operation retrieves the details of all the failover tests performed on the Virtual Wan ExpressRoute gateways for different peering locations :example: VwanExpressRouteGatewayFailoverAllTestsDetails - az network express-route-gateway get-failover-all-tests-detail --resource-group "rg1" --name "ergw1" --type "SingleSiteFailover" --fetch-latest True + az network express-route gateway get-failover-all-tests-detail --resource-group "rg1" --name "ergw1" --type "SingleSiteFailover" --fetch-latest True """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_single_test_detail.py similarity index 98% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_single_test_detail.py index 671a355eb20..dbd86a7c0f2 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_failover_single_test_detail.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_failover_single_test_detail.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway get-failover-single-test-detail", + "network express-route gateway get-failover-single-test-detail", ) class GetFailoverSingleTestDetail(AAZCommand): """This operation retrieves the details of a particular failover test performed on the vwan expressRouteGateway based on the test Guid :example: VwanExpressRouteGatewayFailoverSingleTestDetails - az network express-route-gateway get-failover-single-test-detail --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --failover-test-id "fe458ae8-d2ae-4520-a104-44bc233bde7e" + az network express-route gateway get-failover-single-test-detail --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --failover-test-id "fe458ae8-d2ae-4520-a104-44bc233bde7e" """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_resiliency_information.py similarity index 98% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_resiliency_information.py index b686a4ffc6b..088c1240251 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_resiliency_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_resiliency_information.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway get-resiliency-information", + "network express-route gateway get-resiliency-information", ) class GetResiliencyInformation(AAZCommand): """This operation retrieves the resiliency information for VWAN ExpressRoute Gateway, including the gateway's current resiliency score and recommendations to further improve the score :example: VwanExpressRouteGatewayGetResiliencyInformation - az network express-route-gateway get-resiliency-information --resource-group "rg1" --name "ergw" --attempt-refresh True + az network express-route gateway get-resiliency-information --resource-group "rg1" --name "ergw" --attempt-refresh True """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_routes_information.py similarity index 98% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_routes_information.py index 30fe36b0fe0..4f1bca396ec 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_get_routes_information.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_get_routes_information.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway get-routes-information", + "network express-route gateway get-routes-information", ) class GetRoutesInformation(AAZCommand): """This operation retrieves the route set information for Vwan Express Route Gateway based on their resiliency :example: VwanExpressRouteGatewayGetRoutesInformation - az network express-route-gateway get-routes-information --resource-group "rg1" --name "ergw" --attempt-refresh False + az network express-route gateway get-routes-information --resource-group "rg1" --name "ergw" --attempt-refresh False """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_start_site_failover_test.py similarity index 97% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_start_site_failover_test.py index defb4d6cf08..ce2eceecb06 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_start_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_start_site_failover_test.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway start-site-failover-test", + "network express-route gateway start-site-failover-test", ) class StartSiteFailoverTest(AAZCommand): """This operation starts failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStartSiteFailoverSimulation - az network express-route-gateway start-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" + az network express-route gateway start-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_stop_site_failover_test.py similarity index 98% rename from src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py rename to src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_stop_site_failover_test.py index d8231302115..bfba93221ac 100644 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/_stop_site_failover_test.py +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route/gateway/_stop_site_failover_test.py @@ -12,13 +12,13 @@ @register_command( - "network express-route-gateway stop-site-failover-test", + "network express-route gateway stop-site-failover-test", ) class StopSiteFailoverTest(AAZCommand): """This operation stops an ongoing failover simulation on the vwan expressRouteGateway for the specified peering location :example: VwanExpressRouteGatewayStopSiteFailoverSimulation - az network express-route-gateway stop-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --simulation-successful True --details "[{failover-connection-name:'conn1',failover-location:'Denver',is-verified:False},{failover-connection-name:'conn2',failover-location:'Amsterdam',is-verified:True}]" + az network express-route gateway stop-site-failover-test --resource-group "rg1" --name "ergw" --peering-location "Vancouver" --simulation-successful True --details "[{failover-connection-name:'conn1',failover-location:'Denver',is-verified:False},{failover-connection-name:'conn2',failover-location:'Amsterdam',is-verified:True}]" """ _aaz_info = { diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py deleted file mode 100644 index 0ee958b1ebf..00000000000 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__cmd_group.py +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -# Code generated by aaz-dev-tools -# -------------------------------------------------------------------------------------------- - -# pylint: skip-file -# flake8: noqa - -from azure.cli.core.aaz import * - - -@register_command_group( - "network express-route-gateway", -) -class __CMDGroup(AAZCommandGroup): - """Manage Express Route Gateway - """ - pass - - -__all__ = ["__CMDGroup"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py deleted file mode 100644 index b2d3b30d925..00000000000 --- a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_gateway/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -# Code generated by aaz-dev-tools -# -------------------------------------------------------------------------------------------- - -# pylint: skip-file -# flake8: noqa - -from .__cmd_group import * -from ._get_failover_all_tests_detail import * -from ._get_failover_single_test_detail import * -from ._get_resiliency_information import * -from ._get_routes_information import * -from ._start_site_failover_test import * -from ._stop_site_failover_test import * diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml index c2cebdb9074..5f3b610b136 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_routes_and_resiliency.yaml @@ -7,83 +7,35 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vwan create - Connection: - - keep-alive - ParameterSetName: - - -n -g --type - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 - response: - body: - string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' - headers: - cache-control: - - no-cache - content-length: - - '482' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:00:45 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: C9A4D950DD854E55814ED7C1E0D22D01 Ref B: PNQ231110907023 Ref C: 2026-03-31T09:00:46Z' - status: - code: 200 - message: OK -- request: - body: '{"location": "eastus"}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vwan create + - network express-route gateway get-routes-information Connection: - keep-alive Content-Length: - - '22' - Content-Type: - - application/json + - '0' ParameterSetName: - - -n -g --type + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes?api-version=2022-07-01 + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getRoutesInformation?attemptRefresh=true&api-version=2025-07-01 response: body: - string: '{"name":"test-vwan-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes","etag":"W/\"6cb14740-e5dc-4074-a080-c26e775f0a66\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Updating","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + string: 'null' headers: azure-asyncnotification: - Enabled - azure-asyncoperation: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc cache-control: - no-cache content-length: - - '476' + - '4' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:00:46 GMT + - Mon, 06 Apr 2026 10:10:30 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/88f744d5-ecc9-4d1d-a875-15669b71b5c7?api-version=2025-07-01&t=639110670306369293&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=J1bx4FZlbQI6Ilp_-oJDERHW9Kq4nSSLAwuZv3Tu0cWJuOb2m-pqGP-_A4yJEv2-NA_Yu2DZxele4kZtoUmqVHuHXpOI-yvBUkrTKpbk2X71wTJff6qnuRfrpuLURJNQgUYnRVFcRAw9S2nmzW_HoGlw0BBc7H3gqbCSng03i1F9fAwPDNeGkndphlVCiXxjIN3yEN7B8-S5hBIPZHJvZMsfSXJM3fcnK_gfft5p09FS0ROciwXrv1ML287Mbv8SoTCstsiZyxIufwefJwcYXKdsEKuKjm0GlYnczZW97VF9nSnI7jo0Qnb54TLmP3etQQrRrLiaj4X8ELI6VsvAIA&h=7IIbthbXoJ2whydSF6fUzfaDMigYijWjP12Fqne9PGE pragma: - no-cache strict-transport-security: @@ -93,17 +45,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - e30ec6c3-0fb4-40a8-9f52-9bb7f3627320 + - 34a43642-2239-4ec8-9972-9fc89124b636 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/0def7273-0a77-4548-b5d4-e05d7f26d943 - x-ms-ratelimit-remaining-subscription-global-writes: - - '11999' + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/1d05e962-4f2d-4617-a86e-afc3fb30319e x-ms-ratelimit-remaining-subscription-writes: - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.2, etc + x-ms-throttling-version: + - v2 x-msedge-ref: - - 'Ref A: 63ACE98945C44E6CBAB76EDCBF4039C7 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:00:46Z' + - 'Ref A: 6A493B9B10CD4FA2804CA23CE1E9FF4B Ref B: PNQ231110908023 Ref C: 2026-04-06T10:10:29Z' status: - code: 201 + code: 202 message: '' - request: body: null @@ -113,79 +67,33 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vwan create - Connection: - - keep-alive - ParameterSetName: - - -n -g --type - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:00:47 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 127911f5-f36d-4e43-a327-02c4b073616f - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/44cb66ef-ba21-4d4b-b8c1-dc561f6a8b0f - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: D9B0751510CB403198D3E4CDC910F1FC Ref B: PNQ231110906052 Ref C: 2026-03-31T09:00:47Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vwan create + - network express-route gateway get-routes-information Connection: - keep-alive ParameterSetName: - - -n -g --type + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e896468c-b541-48cf-a920-33317d8dbda3?api-version=2022-07-01&t=639105444474463652&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=ZRnfdGfgBJAdvLUjDtfKu1u5LpzAZrbmuL3T3JuoN6WOy3yBiHEfpaun72WhnIPyJtYjhmpz_oBYiPh1dCBYH4bIMUGS7odg286HRzMDekjs-FE9h83D7kcfqnhgwmvFzWXjgJy6_l8etNkvsPddTydozjrjbitQgGkl3_NrWKj2jQMl6QNqbe1gacXI1RkOYwGBMLu029IA19InIMsUiblXovRjL0LFk2klAcdmRcQpeglx92vRVep2cS1h0EOf0QdMhIzAhMfVtNs0KbwXELg9ZWdMPxiKoFz3tts1QTccOjPLwO8Vaoh7BU7EEmj-i-zq2e4W0c1eWEDhvM3wkw&h=4_wlALXI52IiJd0iI1PM8neRZsA_0GBvJr_An1z7Evc + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/88f744d5-ecc9-4d1d-a875-15669b71b5c7?api-version=2025-07-01&t=639110670306369293&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=J1bx4FZlbQI6Ilp_-oJDERHW9Kq4nSSLAwuZv3Tu0cWJuOb2m-pqGP-_A4yJEv2-NA_Yu2DZxele4kZtoUmqVHuHXpOI-yvBUkrTKpbk2X71wTJff6qnuRfrpuLURJNQgUYnRVFcRAw9S2nmzW_HoGlw0BBc7H3gqbCSng03i1F9fAwPDNeGkndphlVCiXxjIN3yEN7B8-S5hBIPZHJvZMsfSXJM3fcnK_gfft5p09FS0ROciwXrv1ML287Mbv8SoTCstsiZyxIufwefJwcYXKdsEKuKjm0GlYnczZW97VF9nSnI7jo0Qnb54TLmP3etQQrRrLiaj4X8ELI6VsvAIA&h=7IIbthbXoJ2whydSF6fUzfaDMigYijWjP12Fqne9PGE response: body: - string: '{"status":"Succeeded"}' + string: 'null' headers: + azure-asyncnotification: + - Enabled cache-control: - no-cache content-length: - - '22' + - '4' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:00:57 GMT + - Mon, 06 Apr 2026 10:10:31 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/88f744d5-ecc9-4d1d-a875-15669b71b5c7?api-version=2025-07-01&t=639110670322944581&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=YCVv54gLUtMGzh2-JK2TGS6OGjMzN5b6A6FxqMRWwsDjfdzlSdR0pSopn0JA1rbQQQ2DPbK30C7V4s7getTiLzpjdxoQa5h-swwqhG_47F9KAdsvTKE6AcrfnVECWGYmatYwfXStVbm_1GQdDZOVAmVyULouvIHFdnQDMi4CSsXxmzmT7e7fXz7iYRY5bdgntWRAxU7-BItmvgZhDCrinDjHcBekgMEw6OIEa1WsgHRTNPfcE8C8d72oiCkAeURt1NZ_bwHMb-ugscG3_41M1ymkLWlxhqgv0V9Xz7g-I2lu-J6A6jjZ3vTBR33CwHwil7FhvgfDWNkhtde88Q3CyA&h=b_RgKxSeAzfztbsetnwT9uGN5saKzecMOVjZDbcJurQ pragma: - no-cache strict-transport-security: @@ -195,15 +103,17 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 9b2a5c27-002d-41ce-a4c7-370d9f99f72f + - 34a43642-2239-4ec8-9972-9fc89124b636 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/5c14e957-ef1b-4f1c-85c0-127d0cb299fa + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/4216d76b-64b9-40c4-9866-3c0ff281c8b7 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=2.9, etc x-msedge-ref: - - 'Ref A: 0C153E87F42C4DD7B8322D6D40559866 Ref B: PNQ231110907054 Ref C: 2026-03-31T09:00:58Z' + - 'Ref A: 5B1C56F2AB2043FB9DDA23463B302BD1 Ref B: PNQ231110907052 Ref C: 2026-04-06T10:10:30Z' status: - code: 200 + code: 202 message: '' - request: body: null @@ -213,31 +123,34 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vwan create + - network express-route gateway get-routes-information Connection: - keep-alive ParameterSetName: - - -n -g --type + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes?api-version=2022-07-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/88f744d5-ecc9-4d1d-a875-15669b71b5c7?api-version=2025-07-01&t=639110670322944581&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=YCVv54gLUtMGzh2-JK2TGS6OGjMzN5b6A6FxqMRWwsDjfdzlSdR0pSopn0JA1rbQQQ2DPbK30C7V4s7getTiLzpjdxoQa5h-swwqhG_47F9KAdsvTKE6AcrfnVECWGYmatYwfXStVbm_1GQdDZOVAmVyULouvIHFdnQDMi4CSsXxmzmT7e7fXz7iYRY5bdgntWRAxU7-BItmvgZhDCrinDjHcBekgMEw6OIEa1WsgHRTNPfcE8C8d72oiCkAeURt1NZ_bwHMb-ugscG3_41M1ymkLWlxhqgv0V9Xz7g-I2lu-J6A6jjZ3vTBR33CwHwil7FhvgfDWNkhtde88Q3CyA&h=b_RgKxSeAzfztbsetnwT9uGN5saKzecMOVjZDbcJurQ response: body: - string: '{"name":"test-vwan-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes","etag":"W/\"698baab2-d1bc-442d-94af-dec17a04fc5b\"","type":"Microsoft.Network/virtualWans","location":"eastus","properties":{"provisioningState":"Succeeded","disableVpnEncryption":false,"allowBranchToBranchTraffic":true,"office365LocalBreakoutCategory":"None","type":"Standard"}}' + string: '{"lastComputedTime":"4/6/2026 9:17:03 AM UTC","nextEligibleComputeTime":"4/6/2026 + 10:17:03 AM UTC","routeSetVersion":"b10bc3d9-bcd6-44e0-a7fc-4c9fa032c624","routeSets":[],"circuitsMetadataMap":{"x0":{"name":"circuit01","link":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit01","location":"DataPathLocation1"},"x1":{"name":"circuit02","link":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit02","location":"DataPathLocation2"}}}' headers: + azure-asyncnotification: + - Enabled cache-control: - no-cache content-length: - - '477' + - '623' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:00:58 GMT - etag: - - W/"698baab2-d1bc-442d-94af-dec17a04fc5b" + - Mon, 06 Apr 2026 10:10:44 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/88f744d5-ecc9-4d1d-a875-15669b71b5c7?api-version=2025-07-01&t=639110670446561734&c=MIIIJzCCBw-gAwIBAgIRAIsT8dMMo6WkW2NCqWyZcXowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgV0NVUyBDQSAwMTAeFw0yNjAyMjQxMjQwMzhaFw0yNjA4MTkxODQwMzhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrjcYB8xdPGqamRPa2KEv3SJ3GirVITkjFOCU7haZQ1rdKe7GRjqJ29v6ptobpGSzhwXOXskM7pzYPP-8SUx6TT02brY1xVrxe1em7lf0m_QSM_H9N-WLy8miDU3SdGMrg920oQN6pAkqNZiRoJnU1gKcFdkGIKWxB1nDegi4QYdczKSYHTF6IpF2RJXaOC7HM1-pQB4EBlfLhUfzHR9lFtoThIt0HmRB2M3mrUUQ9vBpmNaKRZYjYpdBm26Iqj-91GCpCc9ASf-J9uABxnt6Uiw_59nx9eZpq2HBkV5X9Fdx8k8NynGnQC82Op0gd2fau5gAJaG7aJCzMgk7OennQIDAQABo4IFJDCCBSAwgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUIEy-B50P_D3827J7l5EmpTRsKDUwHwYDVR0jBBgwFoAUFNI34PbWfX7djbq6ZasElCXglh0wggH7BgNVHR8EggHyMIIB7jB7oHmgd4Z1aHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMH2ge6B5hndodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NybHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS80Ny9jdXJyZW50LmNybDBsoGqgaIZmaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIGBoH-gfYZ7aHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIICAAYIKwYBBQUHAQEEggHyMIIB7jB-BggrBgEFBQcwAoZyaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMIGABggrBgEFBQcwAoZ0aHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwbwYIKwYBBQUHMAKGY2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB4BggrBgEFBQcwAoZsaHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQA9btRITKA15tsninIeuo-WyaMUCUoEfUsV0QncR7z7vL7vkoklZ7vpNVRseIAPdr38W5inoFg3rGPWThWuaODCtqQTp-8MfcgrIyAa0l8NgixFdask2Qr6S4OMKnAOw_VU2TEDCSEdTqs2vL9QgTb741oCLBOoyBojUXIjENFdKM1gZyx0mB-50aJnpb8GmjFh2MCYHo4WFiBLsjESc7yyXc1qord76lR36hBeNUkmvC3fwC8hzefThwSZIzu418FkGu23F80jFAv7RNFu01wXlMQ39W_RRz8Vo2bJ76WEERl1KR3EGxXFY5GqOcQkdaEdO6AdGS5A0IrOBqeA3wuH&s=WU552SiWPTeFuWHMBmHNAmvLYWmVhSCKKeyVM6djQE5hYKVz1geIkPdSpkN4l92KBfbgf0zKcxQWs7pl5ijN1gF0fwcZBk8T7yYpLimxBerfHJdaRCErikibzCKIWsLbtkLQ07yP-jpNnaePJnApy8EifuhL75TBwbav0O-nXSIq05XC5_sw_TQrthj8u3HQg1u_g9Tmb5BEOvklEXRar9m8QnxZPU0eClu6BLEVlMi3JEr7ubZ_4Hx1yK0Uu3pZZFK4iXdk4zWs1J_r2rtbyOqsWHt37FO8kX0_Q0JbmeejyZfO51UxWpytgvyb87RDI_gJhxxnpC4jRVgwEK0kxA&h=yGgbkbR_lwYhp6-LxYDgFwz4j7GIdYgZ0Z8MHHdUcbY pragma: - no-cache strict-transport-security: @@ -247,11 +160,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - a3c459bf-9b9d-408a-bf91-5f284d39c17b + - 34a43642-2239-4ec8-9972-9fc89124b636 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiawest/69b9a6da-6037-441b-b907-4bfa361d20e6 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=3.0, + etc x-msedge-ref: - - 'Ref A: B98CB3D27CF24E5FB83CE26BC8049FC3 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:00:58Z' + - 'Ref A: E46DA02E79CB4EFE83DA2FA2A965F381 Ref B: PNQ231110906042 Ref C: 2026-04-06T10:10:42Z' status: code: 200 message: '' @@ -263,84 +181,35 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 - response: - body: - string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' - headers: - cache-control: - - no-cache - content-length: - - '482' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:00:58 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: 3AF64766083A4B858E6F9F8059A3C28B Ref B: PNQ231110909034 Ref C: 2026-03-31T09:00:59Z' - status: - code: 200 - message: OK -- request: - body: '{"location": "eastus", "properties": {"addressPrefix": "10.6.0.0/16", "sku": - "Standard", "virtualWan": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"}}}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create + - network express-route gateway get-resiliency-information Connection: - keep-alive Content-Length: - - '278' - Content-Type: - - application/json + - '0' ParameterSetName: - - -g -n --vwan --address-prefix --sku + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getResiliencyInformation?attemptRefresh=true&api-version=2025-07-01 response: body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"d2202c87-cffa-4db7-97d3-68d57c9e9622\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Updating","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"None","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' + string: 'null' headers: azure-asyncnotification: - Enabled - azure-asyncoperation: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 cache-control: - no-cache content-length: - - '872' + - '4' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:01:00 GMT + - Mon, 06 Apr 2026 10:10:45 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/1324b9c1-d67a-4c12-b3f4-ffb516f1cf4e?api-version=2025-07-01&t=639110670462839242&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=7i85Yibr9BXUrfS4AzmUNwLjQsJFMEFrhvi1mfq4cXjRkj-27Nz3T5HyBI4RPvF9-U3P1Ep8sZGPvHVVqAAuDCAh9ULDspSRwZkmWxn_GxADwAYhNbiUXmT6kbiS9Gg9TABwPiFUUJYwKeFrUlPBf-iHUaVa2P6uOjDxB3BB4Nw9s0Br-9Rm1PMyxuKtI98nY-GVCbjLqeqsw-2uuQyQ1xISSurIlIVqJgpFxuYegV0Lx9zAH2RF7JpVz0ZOL-TAv0HasQhEDpX_-04Bom11F3ScXtdOQSLHKScOGDIXpjypFoaxOqFxQvbrqQPuKU7sjaxe32A-n0cNwb2Vtr7NYA&h=8RfPIOlWeCa7HBw71LfeGFKe_LbhjmDoLUQq2_TPdAs pragma: - no-cache strict-transport-security: @@ -350,117 +219,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - c20d081d-2039-4d12-96fb-80a5c658baac + - 1461d1be-74a5-4eff-80f4-283ae9fb7057 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/29186ff0-84b0-4ef1-9075-3703be931e7f - x-ms-ratelimit-remaining-subscription-global-writes: - - '11999' + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/251df6f3-6887-424c-965c-fc3a1c8e8b5a x-ms-ratelimit-remaining-subscription-writes: - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.3, etc + x-ms-throttling-version: + - v2 x-msedge-ref: - - 'Ref A: E358732BD25D444A9473EA6B576226F8 Ref B: PNQ231110906034 Ref C: 2026-03-31T09:00:59Z' - status: - code: 201 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:01:01 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - f0f46c79-a4dd-46bb-b547-9d90d7d9277c - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/3f797f4b-103b-4e03-b6e1-92f8a81ae599 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 6119FAB8E99F44C3BFFAB090F0CA183E Ref B: PNQ231110909029 Ref C: 2026-03-31T09:01:00Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:01:12 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 52b850ff-a22f-4a3a-ad07-5046aa86ba1a - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/f6fca8e3-2c5c-4653-a267-168522a4c915 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 19777E413299409993A601B70BD457A1 Ref B: PNQ231110909040 Ref C: 2026-03-31T09:01:11Z' + - 'Ref A: 8E7DA3274E484473937D97B8CFB6D116 Ref B: PNQ231110907025 Ref C: 2026-04-06T10:10:45Z' status: - code: 200 + code: 202 message: '' - request: body: null @@ -470,29 +241,33 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vhub create + - network express-route gateway get-resiliency-information Connection: - keep-alive ParameterSetName: - - -g -n --vwan --address-prefix --sku + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/1324b9c1-d67a-4c12-b3f4-ffb516f1cf4e?api-version=2025-07-01&t=639110670462839242&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=7i85Yibr9BXUrfS4AzmUNwLjQsJFMEFrhvi1mfq4cXjRkj-27Nz3T5HyBI4RPvF9-U3P1Ep8sZGPvHVVqAAuDCAh9ULDspSRwZkmWxn_GxADwAYhNbiUXmT6kbiS9Gg9TABwPiFUUJYwKeFrUlPBf-iHUaVa2P6uOjDxB3BB4Nw9s0Br-9Rm1PMyxuKtI98nY-GVCbjLqeqsw-2uuQyQ1xISSurIlIVqJgpFxuYegV0Lx9zAH2RF7JpVz0ZOL-TAv0HasQhEDpX_-04Bom11F3ScXtdOQSLHKScOGDIXpjypFoaxOqFxQvbrqQPuKU7sjaxe32A-n0cNwb2Vtr7NYA&h=8RfPIOlWeCa7HBw71LfeGFKe_LbhjmDoLUQq2_TPdAs response: body: - string: '{"status":"InProgress"}' + string: 'null' headers: + azure-asyncnotification: + - Enabled cache-control: - no-cache content-length: - - '23' + - '4' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:01:32 GMT + - Mon, 06 Apr 2026 10:10:47 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/1324b9c1-d67a-4c12-b3f4-ffb516f1cf4e?api-version=2025-07-01&t=639110670479152405&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=u_gT7wIb61tcqRcbQ6LxUl-Z9cI60S2sxEbVRY8JzfxAzucZ8tgn0YgvqGxBe0OBxubHCT48V2En6kbXg1sJ81qiO7DN3IK3WBW3iJQf112PgxUfKF81aVC2UlyP6KMdwX3GvO2jEdr271BUQaI_ACL1tKzuVBMSVDy3GXteKdWSbphqWtkuc5vJUURM_eqTcDP63FAwTigjRtzIofPgsyilC17BaIXTu7LOepVtqPSrpiGFdZVSqWls7g7wz9zBxwcaM9Fl2GBw5iv5oOherJsBKuu-3wb5A_Z6Ck6JY5vX4QDv5NAxyTvGWWHbTfpZfdpsuMu9JGBAXtBDqhVrEg&h=HOOzx712u8IqQoqAiPGBad4V3dbz0uGE1tnbI9uY6Ts pragma: - no-cache strict-transport-security: @@ -502,15 +277,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 7d00cb19-ada5-4abb-a38a-87a11d2a92ee + - 1461d1be-74a5-4eff-80f4-283ae9fb7057 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/49ac1455-2715-4f0d-9659-636eaf15d726 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/34eae978-16e7-4d51-8be7-39ed7539840b x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=3.0, + etc x-msedge-ref: - - 'Ref A: 2F52E2F7B01549BFB19FEF05411A0C43 Ref B: PNQ231110906034 Ref C: 2026-03-31T09:01:32Z' + - 'Ref A: B7279123DFCC40CB806F1A6D121D4142 Ref B: PNQ231110908036 Ref C: 2026-04-06T10:10:46Z' status: - code: 200 + code: 202 message: '' - request: body: null @@ -520,79 +298,38 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:01:53 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - e6c9cf99-b7c2-497d-bf87-367962e2f9ea - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/6262ba43-483b-416e-b99a-df3704368ac4 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: A1FE970DDCB74344A582FC46533199B2 Ref B: PNQ231110906060 Ref C: 2026-03-31T09:01:53Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create + - network express-route gateway get-resiliency-information Connection: - keep-alive ParameterSetName: - - -g -n --vwan --address-prefix --sku + - --resource-group --name --attempt-refresh User-Agent: - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/1324b9c1-d67a-4c12-b3f4-ffb516f1cf4e?api-version=2025-07-01&t=639110670479152405&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=u_gT7wIb61tcqRcbQ6LxUl-Z9cI60S2sxEbVRY8JzfxAzucZ8tgn0YgvqGxBe0OBxubHCT48V2En6kbXg1sJ81qiO7DN3IK3WBW3iJQf112PgxUfKF81aVC2UlyP6KMdwX3GvO2jEdr271BUQaI_ACL1tKzuVBMSVDy3GXteKdWSbphqWtkuc5vJUURM_eqTcDP63FAwTigjRtzIofPgsyilC17BaIXTu7LOepVtqPSrpiGFdZVSqWls7g7wz9zBxwcaM9Fl2GBw5iv5oOherJsBKuu-3wb5A_Z6Ck6JY5vX4QDv5NAxyTvGWWHbTfpZfdpsuMu9JGBAXtBDqhVrEg&h=HOOzx712u8IqQoqAiPGBad4V3dbz0uGE1tnbI9uY6Ts response: body: - string: '{"status":"InProgress"}' + string: '{"overallScore":"18","scoreChange":"0","minScoreFromRecommendations":"-","maxScoreFromRecommendations":"-","lastComputedTime":"4/6/2026 + 9:17:03 AM UTC","nextEligibleComputeTime":"4/6/2026 10:17:03 AM UTC","components":[{"name":"Gateway + Zone Redundancy","currentScore":"-","maxScore":"-","recommendations":[{"recommendationTitle":"Zone + Redundancy","recommendationId":"1","severity":"High","recommendationText":"Implement + Zone Redundant ExpressRoute gateway","callToActionText":"Implement Zone Redundant + ExpressRoute gateway","callToActionLink":"https://learn.microsoft.com/en-us/azure/vpn-gateway/about-zone-redundant-vnet-gateways?toc=%2Fazure%2Fexpressroute%2Ftoc.json","details":""}]}]}' headers: + azure-asyncnotification: + - Enabled cache-control: - no-cache content-length: - - '23' + - '688' content-type: - application/json; charset=utf-8 date: - - Tue, 31 Mar 2026 09:02:33 GMT + - Mon, 06 Apr 2026 10:10:59 GMT expires: - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/1324b9c1-d67a-4c12-b3f4-ffb516f1cf4e?api-version=2025-07-01&t=639110670593292885&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=ErUx5kM1MyINRr1FSxKnpZ3DE64Og2SGUhFi9IwPM-HSLmqh_HqEqwmD2YPVjFY9ua6PmhlMxebekSwC2pqtcIuPnaxVqcn8rhrIlSE8gL-Zu1Jmz2IjUonrjLrdPVeXMq6evLHH54CrF6sodupcQ5skKOjK6Vd1fPMzRyI_nCXMNQCSEiilfq6ATjSR4j6owxuB-KegTMY92s-yA_OuyCyfgNbMo-fMfR1bvlrEz4chdw9rOM7zMAF7PfUydTBIzeFnFjwn6XjHwa6dQmHxHx9dAoClYP7N2I4WfbG0FFTomqyeseWlM560OxcsjlIoUeDnaMdMs05Kdx20oFT1Iw&h=17j8jYnQ33jjgBuHNnyXR2-Cmb8UWr7hGQa92PVwFsU pragma: - no-cache strict-transport-security: @@ -602,1643 +339,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - ab3693ff-8d04-4cd7-b422-cd52eb2375ec + - 1461d1be-74a5-4eff-80f4-283ae9fb7057 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/131df3d2-162e-44bd-99f3-94e776561c8b + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/251a1f18-41c7-4cd7-964d-4f8849b47062 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=3.0, etc x-msedge-ref: - - 'Ref A: 8E5E98E550184A75A0EEAB074983EBB5 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:02:34Z' + - 'Ref A: 3705A5855D524FB0AB01332BA224FD99 Ref B: PNQ231110909052 Ref C: 2026-04-06T10:10:58Z' status: code: 200 message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:03:15 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 21cfc591-de49-473d-a3d5-935e85d4d226 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/7a43b709-bd81-4c8b-87e9-2c6a9555ccd6 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 118BD87D830F4362868B57D3BC326482 Ref B: PNQ231110909025 Ref C: 2026-03-31T09:03:14Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:04:37 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 00469500-0f37-4beb-be18-40cfdef76b35 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/6d418efc-0cf9-4b91-8953-73d23336f1d6 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: C718BD6F19C84D01BB6A0B70BCF51CFD Ref B: PNQ231110909023 Ref C: 2026-03-31T09:04:35Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/212851e2-813f-49af-980b-7f3b133113ff?api-version=2022-05-01&t=639105444605421150&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=LhwO9RuEy2RLiObi3kK_uwdXaY17Y0_M1Xh3DkepXyyY67kxTz6vy9Wytgo9Y953lpS7m2T-xOJ88hw6zq6ArEeykdAL0Z8y2_2iqkLOrydR2THcyRCrb_ErfqsrYGc6PrEptkUaW6K69qb_eU1ll7lJt6MjvOmvT32Bx0QNf-bRyJhIcoEaB0LvJJotYDcU3-xiVlQGGRhwPqAVyH2DiZkht5G0bncpjfJ7ebycBoVd-dTBIzQnU39331Wa4-G5r_KSPK1jKWr1whJ77jrC7HOjbn4O30XuX9ppCZnqLtZsDU3lHSA-TyUgMlTWxdCqX8GrjXdseGwa5lbd-JhDMQ&h=_LSiLAgnk_THGznPGC-qfJDWpJDagLyQf9IUyWZRk28 - response: - body: - string: '{"status":"Succeeded"}' - headers: - cache-control: - - no-cache - content-length: - - '22' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:07:17 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 305812cb-ce7c-4a76-b81e-aad703b03696 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/d7c251a0-0a38-4fdc-85f6-a26b6f57b3fe - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: CDED7D4EA59844F098C8C9E3F5EDE01A Ref B: PNQ231110909029 Ref C: 2026-03-31T09:07:17Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub create - Connection: - - keep-alive - ParameterSetName: - - -g -n --vwan --address-prefix --sku - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:07:17 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - f3c49ddc-07b2-4f68-a9a6-40a489854e63 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 7FF482302D334300BA3E4F7BD3A253DD Ref B: PNQ231110907062 Ref C: 2026-03-31T09:07:18Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:07:19 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 68424f0b-87c5-4531-a722-ff9805b4c71d - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: CF1B512D2BF6437EA5525D76D3048D3E Ref B: PNQ231110908034 Ref C: 2026-03-31T09:07:19Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:08:19 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - f65ed8a8-736b-45a9-a1e0-6c6ca73c7797 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 58E40B19F68041699B9F58099381EBE6 Ref B: PNQ231110909062 Ref C: 2026-03-31T09:08:19Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:09:20 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 3a13f26e-d2b9-4299-802c-f8324f8bf09d - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: CF46C4B9B0934C52AF89E037964B7CE9 Ref B: PNQ231110907040 Ref C: 2026-03-31T09:09:20Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:10:20 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 1a7043bc-b1e4-4588-989a-797fc76a7683 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 322CD70AE9F9462EA6FCD508BC548955 Ref B: PNQ231110909060 Ref C: 2026-03-31T09:10:20Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:11:20 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 4ae09c0e-030e-4fae-b543-98c5ee3ab346 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: FB2CE04D21CB4340BAC84B407015C5E2 Ref B: PNQ231110909031 Ref C: 2026-03-31T09:11:21Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:12:21 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 63cfce62-23b7-402f-a538-9c4a84bd896d - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: A7A0D01B5C054F878197A8FE55EFF862 Ref B: PNQ231110906042 Ref C: 2026-03-31T09:12:22Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:13:22 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 89e50da6-d7fb-45ef-9a94-7e67b91871f8 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 68A2B49D8F3F4E3ABA92F37892289977 Ref B: PNQ231110906025 Ref C: 2026-03-31T09:13:22Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:14:22 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 13b82d48-925a-41b5-b8e9-5d55000fd0ad - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 5CA8C9DCC5024108A46FB295DE3C023D Ref B: PNQ231110908062 Ref C: 2026-03-31T09:14:23Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:15:23 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - c42a6954-2f3e-4b50-b4f5-52f951997478 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 30C18C48F8E548ED8EE537FFAB72B8BF Ref B: PNQ231110906054 Ref C: 2026-03-31T09:15:23Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:16:24 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 7d281ef3-c248-4f6a-8e3b-b5527ac47152 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: E5FAB84147E04F8ABCA811A21D38022F Ref B: PNQ231110906060 Ref C: 2026-03-31T09:16:24Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:17:24 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 55390a2f-4e14-4950-bb6b-143dff6c0bef - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: BD1C0EB47C6248CCBA1C1AA48E3152A2 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:17:25Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"8c519148-91ae-4117-adbb-8bb4c68d9fe1\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":[],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioning","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '881' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:18:24 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - b49e0942-a091-4faa-92f3-a2afc3c68295 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: AD976674E4BD4FF0BB430E7E650709DF Ref B: PNQ231110909052 Ref C: 2026-03-31T09:18:25Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network vhub show - Connection: - - keep-alive - ParameterSetName: - - -g -n - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes?api-version=2022-05-01 - response: - body: - string: '{"name":"test-vhub-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes","etag":"W/\"2bf802de-e8f4-4d2c-a2db-e1b67d156236\"","type":"Microsoft.Network/virtualHubs","location":"eastus","properties":{"provisioningState":"Succeeded","virtualHubRouteTableV2s":[],"addressPrefix":"10.6.0.0/16","virtualRouterAsn":65515,"virtualRouterIps":["10.6.32.5","10.6.32.6"],"routeTable":{"routes":[]},"virtualRouterAutoScaleConfiguration":{"minCapacity":2},"virtualWan":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualWans/test-vwan-routes"},"networkVirtualAppliances":[],"sku":"Standard","routingState":"Provisioned","allowBranchToBranchTraffic":false,"hubRoutingPreference":"ExpressRoute"}}' - headers: - cache-control: - - no-cache - content-length: - - '903' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:19:26 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 3ba7bda2-477c-4c1e-89dc-d3a6a6893e9d - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 5C940B2BCD5D4B12B13EF9A90B7DB537 Ref B: PNQ231110907052 Ref C: 2026-03-31T09:19:26Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test_express_route_gateway_routes000001?api-version=2024-11-01 - response: - body: - string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001","name":"test_express_route_gateway_routes000001","type":"Microsoft.Resources/resourceGroups","location":"eastus","tags":{"product":"azurecli","cause":"automation","test":"test_network_express_route_gateway_routes_and_resiliency","date":"2026-03-31T09:00:29Z","module":"network","Created":"2026-03-31T09:00:33.9840027Z"},"properties":{"provisioningState":"Succeeded"}}' - headers: - cache-control: - - no-cache - content-length: - - '482' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:19:27 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: E4F905CEF6A146069D1A8FFCB7F36611 Ref B: PNQ231110906025 Ref C: 2026-03-31T09:19:27Z' - status: - code: 200 - message: OK -- request: - body: '{"location": "eastus", "properties": {"autoScaleConfiguration": {"bounds": - {"min": 2}}, "virtualHub": {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes"}}}' - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - Content-Length: - - '277' - Content-Type: - - application/json - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/expressRouteGateways/test-ergw-routes?api-version=2023-09-01 - response: - body: - string: '{"name":"test-ergw-routes","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/expressRouteGateways/test-ergw-routes","etag":"W/\"36110844-361a-4aef-bb23-f1a86f00e794\"","type":"Microsoft.Network/expressRouteGateways","location":"eastus","properties":{"provisioningState":"Updating","resourceGuid":"f166be7d-ffea-4f97-b94a-693e9c2fb352","virtualHub":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_express_route_gateway_routes000001/providers/Microsoft.Network/virtualHubs/test-vhub-routes"},"expressRouteConnections":[],"allowNonVirtualWanTraffic":false,"autoScaleConfiguration":{"bounds":{"min":2}}}}' - headers: - azure-asyncnotification: - - Enabled - azure-asyncoperation: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - cache-control: - - no-cache - content-length: - - '722' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:19:28 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 562e0cb6-13e6-46fc-8ed8-0ad9a593570e - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/eastus/cca5eeb6-332b-4ee2-892e-9f8ad34ff749 - x-ms-ratelimit-remaining-subscription-global-writes: - - '11999' - x-ms-ratelimit-remaining-subscription-writes: - - '799' - x-msedge-ref: - - 'Ref A: F13CEA103CDF4BA38B0AD2DFBEC79911 Ref B: PNQ231110908052 Ref C: 2026-03-31T09:19:27Z' - status: - code: 201 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:19:29 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 9cac06d9-5246-4da6-8859-3326a774e65f - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/e57a8842-b6fe-42e5-b655-580250d40646 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: BFD4584FE54B4EB29E174C3C82E13B8F Ref B: PNQ231110907052 Ref C: 2026-03-31T09:19:29Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:19:40 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 33b6b11b-94c0-4e9b-bfb7-ff740a2dd920 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/2f1a6896-231e-41ac-a598-950ec59a8b46 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 1C24CD2AF8634F1580ED2D2664B38B9C Ref B: PNQ231110909042 Ref C: 2026-03-31T09:19:40Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:20: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-arm-service-request-id: - - babf7505-7623-4f26-951e-72138ea12375 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/68f20a62-5b8d-45de-a362-b9670f60f258 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: DCF5E130392444B7B95A275D4FA05461 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:20:00Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:20:21 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 72c3eabc-1839-4dc4-b4cb-0fd6001def22 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/f526fada-89b2-4011-9f8a-a292b81163f8 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: E9FAF605E9A148B78BBB74E94074B870 Ref B: PNQ231110906040 Ref C: 2026-03-31T09:20:21Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:21:01 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - a741d237-b3d7-42bd-9ee9-3429f0deb923 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/76a6558c-c70e-4488-ba18-ca851de99541 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 56A5119FF30E48F5ABFC71F6925C56B6 Ref B: PNQ231110909054 Ref C: 2026-03-31T09:21:02Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:21:43 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 4cf439d1-7ee2-4ca6-9194-dc64c82caad2 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/cbbed05d-6fd7-45e2-8ef4-a3e2c4865cfe - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: E4CE6CB491374CF484DFDBB61659C4D5 Ref B: PNQ231110907031 Ref C: 2026-03-31T09:21:42Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:23:03 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 81fd3c5d-7f03-492e-9e38-5d89db681a46 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/d82dd656-da55-40b1-b23a-e42b4ec10e5c - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 35FBECAB4517419F8CC1FA5B1EBC5971 Ref B: PNQ231110907040 Ref C: 2026-03-31T09:23:03Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:25:44 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 3167ec08-0bdd-4c84-b0ba-680fafe97d66 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/65c48b7e-d95e-46b5-9719-bf6c3479e984 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 4E3435696CC24E468F5560C7E04EC7AA Ref B: PNQ231110906040 Ref C: 2026-03-31T09:25:44Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:27:24 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 4213463a-60ca-4226-b12e-b1939702fce1 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/7c08c53f-9a94-4757-a71e-57eb720bd3f4 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 0643596B849B4DF7B38138FE8A73B388 Ref B: PNQ231110906060 Ref C: 2026-03-31T09:27:24Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:29:05 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 5ddea5f4-85d7-4a33-a78e-1b1bdf45311b - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/127c259a-2333-4887-b8c6-3f8a0c809c46 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: E15A51818F0B465A9D82B6206B423860 Ref B: PNQ231110909062 Ref C: 2026-03-31T09:29:05Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:30:45 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - 3820baa3-b770-4fe6-9e5d-fd5c2f3a1d84 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/be9a8a1b-d075-42b4-8d82-e1d2235e23d1 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 572D4974E1474780AE272EAB39B455D6 Ref B: PNQ231110909036 Ref C: 2026-03-31T09:30:46Z' - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:32:26 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - acd6f949-b3f5-4d5a-a601-145b34449639 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/9c878880-5537-4e4f-be84-2280f42bd229 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: FA8046AD425540F9B7873A749AC0200B Ref B: PNQ231110908060 Ref C: 2026-03-31T09:32:26Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:34:08 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - fd3afc55-45aa-466d-93a4-e061195d7993 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/fe595611-2540-46ea-b6e5-4278030f2fa1 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: 0391A1CAB53A406DB337375158FE0D19 Ref B: PNQ231110906031 Ref C: 2026-03-31T09:34:07Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway create - Connection: - - keep-alive - ParameterSetName: - - -g -n --virtual-hub --min-val - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/cfe6330e-ec14-4ee3-b554-ebeaa582ecb0?api-version=2023-09-01&t=639105455691746119&c=MIIHxDCCBqygAwIBAgIRAJVEBjgK1fo3sgU5fQhfuLEwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxOTAxNTQ1MloXDTI2MDgxNDA3NTQ1MlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrBg4PC5_iwaDF2jdesjMFYDUEQArU1ZMOWKClK9v-zEzpLQWRkuLaTlb8lurdKZw0tKz7W5RLJzZENJjHh0OhhqpDT2ZThQyqtKC54UFZKNQG3GiSWCDRMpQ-3lrvWe-BjJPOWPW3KZQM60VNR2Rn00yITDdvZb_VJvNHswjZkL6_AYx34fi1yqn4PLdF_r_70KohAv0GbYeaDOiK0TB6lrbCpFuKyMxhrj-wYuELoxavVYoiJ0HCRwkshCDYtmtZyL3HS03HSQ21aM3XgRL59a3jBRCEsTeotMe7Cq_ZxbJnx6b9o1dIoYNEUEdH30-hhyPgr8Iz74zrlD8qaCc1AgMBAAGjggTCMIIEvjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBTkGx50YKynp1NdIGMYkgerB7q2yjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcoGA1UdHwSCAcEwggG9MG-gbaBrhmlodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwcaBvoG2Ga2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQxL2N1cnJlbnQuY3JsMGCgXqBchlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDEvY3VycmVudC5jcmwwdaBzoHGGb2h0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80MS9jdXJyZW50LmNybDCCAc8GCCsGAQUFBwEBBIIBwTCCAb0wcgYIKwYBBQUHMAKGZmh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB0BggrBgEFBQcwAoZoaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NhY2VydHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvY2VydC5jZXIwYwYIKwYBBQUHMAKGV2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBsBggrBgEFBQcwAoZgaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBvLgW8TEYHqGbCuDyHhkYK1OKWuuU-hapduG-PB1saopKb2-3u4xS05HJWiktEtOs0r6T5LzFdUhBJ8UU44D4W_T3Klq11PFRfv2ODDWq8FX5HwydKsyc0MGHZHtz1h-25G7Ezns0HORN0VDZWkAHvwo6uncxlizCvilcKcLZN9hVZS0KGTU5emzjSB9TPjn9grassWmzhVKdiNTPPKrYsGZ-vmXnBtJed4O5aaQ3vqKRbNiq6EtQexCdqS7c3Y0UVsUkXkEK22TsTmQvHcyawH9BkLWYtNKQi85OT-g85ayYrtkjo5fakBErjJ0c-w3OQ9sa54Sxm3HniZyubzpe5&s=P1omRtVp_icn3JbMybF9v28KX6_XoQMYEBIaEUTAFuu3oPmGOQEqtGgvpS5jWboRJaO9GM2WpWWorw3isvy-dg4lkDsZIrIapuH0qPNb-Hl2wHYDKXWFDCEIGX2cRxRJRjinIme4FU2L7Qb-utZwg0IE-s3UfU2D6um8SBXuqlu2MEjjKimy1wkJtX8xUFz48LrMQoWf4ILt7BkZc6N-j1QNGfnllimclI_z_Lqh-r8O8kl2A1f0xacsUx1HOvX00MZCUcRNBzgmtT_5M6lRvJIL9Ifm2EjvJaZs0ZVdMto5Ug2J68LKbemjXsl7jbnofeo6P0WI3JzPktLOp8qmLw&h=YLJlSI26g3LBuW_Ai9sOWgyRaUQWV9SMD8UWDSvp38o - response: - body: - string: '{"status":"InProgress"}' - headers: - cache-control: - - no-cache - content-length: - - '23' - content-type: - - application/json; charset=utf-8 - date: - - Tue, 31 Mar 2026 09:35:48 GMT - expires: - - '-1' - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - ea8e2215-9a5b-445f-b5df-fd0c9a0ff695 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/0a266c61-5811-4f96-a381-98f97e0901ec - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-msedge-ref: - - 'Ref A: F75E3A3517654FBAA6E96490F9F04117 Ref B: PNQ231110908029 Ref C: 2026-03-31T09:35:48Z' - status: - code: 200 - message: OK version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml index 7cdd1f5fe72..c1091d5bf2d 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml @@ -7,17 +7,17 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive Content-Length: - '0' ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/shubhati_failover/providers/Microsoft.Network/virtualNetworkGateways/shubhati_failoverGw/startSiteFailoverTest?peeringLocation=London2&api-version=2024-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/startSiteFailoverTest?peeringLocation=DataPathLocation1&api-version=2025-07-01 response: body: string: 'null' @@ -31,11 +31,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:04 GMT + - Mon, 06 Apr 2026 10:01:06 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966049657717&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=hAmKPH8FaDf-vdM8nZ4iDARafVUO7AWxnSDo_hZJXXTR0ZLk-Rg7fKjce8288tylRY1LRcznjYH7FJF7nmP4yEnRdEqmPcNXjlo6spTBQ-F1IHyzgPlGLIF12sdgPVdPe5KNydH7OmjuEcHMYobwDFEmkvJ0ZoNrrsnx2pxYrD0uXDl8-T0EUyIqp6vBdYsBtCr-DmPiQdy6X79nwu0InFE-O3sVlV3uh05DYluIOWclx5GfVNL7XYU4wUEVFWkJLVrj5MCzF3VRUSrbqcwyNb5DLBbtY3PW21Hy_z9-U7Iwi9_XglDj319CYzP1c24SlxxM5zqEMFdfmhlcSi3EBg&h=oUiDnuQ4Dv-p4UZDaWSKD9WT66qkBrLDGiZT6QDy9v4 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664663567794&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=1wdE5SsfHThs8yTjsFKmiY3hiai1IXvxzHMycuhkU-QQXauazx7PLeZU8Q-HRFxh8RghYUaEVBJHlf1FkNPZc-PArV5q55IVn5Mo7NsemIi_BS1hnAHHNzWyy6UfkpyXxTbekSRWa05ctTkIs07C6njLjgSgAKMk9rOWiGku-O9G-VsN9sgBktZFz07bLfWsk9kHkIvdiu1kozr89mT9bA8N7UWgXSYkajhbciC1B5uS6cg8U6Jxs_h5jbaJdhDWOXlknkNDfYxCjbgME3cTmanKydtFKyBnpx6sqsI3S0xq43SBVzmb9LQJkuiUTqn8tlD1SwAH_-CZmSjAtf52hQ&h=a7tBeNTRSI_zRpfW47FT3Fd9Q4tluUJn5q2fYFOEl4w pragma: - no-cache strict-transport-security: @@ -45,18 +45,20 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/880fe985-2773-4ee3-a35f-8f1b665b7c39 - x-ms-ratelimit-remaining-subscription-global-writes: - - '11999' + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/f7337be9-1661-47a2-b5ba-a0432fea9039 x-ms-ratelimit-remaining-subscription-writes: - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.5, etc + x-ms-throttling-version: + - v2 x-msedge-ref: - - 'Ref A: D866922829224E2E803E4875FD22E991 Ref B: CO6AA3150217035 Ref C: 2025-08-25T05:30:04Z' + - 'Ref A: F2DE94B6ECC44B79982CF4F4FCAB33C7 Ref B: PNQ231110909023 Ref C: 2026-04-06T10:01:05Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -65,15 +67,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966049657717&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=hAmKPH8FaDf-vdM8nZ4iDARafVUO7AWxnSDo_hZJXXTR0ZLk-Rg7fKjce8288tylRY1LRcznjYH7FJF7nmP4yEnRdEqmPcNXjlo6spTBQ-F1IHyzgPlGLIF12sdgPVdPe5KNydH7OmjuEcHMYobwDFEmkvJ0ZoNrrsnx2pxYrD0uXDl8-T0EUyIqp6vBdYsBtCr-DmPiQdy6X79nwu0InFE-O3sVlV3uh05DYluIOWclx5GfVNL7XYU4wUEVFWkJLVrj5MCzF3VRUSrbqcwyNb5DLBbtY3PW21Hy_z9-U7Iwi9_XglDj319CYzP1c24SlxxM5zqEMFdfmhlcSi3EBg&h=oUiDnuQ4Dv-p4UZDaWSKD9WT66qkBrLDGiZT6QDy9v4 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664663567794&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=1wdE5SsfHThs8yTjsFKmiY3hiai1IXvxzHMycuhkU-QQXauazx7PLeZU8Q-HRFxh8RghYUaEVBJHlf1FkNPZc-PArV5q55IVn5Mo7NsemIi_BS1hnAHHNzWyy6UfkpyXxTbekSRWa05ctTkIs07C6njLjgSgAKMk9rOWiGku-O9G-VsN9sgBktZFz07bLfWsk9kHkIvdiu1kozr89mT9bA8N7UWgXSYkajhbciC1B5uS6cg8U6Jxs_h5jbaJdhDWOXlknkNDfYxCjbgME3cTmanKydtFKyBnpx6sqsI3S0xq43SBVzmb9LQJkuiUTqn8tlD1SwAH_-CZmSjAtf52hQ&h=a7tBeNTRSI_zRpfW47FT3Fd9Q4tluUJn5q2fYFOEl4w response: body: string: 'null' @@ -87,11 +89,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:05 GMT + - Mon, 06 Apr 2026 10:01:07 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966052923040&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HY0VpEbQ0wL3V38MH_VaHrYfk63bNThrZqsyLLnM5P_8FggW3HAxwSV1qp5kZUJCAKcxsDm2e6xZkRB8K49eeECaHRHkdwalcLkokdHa1EEwX6h7plDcGfM1ILpQW1CAhiBkvkv8mg8xasrZyBA6tRXDZyHZPlpBHSXvSjYp4tYagE5wbXIrJ0tiHqJy3vMbpLt5iIGxOIdXESrd2jM9p1nSs-OcdYR0aX_Ueivz0GTJjqtrIwrTyP8shm7PCAzLMrKUiT9DIMJ0kUvEzOZeR9DSTvFDaIJebCyFXhoouwtB-U6uu2qCLo-Dojo5aYvQpMzLGvUtCtQE4jkrXlF5Ow&h=MHq_cX98SsP9i55z_K-NgxftVEXuMgVHDHSs1AOOTF0 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664679377323&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=x8aOvt6Xc1N2-0oScsfcTNYTCRkFNTLD8PpEWeVUhsvr9eqZeIb1L0j_tZhUzaD4sb47JBThK9bzw_FuqoHAE8wzYBIBtH-Iss9QpMLmnNsibW7jFK1es_ToMqKnj32rFE7XzJqzpWOObFBnWV1p8Wzv4E-FTNCGN4EG35mLUkzfqVmu0jqYBLCwzMHUMXiIZ8bhsgZMsX2N-vXWuIoXQrIxSMUQd-STZ4BROvMOIXPaofPdCv0lKQsOdRcRc0whcWCaTgN1ztEI91jSbhWVaY3AT4ooCiaS-srQozQIwuBLc-4VpGnmeamY6ypR21fjHT-fDvQUJ5Gf0ZMCyrFo6g&h=YdF_yJxqQ9ko3nQCY8QzzTHxxYNc1g52Wpm8_mxTJkM pragma: - no-cache strict-transport-security: @@ -101,16 +103,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/9fd5f1f8-ab64-41fa-9a72-16e2bc2f81ff + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/1f2be010-d848-43d5-b747-4e63b32d6636 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc x-msedge-ref: - - 'Ref A: 884356393E71491193998CF9F5A0FF40 Ref B: CO6AA3150217037 Ref C: 2025-08-25T05:30:05Z' + - 'Ref A: 1AB4BBDF54644CC487A0016924EB5878 Ref B: PNQ231110908052 Ref C: 2026-04-06T10:01:06Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -119,15 +123,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966052923040&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HY0VpEbQ0wL3V38MH_VaHrYfk63bNThrZqsyLLnM5P_8FggW3HAxwSV1qp5kZUJCAKcxsDm2e6xZkRB8K49eeECaHRHkdwalcLkokdHa1EEwX6h7plDcGfM1ILpQW1CAhiBkvkv8mg8xasrZyBA6tRXDZyHZPlpBHSXvSjYp4tYagE5wbXIrJ0tiHqJy3vMbpLt5iIGxOIdXESrd2jM9p1nSs-OcdYR0aX_Ueivz0GTJjqtrIwrTyP8shm7PCAzLMrKUiT9DIMJ0kUvEzOZeR9DSTvFDaIJebCyFXhoouwtB-U6uu2qCLo-Dojo5aYvQpMzLGvUtCtQE4jkrXlF5Ow&h=MHq_cX98SsP9i55z_K-NgxftVEXuMgVHDHSs1AOOTF0 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664679377323&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=x8aOvt6Xc1N2-0oScsfcTNYTCRkFNTLD8PpEWeVUhsvr9eqZeIb1L0j_tZhUzaD4sb47JBThK9bzw_FuqoHAE8wzYBIBtH-Iss9QpMLmnNsibW7jFK1es_ToMqKnj32rFE7XzJqzpWOObFBnWV1p8Wzv4E-FTNCGN4EG35mLUkzfqVmu0jqYBLCwzMHUMXiIZ8bhsgZMsX2N-vXWuIoXQrIxSMUQd-STZ4BROvMOIXPaofPdCv0lKQsOdRcRc0whcWCaTgN1ztEI91jSbhWVaY3AT4ooCiaS-srQozQIwuBLc-4VpGnmeamY6ypR21fjHT-fDvQUJ5Gf0ZMCyrFo6g&h=YdF_yJxqQ9ko3nQCY8QzzTHxxYNc1g52Wpm8_mxTJkM response: body: string: 'null' @@ -141,11 +145,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:15 GMT + - Mon, 06 Apr 2026 10:01:18 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966157036619&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Yo9-UhA8PXMtNzQEPmyGoU6uXjET1jvzh1Wn4cYCjKw8r8y1glfVhTlwl1PK2MTaBf2hkrQrNaKAN4PGonvB3vp_Sn26c1DvgFRs5qcvrROi-OMeoImPtdNdJsBVkTrRfiNTQGlc748Kb_HTiMTYDcYlcSO3VcyHCfTDMSwD88E692CJ9paor3W1e761_1fAkIUrL-XelM4PfnBWjOiwAVDV6pGxO1UQgMlmpDI5gEIinNvPnqv4Omip0GD-bxenRTADkEJcV_nQGVJ3JL1eh5iDRS8i6h7DCjd0Mj_7bo0O9jsY4FztQk30Wz7YGBRGrlW_5nsBzhMgnth7DmUF8Q&h=WC0RVwMGuXYj5iqU6CLgPwZBJd64JKpjQJwM1DrwVCA + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664794579676&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=loPBGYTtVeqQWC4uvzrGYNR8xo-xhANPYtI6-BdMvz3Me2prQuS2KFCnvN5yb7eDKh0CTK0V1SccdX38sUuPJNr6EBjzMxsHxpuaUKDiZpNfwBp4piUpPXjBfCDWnV7Qun73G5snKIPF-yWx5Pldu6Gh-BUVzIXZdOV_E_LOS9vRQb4HflnUH_ugXeQFdvPDi6QH8hNann0PDxUg_n-XWT5gbNkyTzia-j5KobkyFlH_fCUI1gEMYTrbuzEQwah9XC0a1F_4h2A3nOL_Q_ekHx7LNhYY7ei0PRIzdRMSe-FeK-PqLguahjLgMDMrHnkvr5bUdT3cMkQES6s64SEu9Q&h=BUybYk5zAFEysN71nW-aJNvHpBaIYsSPxzo9fgsik-0 pragma: - no-cache strict-transport-security: @@ -155,16 +159,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/8f3cf512-d56a-4d15-a54b-de39114524b6 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/076e418c-1835-4635-ab97-aa2b79d3d80a x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc x-msedge-ref: - - 'Ref A: 37F37AF8E5154BBBB8D8BFCE815E0209 Ref B: MWH011020808023 Ref C: 2025-08-25T05:30:15Z' + - 'Ref A: 990F37DCB5E544AE85BAC7DD329CF1D4 Ref B: PNQ231110907031 Ref C: 2026-04-06T10:01:18Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -173,15 +179,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966157036619&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Yo9-UhA8PXMtNzQEPmyGoU6uXjET1jvzh1Wn4cYCjKw8r8y1glfVhTlwl1PK2MTaBf2hkrQrNaKAN4PGonvB3vp_Sn26c1DvgFRs5qcvrROi-OMeoImPtdNdJsBVkTrRfiNTQGlc748Kb_HTiMTYDcYlcSO3VcyHCfTDMSwD88E692CJ9paor3W1e761_1fAkIUrL-XelM4PfnBWjOiwAVDV6pGxO1UQgMlmpDI5gEIinNvPnqv4Omip0GD-bxenRTADkEJcV_nQGVJ3JL1eh5iDRS8i6h7DCjd0Mj_7bo0O9jsY4FztQk30Wz7YGBRGrlW_5nsBzhMgnth7DmUF8Q&h=WC0RVwMGuXYj5iqU6CLgPwZBJd64JKpjQJwM1DrwVCA + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664794579676&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=loPBGYTtVeqQWC4uvzrGYNR8xo-xhANPYtI6-BdMvz3Me2prQuS2KFCnvN5yb7eDKh0CTK0V1SccdX38sUuPJNr6EBjzMxsHxpuaUKDiZpNfwBp4piUpPXjBfCDWnV7Qun73G5snKIPF-yWx5Pldu6Gh-BUVzIXZdOV_E_LOS9vRQb4HflnUH_ugXeQFdvPDi6QH8hNann0PDxUg_n-XWT5gbNkyTzia-j5KobkyFlH_fCUI1gEMYTrbuzEQwah9XC0a1F_4h2A3nOL_Q_ekHx7LNhYY7ei0PRIzdRMSe-FeK-PqLguahjLgMDMrHnkvr5bUdT3cMkQES6s64SEu9Q&h=BUybYk5zAFEysN71nW-aJNvHpBaIYsSPxzo9fgsik-0 response: body: string: 'null' @@ -195,11 +201,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:25 GMT + - Mon, 06 Apr 2026 10:01:30 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966260991545&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HHWZvkMoyml4dyWAt_X3N19cNAWwD5ooOYBi6Y5psxg7pFFvGoPyyprQi7ZYGvRYeC6qF28HBuzYOQMDPtg1YtndNTiOJglMgLyyFxbe5umPlQEqpTzAGIN6J7XuOud1DNwytiEGI9p0N_ZcTR8Q7RJwrppNbrcGiMErJE88pMjIXP1PPY7JKbdmqVPzJ9R6OiiS057s4GmU2uvqHpr8FwEhiYoroth-fb5d0avQm-8rTM_7LL23ScrjNNc_2edLmWiXwZj0TzUzAY1PPFbW09TojB2H4Qk66p_NikkE88W9WVG4Y-zJh9tinChjy4hsWTPA2lMn0jqVaG4GvUhBGg&h=Dnc33yLUhoWZjyWQp-opTKU9pXBJOHzCxh-BkREkDJk + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664911761691&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=kzqeBmfRA9ebMtoFudE-l_2viRgr7aFzwdfrbbG4IUkphIr67UPZkcOK0QOp3S5sqWvdAGHDYT9_5y2AHBuBIOR8bYAkcI4O0AfWlRurC5cg4meM4qgSWK3WqNCWiZURo_AVVJQTTRsuK73_KezILTL_KNfooK5lRyNeX-au9mJVGDuo_zGvaVzJ6V_wg_921BWmRyOh0H4_hdjEwYh-XzN3j9xMl10BjUTcWVKXmxnON8149-xQf5rAy9BkIh9kz-54OPcSkPAHntUL8sH0jv1OjG3zmBUhZvCZWiYBxIvtR0D4MK31ducoAqlNRLqtZx1uG5yoSYs9P7Z2AvnEaA&h=5ME2LUkgQ1MtQtU6EvzOWPouOHI3NKe4ngi7OMtRbCk pragma: - no-cache strict-transport-security: @@ -209,16 +215,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/03d110bf-41bb-4c64-b71f-46f1a53a1232 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/11de06c8-e8ae-4698-98f3-ca47580e92ed x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.3, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc x-msedge-ref: - - 'Ref A: A63AD1160166475E9ED6117CC1BE3F34 Ref B: MWH011020809031 Ref C: 2025-08-25T05:30:26Z' + - 'Ref A: 46E17AD2F5E84D3FA0354B860B30188F Ref B: PNQ231110906029 Ref C: 2026-04-06T10:01:29Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -227,15 +236,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966260991545&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HHWZvkMoyml4dyWAt_X3N19cNAWwD5ooOYBi6Y5psxg7pFFvGoPyyprQi7ZYGvRYeC6qF28HBuzYOQMDPtg1YtndNTiOJglMgLyyFxbe5umPlQEqpTzAGIN6J7XuOud1DNwytiEGI9p0N_ZcTR8Q7RJwrppNbrcGiMErJE88pMjIXP1PPY7JKbdmqVPzJ9R6OiiS057s4GmU2uvqHpr8FwEhiYoroth-fb5d0avQm-8rTM_7LL23ScrjNNc_2edLmWiXwZj0TzUzAY1PPFbW09TojB2H4Qk66p_NikkE88W9WVG4Y-zJh9tinChjy4hsWTPA2lMn0jqVaG4GvUhBGg&h=Dnc33yLUhoWZjyWQp-opTKU9pXBJOHzCxh-BkREkDJk + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664911761691&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=kzqeBmfRA9ebMtoFudE-l_2viRgr7aFzwdfrbbG4IUkphIr67UPZkcOK0QOp3S5sqWvdAGHDYT9_5y2AHBuBIOR8bYAkcI4O0AfWlRurC5cg4meM4qgSWK3WqNCWiZURo_AVVJQTTRsuK73_KezILTL_KNfooK5lRyNeX-au9mJVGDuo_zGvaVzJ6V_wg_921BWmRyOh0H4_hdjEwYh-XzN3j9xMl10BjUTcWVKXmxnON8149-xQf5rAy9BkIh9kz-54OPcSkPAHntUL8sH0jv1OjG3zmBUhZvCZWiYBxIvtR0D4MK31ducoAqlNRLqtZx1uG5yoSYs9P7Z2AvnEaA&h=5ME2LUkgQ1MtQtU6EvzOWPouOHI3NKe4ngi7OMtRbCk response: body: string: 'null' @@ -249,11 +258,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:36 GMT + - Mon, 06 Apr 2026 10:01:42 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966367628642&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=BJLWOCQA-H-7wAkgF0yzHF2nWjYNOUQXkh7JBWE22ruw4YLAMT5_oGKdbmsY6tROGtTMTnRdA9pZlPyDRrAZGP1xDx29juNRlx057UdNMxa5e0bRabPTM17xAvLbvg9jV15tKq-woyjXl8DHVi77mGWWuuloV0I7tvk2xBzOo3eCIgnUdx2MHqWYYRpKT2fswL2tkdFNh20SwFRVnPb-qlwV9iiZB0B7qg0iv5scyJq1scZC4Jb8ujEBwTD6prYYBXs4ik9rbv7XWLRT5or-52ecGztboOcidCIG-msz-0W9x97_MRIzTYgdvXiX5zp-v5blYOhfXyy5T4RV7PKRww&h=ttrPMJtYoHwPac4wxBjb97MDDvie6E2uMFoI-IuPvP8 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665030767372&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=ccfmKIYsBwguVubdqrTkDyE6xNWhuofA5co82fBISqjhFSgEuq4ENDG-7WfQml3sZaXKwwE53FNACf2H34zL9uLkqZOI-n_MohR1mSz_XXk-d3NzZvenuWgRuFVkam51fs6nPNzoGVxYFvWPQPD1tEeJYyhP1PwXU8akJXo5Zv8o5XoldrgfOWrhNnVmLuZA-FZYwbShPGtGLpcdnhz2gtrV9Q3DWH7SGPU2y83HUJ0_KJ8FBSBihU9Ai8F9tT-zQ2AyVybaw_-o3iEmy_OQAXCWF9svN75vwtF9lhklkAI2pyGofGEqo6-8SsXCezC-261z7fMOUkBdT-uYPcRpkg&h=QPHZGkkcE_9tl-rmXM7GUdhITJ_tdJC6eCurzeMWAmg pragma: - no-cache strict-transport-security: @@ -263,16 +272,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/2a9b794c-4174-4b29-8c30-96e2739c7af8 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/cfe966ff-a404-40d4-96c2-e09de9b6b59a x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.5, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc x-msedge-ref: - - 'Ref A: CB569B8AD42A4C3BA19D0F169B78014D Ref B: CO6AA3150220051 Ref C: 2025-08-25T05:30:36Z' + - 'Ref A: D6699E608F9A4CB592CE8D2A22E93193 Ref B: PNQ231110907023 Ref C: 2026-04-06T10:01:41Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -281,15 +293,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966367628642&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=BJLWOCQA-H-7wAkgF0yzHF2nWjYNOUQXkh7JBWE22ruw4YLAMT5_oGKdbmsY6tROGtTMTnRdA9pZlPyDRrAZGP1xDx29juNRlx057UdNMxa5e0bRabPTM17xAvLbvg9jV15tKq-woyjXl8DHVi77mGWWuuloV0I7tvk2xBzOo3eCIgnUdx2MHqWYYRpKT2fswL2tkdFNh20SwFRVnPb-qlwV9iiZB0B7qg0iv5scyJq1scZC4Jb8ujEBwTD6prYYBXs4ik9rbv7XWLRT5or-52ecGztboOcidCIG-msz-0W9x97_MRIzTYgdvXiX5zp-v5blYOhfXyy5T4RV7PKRww&h=ttrPMJtYoHwPac4wxBjb97MDDvie6E2uMFoI-IuPvP8 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665030767372&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=ccfmKIYsBwguVubdqrTkDyE6xNWhuofA5co82fBISqjhFSgEuq4ENDG-7WfQml3sZaXKwwE53FNACf2H34zL9uLkqZOI-n_MohR1mSz_XXk-d3NzZvenuWgRuFVkam51fs6nPNzoGVxYFvWPQPD1tEeJYyhP1PwXU8akJXo5Zv8o5XoldrgfOWrhNnVmLuZA-FZYwbShPGtGLpcdnhz2gtrV9Q3DWH7SGPU2y83HUJ0_KJ8FBSBihU9Ai8F9tT-zQ2AyVybaw_-o3iEmy_OQAXCWF9svN75vwtF9lhklkAI2pyGofGEqo6-8SsXCezC-261z7fMOUkBdT-uYPcRpkg&h=QPHZGkkcE_9tl-rmXM7GUdhITJ_tdJC6eCurzeMWAmg response: body: string: 'null' @@ -303,11 +315,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:46 GMT + - Mon, 06 Apr 2026 10:01:54 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966471373417&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=gxu_YF8yeG-vmRwGt_s-AQiZYT96sWuxcL9QTdFzFsKZ2_zirqaELcmQM7yDLD4ZGsYSdhKIWIxU3Xn1xpZN7wjjvV3KyKUA_eHC__X-Zwq27SNTpJYVuhktjekafy3mCSDguLtEfAZu65zJYPkBXlUiCRnVf5FuDEaiBg6qqndYrlHUqYKonR_jhLIsq1IkXaZfo2xJeYl6flaHvkGgT6NeDsTHkxlv8B3oX864xo8gcrJfiv3TBXWrQgvArtS5uyBdECk4IbTL23IdL2FCBu1LFm9pSXDmIWyosYGtmpQVNfey6PGKNZEmgd5RFGfa64cHHQ15Z6CLcNLpSUQp-g&h=ZGIqvatnr5iYTc8plruoi_el1DIirznaFjR-a8psobg + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665145043371&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=G0Nv1pK72ykSZq09x4hZEffm1jX5si_x5dtc6CrrU9FYWPfVYXyhRrMPTzBPOE7t6f2OOw4BD2iP-AKUdZETmiCt-iLzaqOeZ5IASTMEF6ObkDwt6yKiS7n9_7s5dgVz2xO55dgfq8zSCwse6OG6P3d6KNXlAQ_PYIoEFKVcuwHWcI-dpGUDvbXjz7LdLNJYAZIKjxP6vuj2buPPSgzU7Ys4mWyhiXrVH0ZKBCbFMfR3iCThXtH5jCZzRX9ACt3ieskE_xkUtiatTq7PvzdRHLxi-c5r0TZxkf0j4_e5YHU8HMSmPWfD1ESEjtwBLVWCBcJN8OpdYYjftXm-QY0Pbg&h=la1hMjPVsvPqI5oLiQXKJAow25NJ3-nVN8PR0NclsUA pragma: - no-cache strict-transport-security: @@ -317,16 +329,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/09a713eb-742b-408c-b9ed-7a0565ec476d + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/4262ce40-0ad6-45db-a85e-ac6af7c339df x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.5, etc x-msedge-ref: - - 'Ref A: CF95362DB7F342FFAB3F8A85F9498517 Ref B: MWH011020807023 Ref C: 2025-08-25T05:30:47Z' + - 'Ref A: 3FFCEA71DA1E41C4BE16834051E68752 Ref B: PNQ231110907023 Ref C: 2026-04-06T10:01:53Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -335,15 +349,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966471373417&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=gxu_YF8yeG-vmRwGt_s-AQiZYT96sWuxcL9QTdFzFsKZ2_zirqaELcmQM7yDLD4ZGsYSdhKIWIxU3Xn1xpZN7wjjvV3KyKUA_eHC__X-Zwq27SNTpJYVuhktjekafy3mCSDguLtEfAZu65zJYPkBXlUiCRnVf5FuDEaiBg6qqndYrlHUqYKonR_jhLIsq1IkXaZfo2xJeYl6flaHvkGgT6NeDsTHkxlv8B3oX864xo8gcrJfiv3TBXWrQgvArtS5uyBdECk4IbTL23IdL2FCBu1LFm9pSXDmIWyosYGtmpQVNfey6PGKNZEmgd5RFGfa64cHHQ15Z6CLcNLpSUQp-g&h=ZGIqvatnr5iYTc8plruoi_el1DIirznaFjR-a8psobg + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665145043371&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=G0Nv1pK72ykSZq09x4hZEffm1jX5si_x5dtc6CrrU9FYWPfVYXyhRrMPTzBPOE7t6f2OOw4BD2iP-AKUdZETmiCt-iLzaqOeZ5IASTMEF6ObkDwt6yKiS7n9_7s5dgVz2xO55dgfq8zSCwse6OG6P3d6KNXlAQ_PYIoEFKVcuwHWcI-dpGUDvbXjz7LdLNJYAZIKjxP6vuj2buPPSgzU7Ys4mWyhiXrVH0ZKBCbFMfR3iCThXtH5jCZzRX9ACt3ieskE_xkUtiatTq7PvzdRHLxi-c5r0TZxkf0j4_e5YHU8HMSmPWfD1ESEjtwBLVWCBcJN8OpdYYjftXm-QY0Pbg&h=la1hMjPVsvPqI5oLiQXKJAow25NJ3-nVN8PR0NclsUA response: body: string: 'null' @@ -357,11 +371,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:30:56 GMT + - Mon, 06 Apr 2026 10:02:05 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966576979532&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=U3X1jEFAtTI3kFvRA8SbRct-pkOAzzhbrvcPFoTeZ4nFgncyVgXuOwHtnHIh0YDk5LoHbG4kPhBn7iHV_x4pV-q8lsJc0ETrcz-2yDYCfJeL-SKUyA0GeZfH7dk47XuKEadFGWtK_1Yq7V6LZ1IXXtZBQ4wGUL6mqo8wriiaqVfzzSPF1aMbjkTf5vDJ7Z0KfrOXpNz1lcKYnjRm__K1gcgr_lFGRMp3m_xCy_-Ra8Jcr5cgkFS1lj0L-S5R-ghrMl8oy5SlKhs9JXYd8Nun2m7lu5XrqsYJzz7Iawj45Whg9YK4pjlsZ3zmF9LmeiOUJwrvf-V-EEMV9VN0DTwTUA&h=-YOOBSxt9KwzHXigXYXAZBmQxebCXpxX_hJ5IFp9Lio + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665258817986&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lDJ-KEXB8faQqz1rWtPs3sh4GOttJ_ocAGZ0BHtRjOzCj0pruRUNh4UUxo7xVzYZG-gqq8GVurX0a7N0QZhsDFl42cHu4_vxV7gLhF6R46J8oqEbg1gCeZvv1xKZ7xFgnOnBeCAzEFKH8j3DnDubcGTnapCBbrv0aBD_9gfqtbFVjOC4VGWBkulQfGiFAadC34yycGdaVyOlnK5axPB4Y3EZxcNvYGthWutswJDjHS2bLmYPaXj_fZxeXFgivxLJB8Wa_RMmi-355kE7X54IsGN84qmafoZMnd9dFkC65yT3Q2v1LsVEP8S5zxx57PksKtY4SkmPxQ_CoLgbZF2S-g&h=_4ZVv7hsrf6wdNoXevo5V1htrdrdZMJ7UPjIYNPIdPs pragma: - no-cache strict-transport-security: @@ -371,16 +385,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/e492c8ab-3313-4ac2-b7da-e7fff943bb0e + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/d8772268-cdd8-413c-8b75-4e531ab204bc x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.7, + etc x-msedge-ref: - - 'Ref A: 478C9F02FC0E4429991A7DB2D3B16FC7 Ref B: MWH011020806052 Ref C: 2025-08-25T05:30:57Z' + - 'Ref A: C1CE9A0AB8FF4221A7F45C0C87E1A3D1 Ref B: PNQ231110908060 Ref C: 2026-04-06T10:02:04Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -389,15 +406,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway start-site-failover-test + - network express-route gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location + - --resource-group --name --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966576979532&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=U3X1jEFAtTI3kFvRA8SbRct-pkOAzzhbrvcPFoTeZ4nFgncyVgXuOwHtnHIh0YDk5LoHbG4kPhBn7iHV_x4pV-q8lsJc0ETrcz-2yDYCfJeL-SKUyA0GeZfH7dk47XuKEadFGWtK_1Yq7V6LZ1IXXtZBQ4wGUL6mqo8wriiaqVfzzSPF1aMbjkTf5vDJ7Z0KfrOXpNz1lcKYnjRm__K1gcgr_lFGRMp3m_xCy_-Ra8Jcr5cgkFS1lj0L-S5R-ghrMl8oy5SlKhs9JXYd8Nun2m7lu5XrqsYJzz7Iawj45Whg9YK4pjlsZ3zmF9LmeiOUJwrvf-V-EEMV9VN0DTwTUA&h=-YOOBSxt9KwzHXigXYXAZBmQxebCXpxX_hJ5IFp9Lio + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665258817986&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lDJ-KEXB8faQqz1rWtPs3sh4GOttJ_ocAGZ0BHtRjOzCj0pruRUNh4UUxo7xVzYZG-gqq8GVurX0a7N0QZhsDFl42cHu4_vxV7gLhF6R46J8oqEbg1gCeZvv1xKZ7xFgnOnBeCAzEFKH8j3DnDubcGTnapCBbrv0aBD_9gfqtbFVjOC4VGWBkulQfGiFAadC34yycGdaVyOlnK5axPB4Y3EZxcNvYGthWutswJDjHS2bLmYPaXj_fZxeXFgivxLJB8Wa_RMmi-355kE7X54IsGN84qmafoZMnd9dFkC65yT3Q2v1LsVEP8S5zxx57PksKtY4SkmPxQ_CoLgbZF2S-g&h=_4ZVv7hsrf6wdNoXevo5V1htrdrdZMJ7UPjIYNPIdPs response: body: string: 'null' @@ -411,11 +428,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:31:07 GMT + - Mon, 06 Apr 2026 10:02:17 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966681783259&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=nxh2c111J3kguqIa2Z1ehUbDR-wxKMGOOkNlUP8Jmm1pRIqxLHxuLMikjaiABuWb1mDbZm56CbY-APAs9F8DfpXwLmEAYSz4i1ZOR0nW_VuvzYdkDgrikUIifcv3L2NZnKC2mxsi5MIpFgHXQrVcEqDrZG8vo0Q0vCpD1SMaf3nj1WfvUg318UdXZ374T1cZrg9sWc51urW22SaQc7s_wz4lQafWQvFs-QBzeTwzQW9lIS1k-nUe5-6VmxKo10enl49g_alz95ugNFAHRPc5ccrprjT2lpF-XJNgMM7Fz0Mg-5bgIIFALKajp6dMJyeMNokTmxPM0JlwlaNeR7JnMA&h=KQLqXXdRi8pu5XVjPn-ky5ijXHwfzRMdCBM33RzWXLo + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665383932524&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=avY0meGHWzKnMz-ac7jSZgA4hWc2Eq7YY_b_GhzIyOjFCuZ7A-PsGO_Frb7aberVr5dVhgVlcGq013OquH49FktnhBGxgqztIKRC7cmaa9MtSwY0ZlRaPS6rLd4w0q16C18S6UplUQgdMZBoD366O7ISnu1MTVvgZjRaE0rce4B5GQpd4K_Ye2xSFPVl5U2vDf1_wQ38-8vk5vYmWtiW1YSEaFaPJybHJYlSPKD4qWHk-Jypt_VMKpM8ViRzgCSRBWVHzFNf0XFS97QtN6T9Jy0-b787t-y-2d56_LQr2BFQjeDB0yBPavEz3A9glGhvvnI_9SU40tkDEIwo2EVP1g&h=jUeT94Ng3ICx1rV6ervXmo0xfyMxlUybbOzO4qcqlP4 pragma: - no-cache strict-transport-security: @@ -425,14 +442,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 + - f4eb520c-ea50-449b-b145-65346e0703cf x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/648d51e4-5de9-4891-9cb9-635dfdea9ad7 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/b1d9a31b-24dd-4d9c-a479-304e9621e191 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.9, etc x-msedge-ref: - - 'Ref A: 43AFF71868CA4B7C9F149913E5ED698E Ref B: MWH011020807031 Ref C: 2025-08-25T05:31:08Z' + - 'Ref A: 473F40D272994E72859183D71A6933D3 Ref B: PNQ231110906060 Ref C: 2026-04-06T10:02:16Z' status: code: 200 - message: OK + message: '' version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml index b12f9cf4a51..3cda1493eb6 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml @@ -1,28 +1,27 @@ interactions: - request: - body: '{"details": [{"failoverConnectionName": "failoverGR", "failoverLocation": - "Amsterdam", "isVerified": true}], "peeringLocation": "London2", "wasSimulationSuccessful": - true}' + body: '{"details": [{"failoverConnectionName": "ExRConnection-centraluseuap-1772183583607", + "failoverLocation": "DataPathLocation1", "isVerified": true}], "peeringLocation": + "DataPathLocation1", "wasSimulationSuccessful": true}' headers: Accept: - application/json Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway stop-site-failover-test Connection: - keep-alive Content-Length: - - '171' + - '220' Content-Type: - application/json ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --peering-location --simulation-successful --details User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/shubhati_failover/providers/Microsoft.Network/virtualNetworkGateways/shubhati_failoverGw/stopSiteFailoverTest?api-version=2024-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/stopSiteFailoverTest?api-version=2025-07-01 response: body: string: 'null' @@ -36,11 +35,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:04 GMT + - Mon, 06 Apr 2026 10:03:07 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967251814892&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=foDC7V6OvvNe9Oe-fFu3YRefAVfIY1ISwZeO1Qnx6XUDPUybbjTQptLoabI99rzdWBNoumYRBre5ACacHoI9dxtEgUEZn502qTHirfYOCLJSgRpyA_M3ES1zQHtKvIAvZWpSmRqqIXJDBdQbbr2q-8qnnn8DIWt_Y6223aGCMf-9wkRJSU3fMsBQaBKnOuSJvlFF3uaPcrIATEz0ewei6_AGwmUrqK7gtCAYl7maO4WT4tvc1N4cnSvCAKLPQ6uZwIJ34bdLTOyFKE8-QgNMw-4lrVWZ5oFgiCjrN_IzXuKykIFTmjJ6WMKtu0zw7NPdEi81n0tpIbrHShST5otDfg&h=Zkweto37prajOIbbdLt2sqO75GJS-bnF4C414xFraU8 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665873066712&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=I1M5-nwHfz1GoplV8x5c3rFzqtQyDS7zDCdkw7oabTcxiVeoUyDcMCUm_d9eMzrcxAEYlIIxQkNgPs_JtmDHWAQg-FG5mXARa1Srbi4FvD5zh7xrUqIxPxj2Gd5ngayfqOD2j6sPAc-9uW53F19veJbrAtEZLkypEe-GhRiZ9drAz3_ahlmFrjqdG0ffCsGqvww5NkF7G-I4BRCWU2PQoO2Td7ArpWKVsf78pZXBSr_RIAyu6GH7WbDpB3G2_B3hX6ORH6kHo37EwfrnMhGszsmnQEoB9vnnFuUA7opfZGm4kkzoCLSPW99ksprOWHzYvqfcCG9rjDRHIkFAyRAjCQ&h=-VDnOiBAW3EEp6CBKo9tRIu0z7uzY8zApRLbR5yWZBg pragma: - no-cache strict-transport-security: @@ -50,18 +49,21 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - 2080c2cf-982e-4840-a4d1-42bbaf2af3df x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/d67b7d24-a9f6-4fa1-a363-35345a2d0002 - x-ms-ratelimit-remaining-subscription-global-writes: - - '11999' + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/c49f652e-94b3-4cf3-b558-36083fc7bfbd x-ms-ratelimit-remaining-subscription-writes: - '799' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.5, + etc + x-ms-throttling-version: + - v2 x-msedge-ref: - - 'Ref A: 5DC7CDC5813B479DAE8C8D17B1A1C98F Ref B: CO6AA3150220031 Ref C: 2025-08-25T05:32:04Z' + - 'Ref A: 1640515AF45740B983B27144C5A03668 Ref B: PNQ231110908029 Ref C: 2026-04-06T10:03:05Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -70,16 +72,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --peering-location --simulation-successful --details User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967251814892&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=foDC7V6OvvNe9Oe-fFu3YRefAVfIY1ISwZeO1Qnx6XUDPUybbjTQptLoabI99rzdWBNoumYRBre5ACacHoI9dxtEgUEZn502qTHirfYOCLJSgRpyA_M3ES1zQHtKvIAvZWpSmRqqIXJDBdQbbr2q-8qnnn8DIWt_Y6223aGCMf-9wkRJSU3fMsBQaBKnOuSJvlFF3uaPcrIATEz0ewei6_AGwmUrqK7gtCAYl7maO4WT4tvc1N4cnSvCAKLPQ6uZwIJ34bdLTOyFKE8-QgNMw-4lrVWZ5oFgiCjrN_IzXuKykIFTmjJ6WMKtu0zw7NPdEi81n0tpIbrHShST5otDfg&h=Zkweto37prajOIbbdLt2sqO75GJS-bnF4C414xFraU8 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665873066712&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=I1M5-nwHfz1GoplV8x5c3rFzqtQyDS7zDCdkw7oabTcxiVeoUyDcMCUm_d9eMzrcxAEYlIIxQkNgPs_JtmDHWAQg-FG5mXARa1Srbi4FvD5zh7xrUqIxPxj2Gd5ngayfqOD2j6sPAc-9uW53F19veJbrAtEZLkypEe-GhRiZ9drAz3_ahlmFrjqdG0ffCsGqvww5NkF7G-I4BRCWU2PQoO2Td7ArpWKVsf78pZXBSr_RIAyu6GH7WbDpB3G2_B3hX6ORH6kHo37EwfrnMhGszsmnQEoB9vnnFuUA7opfZGm4kkzoCLSPW99ksprOWHzYvqfcCG9rjDRHIkFAyRAjCQ&h=-VDnOiBAW3EEp6CBKo9tRIu0z7uzY8zApRLbR5yWZBg response: body: string: 'null' @@ -93,11 +94,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:04 GMT + - Mon, 06 Apr 2026 10:03:08 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967254888984&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ikguxbmvswxgjjLVoILGC1mzrcTxkrLsJccPfy0tZJm8TcfENhnPFX3Up5mgWxx1qrvebjK6_toCtlOrPz-Ugzouw0ePHC4-rzJofUzg5ptWTSg-kSlUwC9L4TBAfiCVhJKHP0z1UbpySHB2LkgiuK2h62yO8MXU2TvysyPXcQovkvGdjS4mFwS_mrBOsOtFHwzx1obAxMvSDWEAdIvZhwcvmInG958eLiJeCZFmnTv3lNLIuVqEBJz--MNGKViCwGfc2FVg5ndpFV6TlSPA6v1GmCryLaJLhIgDxgBPt6GOC20l51437f3lDTOpaV8N7wbWtYtZDrx7CxmMCvnCrA&h=kGq7AfX0P7pO3krl2UfXPSiX1XTRELTY8z9tOrOcjd8 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665887586943&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=R55sTg_aK7HJYwfdkARRywqyfWL3SWgewV_4TI7Klj13ENcuamshwNdi7UKhizKuvJlLXd9_O52J6hahYq78ZoOxd7ADKSSk6f-xVuvIA3KAeKBsjo_MguTzbZFwrQR0cBS6E8nnLl6thfmAtRpfVIf3iOwpOTB7uRrGNDUodddu-0oZ1qqfLt-zWCSTVWg4LSJU5P2NyaDv-X96Ii9UC9nfxnEdfFK4DkJ429tZ3G7vjBhY7I0ZY1u_TXFLXA6L4CKCx396jzuG-BT_tVk5GNWPJMJplCY8FfnqydT51Cti0JWPuKnU9SwVtkAX8v-wQAteECy8WKLn3ixqD_UmLA&h=OHXQC-nRQeRVzebvctl7oCbaBcjKanbdO4MpA-eX6wM pragma: - no-cache strict-transport-security: @@ -107,16 +108,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - 2080c2cf-982e-4840-a4d1-42bbaf2af3df x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/ce2dac6e-ce3e-4d73-9a02-8a0fe7366b56 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/c5d5e7aa-2951-4b28-b057-41453f1956ff x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, + etc x-msedge-ref: - - 'Ref A: DE1B5AA6425540C2B0BC27457448566B Ref B: CO6AA3150219039 Ref C: 2025-08-25T05:32:05Z' + - 'Ref A: F36BD441FB7D46E1AF3348F73A22CBB3 Ref B: PNQ231110907042 Ref C: 2026-04-06T10:03:07Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -125,16 +129,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --peering-location --simulation-successful --details User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967254888984&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ikguxbmvswxgjjLVoILGC1mzrcTxkrLsJccPfy0tZJm8TcfENhnPFX3Up5mgWxx1qrvebjK6_toCtlOrPz-Ugzouw0ePHC4-rzJofUzg5ptWTSg-kSlUwC9L4TBAfiCVhJKHP0z1UbpySHB2LkgiuK2h62yO8MXU2TvysyPXcQovkvGdjS4mFwS_mrBOsOtFHwzx1obAxMvSDWEAdIvZhwcvmInG958eLiJeCZFmnTv3lNLIuVqEBJz--MNGKViCwGfc2FVg5ndpFV6TlSPA6v1GmCryLaJLhIgDxgBPt6GOC20l51437f3lDTOpaV8N7wbWtYtZDrx7CxmMCvnCrA&h=kGq7AfX0P7pO3krl2UfXPSiX1XTRELTY8z9tOrOcjd8 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665887586943&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=R55sTg_aK7HJYwfdkARRywqyfWL3SWgewV_4TI7Klj13ENcuamshwNdi7UKhizKuvJlLXd9_O52J6hahYq78ZoOxd7ADKSSk6f-xVuvIA3KAeKBsjo_MguTzbZFwrQR0cBS6E8nnLl6thfmAtRpfVIf3iOwpOTB7uRrGNDUodddu-0oZ1qqfLt-zWCSTVWg4LSJU5P2NyaDv-X96Ii9UC9nfxnEdfFK4DkJ429tZ3G7vjBhY7I0ZY1u_TXFLXA6L4CKCx396jzuG-BT_tVk5GNWPJMJplCY8FfnqydT51Cti0JWPuKnU9SwVtkAX8v-wQAteECy8WKLn3ixqD_UmLA&h=OHXQC-nRQeRVzebvctl7oCbaBcjKanbdO4MpA-eX6wM response: body: string: 'null' @@ -148,11 +151,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:15 GMT + - Mon, 06 Apr 2026 10:03:21 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967359130428&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ECgr70wqYUG519XWZNqE6m3jD0_0pxhRXnusUxSI2XUH916jaDaS91n16XAw11zvL2HYHAbr6vrUpCfE8iCDIGi8rUb19mVa_-EvUacS10gJsZ-iXxnBXgK19WtFvXHcatWHRmRfPPeKytA_ou9N5tYt1Cppzqugb6d0Oc4bwpLahVWTlqJIWwN6qFEUXyTdZET93rgopXyYTDFFOF7FJ5jyLsu19V4Qp4ba6-4WJHNR03-Uqk2NdlFF4EGxe4CfYpdUnaz2EaRE4nK_y2SGBjkyBXGx90xoKR6i_d2p-57tniwc3d6rzCj6s4299ASon8lJNGNc_517FOJPcypdNQ&h=GN54HOQL-qAxn2C6FQqPb4hUM8GkyQBFmMqRYiWusbk + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666016250008&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=WIY-wJJyOlIrR5g3_2XsEaZkMsbbfP-UD4nPja_x6Nqp1rtN1KYLLZ_nVQCpG6Bw-N5Aq9OKuu77A6CMNBoPgAsrlw5nYEQyhXM5D7eI_t_IC19sfbRq9iTG2H_9CZ8KL7xX5zpJMFHllCOqP_mGTEvwMllrrI8Db3Q4sGp4aZ2AJmsbn-jsE4XVsc28HGDRh21NUWHNRdhJTZ_zpTXkNhkd9nfnLtVL8YL0j9Wmld820e1UhpXJInFGmTAMJKguqWqTCWbQ3-a9MAAb4gJM4lfuzcVl3PoScW_vzFPHvZSkfCp4SgUk6yMDLgIVlhDih2twthLfeRNeDm-B9L7qNg&h=kR0Uh6-DF8Ha0lWKojL67IfnFKaOO5DY-TkLBwWsabw pragma: - no-cache strict-transport-security: @@ -162,16 +165,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - 2080c2cf-982e-4840-a4d1-42bbaf2af3df x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/3f8d1dd1-fb4b-4703-95a6-ced9cef3fe8a + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/a90011c4-5526-4272-9a69-4e3cbd45bee5 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, etc x-msedge-ref: - - 'Ref A: EDE015137B754E4798C57562627DB30B Ref B: CO6AA3150218021 Ref C: 2025-08-25T05:32:15Z' + - 'Ref A: B1F1F853BCB44C0DBE38680E75A302ED Ref B: PNQ231110907034 Ref C: 2026-04-06T10:03:19Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -180,16 +185,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --peering-location --simulation-successful --details User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967359130428&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ECgr70wqYUG519XWZNqE6m3jD0_0pxhRXnusUxSI2XUH916jaDaS91n16XAw11zvL2HYHAbr6vrUpCfE8iCDIGi8rUb19mVa_-EvUacS10gJsZ-iXxnBXgK19WtFvXHcatWHRmRfPPeKytA_ou9N5tYt1Cppzqugb6d0Oc4bwpLahVWTlqJIWwN6qFEUXyTdZET93rgopXyYTDFFOF7FJ5jyLsu19V4Qp4ba6-4WJHNR03-Uqk2NdlFF4EGxe4CfYpdUnaz2EaRE4nK_y2SGBjkyBXGx90xoKR6i_d2p-57tniwc3d6rzCj6s4299ASon8lJNGNc_517FOJPcypdNQ&h=GN54HOQL-qAxn2C6FQqPb4hUM8GkyQBFmMqRYiWusbk + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666016250008&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=WIY-wJJyOlIrR5g3_2XsEaZkMsbbfP-UD4nPja_x6Nqp1rtN1KYLLZ_nVQCpG6Bw-N5Aq9OKuu77A6CMNBoPgAsrlw5nYEQyhXM5D7eI_t_IC19sfbRq9iTG2H_9CZ8KL7xX5zpJMFHllCOqP_mGTEvwMllrrI8Db3Q4sGp4aZ2AJmsbn-jsE4XVsc28HGDRh21NUWHNRdhJTZ_zpTXkNhkd9nfnLtVL8YL0j9Wmld820e1UhpXJInFGmTAMJKguqWqTCWbQ3-a9MAAb4gJM4lfuzcVl3PoScW_vzFPHvZSkfCp4SgUk6yMDLgIVlhDih2twthLfeRNeDm-B9L7qNg&h=kR0Uh6-DF8Ha0lWKojL67IfnFKaOO5DY-TkLBwWsabw response: body: string: 'null' @@ -203,11 +207,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:26 GMT + - Mon, 06 Apr 2026 10:03:31 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967463164148&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Ys_SBzjYH545rzUfLIZ1rT3DzisV4Vcmj4wZ-G96mjZEl0U_ODOJge4Hsemw7uQicId4EOk3Y5TioGROtmkaNP9nRKlIvPMeN5c-r_CYuu-fIg8J_435aoLbvDFr4txXr-vhlJxg5nDdF21jc6pb2ufAfFILWyEVUsBGASQMXenfElizGAPLAocy44ku6c2xeQUmJz1LZ_auc0HDcscB0k-3_fqtfBaVGggaqwlvtPOkwDxGJ3A1zSgByYEWrRHr3tZvA97o1lH0SqKF2aOwWubBCCEabajv090gj-YB-VVasD-nGLqdUgykWSxJD9Yw5oG5W-6MfGvmaSLv1j1f3A&h=yXtIRed3red4jv0HSEUxdDFBpQ3X3F-nttum2W_FDkU + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666126461926&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ZFRtAp-lBnDPsCNPBRSpuK0M2fJ0b2vrevwMeje_omO12pVm6gxMQe4gw3yYjiLl1WyRyfRZ30XGdClCymCRxn6jjHcKdWyNfpyhmJqfNDJhOG5rYfplkLX_HT13Zt8bADJmKErI6w5Vke4pZBAKWyTCVwEY1F4HoMdtVyFM4WHFykOszmd_NGxTDYNWmSlaqdsChdT-hNzd9m8Ae4xt4T_rTr6rUwi-CUtqYNnAu8udPJWyckGGUdu4tt0O9z6XO-94V0QAA-lVU4-dLLT7tQ6GxKsoZ3ZXWR_oTXu1ifKC66qlpsML93B9rHcdAvKT0-Ihdab92muLf3H4vZYvuQ&h=oE7ViF2wmLazOy-eLiHgt3QtIBe6VwNmq0ntgDLMunQ pragma: - no-cache strict-transport-security: @@ -217,16 +221,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - 2080c2cf-982e-4840-a4d1-42bbaf2af3df x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/7918c33c-79e9-40cf-aa05-92042ed3c040 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/e6a3c83d-29cf-43e1-b7c0-91a240b0bbcf x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, + etc x-msedge-ref: - - 'Ref A: B6F55EA9E65F4E25AB5D965DD5FEA0E7 Ref B: MWH011020808054 Ref C: 2025-08-25T05:32:26Z' + - 'Ref A: A0A30B73D26846FA8822162C319A5EA9 Ref B: PNQ231110909025 Ref C: 2026-04-06T10:03:31Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -235,16 +242,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --peering-location --simulation-successful --details User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967463164148&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Ys_SBzjYH545rzUfLIZ1rT3DzisV4Vcmj4wZ-G96mjZEl0U_ODOJge4Hsemw7uQicId4EOk3Y5TioGROtmkaNP9nRKlIvPMeN5c-r_CYuu-fIg8J_435aoLbvDFr4txXr-vhlJxg5nDdF21jc6pb2ufAfFILWyEVUsBGASQMXenfElizGAPLAocy44ku6c2xeQUmJz1LZ_auc0HDcscB0k-3_fqtfBaVGggaqwlvtPOkwDxGJ3A1zSgByYEWrRHr3tZvA97o1lH0SqKF2aOwWubBCCEabajv090gj-YB-VVasD-nGLqdUgykWSxJD9Yw5oG5W-6MfGvmaSLv1j1f3A&h=yXtIRed3red4jv0HSEUxdDFBpQ3X3F-nttum2W_FDkU + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666126461926&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ZFRtAp-lBnDPsCNPBRSpuK0M2fJ0b2vrevwMeje_omO12pVm6gxMQe4gw3yYjiLl1WyRyfRZ30XGdClCymCRxn6jjHcKdWyNfpyhmJqfNDJhOG5rYfplkLX_HT13Zt8bADJmKErI6w5Vke4pZBAKWyTCVwEY1F4HoMdtVyFM4WHFykOszmd_NGxTDYNWmSlaqdsChdT-hNzd9m8Ae4xt4T_rTr6rUwi-CUtqYNnAu8udPJWyckGGUdu4tt0O9z6XO-94V0QAA-lVU4-dLLT7tQ6GxKsoZ3ZXWR_oTXu1ifKC66qlpsML93B9rHcdAvKT0-Ihdab92muLf3H4vZYvuQ&h=oE7ViF2wmLazOy-eLiHgt3QtIBe6VwNmq0ntgDLMunQ response: body: string: 'null' @@ -258,11 +264,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:35 GMT + - Mon, 06 Apr 2026 10:03:45 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967567365076&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=RuUz6Ycjlved_MqbkBSQuT2wmPvlJ9BEDKKd0ug_ChX-tYsF6H7_72TgvaY0fTA1EXsEx6VBnVESpFbuttdDIS6-C2K990l5z664CQ-LeBsHHkDp6PIL07u_JNrFjM4dJsDTjEc7CIjUeX18WvSOcvuZ2ZmsNFOEwatrjXAcS-tTfi1kvnjD3KKoEB-VHoHtsZvEEfWKWH9e6XbahLgojZ5q-Z4xDb62ty9ZMCaO2-oqNZ6pVFuINc9gNFRbGMROenGBV67WTuy_JtiEa9ecZJfuWb0AMv1YzTAryrLcGnerd3aM7uk13g0ftmprUvQPDB2bZv0dw_zFtAlZyiVgVA&h=KjRrokt12jIkIlxe5ALL2Rx8lGIxQz4JcgGx-5H24dU + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666262681361&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=s2dGtxhuMLnV5rWXZC3iyln-8_qArSmqnrsu12RCS7HWEh_yQsTlftNfpLgCSoMRrKFuo6Dm-3-guXWEwFQn-Xetvv3Og2OBxdeBA-ICuceGDn8RxaW4w5F49EjF5nTRcngODye4mBMuYCxjGmLMgWTw-i1__qZ-7OCBB12sPSUa4kv5OuP5eZl8vR4w7MhPXBLnX4QJ8oTuTo_P7nSlvQkzsgUX93RILvW6GHweTykA2UBDfCy8mG0Yil2vSj9ByVyqDaYR-V1TBLdnpgHUgks73IYSO3eqFLcQTkCG6BAzx5vgtsEJ6uiQUbU5MFxsnSSzwB2KQx5rKkTTiHevxA&h=sU2i9dwq1dJqloXmEW7XuVHr5xiiMPTJB-5YhmonoJI pragma: - no-cache strict-transport-security: @@ -272,16 +278,78 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - 2080c2cf-982e-4840-a4d1-42bbaf2af3df x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/af4c1585-350e-4667-8df9-8a54333b6935 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/98ca2c27-59a5-417b-a099-a5620b7d78dd x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, etc x-msedge-ref: - - 'Ref A: 11DB6CBBE59A4874BF042315B1424460 Ref B: MWH011020806034 Ref C: 2025-08-25T05:32:36Z' + - 'Ref A: 8596AC5B0874454481D451D59A9F51EF Ref B: PNQ231110907029 Ref C: 2026-04-06T10:03:44Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-all-tests-detail + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --resource-group --name --fetch-latest --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverAllTestsDetails?fetchLatest=true&type=SingleSiteFailover&api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:03:47 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666278720614&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=whR4Ds7WeM7_4iHNNA3iVRMAsIyJQsLN6ZIT1z9LhEFjl569DVQdsf96rZU35sPA4QlFSMZWRL2NWJY5vtUg8HOF8Z8SQZKuM9J6_2z1-foUZWh9gU5ORMKV15FW-vkBpHZPPfCtEzQHzYRrCv2v742gcP5INitk8h0t1eEHuLTH-zzaeEXGFbDjwe9P7PT7E2-dcYmQMbWBEujCuzdTQYLwPUEp7dZ0MYuBDBSpaTGtZ3Go_W_PwwPLfSoNpdRBGO2eVP16VW_HyEiqZTUGuSrH7g6dTbhUmlGxUthITeE0rmRiNfww8Qt6WlI4FAlEPpRZ8uw-1JwkH58w4hNsRw&h=BoZ063Mr4rWD8nAMe1_jRz513taUZrZp-Fbw3akqKqk + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - a34587a6-47b3-4bdc-a8cb-73212a4c5408 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/cf642648-2724-4fd7-84fe-7a4b75f9cad0 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.5, etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: 37605DB3AEED41BC81460C223EC524E8 Ref B: PNQ231110909054 Ref C: 2026-04-06T10:03:46Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -290,16 +358,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway get-failover-all-tests-detail Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --fetch-latest --type User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967567365076&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=RuUz6Ycjlved_MqbkBSQuT2wmPvlJ9BEDKKd0ug_ChX-tYsF6H7_72TgvaY0fTA1EXsEx6VBnVESpFbuttdDIS6-C2K990l5z664CQ-LeBsHHkDp6PIL07u_JNrFjM4dJsDTjEc7CIjUeX18WvSOcvuZ2ZmsNFOEwatrjXAcS-tTfi1kvnjD3KKoEB-VHoHtsZvEEfWKWH9e6XbahLgojZ5q-Z4xDb62ty9ZMCaO2-oqNZ6pVFuINc9gNFRbGMROenGBV67WTuy_JtiEa9ecZJfuWb0AMv1YzTAryrLcGnerd3aM7uk13g0ftmprUvQPDB2bZv0dw_zFtAlZyiVgVA&h=KjRrokt12jIkIlxe5ALL2Rx8lGIxQz4JcgGx-5H24dU + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666278720614&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=whR4Ds7WeM7_4iHNNA3iVRMAsIyJQsLN6ZIT1z9LhEFjl569DVQdsf96rZU35sPA4QlFSMZWRL2NWJY5vtUg8HOF8Z8SQZKuM9J6_2z1-foUZWh9gU5ORMKV15FW-vkBpHZPPfCtEzQHzYRrCv2v742gcP5INitk8h0t1eEHuLTH-zzaeEXGFbDjwe9P7PT7E2-dcYmQMbWBEujCuzdTQYLwPUEp7dZ0MYuBDBSpaTGtZ3Go_W_PwwPLfSoNpdRBGO2eVP16VW_HyEiqZTUGuSrH7g6dTbhUmlGxUthITeE0rmRiNfww8Qt6WlI4FAlEPpRZ8uw-1JwkH58w4hNsRw&h=BoZ063Mr4rWD8nAMe1_jRz513taUZrZp-Fbw3akqKqk response: body: string: 'null' @@ -313,11 +380,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:46 GMT + - Mon, 06 Apr 2026 10:03:49 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967672107276&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=TquWAPB_vStuPR_ZqDpCdVyshfNwVB41DfSMT-bm3LtOBMve2dxZepOuv01ZpZftIhw8gIg7-qDj__fj8tZyiSOHAiK3jCArwJUOa5rTRD-DESj6829veZ701-cIW7mZnE5iDvPSbWXkx9KN_9WHqQquv9dGtdiA5doz9ff6ykIkKD0cjCw39NaSlBLnlWrt_PKqTIZj6mCssQlFCPrJ4nMXcaR-iUOr-Z3HHdDpiXprtgZDKYEwDjPgg3hIkx8HyHxYU7QKNEPBEaoAHJY-MblXTOXzZ9OWSceASmhkXcfP-PAGYY4EqT6zDnaXqSUQxgi6Wbz_6OsJe-DvGPykuQ&h=i-5firDD7bJzM9_kry1gQjBnWgXXhOnmRu-CleN6L1o + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666298742980&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=OeQ_wGnACKjFX3V8wT9imNNodTkqL9hWNHBOGhXJlN0BRJfn2ElbSez7RQlXGsMWmpnkcmggntA3EWa8OFXcw6l3HcXpnDVyClvkR1A4ya4ZHM9qdv5DMDT0BcYYiig6ect_CRymSbCtddI2Qqx4lpTomu43kndnMJymEYpffrbV3DUzZyHkFgwJWfNRWG1Q1A47LEGfdbO3dNc7NZ1DKVTqzKhVexqd6Bg0lE-P72w_mf6B4O_BeFx6PUHsUm8NbjDaH0gIG6o32rTSJ7SicJZGJBAeW4HFarQgV_XPgSC_zu66ZY-jSVT0W7oRB84PpRfO2c1sEs-0-DRmugJztw&h=_QDWheFUR1m54cyOD3hbY0kX_FVN4s_x5VzRNY9xAHk pragma: - no-cache strict-transport-security: @@ -327,16 +394,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - a34587a6-47b3-4bdc-a8cb-73212a4c5408 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/c18617ad-0793-4a71-8333-13b0598ad161 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/a0845214-b58d-470e-836a-cb80bf151163 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.1, + etc x-msedge-ref: - - 'Ref A: DE24208D17EB483BAE235E5C56A2E3CB Ref B: CO6AA3150217033 Ref C: 2025-08-25T05:32:47Z' + - 'Ref A: F9DDC8C53752487D82E36F0AEBC214A5 Ref B: PNQ231110907054 Ref C: 2026-04-06T10:03:48Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -345,34 +415,37 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway get-failover-all-tests-detail Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --fetch-latest --type User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967672107276&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=TquWAPB_vStuPR_ZqDpCdVyshfNwVB41DfSMT-bm3LtOBMve2dxZepOuv01ZpZftIhw8gIg7-qDj__fj8tZyiSOHAiK3jCArwJUOa5rTRD-DESj6829veZ701-cIW7mZnE5iDvPSbWXkx9KN_9WHqQquv9dGtdiA5doz9ff6ykIkKD0cjCw39NaSlBLnlWrt_PKqTIZj6mCssQlFCPrJ4nMXcaR-iUOr-Z3HHdDpiXprtgZDKYEwDjPgg3hIkx8HyHxYU7QKNEPBEaoAHJY-MblXTOXzZ9OWSceASmhkXcfP-PAGYY4EqT6zDnaXqSUQxgi6Wbz_6OsJe-DvGPykuQ&h=i-5firDD7bJzM9_kry1gQjBnWgXXhOnmRu-CleN6L1o + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666298742980&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=OeQ_wGnACKjFX3V8wT9imNNodTkqL9hWNHBOGhXJlN0BRJfn2ElbSez7RQlXGsMWmpnkcmggntA3EWa8OFXcw6l3HcXpnDVyClvkR1A4ya4ZHM9qdv5DMDT0BcYYiig6ect_CRymSbCtddI2Qqx4lpTomu43kndnMJymEYpffrbV3DUzZyHkFgwJWfNRWG1Q1A47LEGfdbO3dNc7NZ1DKVTqzKhVexqd6Bg0lE-P72w_mf6B4O_BeFx6PUHsUm8NbjDaH0gIG6o32rTSJ7SicJZGJBAeW4HFarQgV_XPgSC_zu66ZY-jSVT0W7oRB84PpRfO2c1sEs-0-DRmugJztw&h=_QDWheFUR1m54cyOD3hbY0kX_FVN4s_x5VzRNY9xAHk response: body: - string: 'null' + string: '{"value":[{"peeringLocation":"DataPathLocation1","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit01","name":"circuit01","connectionName":"ExRConnection-centraluseuap-1772182537248"}],"status":"Completed","startTime":"4/6/2026 + 10:01:07 AM","endTime":"4/6/2026 10:03:36 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772182537248","name":"ExRConnection-centraluseuap-1772182537248","status":"Connected","lastUpdatedTime":"4/6/2026 + 10:03:36 AM"}],"testGuid":"ffe2dc82-b9f7-46dc-ace0-033d2a12b9f9","testType":"SingleSiteFailover","issues":[]},{"peeringLocation":"DataPathLocation2","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit02","name":"circuit02","connectionName":"ExRConnection-centraluseuap-1772183583607"}],"status":"Completed","startTime":"3/2/2026 + 11:07:47 AM","endTime":"3/2/2026 11:20:43 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772183583607","name":"ExRConnection-centraluseuap-1772183583607","status":"Connected","lastUpdatedTime":"3/2/2026 + 11:20:43 AM"}],"testGuid":"3c09b34c-45ae-4357-b1d6-5848f35734ab","testType":"SingleSiteFailover","issues":[]}]}' headers: azure-asyncnotification: - Enabled cache-control: - no-cache content-length: - - '4' + - '1951' content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:32:56 GMT + - Mon, 06 Apr 2026 10:04:01 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967776104557&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=mhZ1KQRXpOKw7Mn0ybjFnalaker53h7H9iqLyLzA2vRsYXtbGyDUBNXdm8cLOEiOY__NGPUSWHTckdJ-1xsJldG9ANIdcpDvReUZbJIiMUZQNGJxRco5mxgogSGToxWDOToncHIuySAMHRJA1pw0hPsvJ6xegUQXxYncg8eF1LzOuyp9Ty6PlAH6ek6lX_oTuKLAzms7l51dGGfZzBzloXaUjwFlLbXm4DpVVtfGrwczSYIROXKdjnYi6G774cOaDvo6aeaWVzGAnKkimlTNSzIa-jLo7ttXMvVcBQNjj0F02tHWu_mfN4MvIjZJyDr8IoPasSfibkAi1j-N_cQKfw&h=9hWiDI8-fMgbrAP4BiH0zZHdeogg3wSiBlsDyfijOHg + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666421720419&c=MIIIJzCCBw-gAwIBAgIRAIsT8dMMo6WkW2NCqWyZcXowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgV0NVUyBDQSAwMTAeFw0yNjAyMjQxMjQwMzhaFw0yNjA4MTkxODQwMzhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrjcYB8xdPGqamRPa2KEv3SJ3GirVITkjFOCU7haZQ1rdKe7GRjqJ29v6ptobpGSzhwXOXskM7pzYPP-8SUx6TT02brY1xVrxe1em7lf0m_QSM_H9N-WLy8miDU3SdGMrg920oQN6pAkqNZiRoJnU1gKcFdkGIKWxB1nDegi4QYdczKSYHTF6IpF2RJXaOC7HM1-pQB4EBlfLhUfzHR9lFtoThIt0HmRB2M3mrUUQ9vBpmNaKRZYjYpdBm26Iqj-91GCpCc9ASf-J9uABxnt6Uiw_59nx9eZpq2HBkV5X9Fdx8k8NynGnQC82Op0gd2fau5gAJaG7aJCzMgk7OennQIDAQABo4IFJDCCBSAwgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUIEy-B50P_D3827J7l5EmpTRsKDUwHwYDVR0jBBgwFoAUFNI34PbWfX7djbq6ZasElCXglh0wggH7BgNVHR8EggHyMIIB7jB7oHmgd4Z1aHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMH2ge6B5hndodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NybHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS80Ny9jdXJyZW50LmNybDBsoGqgaIZmaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIGBoH-gfYZ7aHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIICAAYIKwYBBQUHAQEEggHyMIIB7jB-BggrBgEFBQcwAoZyaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMIGABggrBgEFBQcwAoZ0aHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwbwYIKwYBBQUHMAKGY2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB4BggrBgEFBQcwAoZsaHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQA9btRITKA15tsninIeuo-WyaMUCUoEfUsV0QncR7z7vL7vkoklZ7vpNVRseIAPdr38W5inoFg3rGPWThWuaODCtqQTp-8MfcgrIyAa0l8NgixFdask2Qr6S4OMKnAOw_VU2TEDCSEdTqs2vL9QgTb741oCLBOoyBojUXIjENFdKM1gZyx0mB-50aJnpb8GmjFh2MCYHo4WFiBLsjESc7yyXc1qord76lR36hBeNUkmvC3fwC8hzefThwSZIzu418FkGu23F80jFAv7RNFu01wXlMQ39W_RRz8Vo2bJ76WEERl1KR3EGxXFY5GqOcQkdaEdO6AdGS5A0IrOBqeA3wuH&s=E9TZIwmlKO8HVh8gutJjum-geWi6kLU4TuVgPglHtPNtbSfnEISZET5hv_DZtlYI4CepZQcL2XQYsHXZbx5L-uWu0UyWakeP-ZXnZr4nFOZhl-B8s92OXL1ZJbq1XNWtVkopgBu8_aeVbjpKKTzFCVdhATT-MpNBImD3vWMKhCiRFnC-gi0d8vaAZUjgaIhD5A2_LPx4Yln-81pVlm2wG0od_YaXP4DK99QqtjJi9QShulIcwUyww3X-Ibnp5zUqEa8_PceZma__pgf8lYfz3dt71lwLO8fVBLFvYapEtQK3Aez-Is1OFtx1aA3Wz7IJ-lY2I6AchnDodKT5dIH3hg&h=AayNz7qelIkQzmu45a48pD3-MQqvDw3yiI3lGohnz8U pragma: - no-cache strict-transport-security: @@ -382,16 +455,79 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - a34587a6-47b3-4bdc-a8cb-73212a4c5408 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/db0216d9-cc5a-4574-8567-4de6aefddb18 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiawest/4e27695e-6422-464f-878a-be7da8a38991 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.1, + etc x-msedge-ref: - - 'Ref A: 539D3CC47A0D4FA9B242AEA9CC5B85B4 Ref B: CO6AA3150220021 Ref C: 2025-08-25T05:32:57Z' + - 'Ref A: 760962584D7D4DCD915BA540AF3BA49A Ref B: PNQ231110906034 Ref C: 2026-04-06T10:04:00Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-single-test-detail + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --resource-group --name --failover-test-id --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverSingleTestDetails?failoverTestId=e009d347-7d2c-4499-8ccd-6e5a03fa0f0d&peeringLocation=DataPathLocation1&api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:04:02 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666432997023&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=Kixm9W4WTDBK5uGXOEOBB16snX0CvCGHS9xp5oD1HJjXe8Q3sSudh3ZAQld3g1HXzlmMRIkbv284ZZ05AhanT25xzyd7_Z1o-6Kq_4NUagEXx0DIxy6IB-PEGqqtGCVKAXu1BwVw3YCvs3qM4w0-hTZXQJuD-yzJC-uJzUR9lvXof4l0YoV6WaCLZ4IERewSmLPgMOZdgxP1NcLXTzRNMg1rdTd7FjE6VRkX_LF6hOxZvNYAq3s_uNmjhpJ8ZfgEhqZutASjpRx03SRmMbkF3WW2qNjdbSz_hmuL6m-lkncO2snYacKMDgBzOjQfM-HNAClo8sbOs1KoGEjH7iBinA&h=sovQH2XRAT4qkjvKgU1rWrd6C53-2BE62HNsj_oyVgE + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/d05aeb42-92e3-4d09-a72d-c583e6c70c61 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.6, etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: C6756A4E35404AEDBA5316B70A3BE612 Ref B: PNQ231110909062 Ref C: 2026-04-06T10:04:02Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -400,16 +536,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway get-failover-single-test-detail Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --failover-test-id --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967776104557&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=mhZ1KQRXpOKw7Mn0ybjFnalaker53h7H9iqLyLzA2vRsYXtbGyDUBNXdm8cLOEiOY__NGPUSWHTckdJ-1xsJldG9ANIdcpDvReUZbJIiMUZQNGJxRco5mxgogSGToxWDOToncHIuySAMHRJA1pw0hPsvJ6xegUQXxYncg8eF1LzOuyp9Ty6PlAH6ek6lX_oTuKLAzms7l51dGGfZzBzloXaUjwFlLbXm4DpVVtfGrwczSYIROXKdjnYi6G774cOaDvo6aeaWVzGAnKkimlTNSzIa-jLo7ttXMvVcBQNjj0F02tHWu_mfN4MvIjZJyDr8IoPasSfibkAi1j-N_cQKfw&h=9hWiDI8-fMgbrAP4BiH0zZHdeogg3wSiBlsDyfijOHg + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666432997023&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=Kixm9W4WTDBK5uGXOEOBB16snX0CvCGHS9xp5oD1HJjXe8Q3sSudh3ZAQld3g1HXzlmMRIkbv284ZZ05AhanT25xzyd7_Z1o-6Kq_4NUagEXx0DIxy6IB-PEGqqtGCVKAXu1BwVw3YCvs3qM4w0-hTZXQJuD-yzJC-uJzUR9lvXof4l0YoV6WaCLZ4IERewSmLPgMOZdgxP1NcLXTzRNMg1rdTd7FjE6VRkX_LF6hOxZvNYAq3s_uNmjhpJ8ZfgEhqZutASjpRx03SRmMbkF3WW2qNjdbSz_hmuL6m-lkncO2snYacKMDgBzOjQfM-HNAClo8sbOs1KoGEjH7iBinA&h=sovQH2XRAT4qkjvKgU1rWrd6C53-2BE62HNsj_oyVgE response: body: string: 'null' @@ -423,11 +558,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:33:08 GMT + - Mon, 06 Apr 2026 10:04:05 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967880112439&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=BDbzDyGV8RcGavGk26WI1KNOkYs0yQ-1Ek9n81oJv3fF-SmAqoOIxdMJb0HVdHFluIzllQ2qJnHnDx9qVJBd87wyCv8iDmOL5uhlLH6Cx6WxtpvNtynW2p6_FLXBPU-gZxXGp1VvfC2NKuC5KkW5I2Oy0T4sDOFaTm4Ui0cfQKkRq1uOllwojeAjsOZr0KgEeXsM_NBvRp-SFxH3OlQeMXshw_jRSjKfyIs1WWPEgWzUC7w-kXxCEzO14ZIy6RtK-iJVDyZMCimSqtib1BhHluLjhWcjJwjoTyTn7RhNFy7GKUI_gRjuPpZk2-Zw38nbEN68hCbH6y6-xzqJTk-0QQ&h=P2AB_9zoAnS7L2-o1knxZb1HzlLaG9JJj37Bf2nvhA8 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666455378307&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lKlLMnM-Bklqo2NxQWgVWus460X94tb1v3OoGps2_z7VR7UW-9FECsZcxWxbxy6tThlXzClAHc-M4x_q08O4BtLwFwud9FXc703HCeyuidq-1NrEVJxp8yXb7LRZv6LT30OgHLHG2N8BIcgZzIJ1sf3ebdFPsfjXNG9MMMnJUhu56xw3_NzBj_HV-gfp3it0pOp00t8sByVfLBZmrNk1UKBEYGzZFnHZ8-CLx4Z1iQmVoo_Cn2GzGZJdL3FzawIPCsVUU74m4lT_NDOvXW7sIm9rV0g-1eEoISsBkOMmdd_5KrND6MCxsW5xXQS2ciwYRFMMjLSspjHBX2vnNU-KTw&h=XOAVPuQPDuQ2Xwy_2xiw1332s9vQyn5NGmGYSGZ0w4w pragma: - no-cache strict-transport-security: @@ -437,16 +572,19 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/b7f7d22e-36a2-4782-b96d-4458a5557ed3 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/633e9d79-96a8-4bd5-96c5-b8bd927dc90b x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.3, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.2, + etc x-msedge-ref: - - 'Ref A: 865081012026492F9BE1A2B82ABAC951 Ref B: MWH011020808052 Ref C: 2025-08-25T05:33:07Z' + - 'Ref A: 3765712D87A644E6B9ED3206E58584B6 Ref B: PNQ231110908029 Ref C: 2026-04-06T10:04:03Z' status: code: 202 - message: Accepted + message: '' - request: body: null headers: @@ -455,34 +593,33 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network vnet-gateway stop-site-failover-test + - network express-route gateway get-failover-single-test-detail Connection: - keep-alive ParameterSetName: - - -g --virtual-network-gateway-name --peering-location --was-simulation-successful - --details + - --resource-group --name --failover-test-id --peering-location User-Agent: - - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967880112439&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=BDbzDyGV8RcGavGk26WI1KNOkYs0yQ-1Ek9n81oJv3fF-SmAqoOIxdMJb0HVdHFluIzllQ2qJnHnDx9qVJBd87wyCv8iDmOL5uhlLH6Cx6WxtpvNtynW2p6_FLXBPU-gZxXGp1VvfC2NKuC5KkW5I2Oy0T4sDOFaTm4Ui0cfQKkRq1uOllwojeAjsOZr0KgEeXsM_NBvRp-SFxH3OlQeMXshw_jRSjKfyIs1WWPEgWzUC7w-kXxCEzO14ZIy6RtK-iJVDyZMCimSqtib1BhHluLjhWcjJwjoTyTn7RhNFy7GKUI_gRjuPpZk2-Zw38nbEN68hCbH6y6-xzqJTk-0QQ&h=P2AB_9zoAnS7L2-o1knxZb1HzlLaG9JJj37Bf2nvhA8 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666455378307&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lKlLMnM-Bklqo2NxQWgVWus460X94tb1v3OoGps2_z7VR7UW-9FECsZcxWxbxy6tThlXzClAHc-M4x_q08O4BtLwFwud9FXc703HCeyuidq-1NrEVJxp8yXb7LRZv6LT30OgHLHG2N8BIcgZzIJ1sf3ebdFPsfjXNG9MMMnJUhu56xw3_NzBj_HV-gfp3it0pOp00t8sByVfLBZmrNk1UKBEYGzZFnHZ8-CLx4Z1iQmVoo_Cn2GzGZJdL3FzawIPCsVUU74m4lT_NDOvXW7sIm9rV0g-1eEoISsBkOMmdd_5KrND6MCxsW5xXQS2ciwYRFMMjLSspjHBX2vnNU-KTw&h=XOAVPuQPDuQ2Xwy_2xiw1332s9vQyn5NGmGYSGZ0w4w response: body: - string: 'null' + string: '{"value":[{"peeringLocation":"DataPathLocation1","startTimeUTC":"2026-04-06T09:18:04","endTimeUTC":"2026-04-06T09:22:55","status":"Completed","attestation":false,"redundantRoutes":[],"nonRedundantRoutes":[],"wasSimulationSuccessful":true,"failoverConnectionDetails":[{"failoverConnectionName":"ExRConnection-centraluseuap-1772183583607","failoverLocation":"DataPathLocation1","isVerified":false}]}]}' headers: azure-asyncnotification: - Enabled cache-control: - no-cache content-length: - - '4' + - '399' content-type: - application/json; charset=utf-8 date: - - Mon, 25 Aug 2025 05:33:18 GMT + - Mon, 06 Apr 2026 10:04:16 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967983910907&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=LWyshowfdfvMhNm1JgIKi1xatOcxJG5HeHhrJ8cJ1jDzJXJ_cNdwkT7_AMI5JFOQ-XHGtDAd7g3q8yW85ZY4uaUZrI8O1e3-THtTd7El8mD6R4XFKr-3i5VDvOwXo5ebFcLs8se3CNV3Nsw9ia9bqXgwHicrJ0sFRh_rUAbuJr0fjJwMCdfU8i4CwsQrwQfT_5pr2gQOTSl-MW8kp8Mw10KWMCLHtIhevCdPlVZWitY4oyFAxRusOuK9ZTi8rpfvNcIUCSxvlt_XGavQEsFvgR2AUNcR5U7tCvdPz4SD34xEBQfZihm01dk_85JtWhPJ_GMRbS2MzSmLShSMXd1DPg&h=DREDzZqQl-aTG8_W_kqnvSEzkdT0lBIFrlonMUSWB6c + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666569878829&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=XlSxWUeAZ8qASLq4Et1xs6ajRSv1Tids84ddDhWEKtb78T9LliLXdKVGxIk2urBQBNYYXou2RWkFBX0_m_pjxjbvJnP9Cg-9j4Qy-CT_ik3gd_9hoJEA73-81KSzQ-P5xer3juHBUW0b4K_T3Lvupdk09eCNtMtJXYQ3aLTNSNFLrSBqB50Atett9MGD9NxZuWhswQoTDpwyFQwwFakhBpEpqIPnupKjuU317ncVJvZV5D_PbL0Q-EruJuVDTYwI48wny00qdkbClu00alE9N3qqsBRIIdDyjt5NunOz1RMUimAmZHs3EYrTd59XwgnMq6TbOvzIrik93S9m2WkQZg&h=4DtWKyHRrrMHzaq48cZ45MoYHaxGOmPyGb7pEJcVIxw pragma: - no-cache strict-transport-security: @@ -492,14 +629,17 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 + - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/e344d5de-272e-4ce5-bdbb-241b0c79408a + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/3ba90780-0911-4a72-9c6f-9ff79f811e3c x-ms-ratelimit-remaining-subscription-global-reads: - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.6, + etc x-msedge-ref: - - 'Ref A: C5E5E74D1F484D6281A71AD71E616129 Ref B: MWH011020807025 Ref C: 2025-08-25T05:33:18Z' + - 'Ref A: F6595CEF49D4431B8AFD9A254426C89E Ref B: PNQ231110909060 Ref C: 2026-04-06T10:04:15Z' status: code: 200 - message: OK + message: '' version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py index 90c71ff8bb8..cea2fc87b2b 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py @@ -8948,9 +8948,9 @@ def test_network_vnet_gateway_get_routes_and_resiliency_information(self, resour class NetworkExpressRouteGatewayFailoverSimulationScenarioTest(ScenarioTest): @live_only() def test_start_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER - resource_group = "tamil-vwan-test" - er_gateway_name = "afcf242ff531409897c9a28b4c69096a-centraluseuap-er-gw" - peering_location = "Washington DC" + resource_group = "bhavana-vwan-failover" + er_gateway_name = "422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw" + peering_location = "DataPathLocation1" self.kwargs.update({ 'rg': resource_group, @@ -8960,7 +8960,7 @@ def test_start_site_failover_test(self): # live_only as the express route is ext # Run the command result = self.cmd( - 'network express-route-gateway start-site-failover-test ' + 'network express-route gateway start-site-failover-test ' '--resource-group {rg} --name {er_gw} --peering-location {peering_loc}' ).get_output_in_json() @@ -8972,16 +8972,17 @@ def test_stop_site_failover_test(self): # live_only as the express route is extr import time time.sleep(2 * 60) # 120 seconds To wait for sometime before stopping the test failover - resource_group = "tamil-vwan-test" - er_gateway_name = "afcf242ff531409897c9a28b4c69096a-centraluseuap-er-gw" - peering_location = "Washington DC" + resource_group = "bhavana-vwan-failover" + er_gateway_name = "422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw" + peering_location = "DataPathLocation1" + test_guid = "e009d347-7d2c-4499-8ccd-6e5a03fa0f0d" was_simulation_successful = True # Construct failover test connection details failover_details = [ { - "failover-connection-name": "ExRConnection-centraluseuap-1750696126887", - "failover-location": "Washington DC", + "failover-connection-name": "ExRConnection-centraluseuap-1772183583607", + "failover-location": "DataPathLocation1", "is-verified": True } ] @@ -9000,21 +9001,42 @@ def test_stop_site_failover_test(self): # live_only as the express route is extr 'er_gw': er_gateway_name, 'peering_loc': peering_location, 'was_successful': was_simulation_successful, - 'details_arg': details_arg + 'details_arg': details_arg, + 'test_guid': test_guid }) # Run the command result = self.cmd( - 'network express-route-gateway stop-site-failover-test ' + 'network express-route gateway stop-site-failover-test ' '--resource-group {rg} --name {er_gw} ' '--peering-location {peering_loc} ' - '--was-simulation-successful {was_successful} ' + '--simulation-successful {was_successful} ' '--details \'{details_arg}\'' ).get_output_in_json() # Validate self.assertTrue(isinstance(result, (str, dict))) + # Run all tests detail command to validate the stop operation + tests_link_latest = self.cmd( + 'network express-route gateway get-failover-all-tests-detail ' + '--resource-group {rg} --name {er_gw} ' + '--fetch-latest True --type SingleSiteFailover' + ).get_output_in_json() + + self.assertIsInstance(tests_link_latest, dict) + + # + single_test_result = self.cmd( + 'network express-route gateway get-failover-single-test-detail ' + '--resource-group {rg} --name {er_gw} ' + '--failover-test-id {test_guid} ' + '--peering-location {peering_loc} ' + ).get_output_in_json() + + # Validate response structure + self.assertIsInstance(single_test_result, dict) + class NetworkExpressRouteGatewayRoutesResiliencyScenarioTest(ScenarioTest): @live_only() # live_only as express route gateways require expensive resources @@ -9028,44 +9050,20 @@ def test_network_express_route_gateway_routes_and_resiliency(self, resource_grou """ from time import sleep + resource_group = "bhavana-vwan-failover" + er_gateway_name = "422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw" + attempt_refresh = True + self.kwargs.update({ 'rg': resource_group, - 'ergw': 'test-ergw-routes', - 'vwan': 'test-vwan-routes', - 'vhub': 'test-vhub-routes', - 'attempt_refresh': True, + 'er_gw': er_gateway_name, + 'attempt_refresh': attempt_refresh }) - # Create Virtual WAN - self.cmd('network vwan create -n {vwan} -g {rg} --type Standard', checks=[ - self.check('name', '{vwan}') - ]) - - # Create Virtual Hub - self.cmd('network vhub create -g {rg} -n {vhub} --vwan {vwan} --address-prefix 10.6.0.0/16 --sku Standard', checks=[ - self.check('name', '{vhub}') - ]) - - # Wait for hub to be provisioned - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - retry_count = 0 - while routing_state != 'Provisioned': - if retry_count == 20: - raise Exception(f"Virtual Hub provisioning failed. Last known state: {routing_state}") - retry_count += 1 - sleep(60) - routing_state = self.cmd('network vhub show -g {rg} -n {vhub}').get_output_in_json()['routingState'] - - # Create Express Route Gateway - self.cmd('network express-route gateway create -g {rg} -n {ergw} --virtual-hub {vhub} --min-val 2', checks=[ - self.check('name', '{ergw}'), - self.check('provisioningState', 'Succeeded') - ]) - # Test 1: Get Routes Information routes_result = self.cmd( - 'network express-route-gateway get-routes-information ' - '-g {rg} --name {ergw} --attempt-refresh {attempt_refresh}' + 'network express-route gateway get-routes-information ' + '--resource-group {rg} --name {er_gw} --attempt-refresh {attempt_refresh}' ).get_output_in_json() # Validate routes information response structure @@ -9080,8 +9078,8 @@ def test_network_express_route_gateway_routes_and_resiliency(self, resource_grou # Test 2: Get Resiliency Information resiliency_result = self.cmd( - 'network express-route-gateway get-resiliency-information ' - '-g {rg} --name {ergw} --attempt-refresh {attempt_refresh}' + 'network express-route gateway get-resiliency-information ' + '--resource-group {rg} --name {er_gw} --attempt-refresh {attempt_refresh}' ).get_output_in_json() # Validate resiliency information response structure From 0a17d8ff0adf77e22208adcb48f05a5b96c8b047 Mon Sep 17 00:00:00 2001 From: Bhavana Kalivemula Date: Mon, 6 Apr 2026 16:59:43 +0530 Subject: [PATCH 8/8] Removed unwanted test recording --- ...etwork_express_route_gateway_failover.yaml | 1101 +++++++++++++++++ .../test_start_site_failover_test.yaml | 183 ++- .../test_stop_site_failover_test.yaml | 358 ++---- .../tests/latest/test_network_commands.py | 17 +- 4 files changed, 1298 insertions(+), 361 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover.yaml diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover.yaml new file mode 100644 index 00000000000..4e37679628e --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_express_route_gateway_failover.yaml @@ -0,0 +1,1101 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/startSiteFailoverTest?peeringLocation=DataPathLocation1&api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:46:12 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691725435017&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=pUX90JeAARITvoILdA9LOfqM6n8sXWi8yzXV8EIUsdMdR0Ws3sPT_kwkoQY2Vb-O5ulrqXYqy8tT21CzHZZGjBOXFX38mrNZ38ZkDAwnYamtBgSfS7EVVdzGPjAPoUaWwD0t-Mz0I2XvdYuzhpQgWYQUKShRnYT_ly2jV3a4P3kuZBC33wPXJRVamlFhIxE5OTdDRkaf6C4J0RLf-BOKNujrhnP-VmFntS53Jl6aFJOtoa9OJ16ODQN7XbDBOdo_OR_bGwdLptbffm_Zx6OeuVzrBdiCkHu0TZkrbme_K7qlVjQyc9mm7vClJ-_xhOy5Rb1FzOqtRFc1FDIUQy83xA&h=80BL1ypUkg2uI6b-a6aZcQNDMDU-SYS0jrDIg_pBmjI + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/15a6c931-cbde-44d3-8425-d888da919b36 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.4, etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: 2053889E0E684F159AADE4E7393805ED Ref B: PNQ231110909062 Ref C: 2026-04-06T10:46:11Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691725435017&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=pUX90JeAARITvoILdA9LOfqM6n8sXWi8yzXV8EIUsdMdR0Ws3sPT_kwkoQY2Vb-O5ulrqXYqy8tT21CzHZZGjBOXFX38mrNZ38ZkDAwnYamtBgSfS7EVVdzGPjAPoUaWwD0t-Mz0I2XvdYuzhpQgWYQUKShRnYT_ly2jV3a4P3kuZBC33wPXJRVamlFhIxE5OTdDRkaf6C4J0RLf-BOKNujrhnP-VmFntS53Jl6aFJOtoa9OJ16ODQN7XbDBOdo_OR_bGwdLptbffm_Zx6OeuVzrBdiCkHu0TZkrbme_K7qlVjQyc9mm7vClJ-_xhOy5Rb1FzOqtRFc1FDIUQy83xA&h=80BL1ypUkg2uI6b-a6aZcQNDMDU-SYS0jrDIg_pBmjI + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:46:14 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691747383555&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=jrmZ5SwpmMSodbtYrrf52WZYBxVsYQ6ZBex47m4rmozGBT1DlP5GiQbXLNCmHPj2Mmu1ivRaQZ8wr8ePY_aZVh50oI_IliNfYWIt7PcAHgylZjtAo4VWV4ctOPSTR-VdhnXcz_6_TLhT_RHVfBQs3SdqgFSbuX8OK1jYze2dw4KEDh7Q-4jO1W4R3pVnoKk3a_YEK1_QcBKYvqHLCt9KVWzQ51Tl0oZC-weOZ_ARY50dq7J1puQb661PucH9kDdcE6RGkuJO_XGQhT5_D-wzs3fB3SitivhTVrfoGyPNWVKJCtOVVafR269YJ1-2ebxRMo3KKid3W-vgypgenGGReA&h=I7_N-BqW1cG7dYLXV0-CQ4QTZ2ZDczTySIReKsAEVDo + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/c7c09946-fcb3-4350-bb58-e8757c5a4d11 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc + x-msedge-ref: + - 'Ref A: 7237AFD86357404D82A8687D1FFD3525 Ref B: PNQ231110909029 Ref C: 2026-04-06T10:46:12Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691747383555&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=jrmZ5SwpmMSodbtYrrf52WZYBxVsYQ6ZBex47m4rmozGBT1DlP5GiQbXLNCmHPj2Mmu1ivRaQZ8wr8ePY_aZVh50oI_IliNfYWIt7PcAHgylZjtAo4VWV4ctOPSTR-VdhnXcz_6_TLhT_RHVfBQs3SdqgFSbuX8OK1jYze2dw4KEDh7Q-4jO1W4R3pVnoKk3a_YEK1_QcBKYvqHLCt9KVWzQ51Tl0oZC-weOZ_ARY50dq7J1puQb661PucH9kDdcE6RGkuJO_XGQhT5_D-wzs3fB3SitivhTVrfoGyPNWVKJCtOVVafR269YJ1-2ebxRMo3KKid3W-vgypgenGGReA&h=I7_N-BqW1cG7dYLXV0-CQ4QTZ2ZDczTySIReKsAEVDo + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:46:26 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691868212377&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ASntc9TZDYZbcnmkIKNde493DoT0XhuD6uCIxLOviNPoka-LDj3bEVNlC41kWMX-rUG7rtFaS5GkSC91mtwLG1JgHZg_COXJPj_z1GMTdXALLSWKxNZrDTsb4LmArgxmvoTtdK5X1A67ATY4az2F6WtRF60DxlX0RWR6glb9c0X5aRcMs7LcW8ikB1nQkONM3wxivB_qOBfJ7eQ1GT06cwFj40CV7Ro3rxMqDH_P00nYoH1gUUaQE1pYBSxGL2zwjCXKYPoz-jRSmw_Sq-Nm-ReW1VqXWleBDCylaRZqciAypMkDgiYTuQhYSti-yygp_8u_6Krw_kiVFV-JuLZd_Q&h=ayjCk3l-igfZzOinEPkk-YFSKVbF29OMYiQdUBQ4EDs + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/5d78dd3e-904d-4b7c-8116-7766080a73b6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 9D6A6939700B4A24B89FB3E679CD3F01 Ref B: PNQ231110909029 Ref C: 2026-04-06T10:46:24Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691868212377&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ASntc9TZDYZbcnmkIKNde493DoT0XhuD6uCIxLOviNPoka-LDj3bEVNlC41kWMX-rUG7rtFaS5GkSC91mtwLG1JgHZg_COXJPj_z1GMTdXALLSWKxNZrDTsb4LmArgxmvoTtdK5X1A67ATY4az2F6WtRF60DxlX0RWR6glb9c0X5aRcMs7LcW8ikB1nQkONM3wxivB_qOBfJ7eQ1GT06cwFj40CV7Ro3rxMqDH_P00nYoH1gUUaQE1pYBSxGL2zwjCXKYPoz-jRSmw_Sq-Nm-ReW1VqXWleBDCylaRZqciAypMkDgiYTuQhYSti-yygp_8u_6Krw_kiVFV-JuLZd_Q&h=ayjCk3l-igfZzOinEPkk-YFSKVbF29OMYiQdUBQ4EDs + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:46:38 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691987997145&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=EPCeFcmLRNb2OHL_lAFd4QqsKrQ8aiR57Oi0IlkbWjkMfe_6kaZbq3s9aTkEJJgOEu3eqwQ9GD82BveuINvyOvezhrbcFLeMaZNS64UJQ28Kg2_M2z7Gqfq913HmgA20CAUz-rKDBfSLvh2SoCkaftx0JlzGT5uGxSKvwLQmbiQSe_fOM_8ZXSE-lWg5BoDgd00Z5PZorIz7DkDu1JqM2A_e81uvROx6Q7GQdtslU2GULhpfY_537RDjNB5UNBlEwCqnYVW-cVbLisaqoIIDrYh3g8MZq2glZHPLd5rpqPS3ydzUnPhdk6b1hst3VCCrXtZQvvTytypWOMQxQUDO6Q&h=cmmnzXPuSZj2Xhcjqp0Kb6QYn83642yLmdRhYR9VyWw + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/74df9ebb-f0bb-4121-b6eb-9b8cabbfc880 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc + x-msedge-ref: + - 'Ref A: FD25350331E4414E83DF30711DD4E07A Ref B: PNQ231110908040 Ref C: 2026-04-06T10:46:37Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110691987997145&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=EPCeFcmLRNb2OHL_lAFd4QqsKrQ8aiR57Oi0IlkbWjkMfe_6kaZbq3s9aTkEJJgOEu3eqwQ9GD82BveuINvyOvezhrbcFLeMaZNS64UJQ28Kg2_M2z7Gqfq913HmgA20CAUz-rKDBfSLvh2SoCkaftx0JlzGT5uGxSKvwLQmbiQSe_fOM_8ZXSE-lWg5BoDgd00Z5PZorIz7DkDu1JqM2A_e81uvROx6Q7GQdtslU2GULhpfY_537RDjNB5UNBlEwCqnYVW-cVbLisaqoIIDrYh3g8MZq2glZHPLd5rpqPS3ydzUnPhdk6b1hst3VCCrXtZQvvTytypWOMQxQUDO6Q&h=cmmnzXPuSZj2Xhcjqp0Kb6QYn83642yLmdRhYR9VyWw + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:46:49 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692106797401&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=wyDewwjWWck-Y3Xp5BnaY9q5amd5Xx1HVClxV3jIlgqQehmgh1M07zs_gMYkICWmwABkNyDqZGuTfW24sInmIwKXSygjSRKOTVoPdb7xtWgWKnPgDnyng3iK9pmnIBD84jyQJb9-18rZ9YsDA7J5Er6PS7x3AQToi1blxxck2QYGtQY0UqsBWVbxhYnUXgj4Dd-4NWqAPUaDF1nzE3eDcmgToZ6KzOj_2Pd6w6-v_BauSB_SeuPZ8JbVH2CZbEHogOreYoDE8JCqch-k8lY5eZeOoYLHxpIWhLPbm-Gb8mEUL6FE9Jxa_697Bceq__xZsW6n2XqRPSEL_eQRoT_k9Q&h=tOrvfKs4AxZuefZjiT3yHjZjtku6yQWDCzLW_SQRcHk + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/d28b74c4-36c7-4081-a0e7-3440e9e303df + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 4A6279CB94FA4BB18ED809185A086AC0 Ref B: PNQ231110909054 Ref C: 2026-04-06T10:46:49Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692106797401&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=wyDewwjWWck-Y3Xp5BnaY9q5amd5Xx1HVClxV3jIlgqQehmgh1M07zs_gMYkICWmwABkNyDqZGuTfW24sInmIwKXSygjSRKOTVoPdb7xtWgWKnPgDnyng3iK9pmnIBD84jyQJb9-18rZ9YsDA7J5Er6PS7x3AQToi1blxxck2QYGtQY0UqsBWVbxhYnUXgj4Dd-4NWqAPUaDF1nzE3eDcmgToZ6KzOj_2Pd6w6-v_BauSB_SeuPZ8JbVH2CZbEHogOreYoDE8JCqch-k8lY5eZeOoYLHxpIWhLPbm-Gb8mEUL6FE9Jxa_697Bceq__xZsW6n2XqRPSEL_eQRoT_k9Q&h=tOrvfKs4AxZuefZjiT3yHjZjtku6yQWDCzLW_SQRcHk + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:47:02 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692225188121&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=CEoqR1dmFxANjO1M11sf5xmkspnpgt-obpD-dq4Tht0o1VW6ShF_M9uNabL9E1JRu45b45halwp05BVBmfgKrPak08FHAcxOvpOVMaAzwOOQbFSbI9WIpKpNr78hTPaat45LSl7l_Qr5ofTtm8jI3tpJaIOhUS2jZEZWOZ6KvT2tfQl7S10iGqx67O8gBH6xZ8A7YFH0mKMZoAr7ctRlNM-N8oH67GByfdylOsbvMH37bj_lIcMgvz73UZEdKPexpRkIgNQih5ciB6-NI7cPiNb0Iw9UwOrAY_lmbYSUil_wxpRJp2o8zBF7_gDEUV8MfuoRUZgoUjP5oTqfQdwd7A&h=NrZ74X1qnhkeHCXuMuk9FJ_FWBtgq_xDIdB5BoX8OpY + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/3a882ac5-853c-4840-bf24-d067a68fa15b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: B17B00186E244A349F00086BFDE28E07 Ref B: PNQ231110908031 Ref C: 2026-04-06T10:47:00Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692225188121&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=CEoqR1dmFxANjO1M11sf5xmkspnpgt-obpD-dq4Tht0o1VW6ShF_M9uNabL9E1JRu45b45halwp05BVBmfgKrPak08FHAcxOvpOVMaAzwOOQbFSbI9WIpKpNr78hTPaat45LSl7l_Qr5ofTtm8jI3tpJaIOhUS2jZEZWOZ6KvT2tfQl7S10iGqx67O8gBH6xZ8A7YFH0mKMZoAr7ctRlNM-N8oH67GByfdylOsbvMH37bj_lIcMgvz73UZEdKPexpRkIgNQih5ciB6-NI7cPiNb0Iw9UwOrAY_lmbYSUil_wxpRJp2o8zBF7_gDEUV8MfuoRUZgoUjP5oTqfQdwd7A&h=NrZ74X1qnhkeHCXuMuk9FJ_FWBtgq_xDIdB5BoX8OpY + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:47:13 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692340019389&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=c2n_ngVTC4k2w0vjMHtJMcyhFSRigbKQAUlvCQtdCG-Q0_YNXlws0vInvvnSIG-WgPD8i8wg3XK1pUcEMx-sZeRnNi2PTkcMot6oboV8-QOTYroBPyiXP_LlDX_wcL3HUTRwGZKNuVQFllKpMtcaMd5iWuDU9nA0f9WrukYU0eLvZuiX009KPfZlL5LMy4I4GULkCLr1THnnSrH5_ENZj2jT3miWrQnu9s1NNdaCanyk58eQG3LTjKcZJMN8moSWw1xu0xm5ZZrEaUbvSsVIDRanY-JubBNXuVidHvRo21itlZDqS4gEw6FFbnNbnMIl6B-4ADIJBdMrboJH4QBDJQ&h=WtO8YZ3j0yeseGdGMD6c9g5PbSXnO-sOcJ0EFp8TGSw + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/016ee87b-1224-4370-913a-9df386ee065b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc + x-msedge-ref: + - 'Ref A: C53DDC97D6924C9FB0ACAFFC702FF99C Ref B: PNQ231110909023 Ref C: 2026-04-06T10:47:12Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway start-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692340019389&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=c2n_ngVTC4k2w0vjMHtJMcyhFSRigbKQAUlvCQtdCG-Q0_YNXlws0vInvvnSIG-WgPD8i8wg3XK1pUcEMx-sZeRnNi2PTkcMot6oboV8-QOTYroBPyiXP_LlDX_wcL3HUTRwGZKNuVQFllKpMtcaMd5iWuDU9nA0f9WrukYU0eLvZuiX009KPfZlL5LMy4I4GULkCLr1THnnSrH5_ENZj2jT3miWrQnu9s1NNdaCanyk58eQG3LTjKcZJMN8moSWw1xu0xm5ZZrEaUbvSsVIDRanY-JubBNXuVidHvRo21itlZDqS4gEw6FFbnNbnMIl6B-4ADIJBdMrboJH4QBDJQ&h=WtO8YZ3j0yeseGdGMD6c9g5PbSXnO-sOcJ0EFp8TGSw + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:47:25 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/3d599c9c-6be3-47a0-83a6-82655991fbd5?api-version=2025-07-01&t=639110692458133400&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=blykSxy_8dVNf2EVPoJsTYLNyq5vVgne3_I8qanQB4kcuePKClXmw9FOQoMd4u9bLaziXJCjy5lHHqz4f9tc8ThIsltwgJej2YrlQWmd2lm4XM_HcxtD7gQV71ZPAbdsPisykCjJ4mK5uD-HO-_hmuHTGLcDrOLquH1D8ddudMYDV2iTrQuEXm2GVnkLHq0hkTooce0lsWClnvCSp2j6QulkfsrHK8g5OR7HI52ZxJFx8LQnR7o04KMuD3I1295t7PKHpG6zf1MnZJHd7_zTMw-ldUJ4W3S6ztdVt04JAOl1UglNXnXRJ5RZsK6u36cUnzu2zc-gETS6aQiLFvu-FA&h=rxB9OfNDqN9MpbYH2smUjK2z2CvhruUMWDyooMd5BnQ + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - e314c521-b219-4220-ab3d-dbfd84448d12 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/36a987f7-c6df-43c9-842b-c02c0fda864f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 10F9F2ACFFAB49F1ABFD8541AE12E4D5 Ref B: PNQ231110909031 Ref C: 2026-04-06T10:47:24Z' + status: + code: 200 + message: '' +- request: + body: '{"details": [{"failoverConnectionName": "ExRConnection-centraluseuap-1772183583607", + "failoverLocation": "DataPathLocation1", "isVerified": true}], "peeringLocation": + "DataPathLocation1", "wasSimulationSuccessful": true}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway stop-site-failover-test + Connection: + - keep-alive + Content-Length: + - '220' + Content-Type: + - application/json + ParameterSetName: + - --resource-group --name --peering-location --simulation-successful --details + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/stopSiteFailoverTest?api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:49:26 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693669852473&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=K0WTOP4behumcgG6TQM2YbpOqo75T-3rg6rAPyVSIIjwl3E2jb3rmor8Obmh56vLLy8_C-p2a8c2EiJzNvGv7OXnRHcKvWQS7OtbVECvKoMZG_xFFcfEb6ezrsyvR679JTw0EfGHLSEvxMDQ4FaO67OlIlYt0v8sIQc-AYZyAKEwpOp4W-gRILoGs4LQs5CuKNbjCil2nOkFcy2EB4hmINFYW7rZUircoMme1Kg37u3ZFJ4rGxkbd0ReNQijUxB-nn19MCUzIOMubkdaiDooYvee2AC56rw0npqq7MgFEw71s0hW3md1mXETTK4gCVlc5g6GUTFaxeWDK7SzTulgLQ&h=XCXYDorZgb0jqvRhhR7sumsuLwltuSD0dyB5yGY3NHU + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 502cca12-05e8-48be-8a29-578a94bf8d3d + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/f68eb1a6-c364-4662-93b2-8298385a5858 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.2, + etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: 7282EA0044EB46E3B74C4F846A207BC0 Ref B: PNQ231110907025 Ref C: 2026-04-06T10:49:26Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway stop-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location --simulation-successful --details + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693669852473&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=K0WTOP4behumcgG6TQM2YbpOqo75T-3rg6rAPyVSIIjwl3E2jb3rmor8Obmh56vLLy8_C-p2a8c2EiJzNvGv7OXnRHcKvWQS7OtbVECvKoMZG_xFFcfEb6ezrsyvR679JTw0EfGHLSEvxMDQ4FaO67OlIlYt0v8sIQc-AYZyAKEwpOp4W-gRILoGs4LQs5CuKNbjCil2nOkFcy2EB4hmINFYW7rZUircoMme1Kg37u3ZFJ4rGxkbd0ReNQijUxB-nn19MCUzIOMubkdaiDooYvee2AC56rw0npqq7MgFEw71s0hW3md1mXETTK4gCVlc5g6GUTFaxeWDK7SzTulgLQ&h=XCXYDorZgb0jqvRhhR7sumsuLwltuSD0dyB5yGY3NHU + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:49:28 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693684719841&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=a0dDJYOWNeJW_GP3qSCnCuAaDQF-njrgAjQM6t10YHQCc0f5XqvdsdPMNp7V3j1hMxEWqEfWtznpy_imnLhIzDntpvpVZs0moIlGRz5HboWAC188aVKqSxgKM3VACUg7U0Qc-cIqaYqhm1NcH_CrR9nuRw2tCLd_zeRmHoc0yb1-e9Ki7ZlP8Ud6oZZ4tN4ybOnLDIIyIYN6kodaE7ZkUTJEnKs8UPEkzaRZkhT0MUs_UrpZUjywD4sQLqNLfbROBkosUAS5fofLQgmQxjYHF0iYenb9BBSc4TQi5q00T_nQgFMTdzViRuTWhhTInV_GRWZCw4NbEQo1fbtxyVXUIA&h=wIXhxpn4ul5-QITge96UJ04LWTi0k_mgqvYCZTjrGRM + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 502cca12-05e8-48be-8a29-578a94bf8d3d + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/bee93831-12ce-41b3-9054-de8208ad6a64 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 3EB93EEC9E9042C0B79C690759070A18 Ref B: PNQ231110907023 Ref C: 2026-04-06T10:49:27Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway stop-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location --simulation-successful --details + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693684719841&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=a0dDJYOWNeJW_GP3qSCnCuAaDQF-njrgAjQM6t10YHQCc0f5XqvdsdPMNp7V3j1hMxEWqEfWtznpy_imnLhIzDntpvpVZs0moIlGRz5HboWAC188aVKqSxgKM3VACUg7U0Qc-cIqaYqhm1NcH_CrR9nuRw2tCLd_zeRmHoc0yb1-e9Ki7ZlP8Ud6oZZ4tN4ybOnLDIIyIYN6kodaE7ZkUTJEnKs8UPEkzaRZkhT0MUs_UrpZUjywD4sQLqNLfbROBkosUAS5fofLQgmQxjYHF0iYenb9BBSc4TQi5q00T_nQgFMTdzViRuTWhhTInV_GRWZCw4NbEQo1fbtxyVXUIA&h=wIXhxpn4ul5-QITge96UJ04LWTi0k_mgqvYCZTjrGRM + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:49:39 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693806520725&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=NtrEP5cDao35V7-L7AY0wjHO1l787fMDfTiLhTTlPPVCljVDuwA--agFbwT7dWStWAOkYXuNp0jf2bDbwLHJ-1ylraW3lwneCBxXUcyj4Gu5GAXmWVwhsnnLLt95YNqm7FbqdMPe2gpHlC9-h_Nghz1JVasJ8tGmuokaPvalHbZlf4f1cQXtjjXkiuNC3O8a5TX5a5eQcxOnU6efVzFBfSTdjHbqfjtPgLMxwXb65h8ialrZDYFcQgOuxE0MoSsomYwW6Elh_mFtS_I45IoJD55-RKQqgeU_c9spu2OXeebWgBPBt4XBqEsS63wSJHVyF4ba8tg_nxqkuoczeh8hqA&h=6_Oq5YyliccPsc7gy4dLTQi9Eou7ZzqPcPM3aChwbTc + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 502cca12-05e8-48be-8a29-578a94bf8d3d + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/a201583e-2a3b-4af9-add7-7f47fb8b58d4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.3, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 34101DDF88174612A4690616CA439009 Ref B: PNQ231110908060 Ref C: 2026-04-06T10:49:38Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway stop-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location --simulation-successful --details + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693806520725&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=NtrEP5cDao35V7-L7AY0wjHO1l787fMDfTiLhTTlPPVCljVDuwA--agFbwT7dWStWAOkYXuNp0jf2bDbwLHJ-1ylraW3lwneCBxXUcyj4Gu5GAXmWVwhsnnLLt95YNqm7FbqdMPe2gpHlC9-h_Nghz1JVasJ8tGmuokaPvalHbZlf4f1cQXtjjXkiuNC3O8a5TX5a5eQcxOnU6efVzFBfSTdjHbqfjtPgLMxwXb65h8ialrZDYFcQgOuxE0MoSsomYwW6Elh_mFtS_I45IoJD55-RKQqgeU_c9spu2OXeebWgBPBt4XBqEsS63wSJHVyF4ba8tg_nxqkuoczeh8hqA&h=6_Oq5YyliccPsc7gy4dLTQi9Eou7ZzqPcPM3aChwbTc + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:49:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693924574354&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=HccEFkK1h8k65YeB2rHlXmbl8TZJav9vZqzVeiCTCfJK2jXicu4Q761Oz_oGgx1JlQX3DlOPreIOEYhWxmnf47p3Bb9EN_kYx7u-GmVYtPAyeuib5iBkSk2vFaG9Od-ENxOL8ak-EFlaFxRLSqH-rdUq3dX54TGcuokZ_HaFKwqHl0rysIrANowNrjtc2EYaaIGnoWenOqqxtUUhKKc0qg17CO0BtQ-M3AjBDM8MqVOTAilOperQyvBdWHZIrSGzqzOS8WYEZCrfVZsQXUu-SHFw17es9aT0QNwxox6U4iDnSxENyS3C-goS-Kmmc5HbIT5NbQ1XQI9gvTSS9qVr-g&h=K0USTjfHZLSLCj_0CC6woQG5tGBqk2Dco0xTT_TY1ms + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 502cca12-05e8-48be-8a29-578a94bf8d3d + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/b44ba0ee-9185-46b9-a223-9b84a87696ef + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc + x-msedge-ref: + - 'Ref A: 0545DACFA5674CE0ACE75992299F0C37 Ref B: PNQ231110908029 Ref C: 2026-04-06T10:49:50Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway stop-site-failover-test + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --peering-location --simulation-successful --details + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110693924574354&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=HccEFkK1h8k65YeB2rHlXmbl8TZJav9vZqzVeiCTCfJK2jXicu4Q761Oz_oGgx1JlQX3DlOPreIOEYhWxmnf47p3Bb9EN_kYx7u-GmVYtPAyeuib5iBkSk2vFaG9Od-ENxOL8ak-EFlaFxRLSqH-rdUq3dX54TGcuokZ_HaFKwqHl0rysIrANowNrjtc2EYaaIGnoWenOqqxtUUhKKc0qg17CO0BtQ-M3AjBDM8MqVOTAilOperQyvBdWHZIrSGzqzOS8WYEZCrfVZsQXUu-SHFw17es9aT0QNwxox6U4iDnSxENyS3C-goS-Kmmc5HbIT5NbQ1XQI9gvTSS9qVr-g&h=K0USTjfHZLSLCj_0CC6woQG5tGBqk2Dco0xTT_TY1ms + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:03 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/cd3ce1d6-ed74-4c90-8018-eba3470629e2?api-version=2025-07-01&t=639110694044504055&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=DKK0eZXjn93J4lwCqph5FkakFrLsht-KLM8_zbEjJem4iNOKPtygT0OM086N9idlmfFXM907CMj6LGBZ-yQi0MeR2FrGbb4Yxhn1duILv7y8Gqg5pumJ0s8xGDj3r7Q_NUuvC5o-XpllAdrMyZa37EcFtQsDrpqORz4VXwy0kYclLWdlh7Vts-WpviMkyz5Ah5m9GU5q4UbNAJSy29wKe2dyOT4HxSwNeac1fGWQF0Ra-suP_FU90taOsSTmjbLhTqHkDleT4oSZsmaoe78jcre8hbi7VGHrrGebEb__xI4whd--QZ18-7Vl0DxpSO1Bk0vtmwjWvikZBkm8Es7NIA&h=pyf-O79BLNgXMEPDdm3gxJOxZ-VM-a8oaRbs6Emcvtg + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 502cca12-05e8-48be-8a29-578a94bf8d3d + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/e9c25cb8-9817-4cc3-a552-f8b1cbcc8fc6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 7A15916C40C44F81B40907A39DA5D85D Ref B: PNQ231110906042 Ref C: 2026-04-06T10:50:02Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-all-tests-detail + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --resource-group --name --fetch-latest --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverAllTestsDetails?fetchLatest=true&type=SingleSiteFailover&api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:05 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/d044b12c-a0b6-4c84-8950-d1d83ecf8269?api-version=2025-07-01&t=639110694057552147&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=-LxP2GDKTZWwJug29RPuGUIXvRn2VPtpgIgrdDt1Ytet_evDHJg-jdp17Rjm3-Nk8dZRqKZ6mYGJnpBahNBYW-yb76rkeIAKbbR98_pKH91Qhv34ikOnheYmqRl8j7R1zybEOOiTGEwf1V_DZi3hRSHnLBDc-if8ZzOtEk9PEla6SAC9mIZ4n6G7FzqLBN7gPXOal9c1vyZW2L7RVVhtPmaZuDyt46xNWHUt9bkErIMACLUCOFouzYuAcQP6xdbscGQbrgn-2zKYNt5JTWtm1DaV3Ta9SDrsHNcyzhynfpCNOFBKoVl3lGJNOXnsqPa95o7UXINuqiJSBtBLPUvmCg&h=LFhfg9XbWks9vlhsnvIY7dNlshhwH56MvNaEGB19gls + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 64c8da24-a2a5-450d-b84c-82731d71492c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/6c203144-3cb4-4a91-b064-904762265fc2 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.3, etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: F90A79F3E15547CCB5639B97410F9024 Ref B: PNQ231110907052 Ref C: 2026-04-06T10:50:05Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-all-tests-detail + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --fetch-latest --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/d044b12c-a0b6-4c84-8950-d1d83ecf8269?api-version=2025-07-01&t=639110694057552147&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=-LxP2GDKTZWwJug29RPuGUIXvRn2VPtpgIgrdDt1Ytet_evDHJg-jdp17Rjm3-Nk8dZRqKZ6mYGJnpBahNBYW-yb76rkeIAKbbR98_pKH91Qhv34ikOnheYmqRl8j7R1zybEOOiTGEwf1V_DZi3hRSHnLBDc-if8ZzOtEk9PEla6SAC9mIZ4n6G7FzqLBN7gPXOal9c1vyZW2L7RVVhtPmaZuDyt46xNWHUt9bkErIMACLUCOFouzYuAcQP6xdbscGQbrgn-2zKYNt5JTWtm1DaV3Ta9SDrsHNcyzhynfpCNOFBKoVl3lGJNOXnsqPa95o7UXINuqiJSBtBLPUvmCg&h=LFhfg9XbWks9vlhsnvIY7dNlshhwH56MvNaEGB19gls + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:06 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/d044b12c-a0b6-4c84-8950-d1d83ecf8269?api-version=2025-07-01&t=639110694073316696&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=qBenX-blr1D8t_OQSA9bzEdc2lOMRlxIP-IsGmJS2idyEcqoVXLYbUe3LMMHcM8wxrOgJRTjV0UpCPrpr_PqARobLuTG5VW74pXdRAU-iq-8MGmtaS4thgCeuTYkwJkPDKnlD9KMTmtWYaCslZ-rsnxBtogW3aufg5TEo0ZTh8ghCCcYH-o5MMad_CA8lOl2W0fP9mLAiSVZHwGbrF1n1ZPI0EpNiy4YLxmQUhcMcsy1eE8boddsnLm8mUalmBJ36ZZ0Kdcb89odamif98pceQwddyHAzjulkQZphksc8o3j4Hf3uog2h8hIWCp1ul1pbp-vnBeUZ0i_OgyqzUEZyA&h=A133tQc78cW03xDD0CQ2T86_Jeu8TBC3ZX_kOljOiHI + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 64c8da24-a2a5-450d-b84c-82731d71492c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/dfaf3ce2-eace-4dec-af80-f266173f13d6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, + etc + x-msedge-ref: + - 'Ref A: 994F6B7383FD4ECCB17C83AD07A3FE35 Ref B: PNQ231110906036 Ref C: 2026-04-06T10:50:06Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-all-tests-detail + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --fetch-latest --type + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/d044b12c-a0b6-4c84-8950-d1d83ecf8269?api-version=2025-07-01&t=639110694073316696&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=qBenX-blr1D8t_OQSA9bzEdc2lOMRlxIP-IsGmJS2idyEcqoVXLYbUe3LMMHcM8wxrOgJRTjV0UpCPrpr_PqARobLuTG5VW74pXdRAU-iq-8MGmtaS4thgCeuTYkwJkPDKnlD9KMTmtWYaCslZ-rsnxBtogW3aufg5TEo0ZTh8ghCCcYH-o5MMad_CA8lOl2W0fP9mLAiSVZHwGbrF1n1ZPI0EpNiy4YLxmQUhcMcsy1eE8boddsnLm8mUalmBJ36ZZ0Kdcb89odamif98pceQwddyHAzjulkQZphksc8o3j4Hf3uog2h8hIWCp1ul1pbp-vnBeUZ0i_OgyqzUEZyA&h=A133tQc78cW03xDD0CQ2T86_Jeu8TBC3ZX_kOljOiHI + response: + body: + string: '{"value":[{"peeringLocation":"DataPathLocation1","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit01","name":"circuit01","connectionName":"ExRConnection-centraluseuap-1772182537248"}],"status":"Completed","startTime":"4/6/2026 + 10:46:13 AM","endTime":"4/6/2026 10:49:56 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772182537248","name":"ExRConnection-centraluseuap-1772182537248","status":"Connected","lastUpdatedTime":"4/6/2026 + 10:49:56 AM"}],"testGuid":"2790c73a-4d1c-4899-8fc4-97df512c4a33","testType":"SingleSiteFailover","issues":[]},{"peeringLocation":"DataPathLocation2","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit02","name":"circuit02","connectionName":"ExRConnection-centraluseuap-1772183583607"}],"status":"Completed","startTime":"3/2/2026 + 11:07:47 AM","endTime":"3/2/2026 11:20:43 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772183583607","name":"ExRConnection-centraluseuap-1772183583607","status":"Connected","lastUpdatedTime":"3/2/2026 + 11:20:43 AM"}],"testGuid":"3c09b34c-45ae-4357-b1d6-5848f35734ab","testType":"SingleSiteFailover","issues":[]}]}' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '1951' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:17 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/d044b12c-a0b6-4c84-8950-d1d83ecf8269?api-version=2025-07-01&t=639110694187693439&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=Ii2upVFt300lTLk-3470vGOFlCDWI-ixDKC0ffsenlAbev7S-6jx7QkObfuaR8ITpDIUAG6nmoN8br0FNRbdi9NYWahIU6T8INPS-9TJdcRBeh3HImn1qECNqZp0hHAreSsOZHAaEPR7dGJfjIuOdYuz-H9MaVd7Rz0yoXKpql8LxUcZ2iqqZZoLwC_qcWMszIUOTN7nbfC4oLh3tEe_Sc3jpNc3r5Vb0O0e4ISYBGrtn4S4-e2QhPAPu7Xtjjl9qh7M7f5bKaMhVtpxA5_3GbxxlJGiL_X6ReoRCEWsWzLO1meXoYE12QaOBAbzqSVwLO-3YTlKdIyKOd2lEQ7Ozg&h=p3BWIZolfsCZPTKd-hL9tBY1vbt8KdnsHHSHYf9nILs + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 64c8da24-a2a5-450d-b84c-82731d71492c + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/9afce6c3-8abb-466c-b8f8-7b00776acbb4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.5, etc + x-msedge-ref: + - 'Ref A: 9864B64D3AB543038351B8BB8BA2EA52 Ref B: PNQ231110906054 Ref C: 2026-04-06T10:50:17Z' + status: + code: 200 + message: '' +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-single-test-detail + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --resource-group --name --failover-test-id --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverSingleTestDetails?failoverTestId=fb5c66a6-6852-49d9-bf56-fc3e8d2f2a3b&peeringLocation=DataPathLocation1&api-version=2025-07-01 + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:18 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/caa4d836-ad3f-4782-9ea7-92ccda2810f6?api-version=2025-07-01&t=639110694195837810&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=80KsGex4Py8H21csLYAgTTsjEVxRpNZX4PhGrnhVn3d6fOEEqOaK-TQOV0Y8sU3-fBan6mEV_OUjJ6gziQNbCHWRBeXqLfHxZpM8fdS-Pz5f7y5vW6yevqKMCBj6T07k3BT-cvDcoK0dBU1AzqWAlfYY1t_q-GvWls5T4ERy6HtG42pynRyK5d4dfFTEWyKw2-ZFQ6-hQZXUUkH_y3QyxX17hCZtgbJaj3LT6w0NMEZJimqEhDm8s7opybcrvUpsUx6ZGXLNvELuHoNgdLc31gbUSrf86FL5mGnRITK9rVtbGoGMnuAGIoujGf45XnK7RwPewx-aK3mrdrU6JD9D6A&h=m5FTpWnGLsbEEizA9FBEMoW2ay-q-9ivX4XTdCptQ7w + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 1aa93c59-dac0-4a35-940f-46128586950e + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/f7df7471-bd7d-4d83-ab35-0f2001a00774 + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-ms-throttle-levels: + - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.4, etc + x-ms-throttling-version: + - v2 + x-msedge-ref: + - 'Ref A: 27ED4FFA12864CC2B18A276C5FFB8BBB Ref B: PNQ231110908040 Ref C: 2026-04-06T10:50:19Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-single-test-detail + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --failover-test-id --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/caa4d836-ad3f-4782-9ea7-92ccda2810f6?api-version=2025-07-01&t=639110694195837810&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=80KsGex4Py8H21csLYAgTTsjEVxRpNZX4PhGrnhVn3d6fOEEqOaK-TQOV0Y8sU3-fBan6mEV_OUjJ6gziQNbCHWRBeXqLfHxZpM8fdS-Pz5f7y5vW6yevqKMCBj6T07k3BT-cvDcoK0dBU1AzqWAlfYY1t_q-GvWls5T4ERy6HtG42pynRyK5d4dfFTEWyKw2-ZFQ6-hQZXUUkH_y3QyxX17hCZtgbJaj3LT6w0NMEZJimqEhDm8s7opybcrvUpsUx6ZGXLNvELuHoNgdLc31gbUSrf86FL5mGnRITK9rVtbGoGMnuAGIoujGf45XnK7RwPewx-aK3mrdrU6JD9D6A&h=m5FTpWnGLsbEEizA9FBEMoW2ay-q-9ivX4XTdCptQ7w + response: + body: + string: 'null' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '4' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:20 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/caa4d836-ad3f-4782-9ea7-92ccda2810f6?api-version=2025-07-01&t=639110694210759666&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=Xx8dQxXnTmRlqof44SjCuRg5OATfdlcvYCQiLZgPHYTeN7IgVBqZbh1DT0O4Vkbkca44Du2l9P1V-c704juvlbabxpKdMytQWsfZ2Ji5NroG5weNmFzZHYJ2p7tGPLieMM8tRH3galMaJeDYwpmFmqM1CBFp22raOIjJ9__Qa6m2TjsDYRlpwskRzzA5N0uulJzJyP5ACSEUgEQn0PRVYqY8ICFRako0QnbOIME3tWiJunPs0A0KsP94xK9U1Qal4tJgPbTVKUkAuFmdZv4S7BjAcHVtxYzY7gde7VMn5B0iaC47j7Vdc_rC3hZ4fIDCMU2I1BFJXiHWZAlMSb9p3g&h=vLuF_6RVSI83pZxGdQC2CtlVKc9haCpl0UnK9kGLO4w + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 1aa93c59-dac0-4a35-940f-46128586950e + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/727bb7da-b5a8-4b74-97a6-75f9e076e420 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.5, + etc + x-msedge-ref: + - 'Ref A: 5161229AED714831959A88A883051D7A Ref B: PNQ231110906034 Ref C: 2026-04-06T10:50:19Z' + status: + code: 202 + message: '' +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network express-route gateway get-failover-single-test-detail + Connection: + - keep-alive + ParameterSetName: + - --resource-group --name --failover-test-id --peering-location + User-Agent: + - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/caa4d836-ad3f-4782-9ea7-92ccda2810f6?api-version=2025-07-01&t=639110694210759666&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=Xx8dQxXnTmRlqof44SjCuRg5OATfdlcvYCQiLZgPHYTeN7IgVBqZbh1DT0O4Vkbkca44Du2l9P1V-c704juvlbabxpKdMytQWsfZ2Ji5NroG5weNmFzZHYJ2p7tGPLieMM8tRH3galMaJeDYwpmFmqM1CBFp22raOIjJ9__Qa6m2TjsDYRlpwskRzzA5N0uulJzJyP5ACSEUgEQn0PRVYqY8ICFRako0QnbOIME3tWiJunPs0A0KsP94xK9U1Qal4tJgPbTVKUkAuFmdZv4S7BjAcHVtxYzY7gde7VMn5B0iaC47j7Vdc_rC3hZ4fIDCMU2I1BFJXiHWZAlMSb9p3g&h=vLuF_6RVSI83pZxGdQC2CtlVKc9haCpl0UnK9kGLO4w + response: + body: + string: '{"value":[{"peeringLocation":"DataPathLocation1","startTimeUTC":"2026-04-06T10:37:01","endTimeUTC":"2026-04-06T10:39:33","status":"Completed","attestation":false,"redundantRoutes":[],"nonRedundantRoutes":[],"wasSimulationSuccessful":true,"failoverConnectionDetails":[{"failoverConnectionName":"ExRConnection-centraluseuap-1772183583607","failoverLocation":"DataPathLocation1","isVerified":true}]}]}' + headers: + azure-asyncnotification: + - Enabled + cache-control: + - no-cache + content-length: + - '398' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 06 Apr 2026 10:50:31 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/caa4d836-ad3f-4782-9ea7-92ccda2810f6?api-version=2025-07-01&t=639110694325345031&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=DVNZySzxXoVatZjuahZJPOAP4Qd3t_SN3JCEccO7bdufNnv34yCjBISfbhQ353Qh9UGiLyC3_G5tlwVYg4ZvrGtKgZoLAWW_1YxLQEC7A2bh2oOXzrdSnmaFTvMw-iwR6kPwLnlLOW2y3xz5rrfXFxHw-wsHHlpZcPP2Z3lSEdy2LFFw25VlDbkEqg_zt-E68moBtJArsYGZD8qmcCGQuKDd0OoDh5V1UF97EOGnCjzynJOh7jSx3JFtNwN_a_L4LTxXjqn2imKs197E2Z0woxULaRZzkmUCxChULYm7Oyy0kAfo_TYhmjJJRsuEnN8UL2Bk_YotMiglECuElY9gLg&h=BS-2EmDWuS8PxJFoU4P-ZUqz1I6fkLn0JRiDzceNBIE + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 1aa93c59-dac0-4a35-940f-46128586950e + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/461c7005-5434-4742-879c-c43fcff2ed43 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-ms-throttle-levels: + - operationRatePct=0.4, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.5, + etc + x-msedge-ref: + - 'Ref A: 455E9713680C4515AD0D277D31F79A68 Ref B: PNQ231110906023 Ref C: 2026-04-06T10:50:31Z' + status: + code: 200 + message: '' +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml index c1091d5bf2d..7cdd1f5fe72 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_start_site_failover_test.yaml @@ -7,17 +7,17 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive Content-Length: - '0' ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/startSiteFailoverTest?peeringLocation=DataPathLocation1&api-version=2025-07-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/shubhati_failover/providers/Microsoft.Network/virtualNetworkGateways/shubhati_failoverGw/startSiteFailoverTest?peeringLocation=London2&api-version=2024-05-01 response: body: string: 'null' @@ -31,11 +31,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:06 GMT + - Mon, 25 Aug 2025 05:30:04 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664663567794&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=1wdE5SsfHThs8yTjsFKmiY3hiai1IXvxzHMycuhkU-QQXauazx7PLeZU8Q-HRFxh8RghYUaEVBJHlf1FkNPZc-PArV5q55IVn5Mo7NsemIi_BS1hnAHHNzWyy6UfkpyXxTbekSRWa05ctTkIs07C6njLjgSgAKMk9rOWiGku-O9G-VsN9sgBktZFz07bLfWsk9kHkIvdiu1kozr89mT9bA8N7UWgXSYkajhbciC1B5uS6cg8U6Jxs_h5jbaJdhDWOXlknkNDfYxCjbgME3cTmanKydtFKyBnpx6sqsI3S0xq43SBVzmb9LQJkuiUTqn8tlD1SwAH_-CZmSjAtf52hQ&h=a7tBeNTRSI_zRpfW47FT3Fd9Q4tluUJn5q2fYFOEl4w + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966049657717&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=hAmKPH8FaDf-vdM8nZ4iDARafVUO7AWxnSDo_hZJXXTR0ZLk-Rg7fKjce8288tylRY1LRcznjYH7FJF7nmP4yEnRdEqmPcNXjlo6spTBQ-F1IHyzgPlGLIF12sdgPVdPe5KNydH7OmjuEcHMYobwDFEmkvJ0ZoNrrsnx2pxYrD0uXDl8-T0EUyIqp6vBdYsBtCr-DmPiQdy6X79nwu0InFE-O3sVlV3uh05DYluIOWclx5GfVNL7XYU4wUEVFWkJLVrj5MCzF3VRUSrbqcwyNb5DLBbtY3PW21Hy_z9-U7Iwi9_XglDj319CYzP1c24SlxxM5zqEMFdfmhlcSi3EBg&h=oUiDnuQ4Dv-p4UZDaWSKD9WT66qkBrLDGiZT6QDy9v4 pragma: - no-cache strict-transport-security: @@ -45,20 +45,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/f7337be9-1661-47a2-b5ba-a0432fea9039 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/880fe985-2773-4ee3-a35f-8f1b665b7c39 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' x-ms-ratelimit-remaining-subscription-writes: - '799' - x-ms-throttle-levels: - - operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.5, etc - x-ms-throttling-version: - - v2 x-msedge-ref: - - 'Ref A: F2DE94B6ECC44B79982CF4F4FCAB33C7 Ref B: PNQ231110909023 Ref C: 2026-04-06T10:01:05Z' + - 'Ref A: D866922829224E2E803E4875FD22E991 Ref B: CO6AA3150217035 Ref C: 2025-08-25T05:30:04Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -67,15 +65,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664663567794&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=1wdE5SsfHThs8yTjsFKmiY3hiai1IXvxzHMycuhkU-QQXauazx7PLeZU8Q-HRFxh8RghYUaEVBJHlf1FkNPZc-PArV5q55IVn5Mo7NsemIi_BS1hnAHHNzWyy6UfkpyXxTbekSRWa05ctTkIs07C6njLjgSgAKMk9rOWiGku-O9G-VsN9sgBktZFz07bLfWsk9kHkIvdiu1kozr89mT9bA8N7UWgXSYkajhbciC1B5uS6cg8U6Jxs_h5jbaJdhDWOXlknkNDfYxCjbgME3cTmanKydtFKyBnpx6sqsI3S0xq43SBVzmb9LQJkuiUTqn8tlD1SwAH_-CZmSjAtf52hQ&h=a7tBeNTRSI_zRpfW47FT3Fd9Q4tluUJn5q2fYFOEl4w + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966049657717&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=hAmKPH8FaDf-vdM8nZ4iDARafVUO7AWxnSDo_hZJXXTR0ZLk-Rg7fKjce8288tylRY1LRcznjYH7FJF7nmP4yEnRdEqmPcNXjlo6spTBQ-F1IHyzgPlGLIF12sdgPVdPe5KNydH7OmjuEcHMYobwDFEmkvJ0ZoNrrsnx2pxYrD0uXDl8-T0EUyIqp6vBdYsBtCr-DmPiQdy6X79nwu0InFE-O3sVlV3uh05DYluIOWclx5GfVNL7XYU4wUEVFWkJLVrj5MCzF3VRUSrbqcwyNb5DLBbtY3PW21Hy_z9-U7Iwi9_XglDj319CYzP1c24SlxxM5zqEMFdfmhlcSi3EBg&h=oUiDnuQ4Dv-p4UZDaWSKD9WT66qkBrLDGiZT6QDy9v4 response: body: string: 'null' @@ -89,11 +87,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:07 GMT + - Mon, 25 Aug 2025 05:30:05 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664679377323&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=x8aOvt6Xc1N2-0oScsfcTNYTCRkFNTLD8PpEWeVUhsvr9eqZeIb1L0j_tZhUzaD4sb47JBThK9bzw_FuqoHAE8wzYBIBtH-Iss9QpMLmnNsibW7jFK1es_ToMqKnj32rFE7XzJqzpWOObFBnWV1p8Wzv4E-FTNCGN4EG35mLUkzfqVmu0jqYBLCwzMHUMXiIZ8bhsgZMsX2N-vXWuIoXQrIxSMUQd-STZ4BROvMOIXPaofPdCv0lKQsOdRcRc0whcWCaTgN1ztEI91jSbhWVaY3AT4ooCiaS-srQozQIwuBLc-4VpGnmeamY6ypR21fjHT-fDvQUJ5Gf0ZMCyrFo6g&h=YdF_yJxqQ9ko3nQCY8QzzTHxxYNc1g52Wpm8_mxTJkM + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966052923040&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HY0VpEbQ0wL3V38MH_VaHrYfk63bNThrZqsyLLnM5P_8FggW3HAxwSV1qp5kZUJCAKcxsDm2e6xZkRB8K49eeECaHRHkdwalcLkokdHa1EEwX6h7plDcGfM1ILpQW1CAhiBkvkv8mg8xasrZyBA6tRXDZyHZPlpBHSXvSjYp4tYagE5wbXIrJ0tiHqJy3vMbpLt5iIGxOIdXESrd2jM9p1nSs-OcdYR0aX_Ueivz0GTJjqtrIwrTyP8shm7PCAzLMrKUiT9DIMJ0kUvEzOZeR9DSTvFDaIJebCyFXhoouwtB-U6uu2qCLo-Dojo5aYvQpMzLGvUtCtQE4jkrXlF5Ow&h=MHq_cX98SsP9i55z_K-NgxftVEXuMgVHDHSs1AOOTF0 pragma: - no-cache strict-transport-security: @@ -103,18 +101,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/1f2be010-d848-43d5-b747-4e63b32d6636 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/9fd5f1f8-ab64-41fa-9a72-16e2bc2f81ff x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc x-msedge-ref: - - 'Ref A: 1AB4BBDF54644CC487A0016924EB5878 Ref B: PNQ231110908052 Ref C: 2026-04-06T10:01:06Z' + - 'Ref A: 884356393E71491193998CF9F5A0FF40 Ref B: CO6AA3150217037 Ref C: 2025-08-25T05:30:05Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -123,15 +119,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664679377323&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=x8aOvt6Xc1N2-0oScsfcTNYTCRkFNTLD8PpEWeVUhsvr9eqZeIb1L0j_tZhUzaD4sb47JBThK9bzw_FuqoHAE8wzYBIBtH-Iss9QpMLmnNsibW7jFK1es_ToMqKnj32rFE7XzJqzpWOObFBnWV1p8Wzv4E-FTNCGN4EG35mLUkzfqVmu0jqYBLCwzMHUMXiIZ8bhsgZMsX2N-vXWuIoXQrIxSMUQd-STZ4BROvMOIXPaofPdCv0lKQsOdRcRc0whcWCaTgN1ztEI91jSbhWVaY3AT4ooCiaS-srQozQIwuBLc-4VpGnmeamY6ypR21fjHT-fDvQUJ5Gf0ZMCyrFo6g&h=YdF_yJxqQ9ko3nQCY8QzzTHxxYNc1g52Wpm8_mxTJkM + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966052923040&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HY0VpEbQ0wL3V38MH_VaHrYfk63bNThrZqsyLLnM5P_8FggW3HAxwSV1qp5kZUJCAKcxsDm2e6xZkRB8K49eeECaHRHkdwalcLkokdHa1EEwX6h7plDcGfM1ILpQW1CAhiBkvkv8mg8xasrZyBA6tRXDZyHZPlpBHSXvSjYp4tYagE5wbXIrJ0tiHqJy3vMbpLt5iIGxOIdXESrd2jM9p1nSs-OcdYR0aX_Ueivz0GTJjqtrIwrTyP8shm7PCAzLMrKUiT9DIMJ0kUvEzOZeR9DSTvFDaIJebCyFXhoouwtB-U6uu2qCLo-Dojo5aYvQpMzLGvUtCtQE4jkrXlF5Ow&h=MHq_cX98SsP9i55z_K-NgxftVEXuMgVHDHSs1AOOTF0 response: body: string: 'null' @@ -145,11 +141,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:18 GMT + - Mon, 25 Aug 2025 05:30:15 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664794579676&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=loPBGYTtVeqQWC4uvzrGYNR8xo-xhANPYtI6-BdMvz3Me2prQuS2KFCnvN5yb7eDKh0CTK0V1SccdX38sUuPJNr6EBjzMxsHxpuaUKDiZpNfwBp4piUpPXjBfCDWnV7Qun73G5snKIPF-yWx5Pldu6Gh-BUVzIXZdOV_E_LOS9vRQb4HflnUH_ugXeQFdvPDi6QH8hNann0PDxUg_n-XWT5gbNkyTzia-j5KobkyFlH_fCUI1gEMYTrbuzEQwah9XC0a1F_4h2A3nOL_Q_ekHx7LNhYY7ei0PRIzdRMSe-FeK-PqLguahjLgMDMrHnkvr5bUdT3cMkQES6s64SEu9Q&h=BUybYk5zAFEysN71nW-aJNvHpBaIYsSPxzo9fgsik-0 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966157036619&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Yo9-UhA8PXMtNzQEPmyGoU6uXjET1jvzh1Wn4cYCjKw8r8y1glfVhTlwl1PK2MTaBf2hkrQrNaKAN4PGonvB3vp_Sn26c1DvgFRs5qcvrROi-OMeoImPtdNdJsBVkTrRfiNTQGlc748Kb_HTiMTYDcYlcSO3VcyHCfTDMSwD88E692CJ9paor3W1e761_1fAkIUrL-XelM4PfnBWjOiwAVDV6pGxO1UQgMlmpDI5gEIinNvPnqv4Omip0GD-bxenRTADkEJcV_nQGVJ3JL1eh5iDRS8i6h7DCjd0Mj_7bo0O9jsY4FztQk30Wz7YGBRGrlW_5nsBzhMgnth7DmUF8Q&h=WC0RVwMGuXYj5iqU6CLgPwZBJd64JKpjQJwM1DrwVCA pragma: - no-cache strict-transport-security: @@ -159,18 +155,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/076e418c-1835-4635-ab97-aa2b79d3d80a + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/8f3cf512-d56a-4d15-a54b-de39114524b6 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, etc x-msedge-ref: - - 'Ref A: 990F37DCB5E544AE85BAC7DD329CF1D4 Ref B: PNQ231110907031 Ref C: 2026-04-06T10:01:18Z' + - 'Ref A: 37F37AF8E5154BBBB8D8BFCE815E0209 Ref B: MWH011020808023 Ref C: 2025-08-25T05:30:15Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -179,15 +173,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664794579676&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=loPBGYTtVeqQWC4uvzrGYNR8xo-xhANPYtI6-BdMvz3Me2prQuS2KFCnvN5yb7eDKh0CTK0V1SccdX38sUuPJNr6EBjzMxsHxpuaUKDiZpNfwBp4piUpPXjBfCDWnV7Qun73G5snKIPF-yWx5Pldu6Gh-BUVzIXZdOV_E_LOS9vRQb4HflnUH_ugXeQFdvPDi6QH8hNann0PDxUg_n-XWT5gbNkyTzia-j5KobkyFlH_fCUI1gEMYTrbuzEQwah9XC0a1F_4h2A3nOL_Q_ekHx7LNhYY7ei0PRIzdRMSe-FeK-PqLguahjLgMDMrHnkvr5bUdT3cMkQES6s64SEu9Q&h=BUybYk5zAFEysN71nW-aJNvHpBaIYsSPxzo9fgsik-0 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966157036619&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Yo9-UhA8PXMtNzQEPmyGoU6uXjET1jvzh1Wn4cYCjKw8r8y1glfVhTlwl1PK2MTaBf2hkrQrNaKAN4PGonvB3vp_Sn26c1DvgFRs5qcvrROi-OMeoImPtdNdJsBVkTrRfiNTQGlc748Kb_HTiMTYDcYlcSO3VcyHCfTDMSwD88E692CJ9paor3W1e761_1fAkIUrL-XelM4PfnBWjOiwAVDV6pGxO1UQgMlmpDI5gEIinNvPnqv4Omip0GD-bxenRTADkEJcV_nQGVJ3JL1eh5iDRS8i6h7DCjd0Mj_7bo0O9jsY4FztQk30Wz7YGBRGrlW_5nsBzhMgnth7DmUF8Q&h=WC0RVwMGuXYj5iqU6CLgPwZBJd64JKpjQJwM1DrwVCA response: body: string: 'null' @@ -201,11 +195,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:30 GMT + - Mon, 25 Aug 2025 05:30:25 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664911761691&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=kzqeBmfRA9ebMtoFudE-l_2viRgr7aFzwdfrbbG4IUkphIr67UPZkcOK0QOp3S5sqWvdAGHDYT9_5y2AHBuBIOR8bYAkcI4O0AfWlRurC5cg4meM4qgSWK3WqNCWiZURo_AVVJQTTRsuK73_KezILTL_KNfooK5lRyNeX-au9mJVGDuo_zGvaVzJ6V_wg_921BWmRyOh0H4_hdjEwYh-XzN3j9xMl10BjUTcWVKXmxnON8149-xQf5rAy9BkIh9kz-54OPcSkPAHntUL8sH0jv1OjG3zmBUhZvCZWiYBxIvtR0D4MK31ducoAqlNRLqtZx1uG5yoSYs9P7Z2AvnEaA&h=5ME2LUkgQ1MtQtU6EvzOWPouOHI3NKe4ngi7OMtRbCk + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966260991545&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HHWZvkMoyml4dyWAt_X3N19cNAWwD5ooOYBi6Y5psxg7pFFvGoPyyprQi7ZYGvRYeC6qF28HBuzYOQMDPtg1YtndNTiOJglMgLyyFxbe5umPlQEqpTzAGIN6J7XuOud1DNwytiEGI9p0N_ZcTR8Q7RJwrppNbrcGiMErJE88pMjIXP1PPY7JKbdmqVPzJ9R6OiiS057s4GmU2uvqHpr8FwEhiYoroth-fb5d0avQm-8rTM_7LL23ScrjNNc_2edLmWiXwZj0TzUzAY1PPFbW09TojB2H4Qk66p_NikkE88W9WVG4Y-zJh9tinChjy4hsWTPA2lMn0jqVaG4GvUhBGg&h=Dnc33yLUhoWZjyWQp-opTKU9pXBJOHzCxh-BkREkDJk pragma: - no-cache strict-transport-security: @@ -215,19 +209,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/11de06c8-e8ae-4698-98f3-ca47580e92ed + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/03d110bf-41bb-4c64-b71f-46f1a53a1232 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.3, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, - etc x-msedge-ref: - - 'Ref A: 46E17AD2F5E84D3FA0354B860B30188F Ref B: PNQ231110906029 Ref C: 2026-04-06T10:01:29Z' + - 'Ref A: A63AD1160166475E9ED6117CC1BE3F34 Ref B: MWH011020809031 Ref C: 2025-08-25T05:30:26Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -236,15 +227,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110664911761691&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=kzqeBmfRA9ebMtoFudE-l_2viRgr7aFzwdfrbbG4IUkphIr67UPZkcOK0QOp3S5sqWvdAGHDYT9_5y2AHBuBIOR8bYAkcI4O0AfWlRurC5cg4meM4qgSWK3WqNCWiZURo_AVVJQTTRsuK73_KezILTL_KNfooK5lRyNeX-au9mJVGDuo_zGvaVzJ6V_wg_921BWmRyOh0H4_hdjEwYh-XzN3j9xMl10BjUTcWVKXmxnON8149-xQf5rAy9BkIh9kz-54OPcSkPAHntUL8sH0jv1OjG3zmBUhZvCZWiYBxIvtR0D4MK31ducoAqlNRLqtZx1uG5yoSYs9P7Z2AvnEaA&h=5ME2LUkgQ1MtQtU6EvzOWPouOHI3NKe4ngi7OMtRbCk + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966260991545&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=HHWZvkMoyml4dyWAt_X3N19cNAWwD5ooOYBi6Y5psxg7pFFvGoPyyprQi7ZYGvRYeC6qF28HBuzYOQMDPtg1YtndNTiOJglMgLyyFxbe5umPlQEqpTzAGIN6J7XuOud1DNwytiEGI9p0N_ZcTR8Q7RJwrppNbrcGiMErJE88pMjIXP1PPY7JKbdmqVPzJ9R6OiiS057s4GmU2uvqHpr8FwEhiYoroth-fb5d0avQm-8rTM_7LL23ScrjNNc_2edLmWiXwZj0TzUzAY1PPFbW09TojB2H4Qk66p_NikkE88W9WVG4Y-zJh9tinChjy4hsWTPA2lMn0jqVaG4GvUhBGg&h=Dnc33yLUhoWZjyWQp-opTKU9pXBJOHzCxh-BkREkDJk response: body: string: 'null' @@ -258,11 +249,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:42 GMT + - Mon, 25 Aug 2025 05:30:36 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665030767372&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=ccfmKIYsBwguVubdqrTkDyE6xNWhuofA5co82fBISqjhFSgEuq4ENDG-7WfQml3sZaXKwwE53FNACf2H34zL9uLkqZOI-n_MohR1mSz_XXk-d3NzZvenuWgRuFVkam51fs6nPNzoGVxYFvWPQPD1tEeJYyhP1PwXU8akJXo5Zv8o5XoldrgfOWrhNnVmLuZA-FZYwbShPGtGLpcdnhz2gtrV9Q3DWH7SGPU2y83HUJ0_KJ8FBSBihU9Ai8F9tT-zQ2AyVybaw_-o3iEmy_OQAXCWF9svN75vwtF9lhklkAI2pyGofGEqo6-8SsXCezC-261z7fMOUkBdT-uYPcRpkg&h=QPHZGkkcE_9tl-rmXM7GUdhITJ_tdJC6eCurzeMWAmg + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966367628642&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=BJLWOCQA-H-7wAkgF0yzHF2nWjYNOUQXkh7JBWE22ruw4YLAMT5_oGKdbmsY6tROGtTMTnRdA9pZlPyDRrAZGP1xDx29juNRlx057UdNMxa5e0bRabPTM17xAvLbvg9jV15tKq-woyjXl8DHVi77mGWWuuloV0I7tvk2xBzOo3eCIgnUdx2MHqWYYRpKT2fswL2tkdFNh20SwFRVnPb-qlwV9iiZB0B7qg0iv5scyJq1scZC4Jb8ujEBwTD6prYYBXs4ik9rbv7XWLRT5or-52ecGztboOcidCIG-msz-0W9x97_MRIzTYgdvXiX5zp-v5blYOhfXyy5T4RV7PKRww&h=ttrPMJtYoHwPac4wxBjb97MDDvie6E2uMFoI-IuPvP8 pragma: - no-cache strict-transport-security: @@ -272,19 +263,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiacentral/cfe966ff-a404-40d4-96c2-e09de9b6b59a + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/2a9b794c-4174-4b29-8c30-96e2739c7af8 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.5, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.4, - etc x-msedge-ref: - - 'Ref A: D6699E608F9A4CB592CE8D2A22E93193 Ref B: PNQ231110907023 Ref C: 2026-04-06T10:01:41Z' + - 'Ref A: CB569B8AD42A4C3BA19D0F169B78014D Ref B: CO6AA3150220051 Ref C: 2025-08-25T05:30:36Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -293,15 +281,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665030767372&c=MIIHlDCCBnygAwIBAgIQLwG7Lx0qboLg1ARFp25m7DANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXVVMyIENBIDAxMB4XDTI2MDIxODE4MzQxM1oXDTI2MDgxNDAwMzQxM1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWwtpfrNehb1BXVxmLcQx_QaKPYPCEwvsxth4KIOyP-N9W41MVqIYqx2qYFxDgq1b7zz2vrl1X6vlO1U63AHK4yxUuwtQCZ7FlKsMRewgSqMHSeRT_znPCTbewXIEQ7TrQxC9XkQmuRYePhHrpRTrI3TvDhYCE4EMqkkmmrL0EfLmrhkzVMhkMS9Z_Y8XMekJPITiI6Z8rF5zxG8P7nND4y1pSlrlHv6N0ll_jbbsMdBonFRxKsXpvnQAqk16zLU1cgQaVSo7t5BB4P0vIfq_PempyXpHLNp6ONuS8O4e6L9tvI2p0ItP76hQ17r5IX4jhUpgg19E-P9UtyhZmQPsJAgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBT5IuN1n3D8Q5BGFC7mIHTXv3NREjAfBgNVHSMEGDAWgBSs43L6A7Jznj2VyO-HW67dG6HtaDCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3R1czIvY3Jscy9jY21ld2VzdHVzMnBraS9jY21ld2VzdHVzMmljYTAxLzY0L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdHVzMi9jcmxzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvNjQvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21ld2VzdHVzMnBraS53ZXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZXdlc3R1czJpY2EwMS82NC9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdHVzMi9jYWNlcnRzL2NjbWV3ZXN0dXMycGtpL2NjbWV3ZXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0dXMyL2NhY2VydHMvY2NtZXdlc3R1czJwa2kvY2NtZXdlc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWV3ZXN0dXMycGtpLndlc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQCMWH4he1XSvsjtEgJierBRdX3CZm198rPIv740jv8XHBrpbUf06ImaflYdirseWqsjfepLBPDOQj6dAMLYPr3OWambkL1v6dkotX-UqM16h6KwbxfxIQPPDiM_KlstdmS9old8kY4VxobJlkF2yXGHCLjzHjl0Yiap5bTxpH-_XTushuuvFQe96XXT0NyM2uPT-aPsUi9z2SbJNMm0rDK-BBsfnhmgFiIg8hTRKWCZwfbKpxQqgfyk29tIFzUi6osAW33qxW9AqvXUkoxbIn6VvF904YDbi9FfjrBt04IbjgWmF1sdqDRrblNtmXwKIlcs8281LeFzu33fUdhhL-VF&s=ccfmKIYsBwguVubdqrTkDyE6xNWhuofA5co82fBISqjhFSgEuq4ENDG-7WfQml3sZaXKwwE53FNACf2H34zL9uLkqZOI-n_MohR1mSz_XXk-d3NzZvenuWgRuFVkam51fs6nPNzoGVxYFvWPQPD1tEeJYyhP1PwXU8akJXo5Zv8o5XoldrgfOWrhNnVmLuZA-FZYwbShPGtGLpcdnhz2gtrV9Q3DWH7SGPU2y83HUJ0_KJ8FBSBihU9Ai8F9tT-zQ2AyVybaw_-o3iEmy_OQAXCWF9svN75vwtF9lhklkAI2pyGofGEqo6-8SsXCezC-261z7fMOUkBdT-uYPcRpkg&h=QPHZGkkcE_9tl-rmXM7GUdhITJ_tdJC6eCurzeMWAmg + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966367628642&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=BJLWOCQA-H-7wAkgF0yzHF2nWjYNOUQXkh7JBWE22ruw4YLAMT5_oGKdbmsY6tROGtTMTnRdA9pZlPyDRrAZGP1xDx29juNRlx057UdNMxa5e0bRabPTM17xAvLbvg9jV15tKq-woyjXl8DHVi77mGWWuuloV0I7tvk2xBzOo3eCIgnUdx2MHqWYYRpKT2fswL2tkdFNh20SwFRVnPb-qlwV9iiZB0B7qg0iv5scyJq1scZC4Jb8ujEBwTD6prYYBXs4ik9rbv7XWLRT5or-52ecGztboOcidCIG-msz-0W9x97_MRIzTYgdvXiX5zp-v5blYOhfXyy5T4RV7PKRww&h=ttrPMJtYoHwPac4wxBjb97MDDvie6E2uMFoI-IuPvP8 response: body: string: 'null' @@ -315,11 +303,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:01:54 GMT + - Mon, 25 Aug 2025 05:30:46 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665145043371&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=G0Nv1pK72ykSZq09x4hZEffm1jX5si_x5dtc6CrrU9FYWPfVYXyhRrMPTzBPOE7t6f2OOw4BD2iP-AKUdZETmiCt-iLzaqOeZ5IASTMEF6ObkDwt6yKiS7n9_7s5dgVz2xO55dgfq8zSCwse6OG6P3d6KNXlAQ_PYIoEFKVcuwHWcI-dpGUDvbXjz7LdLNJYAZIKjxP6vuj2buPPSgzU7Ys4mWyhiXrVH0ZKBCbFMfR3iCThXtH5jCZzRX9ACt3ieskE_xkUtiatTq7PvzdRHLxi-c5r0TZxkf0j4_e5YHU8HMSmPWfD1ESEjtwBLVWCBcJN8OpdYYjftXm-QY0Pbg&h=la1hMjPVsvPqI5oLiQXKJAow25NJ3-nVN8PR0NclsUA + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966471373417&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=gxu_YF8yeG-vmRwGt_s-AQiZYT96sWuxcL9QTdFzFsKZ2_zirqaELcmQM7yDLD4ZGsYSdhKIWIxU3Xn1xpZN7wjjvV3KyKUA_eHC__X-Zwq27SNTpJYVuhktjekafy3mCSDguLtEfAZu65zJYPkBXlUiCRnVf5FuDEaiBg6qqndYrlHUqYKonR_jhLIsq1IkXaZfo2xJeYl6flaHvkGgT6NeDsTHkxlv8B3oX864xo8gcrJfiv3TBXWrQgvArtS5uyBdECk4IbTL23IdL2FCBu1LFm9pSXDmIWyosYGtmpQVNfey6PGKNZEmgd5RFGfa64cHHQ15Z6CLcNLpSUQp-g&h=ZGIqvatnr5iYTc8plruoi_el1DIirznaFjR-a8psobg pragma: - no-cache strict-transport-security: @@ -329,18 +317,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/4262ce40-0ad6-45db-a85e-ac6af7c339df + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/09a713eb-742b-408c-b9ed-7a0565ec476d x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.5, etc x-msedge-ref: - - 'Ref A: 3FFCEA71DA1E41C4BE16834051E68752 Ref B: PNQ231110907023 Ref C: 2026-04-06T10:01:53Z' + - 'Ref A: CF95362DB7F342FFAB3F8A85F9498517 Ref B: MWH011020807023 Ref C: 2025-08-25T05:30:47Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -349,15 +335,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665145043371&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=G0Nv1pK72ykSZq09x4hZEffm1jX5si_x5dtc6CrrU9FYWPfVYXyhRrMPTzBPOE7t6f2OOw4BD2iP-AKUdZETmiCt-iLzaqOeZ5IASTMEF6ObkDwt6yKiS7n9_7s5dgVz2xO55dgfq8zSCwse6OG6P3d6KNXlAQ_PYIoEFKVcuwHWcI-dpGUDvbXjz7LdLNJYAZIKjxP6vuj2buPPSgzU7Ys4mWyhiXrVH0ZKBCbFMfR3iCThXtH5jCZzRX9ACt3ieskE_xkUtiatTq7PvzdRHLxi-c5r0TZxkf0j4_e5YHU8HMSmPWfD1ESEjtwBLVWCBcJN8OpdYYjftXm-QY0Pbg&h=la1hMjPVsvPqI5oLiQXKJAow25NJ3-nVN8PR0NclsUA + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966471373417&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=gxu_YF8yeG-vmRwGt_s-AQiZYT96sWuxcL9QTdFzFsKZ2_zirqaELcmQM7yDLD4ZGsYSdhKIWIxU3Xn1xpZN7wjjvV3KyKUA_eHC__X-Zwq27SNTpJYVuhktjekafy3mCSDguLtEfAZu65zJYPkBXlUiCRnVf5FuDEaiBg6qqndYrlHUqYKonR_jhLIsq1IkXaZfo2xJeYl6flaHvkGgT6NeDsTHkxlv8B3oX864xo8gcrJfiv3TBXWrQgvArtS5uyBdECk4IbTL23IdL2FCBu1LFm9pSXDmIWyosYGtmpQVNfey6PGKNZEmgd5RFGfa64cHHQ15Z6CLcNLpSUQp-g&h=ZGIqvatnr5iYTc8plruoi_el1DIirznaFjR-a8psobg response: body: string: 'null' @@ -371,11 +357,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:02:05 GMT + - Mon, 25 Aug 2025 05:30:56 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665258817986&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lDJ-KEXB8faQqz1rWtPs3sh4GOttJ_ocAGZ0BHtRjOzCj0pruRUNh4UUxo7xVzYZG-gqq8GVurX0a7N0QZhsDFl42cHu4_vxV7gLhF6R46J8oqEbg1gCeZvv1xKZ7xFgnOnBeCAzEFKH8j3DnDubcGTnapCBbrv0aBD_9gfqtbFVjOC4VGWBkulQfGiFAadC34yycGdaVyOlnK5axPB4Y3EZxcNvYGthWutswJDjHS2bLmYPaXj_fZxeXFgivxLJB8Wa_RMmi-355kE7X54IsGN84qmafoZMnd9dFkC65yT3Q2v1LsVEP8S5zxx57PksKtY4SkmPxQ_CoLgbZF2S-g&h=_4ZVv7hsrf6wdNoXevo5V1htrdrdZMJ7UPjIYNPIdPs + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966576979532&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=U3X1jEFAtTI3kFvRA8SbRct-pkOAzzhbrvcPFoTeZ4nFgncyVgXuOwHtnHIh0YDk5LoHbG4kPhBn7iHV_x4pV-q8lsJc0ETrcz-2yDYCfJeL-SKUyA0GeZfH7dk47XuKEadFGWtK_1Yq7V6LZ1IXXtZBQ4wGUL6mqo8wriiaqVfzzSPF1aMbjkTf5vDJ7Z0KfrOXpNz1lcKYnjRm__K1gcgr_lFGRMp3m_xCy_-Ra8Jcr5cgkFS1lj0L-S5R-ghrMl8oy5SlKhs9JXYd8Nun2m7lu5XrqsYJzz7Iawj45Whg9YK4pjlsZ3zmF9LmeiOUJwrvf-V-EEMV9VN0DTwTUA&h=-YOOBSxt9KwzHXigXYXAZBmQxebCXpxX_hJ5IFp9Lio pragma: - no-cache strict-transport-security: @@ -385,19 +371,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/d8772268-cdd8-413c-8b75-4e531ab204bc + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/e492c8ab-3313-4ac2-b7da-e7fff943bb0e x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=0.7, - etc x-msedge-ref: - - 'Ref A: C1CE9A0AB8FF4221A7F45C0C87E1A3D1 Ref B: PNQ231110908060 Ref C: 2026-04-06T10:02:04Z' + - 'Ref A: 478C9F02FC0E4429991A7DB2D3B16FC7 Ref B: MWH011020806052 Ref C: 2025-08-25T05:30:57Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -406,15 +389,15 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway start-site-failover-test + - network vnet-gateway start-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location + - -g --virtual-network-gateway-name --peering-location User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665258817986&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lDJ-KEXB8faQqz1rWtPs3sh4GOttJ_ocAGZ0BHtRjOzCj0pruRUNh4UUxo7xVzYZG-gqq8GVurX0a7N0QZhsDFl42cHu4_vxV7gLhF6R46J8oqEbg1gCeZvv1xKZ7xFgnOnBeCAzEFKH8j3DnDubcGTnapCBbrv0aBD_9gfqtbFVjOC4VGWBkulQfGiFAadC34yycGdaVyOlnK5axPB4Y3EZxcNvYGthWutswJDjHS2bLmYPaXj_fZxeXFgivxLJB8Wa_RMmi-355kE7X54IsGN84qmafoZMnd9dFkC65yT3Q2v1LsVEP8S5zxx57PksKtY4SkmPxQ_CoLgbZF2S-g&h=_4ZVv7hsrf6wdNoXevo5V1htrdrdZMJ7UPjIYNPIdPs + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966576979532&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=U3X1jEFAtTI3kFvRA8SbRct-pkOAzzhbrvcPFoTeZ4nFgncyVgXuOwHtnHIh0YDk5LoHbG4kPhBn7iHV_x4pV-q8lsJc0ETrcz-2yDYCfJeL-SKUyA0GeZfH7dk47XuKEadFGWtK_1Yq7V6LZ1IXXtZBQ4wGUL6mqo8wriiaqVfzzSPF1aMbjkTf5vDJ7Z0KfrOXpNz1lcKYnjRm__K1gcgr_lFGRMp3m_xCy_-Ra8Jcr5cgkFS1lj0L-S5R-ghrMl8oy5SlKhs9JXYd8Nun2m7lu5XrqsYJzz7Iawj45Whg9YK4pjlsZ3zmF9LmeiOUJwrvf-V-EEMV9VN0DTwTUA&h=-YOOBSxt9KwzHXigXYXAZBmQxebCXpxX_hJ5IFp9Lio response: body: string: 'null' @@ -428,11 +411,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:02:17 GMT + - Mon, 25 Aug 2025 05:31:07 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/28aa02f5-2915-4531-9090-a692074b6bb8?api-version=2025-07-01&t=639110665383932524&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=avY0meGHWzKnMz-ac7jSZgA4hWc2Eq7YY_b_GhzIyOjFCuZ7A-PsGO_Frb7aberVr5dVhgVlcGq013OquH49FktnhBGxgqztIKRC7cmaa9MtSwY0ZlRaPS6rLd4w0q16C18S6UplUQgdMZBoD366O7ISnu1MTVvgZjRaE0rce4B5GQpd4K_Ye2xSFPVl5U2vDf1_wQ38-8vk5vYmWtiW1YSEaFaPJybHJYlSPKD4qWHk-Jypt_VMKpM8ViRzgCSRBWVHzFNf0XFS97QtN6T9Jy0-b787t-y-2d56_LQr2BFQjeDB0yBPavEz3A9glGhvvnI_9SU40tkDEIwo2EVP1g&h=jUeT94Ng3ICx1rV6ervXmo0xfyMxlUybbOzO4qcqlP4 + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/375e1750-174b-4495-9c4c-666b7210cee5?api-version=2024-05-01&t=638916966681783259&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=nxh2c111J3kguqIa2Z1ehUbDR-wxKMGOOkNlUP8Jmm1pRIqxLHxuLMikjaiABuWb1mDbZm56CbY-APAs9F8DfpXwLmEAYSz4i1ZOR0nW_VuvzYdkDgrikUIifcv3L2NZnKC2mxsi5MIpFgHXQrVcEqDrZG8vo0Q0vCpD1SMaf3nj1WfvUg318UdXZ374T1cZrg9sWc51urW22SaQc7s_wz4lQafWQvFs-QBzeTwzQW9lIS1k-nUe5-6VmxKo10enl49g_alz95ugNFAHRPc5ccrprjT2lpF-XJNgMM7Fz0Mg-5bgIIFALKajp6dMJyeMNokTmxPM0JlwlaNeR7JnMA&h=KQLqXXdRi8pu5XVjPn-ky5ijXHwfzRMdCBM33RzWXLo pragma: - no-cache strict-transport-security: @@ -442,16 +425,14 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - f4eb520c-ea50-449b-b145-65346e0703cf + - f2c4ebde-f1a8-43cc-b90c-8feaad8305b5 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/b1d9a31b-24dd-4d9c-a479-304e9621e191 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/648d51e4-5de9-4891-9cb9-635dfdea9ad7 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=0.9, etc x-msedge-ref: - - 'Ref A: 473F40D272994E72859183D71A6933D3 Ref B: PNQ231110906060 Ref C: 2026-04-06T10:02:16Z' + - 'Ref A: 43AFF71868CA4B7C9F149913E5ED698E Ref B: MWH011020807031 Ref C: 2025-08-25T05:31:08Z' status: code: 200 - message: '' + message: OK version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml index 3cda1493eb6..b12f9cf4a51 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_stop_site_failover_test.yaml @@ -1,27 +1,28 @@ interactions: - request: - body: '{"details": [{"failoverConnectionName": "ExRConnection-centraluseuap-1772183583607", - "failoverLocation": "DataPathLocation1", "isVerified": true}], "peeringLocation": - "DataPathLocation1", "wasSimulationSuccessful": true}' + body: '{"details": [{"failoverConnectionName": "failoverGR", "failoverLocation": + "Amsterdam", "isVerified": true}], "peeringLocation": "London2", "wasSimulationSuccessful": + true}' headers: Accept: - application/json Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway stop-site-failover-test + - network vnet-gateway stop-site-failover-test Connection: - keep-alive Content-Length: - - '220' + - '171' Content-Type: - application/json ParameterSetName: - - --resource-group --name --peering-location --simulation-successful --details + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/stopSiteFailoverTest?api-version=2025-07-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/shubhati_failover/providers/Microsoft.Network/virtualNetworkGateways/shubhati_failoverGw/stopSiteFailoverTest?api-version=2024-05-01 response: body: string: 'null' @@ -35,11 +36,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:07 GMT + - Mon, 25 Aug 2025 05:32:04 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665873066712&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=I1M5-nwHfz1GoplV8x5c3rFzqtQyDS7zDCdkw7oabTcxiVeoUyDcMCUm_d9eMzrcxAEYlIIxQkNgPs_JtmDHWAQg-FG5mXARa1Srbi4FvD5zh7xrUqIxPxj2Gd5ngayfqOD2j6sPAc-9uW53F19veJbrAtEZLkypEe-GhRiZ9drAz3_ahlmFrjqdG0ffCsGqvww5NkF7G-I4BRCWU2PQoO2Td7ArpWKVsf78pZXBSr_RIAyu6GH7WbDpB3G2_B3hX6ORH6kHo37EwfrnMhGszsmnQEoB9vnnFuUA7opfZGm4kkzoCLSPW99ksprOWHzYvqfcCG9rjDRHIkFAyRAjCQ&h=-VDnOiBAW3EEp6CBKo9tRIu0z7uzY8zApRLbR5yWZBg + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967251814892&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=foDC7V6OvvNe9Oe-fFu3YRefAVfIY1ISwZeO1Qnx6XUDPUybbjTQptLoabI99rzdWBNoumYRBre5ACacHoI9dxtEgUEZn502qTHirfYOCLJSgRpyA_M3ES1zQHtKvIAvZWpSmRqqIXJDBdQbbr2q-8qnnn8DIWt_Y6223aGCMf-9wkRJSU3fMsBQaBKnOuSJvlFF3uaPcrIATEz0ewei6_AGwmUrqK7gtCAYl7maO4WT4tvc1N4cnSvCAKLPQ6uZwIJ34bdLTOyFKE8-QgNMw-4lrVWZ5oFgiCjrN_IzXuKykIFTmjJ6WMKtu0zw7NPdEi81n0tpIbrHShST5otDfg&h=Zkweto37prajOIbbdLt2sqO75GJS-bnF4C414xFraU8 pragma: - no-cache strict-transport-security: @@ -49,21 +50,18 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 2080c2cf-982e-4840-a4d1-42bbaf2af3df + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/c49f652e-94b3-4cf3-b558-36083fc7bfbd + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/westus2/d67b7d24-a9f6-4fa1-a363-35345a2d0002 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' x-ms-ratelimit-remaining-subscription-writes: - '799' - x-ms-throttle-levels: - - operationRatePct=0.1, operationConcurrencyPct=0.3, subscriptionWriteRatePct=0.5, - etc - x-ms-throttling-version: - - v2 x-msedge-ref: - - 'Ref A: 1640515AF45740B983B27144C5A03668 Ref B: PNQ231110908029 Ref C: 2026-04-06T10:03:05Z' + - 'Ref A: 5DC7CDC5813B479DAE8C8D17B1A1C98F Ref B: CO6AA3150220031 Ref C: 2025-08-25T05:32:04Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -72,15 +70,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway stop-site-failover-test + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location --simulation-successful --details + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665873066712&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=I1M5-nwHfz1GoplV8x5c3rFzqtQyDS7zDCdkw7oabTcxiVeoUyDcMCUm_d9eMzrcxAEYlIIxQkNgPs_JtmDHWAQg-FG5mXARa1Srbi4FvD5zh7xrUqIxPxj2Gd5ngayfqOD2j6sPAc-9uW53F19veJbrAtEZLkypEe-GhRiZ9drAz3_ahlmFrjqdG0ffCsGqvww5NkF7G-I4BRCWU2PQoO2Td7ArpWKVsf78pZXBSr_RIAyu6GH7WbDpB3G2_B3hX6ORH6kHo37EwfrnMhGszsmnQEoB9vnnFuUA7opfZGm4kkzoCLSPW99ksprOWHzYvqfcCG9rjDRHIkFAyRAjCQ&h=-VDnOiBAW3EEp6CBKo9tRIu0z7uzY8zApRLbR5yWZBg + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967251814892&c=MIIIpTCCBo2gAwIBAgITFgGsmnj73LBE7PaBtQABAayaeDANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE4MTIwNDI4WhcNMjYwMTE0MTIwNDI4WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKYwXiklImL5-WfPWj2FX3_Y-JxCd3XXEOuNXx5ggHubZZamujLTqEBSFsFYiH_9NCaqKTiATXu6fBpzW3ghgYhwr0PL071fQT15KnnNUFjd5hFXB7SYti9IwWu1lxSAz-De7HivujKdlsgcmfoV6upRQ0eva9e74EwLV9pCn4WQAhs-6T8p0CytQsi81qHMWybAbNvfom0ox78IEWdS_6g_d4Jl_I4ccYLMyRTOV2NioM96cRECWCZhbpLl1zwoYGSbU5H0MZaiCBjPlhXN40BqagpamZfP98sPYSBfreh6-iMGU5tNTRkh8RiJqzjhzIUpEv3PqLtWTyPUB8JS7aUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTxzPCXgPzIUiTz94us0y0CCMf8BzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAAqNK9Ejzdnb9L4TyakCpJByRYVTN_6nCGbtUd2E2sELjuJGRGiRmujp_jqNyIofO_ghSaP_tqH-3WRTRUbnt5xM8aBYoYJSOgKgTsNrB6clspdhCCmzhJy6EQuOqfUDm3C7hDru1_bN3DwXt3VpDqfuYtM3MAabKg0oCYVWgFwnAKYmZLZMWMQh7k_hZxy1gOCQmE9U08tf_pU21aI0El6n5A5uG2FT0placwchheFmXAtoPjT7nU53HVmRissxUR_vRCDj_ZCFo3K3nZNXCQOKPAMc9-LC0prb9Slg6siKtSHB3iGjNQlT9-nbSnDgifI8zC1cvT8CdaNLOmUywRIB4wvRn1z123NuyfJaIz95igW9P189vBTJEZREF-MgJEboWKdlGNn6bbBtu0waqAmUU7WVLeZKdtUI6EEKF7wRGYuY_BhZx1ipyXnBHZpsufuH4AwgOO289QKmqg8QAy7HFD9c8H8fNCtR7sTZ4YNP2AhEaES0rkMSQUCNVEz42YEBi2GgrSpnI94SPdb3J3PkCMZ4OgFRjztLO7nrgbPtflhSOo_VOE0_7Y74km43WAMQPKL3-44vQrEQ61Hd_24IcFh_ChNXvUDqp39GzYlO3D0zlau4ozll8BeLUZrJwHTQWZS8XR-EifCl4MW5Y3Y1SxOLrIxnukCzQxL7aGmc&s=foDC7V6OvvNe9Oe-fFu3YRefAVfIY1ISwZeO1Qnx6XUDPUybbjTQptLoabI99rzdWBNoumYRBre5ACacHoI9dxtEgUEZn502qTHirfYOCLJSgRpyA_M3ES1zQHtKvIAvZWpSmRqqIXJDBdQbbr2q-8qnnn8DIWt_Y6223aGCMf-9wkRJSU3fMsBQaBKnOuSJvlFF3uaPcrIATEz0ewei6_AGwmUrqK7gtCAYl7maO4WT4tvc1N4cnSvCAKLPQ6uZwIJ34bdLTOyFKE8-QgNMw-4lrVWZ5oFgiCjrN_IzXuKykIFTmjJ6WMKtu0zw7NPdEi81n0tpIbrHShST5otDfg&h=Zkweto37prajOIbbdLt2sqO75GJS-bnF4C414xFraU8 response: body: string: 'null' @@ -94,11 +93,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:08 GMT + - Mon, 25 Aug 2025 05:32:04 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665887586943&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=R55sTg_aK7HJYwfdkARRywqyfWL3SWgewV_4TI7Klj13ENcuamshwNdi7UKhizKuvJlLXd9_O52J6hahYq78ZoOxd7ADKSSk6f-xVuvIA3KAeKBsjo_MguTzbZFwrQR0cBS6E8nnLl6thfmAtRpfVIf3iOwpOTB7uRrGNDUodddu-0oZ1qqfLt-zWCSTVWg4LSJU5P2NyaDv-X96Ii9UC9nfxnEdfFK4DkJ429tZ3G7vjBhY7I0ZY1u_TXFLXA6L4CKCx396jzuG-BT_tVk5GNWPJMJplCY8FfnqydT51Cti0JWPuKnU9SwVtkAX8v-wQAteECy8WKLn3ixqD_UmLA&h=OHXQC-nRQeRVzebvctl7oCbaBcjKanbdO4MpA-eX6wM + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967254888984&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ikguxbmvswxgjjLVoILGC1mzrcTxkrLsJccPfy0tZJm8TcfENhnPFX3Up5mgWxx1qrvebjK6_toCtlOrPz-Ugzouw0ePHC4-rzJofUzg5ptWTSg-kSlUwC9L4TBAfiCVhJKHP0z1UbpySHB2LkgiuK2h62yO8MXU2TvysyPXcQovkvGdjS4mFwS_mrBOsOtFHwzx1obAxMvSDWEAdIvZhwcvmInG958eLiJeCZFmnTv3lNLIuVqEBJz--MNGKViCwGfc2FVg5ndpFV6TlSPA6v1GmCryLaJLhIgDxgBPt6GOC20l51437f3lDTOpaV8N7wbWtYtZDrx7CxmMCvnCrA&h=kGq7AfX0P7pO3krl2UfXPSiX1XTRELTY8z9tOrOcjd8 pragma: - no-cache strict-transport-security: @@ -108,19 +107,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 2080c2cf-982e-4840-a4d1-42bbaf2af3df + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/c5d5e7aa-2951-4b28-b057-41453f1956ff + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/ce2dac6e-ce3e-4d73-9a02-8a0fe7366b56 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, - etc x-msedge-ref: - - 'Ref A: F36BD441FB7D46E1AF3348F73A22CBB3 Ref B: PNQ231110907042 Ref C: 2026-04-06T10:03:07Z' + - 'Ref A: DE1B5AA6425540C2B0BC27457448566B Ref B: CO6AA3150219039 Ref C: 2025-08-25T05:32:05Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -129,15 +125,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway stop-site-failover-test + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location --simulation-successful --details + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110665887586943&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=R55sTg_aK7HJYwfdkARRywqyfWL3SWgewV_4TI7Klj13ENcuamshwNdi7UKhizKuvJlLXd9_O52J6hahYq78ZoOxd7ADKSSk6f-xVuvIA3KAeKBsjo_MguTzbZFwrQR0cBS6E8nnLl6thfmAtRpfVIf3iOwpOTB7uRrGNDUodddu-0oZ1qqfLt-zWCSTVWg4LSJU5P2NyaDv-X96Ii9UC9nfxnEdfFK4DkJ429tZ3G7vjBhY7I0ZY1u_TXFLXA6L4CKCx396jzuG-BT_tVk5GNWPJMJplCY8FfnqydT51Cti0JWPuKnU9SwVtkAX8v-wQAteECy8WKLn3ixqD_UmLA&h=OHXQC-nRQeRVzebvctl7oCbaBcjKanbdO4MpA-eX6wM + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967254888984&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ikguxbmvswxgjjLVoILGC1mzrcTxkrLsJccPfy0tZJm8TcfENhnPFX3Up5mgWxx1qrvebjK6_toCtlOrPz-Ugzouw0ePHC4-rzJofUzg5ptWTSg-kSlUwC9L4TBAfiCVhJKHP0z1UbpySHB2LkgiuK2h62yO8MXU2TvysyPXcQovkvGdjS4mFwS_mrBOsOtFHwzx1obAxMvSDWEAdIvZhwcvmInG958eLiJeCZFmnTv3lNLIuVqEBJz--MNGKViCwGfc2FVg5ndpFV6TlSPA6v1GmCryLaJLhIgDxgBPt6GOC20l51437f3lDTOpaV8N7wbWtYtZDrx7CxmMCvnCrA&h=kGq7AfX0P7pO3krl2UfXPSiX1XTRELTY8z9tOrOcjd8 response: body: string: 'null' @@ -151,11 +148,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:21 GMT + - Mon, 25 Aug 2025 05:32:15 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666016250008&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=WIY-wJJyOlIrR5g3_2XsEaZkMsbbfP-UD4nPja_x6Nqp1rtN1KYLLZ_nVQCpG6Bw-N5Aq9OKuu77A6CMNBoPgAsrlw5nYEQyhXM5D7eI_t_IC19sfbRq9iTG2H_9CZ8KL7xX5zpJMFHllCOqP_mGTEvwMllrrI8Db3Q4sGp4aZ2AJmsbn-jsE4XVsc28HGDRh21NUWHNRdhJTZ_zpTXkNhkd9nfnLtVL8YL0j9Wmld820e1UhpXJInFGmTAMJKguqWqTCWbQ3-a9MAAb4gJM4lfuzcVl3PoScW_vzFPHvZSkfCp4SgUk6yMDLgIVlhDih2twthLfeRNeDm-B9L7qNg&h=kR0Uh6-DF8Ha0lWKojL67IfnFKaOO5DY-TkLBwWsabw + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967359130428&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ECgr70wqYUG519XWZNqE6m3jD0_0pxhRXnusUxSI2XUH916jaDaS91n16XAw11zvL2HYHAbr6vrUpCfE8iCDIGi8rUb19mVa_-EvUacS10gJsZ-iXxnBXgK19WtFvXHcatWHRmRfPPeKytA_ou9N5tYt1Cppzqugb6d0Oc4bwpLahVWTlqJIWwN6qFEUXyTdZET93rgopXyYTDFFOF7FJ5jyLsu19V4Qp4ba6-4WJHNR03-Uqk2NdlFF4EGxe4CfYpdUnaz2EaRE4nK_y2SGBjkyBXGx90xoKR6i_d2p-57tniwc3d6rzCj6s4299ASon8lJNGNc_517FOJPcypdNQ&h=GN54HOQL-qAxn2C6FQqPb4hUM8GkyQBFmMqRYiWusbk pragma: - no-cache strict-transport-security: @@ -165,18 +162,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 2080c2cf-982e-4840-a4d1-42bbaf2af3df + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/a90011c4-5526-4272-9a69-4e3cbd45bee5 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/3f8d1dd1-fb4b-4703-95a6-ced9cef3fe8a x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, etc x-msedge-ref: - - 'Ref A: B1F1F853BCB44C0DBE38680E75A302ED Ref B: PNQ231110907034 Ref C: 2026-04-06T10:03:19Z' + - 'Ref A: EDE015137B754E4798C57562627DB30B Ref B: CO6AA3150218021 Ref C: 2025-08-25T05:32:15Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -185,15 +180,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway stop-site-failover-test + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location --simulation-successful --details + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666016250008&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=WIY-wJJyOlIrR5g3_2XsEaZkMsbbfP-UD4nPja_x6Nqp1rtN1KYLLZ_nVQCpG6Bw-N5Aq9OKuu77A6CMNBoPgAsrlw5nYEQyhXM5D7eI_t_IC19sfbRq9iTG2H_9CZ8KL7xX5zpJMFHllCOqP_mGTEvwMllrrI8Db3Q4sGp4aZ2AJmsbn-jsE4XVsc28HGDRh21NUWHNRdhJTZ_zpTXkNhkd9nfnLtVL8YL0j9Wmld820e1UhpXJInFGmTAMJKguqWqTCWbQ3-a9MAAb4gJM4lfuzcVl3PoScW_vzFPHvZSkfCp4SgUk6yMDLgIVlhDih2twthLfeRNeDm-B9L7qNg&h=kR0Uh6-DF8Ha0lWKojL67IfnFKaOO5DY-TkLBwWsabw + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967359130428&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=ECgr70wqYUG519XWZNqE6m3jD0_0pxhRXnusUxSI2XUH916jaDaS91n16XAw11zvL2HYHAbr6vrUpCfE8iCDIGi8rUb19mVa_-EvUacS10gJsZ-iXxnBXgK19WtFvXHcatWHRmRfPPeKytA_ou9N5tYt1Cppzqugb6d0Oc4bwpLahVWTlqJIWwN6qFEUXyTdZET93rgopXyYTDFFOF7FJ5jyLsu19V4Qp4ba6-4WJHNR03-Uqk2NdlFF4EGxe4CfYpdUnaz2EaRE4nK_y2SGBjkyBXGx90xoKR6i_d2p-57tniwc3d6rzCj6s4299ASon8lJNGNc_517FOJPcypdNQ&h=GN54HOQL-qAxn2C6FQqPb4hUM8GkyQBFmMqRYiWusbk response: body: string: 'null' @@ -207,11 +203,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:31 GMT + - Mon, 25 Aug 2025 05:32:26 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666126461926&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ZFRtAp-lBnDPsCNPBRSpuK0M2fJ0b2vrevwMeje_omO12pVm6gxMQe4gw3yYjiLl1WyRyfRZ30XGdClCymCRxn6jjHcKdWyNfpyhmJqfNDJhOG5rYfplkLX_HT13Zt8bADJmKErI6w5Vke4pZBAKWyTCVwEY1F4HoMdtVyFM4WHFykOszmd_NGxTDYNWmSlaqdsChdT-hNzd9m8Ae4xt4T_rTr6rUwi-CUtqYNnAu8udPJWyckGGUdu4tt0O9z6XO-94V0QAA-lVU4-dLLT7tQ6GxKsoZ3ZXWR_oTXu1ifKC66qlpsML93B9rHcdAvKT0-Ihdab92muLf3H4vZYvuQ&h=oE7ViF2wmLazOy-eLiHgt3QtIBe6VwNmq0ntgDLMunQ + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967463164148&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Ys_SBzjYH545rzUfLIZ1rT3DzisV4Vcmj4wZ-G96mjZEl0U_ODOJge4Hsemw7uQicId4EOk3Y5TioGROtmkaNP9nRKlIvPMeN5c-r_CYuu-fIg8J_435aoLbvDFr4txXr-vhlJxg5nDdF21jc6pb2ufAfFILWyEVUsBGASQMXenfElizGAPLAocy44ku6c2xeQUmJz1LZ_auc0HDcscB0k-3_fqtfBaVGggaqwlvtPOkwDxGJ3A1zSgByYEWrRHr3tZvA97o1lH0SqKF2aOwWubBCCEabajv090gj-YB-VVasD-nGLqdUgykWSxJD9Yw5oG5W-6MfGvmaSLv1j1f3A&h=yXtIRed3red4jv0HSEUxdDFBpQ3X3F-nttum2W_FDkU pragma: - no-cache strict-transport-security: @@ -221,19 +217,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 2080c2cf-982e-4840-a4d1-42bbaf2af3df + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/e6a3c83d-29cf-43e1-b7c0-91a240b0bbcf + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/7918c33c-79e9-40cf-aa05-92042ed3c040 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, - etc x-msedge-ref: - - 'Ref A: A0A30B73D26846FA8822162C319A5EA9 Ref B: PNQ231110909025 Ref C: 2026-04-06T10:03:31Z' + - 'Ref A: B6F55EA9E65F4E25AB5D965DD5FEA0E7 Ref B: MWH011020808054 Ref C: 2025-08-25T05:32:26Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -242,15 +235,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway stop-site-failover-test + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --peering-location --simulation-successful --details + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666126461926&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=ZFRtAp-lBnDPsCNPBRSpuK0M2fJ0b2vrevwMeje_omO12pVm6gxMQe4gw3yYjiLl1WyRyfRZ30XGdClCymCRxn6jjHcKdWyNfpyhmJqfNDJhOG5rYfplkLX_HT13Zt8bADJmKErI6w5Vke4pZBAKWyTCVwEY1F4HoMdtVyFM4WHFykOszmd_NGxTDYNWmSlaqdsChdT-hNzd9m8Ae4xt4T_rTr6rUwi-CUtqYNnAu8udPJWyckGGUdu4tt0O9z6XO-94V0QAA-lVU4-dLLT7tQ6GxKsoZ3ZXWR_oTXu1ifKC66qlpsML93B9rHcdAvKT0-Ihdab92muLf3H4vZYvuQ&h=oE7ViF2wmLazOy-eLiHgt3QtIBe6VwNmq0ntgDLMunQ + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967463164148&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=Ys_SBzjYH545rzUfLIZ1rT3DzisV4Vcmj4wZ-G96mjZEl0U_ODOJge4Hsemw7uQicId4EOk3Y5TioGROtmkaNP9nRKlIvPMeN5c-r_CYuu-fIg8J_435aoLbvDFr4txXr-vhlJxg5nDdF21jc6pb2ufAfFILWyEVUsBGASQMXenfElizGAPLAocy44ku6c2xeQUmJz1LZ_auc0HDcscB0k-3_fqtfBaVGggaqwlvtPOkwDxGJ3A1zSgByYEWrRHr3tZvA97o1lH0SqKF2aOwWubBCCEabajv090gj-YB-VVasD-nGLqdUgykWSxJD9Yw5oG5W-6MfGvmaSLv1j1f3A&h=yXtIRed3red4jv0HSEUxdDFBpQ3X3F-nttum2W_FDkU response: body: string: 'null' @@ -264,11 +258,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:45 GMT + - Mon, 25 Aug 2025 05:32:35 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/2d160835-a21f-4315-aec0-8b11f3e2487f?api-version=2025-07-01&t=639110666262681361&c=MIIHwDCCBqigAwIBAgIRAOpmUf_V-oHMyVM3_KMnUeUwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDIxODE4NDAyOVoXDTI2MDgxNDAwNDAyOVowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKTx5V7uwO5_0MrlUhX3iWV1HyQyfS1zBKasEWsF3oT_vIVTFFj97WVdRAplIVywP0W5u3KLZEMfdOYZOrmb1woTEx9V1FM4_sb06GC7ZQ2Lf5E4tPd32WmNvxJDF2q8otTQrRy2wVRZhpNNJl0sAjHm5q6RN_J09a1LCJv5961p1EQe_K0mVXHAwLZKKVxGbJ4CScGz71gmDy0z9CHSTCq4UXFiCCk772PDw9crLaAUnmv2RD6z3s3Vxcxwjk_FDDlfzyjwSd52b4mPhwlkL6fZorsUvD4gu1_qGVM4OS22iZbdiNnHdBboL5AFQH4fpkkK7X7pH9AZP5KUMj7pkhAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRE3x-0sA8TWmMmnap-H5XIEnUmXjAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAKe3RuGTt4g3SXwGU537UYzp6H2Z1CRfrHprPySXsmnQFJWSp8tAsbwbnLpVnQHuLMtb3ZYXPBTXg1wB0KklQLWcnRfTj0UES57ox4wfttc9aAxQS0Z15z5fYhj79_Cs-MP2ik4aTZ1zYLQw8LA2CFCDS7SYDX_7BC7EXfonpbVhxMQ0CC_f3qiSTa3oUez6tFZu3dFGh-rXEAFEKZUy1GJc5FX66VZhM-iF01Le7Z7QvAPgG1vfVVtIKl4dMNd7TKEVx9injtpzM5ETV-esYCQtSUgO0_iWBC1hyFcncimFldBy9Ew_3NlPbdBFJ97HhtQxfP1U2W6bJxm-7CkO2Vc&s=s2dGtxhuMLnV5rWXZC3iyln-8_qArSmqnrsu12RCS7HWEh_yQsTlftNfpLgCSoMRrKFuo6Dm-3-guXWEwFQn-Xetvv3Og2OBxdeBA-ICuceGDn8RxaW4w5F49EjF5nTRcngODye4mBMuYCxjGmLMgWTw-i1__qZ-7OCBB12sPSUa4kv5OuP5eZl8vR4w7MhPXBLnX4QJ8oTuTo_P7nSlvQkzsgUX93RILvW6GHweTykA2UBDfCy8mG0Yil2vSj9ByVyqDaYR-V1TBLdnpgHUgks73IYSO3eqFLcQTkCG6BAzx5vgtsEJ6uiQUbU5MFxsnSSzwB2KQx5rKkTTiHevxA&h=sU2i9dwq1dJqloXmEW7XuVHr5xiiMPTJB-5YhmonoJI + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967567365076&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=RuUz6Ycjlved_MqbkBSQuT2wmPvlJ9BEDKKd0ug_ChX-tYsF6H7_72TgvaY0fTA1EXsEx6VBnVESpFbuttdDIS6-C2K990l5z664CQ-LeBsHHkDp6PIL07u_JNrFjM4dJsDTjEc7CIjUeX18WvSOcvuZ2ZmsNFOEwatrjXAcS-tTfi1kvnjD3KKoEB-VHoHtsZvEEfWKWH9e6XbahLgojZ5q-Z4xDb62ty9ZMCaO2-oqNZ6pVFuINc9gNFRbGMROenGBV67WTuy_JtiEa9ecZJfuWb0AMv1YzTAryrLcGnerd3aM7uk13g0ftmprUvQPDB2bZv0dw_zFtAlZyiVgVA&h=KjRrokt12jIkIlxe5ALL2Rx8lGIxQz4JcgGx-5H24dU pragma: - no-cache strict-transport-security: @@ -278,78 +272,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - 2080c2cf-982e-4840-a4d1-42bbaf2af3df + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/southindia/98ca2c27-59a5-417b-a099-a5620b7d78dd + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/af4c1585-350e-4667-8df9-8a54333b6935 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionReadRatePct=2.0, etc x-msedge-ref: - - 'Ref A: 8596AC5B0874454481D451D59A9F51EF Ref B: PNQ231110907029 Ref C: 2026-04-06T10:03:44Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway get-failover-all-tests-detail - Connection: - - keep-alive - Content-Length: - - '0' - ParameterSetName: - - --resource-group --name --fetch-latest --type - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverAllTestsDetails?fetchLatest=true&type=SingleSiteFailover&api-version=2025-07-01 - response: - body: - string: 'null' - headers: - azure-asyncnotification: - - Enabled - cache-control: - - no-cache - content-length: - - '4' - content-type: - - application/json; charset=utf-8 - date: - - Mon, 06 Apr 2026 10:03:47 GMT - expires: - - '-1' - location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666278720614&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=whR4Ds7WeM7_4iHNNA3iVRMAsIyJQsLN6ZIT1z9LhEFjl569DVQdsf96rZU35sPA4QlFSMZWRL2NWJY5vtUg8HOF8Z8SQZKuM9J6_2z1-foUZWh9gU5ORMKV15FW-vkBpHZPPfCtEzQHzYRrCv2v742gcP5INitk8h0t1eEHuLTH-zzaeEXGFbDjwe9P7PT7E2-dcYmQMbWBEujCuzdTQYLwPUEp7dZ0MYuBDBSpaTGtZ3Go_W_PwwPLfSoNpdRBGO2eVP16VW_HyEiqZTUGuSrH7g6dTbhUmlGxUthITeE0rmRiNfww8Qt6WlI4FAlEPpRZ8uw-1JwkH58w4hNsRw&h=BoZ063Mr4rWD8nAMe1_jRz513taUZrZp-Fbw3akqKqk - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - a34587a6-47b3-4bdc-a8cb-73212a4c5408 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/cf642648-2724-4fd7-84fe-7a4b75f9cad0 - x-ms-ratelimit-remaining-subscription-writes: - - '799' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.5, etc - x-ms-throttling-version: - - v2 - x-msedge-ref: - - 'Ref A: 37605DB3AEED41BC81460C223EC524E8 Ref B: PNQ231110909054 Ref C: 2026-04-06T10:03:46Z' + - 'Ref A: 11DB6CBBE59A4874BF042315B1424460 Ref B: MWH011020806034 Ref C: 2025-08-25T05:32:36Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -358,15 +290,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway get-failover-all-tests-detail + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --fetch-latest --type + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666278720614&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=whR4Ds7WeM7_4iHNNA3iVRMAsIyJQsLN6ZIT1z9LhEFjl569DVQdsf96rZU35sPA4QlFSMZWRL2NWJY5vtUg8HOF8Z8SQZKuM9J6_2z1-foUZWh9gU5ORMKV15FW-vkBpHZPPfCtEzQHzYRrCv2v742gcP5INitk8h0t1eEHuLTH-zzaeEXGFbDjwe9P7PT7E2-dcYmQMbWBEujCuzdTQYLwPUEp7dZ0MYuBDBSpaTGtZ3Go_W_PwwPLfSoNpdRBGO2eVP16VW_HyEiqZTUGuSrH7g6dTbhUmlGxUthITeE0rmRiNfww8Qt6WlI4FAlEPpRZ8uw-1JwkH58w4hNsRw&h=BoZ063Mr4rWD8nAMe1_jRz513taUZrZp-Fbw3akqKqk + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967567365076&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=RuUz6Ycjlved_MqbkBSQuT2wmPvlJ9BEDKKd0ug_ChX-tYsF6H7_72TgvaY0fTA1EXsEx6VBnVESpFbuttdDIS6-C2K990l5z664CQ-LeBsHHkDp6PIL07u_JNrFjM4dJsDTjEc7CIjUeX18WvSOcvuZ2ZmsNFOEwatrjXAcS-tTfi1kvnjD3KKoEB-VHoHtsZvEEfWKWH9e6XbahLgojZ5q-Z4xDb62ty9ZMCaO2-oqNZ6pVFuINc9gNFRbGMROenGBV67WTuy_JtiEa9ecZJfuWb0AMv1YzTAryrLcGnerd3aM7uk13g0ftmprUvQPDB2bZv0dw_zFtAlZyiVgVA&h=KjRrokt12jIkIlxe5ALL2Rx8lGIxQz4JcgGx-5H24dU response: body: string: 'null' @@ -380,11 +313,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:03:49 GMT + - Mon, 25 Aug 2025 05:32:46 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666298742980&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=OeQ_wGnACKjFX3V8wT9imNNodTkqL9hWNHBOGhXJlN0BRJfn2ElbSez7RQlXGsMWmpnkcmggntA3EWa8OFXcw6l3HcXpnDVyClvkR1A4ya4ZHM9qdv5DMDT0BcYYiig6ect_CRymSbCtddI2Qqx4lpTomu43kndnMJymEYpffrbV3DUzZyHkFgwJWfNRWG1Q1A47LEGfdbO3dNc7NZ1DKVTqzKhVexqd6Bg0lE-P72w_mf6B4O_BeFx6PUHsUm8NbjDaH0gIG6o32rTSJ7SicJZGJBAeW4HFarQgV_XPgSC_zu66ZY-jSVT0W7oRB84PpRfO2c1sEs-0-DRmugJztw&h=_QDWheFUR1m54cyOD3hbY0kX_FVN4s_x5VzRNY9xAHk + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967672107276&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=TquWAPB_vStuPR_ZqDpCdVyshfNwVB41DfSMT-bm3LtOBMve2dxZepOuv01ZpZftIhw8gIg7-qDj__fj8tZyiSOHAiK3jCArwJUOa5rTRD-DESj6829veZ701-cIW7mZnE5iDvPSbWXkx9KN_9WHqQquv9dGtdiA5doz9ff6ykIkKD0cjCw39NaSlBLnlWrt_PKqTIZj6mCssQlFCPrJ4nMXcaR-iUOr-Z3HHdDpiXprtgZDKYEwDjPgg3hIkx8HyHxYU7QKNEPBEaoAHJY-MblXTOXzZ9OWSceASmhkXcfP-PAGYY4EqT6zDnaXqSUQxgi6Wbz_6OsJe-DvGPykuQ&h=i-5firDD7bJzM9_kry1gQjBnWgXXhOnmRu-CleN6L1o pragma: - no-cache strict-transport-security: @@ -394,19 +327,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - a34587a6-47b3-4bdc-a8cb-73212a4c5408 + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centralindia/a0845214-b58d-470e-836a-cb80bf151163 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/c18617ad-0793-4a71-8333-13b0598ad161 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.1, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.1, - etc x-msedge-ref: - - 'Ref A: F9DDC8C53752487D82E36F0AEBC214A5 Ref B: PNQ231110907054 Ref C: 2026-04-06T10:03:48Z' + - 'Ref A: DE24208D17EB483BAE235E5C56A2E3CB Ref B: CO6AA3150217033 Ref C: 2025-08-25T05:32:47Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -415,78 +345,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway get-failover-all-tests-detail + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --fetch-latest --type + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666298742980&c=MIIHlTCCBn2gAwIBAgIRAN8uxS6M1zIwyNS27O1e45EwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgRVVTMiBDQSAwMTAeFw0yNjAyMjQxMjQ4MDhaFw0yNjA4MTkxODQ4MDhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw34VWxIMRfzkodl03I3vWbthvAfn0-568UvCCyDa9QJec4yE7-lvztIK2R1pSsZXIjAr7f2xBefTCETZYtzcmGDdn8bNSayia9CqG3zkb90GkqlNXIhIqrL-3JFtStsU_rgnMZXI7hGuDm9grRLql1o_1RInkbOnrvmfTaYQ2CyRH38m3bFx7lsS-of9SydzWzZpqG9LIVwKER9oq_6BrDGSfERX0I9TJuiST-1JdbOwRq32h0cY0FtXqAGw8JH2Uc__hAUeXcPVT-aIHNe1mpH_iShy0HyYBHBHAVeI686nAJRVdR64T-ib01w4q8WwpBvs5spHSZNT7Xp4eRS-wQIDAQABo4IEkjCCBI4wgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUwePRqNgumGplFm26a52kFZSqUmMwHwYDVR0jBBgwFoAU_Ow-26p8H4IeBbihBvlD5wKzCrkwggGyBgNVHR8EggGpMIIBpTBpoGegZYZjaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMGugaaBnhmVodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NybHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS83My9jdXJyZW50LmNybDBaoFigVoZUaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzczL2N1cnJlbnQuY3JsMG-gbaBrhmlodHRwOi8vY2NtZWVhc3R1czJwa2kuZWFzdHVzMi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVlYXN0dXMyaWNhMDEvNzMvY3VycmVudC5jcmwwggG3BggrBgEFBQcBAQSCAakwggGlMGwGCCsGAQUFBzAChmBodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwbgYIKwYBBQUHMAKGYmh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY2FjZXJ0cy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxL2NlcnQuY2VyMF0GCCsGAQUFBzAChlFodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwZgYIKwYBBQUHMAKGWmh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMTANBgkqhkiG9w0BAQsFAAOCAQEABNWUmsU3kC0jt2fJ9ckIR3RNIVAtLuE-xxl6T1BzxTeySAS0J-OWa-u5aQORlpcBDiQGeITvEWJoBx9mNXjbvxWZZQOPuz5ne3fU2UqQ063pIWLyoiWQP_pdKjC5_L_sSqyyhIwD-PW-hAuocylbzGO1e4xmbRemgFtUzdXDSqxF9lHf_GVfQDAhfF6RhgIkktrd1n9mzAWMTHEaGOVQ6DRkuzqcIDeEjttW_0z4F8CVQUkEls6ZUW-2YdacbccGgUKR0c0MHGhuPdYbn-vHwmzBBlmYEv3ohsEIMXTiuiU-ijE-u9vgjd4I2Twy6zcgLkTf-kpAUNcMl742Vsmaxg&s=OeQ_wGnACKjFX3V8wT9imNNodTkqL9hWNHBOGhXJlN0BRJfn2ElbSez7RQlXGsMWmpnkcmggntA3EWa8OFXcw6l3HcXpnDVyClvkR1A4ya4ZHM9qdv5DMDT0BcYYiig6ect_CRymSbCtddI2Qqx4lpTomu43kndnMJymEYpffrbV3DUzZyHkFgwJWfNRWG1Q1A47LEGfdbO3dNc7NZ1DKVTqzKhVexqd6Bg0lE-P72w_mf6B4O_BeFx6PUHsUm8NbjDaH0gIG6o32rTSJ7SicJZGJBAeW4HFarQgV_XPgSC_zu66ZY-jSVT0W7oRB84PpRfO2c1sEs-0-DRmugJztw&h=_QDWheFUR1m54cyOD3hbY0kX_FVN4s_x5VzRNY9xAHk - response: - body: - string: '{"value":[{"peeringLocation":"DataPathLocation1","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit01","name":"circuit01","connectionName":"ExRConnection-centraluseuap-1772182537248"}],"status":"Completed","startTime":"4/6/2026 - 10:01:07 AM","endTime":"4/6/2026 10:03:36 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772182537248","name":"ExRConnection-centraluseuap-1772182537248","status":"Connected","lastUpdatedTime":"4/6/2026 - 10:03:36 AM"}],"testGuid":"ffe2dc82-b9f7-46dc-ace0-033d2a12b9f9","testType":"SingleSiteFailover","issues":[]},{"peeringLocation":"DataPathLocation2","circuits":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteCircuits/circuit02","name":"circuit02","connectionName":"ExRConnection-centraluseuap-1772183583607"}],"status":"Completed","startTime":"3/2/2026 - 11:07:47 AM","endTime":"3/2/2026 11:20:43 AM","connections":[{"nrpResourceUri":"https://centraluseuap.network.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/expressRouteConnections/ExRConnection-centraluseuap-1772183583607","name":"ExRConnection-centraluseuap-1772183583607","status":"Connected","lastUpdatedTime":"3/2/2026 - 11:20:43 AM"}],"testGuid":"3c09b34c-45ae-4357-b1d6-5848f35734ab","testType":"SingleSiteFailover","issues":[]}]}' - headers: - azure-asyncnotification: - - Enabled - cache-control: - - no-cache - content-length: - - '1951' - content-type: - - application/json; charset=utf-8 - date: - - Mon, 06 Apr 2026 10:04:01 GMT - expires: - - '-1' - location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/6492cff3-9942-44f2-89f5-7723f56383f8?api-version=2025-07-01&t=639110666421720419&c=MIIIJzCCBw-gAwIBAgIRAIsT8dMMo6WkW2NCqWyZcXowDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UEAxMrQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgV0NVUyBDQSAwMTAeFw0yNjAyMjQxMjQwMzhaFw0yNjA4MTkxODQwMzhaMEAxPjA8BgNVBAMTNWFzeW5jb3BlcmF0aW9uc2lnbmluZ2NlcnRpZmljYXRlLm1hbmFnZW1lbnQuYXp1cmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrjcYB8xdPGqamRPa2KEv3SJ3GirVITkjFOCU7haZQ1rdKe7GRjqJ29v6ptobpGSzhwXOXskM7pzYPP-8SUx6TT02brY1xVrxe1em7lf0m_QSM_H9N-WLy8miDU3SdGMrg920oQN6pAkqNZiRoJnU1gKcFdkGIKWxB1nDegi4QYdczKSYHTF6IpF2RJXaOC7HM1-pQB4EBlfLhUfzHR9lFtoThIt0HmRB2M3mrUUQ9vBpmNaKRZYjYpdBm26Iqj-91GCpCc9ASf-J9uABxnt6Uiw_59nx9eZpq2HBkV5X9Fdx8k8NynGnQC82Op0gd2fau5gAJaG7aJCzMgk7OennQIDAQABo4IFJDCCBSAwgZ0GA1UdIASBlTCBkjAMBgorBgEEAYI3ewEBMGYGCisGAQQBgjd7AgIwWDBWBggrBgEFBQcCAjBKHkgAMwAzAGUAMAAxADkAMgAxAC0ANABkADYANAAtADQAZgA4AGMALQBhADAANQA1AC0ANQBiAGQAYQBmAGYAZAA1AGUAMwAzAGQwDAYKKwYBBAGCN3sDAjAMBgorBgEEAYI3ewQCMAwGA1UdEwEB_wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB_wQEAwIFoDAdBgNVHQ4EFgQUIEy-B50P_D3827J7l5EmpTRsKDUwHwYDVR0jBBgwFoAUFNI34PbWfX7djbq6ZasElCXglh0wggH7BgNVHR8EggHyMIIB7jB7oHmgd4Z1aHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMH2ge6B5hndodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NybHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS80Ny9jdXJyZW50LmNybDBsoGqgaIZmaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIGBoH-gfYZ7aHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzQ3L2N1cnJlbnQuY3JsMIICAAYIKwYBBQUHAQEEggHyMIIB7jB-BggrBgEFBQcwAoZyaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMIGABggrBgEFBQcwAoZ0aHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwbwYIKwYBBQUHMAKGY2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjB4BggrBgEFBQcwAoZsaHR0cDovL2NjbWV3ZXN0Y2VudHJhbHVzcGtpLndlc3RjZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21ld2VzdGNlbnRyYWx1c2ljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQA9btRITKA15tsninIeuo-WyaMUCUoEfUsV0QncR7z7vL7vkoklZ7vpNVRseIAPdr38W5inoFg3rGPWThWuaODCtqQTp-8MfcgrIyAa0l8NgixFdask2Qr6S4OMKnAOw_VU2TEDCSEdTqs2vL9QgTb741oCLBOoyBojUXIjENFdKM1gZyx0mB-50aJnpb8GmjFh2MCYHo4WFiBLsjESc7yyXc1qord76lR36hBeNUkmvC3fwC8hzefThwSZIzu418FkGu23F80jFAv7RNFu01wXlMQ39W_RRz8Vo2bJ76WEERl1KR3EGxXFY5GqOcQkdaEdO6AdGS5A0IrOBqeA3wuH&s=E9TZIwmlKO8HVh8gutJjum-geWi6kLU4TuVgPglHtPNtbSfnEISZET5hv_DZtlYI4CepZQcL2XQYsHXZbx5L-uWu0UyWakeP-ZXnZr4nFOZhl-B8s92OXL1ZJbq1XNWtVkopgBu8_aeVbjpKKTzFCVdhATT-MpNBImD3vWMKhCiRFnC-gi0d8vaAZUjgaIhD5A2_LPx4Yln-81pVlm2wG0od_YaXP4DK99QqtjJi9QShulIcwUyww3X-Ibnp5zUqEa8_PceZma__pgf8lYfz3dt71lwLO8fVBLFvYapEtQK3Aez-Is1OFtx1aA3Wz7IJ-lY2I6AchnDodKT5dIH3hg&h=AayNz7qelIkQzmu45a48pD3-MQqvDw3yiI3lGohnz8U - pragma: - - no-cache - strict-transport-security: - - max-age=31536000; includeSubDomains - x-cache: - - CONFIG_NOCACHE - x-content-type-options: - - nosniff - x-ms-arm-service-request-id: - - a34587a6-47b3-4bdc-a8cb-73212a4c5408 - x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/jioindiawest/4e27695e-6422-464f-878a-be7da8a38991 - x-ms-ratelimit-remaining-subscription-global-reads: - - '16499' - x-ms-throttle-levels: - - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.1, - etc - x-msedge-ref: - - 'Ref A: 760962584D7D4DCD915BA540AF3BA49A Ref B: PNQ231110906034 Ref C: 2026-04-06T10:04:00Z' - status: - code: 200 - message: '' -- request: - body: null - headers: - Accept: - - application/json - Accept-Encoding: - - gzip, deflate - CommandName: - - network express-route gateway get-failover-single-test-detail - Connection: - - keep-alive - Content-Length: - - '0' - ParameterSetName: - - --resource-group --name --failover-test-id --peering-location - User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) - method: POST - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/bhavana-vwan-failover/providers/Microsoft.Network/expressRouteGateways/422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw/getFailoverSingleTestDetails?failoverTestId=e009d347-7d2c-4499-8ccd-6e5a03fa0f0d&peeringLocation=DataPathLocation1&api-version=2025-07-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967672107276&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=TquWAPB_vStuPR_ZqDpCdVyshfNwVB41DfSMT-bm3LtOBMve2dxZepOuv01ZpZftIhw8gIg7-qDj__fj8tZyiSOHAiK3jCArwJUOa5rTRD-DESj6829veZ701-cIW7mZnE5iDvPSbWXkx9KN_9WHqQquv9dGtdiA5doz9ff6ykIkKD0cjCw39NaSlBLnlWrt_PKqTIZj6mCssQlFCPrJ4nMXcaR-iUOr-Z3HHdDpiXprtgZDKYEwDjPgg3hIkx8HyHxYU7QKNEPBEaoAHJY-MblXTOXzZ9OWSceASmhkXcfP-PAGYY4EqT6zDnaXqSUQxgi6Wbz_6OsJe-DvGPykuQ&h=i-5firDD7bJzM9_kry1gQjBnWgXXhOnmRu-CleN6L1o response: body: string: 'null' @@ -500,11 +368,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:04:02 GMT + - Mon, 25 Aug 2025 05:32:56 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666432997023&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=Kixm9W4WTDBK5uGXOEOBB16snX0CvCGHS9xp5oD1HJjXe8Q3sSudh3ZAQld3g1HXzlmMRIkbv284ZZ05AhanT25xzyd7_Z1o-6Kq_4NUagEXx0DIxy6IB-PEGqqtGCVKAXu1BwVw3YCvs3qM4w0-hTZXQJuD-yzJC-uJzUR9lvXof4l0YoV6WaCLZ4IERewSmLPgMOZdgxP1NcLXTzRNMg1rdTd7FjE6VRkX_LF6hOxZvNYAq3s_uNmjhpJ8ZfgEhqZutASjpRx03SRmMbkF3WW2qNjdbSz_hmuL6m-lkncO2snYacKMDgBzOjQfM-HNAClo8sbOs1KoGEjH7iBinA&h=sovQH2XRAT4qkjvKgU1rWrd6C53-2BE62HNsj_oyVgE + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967776104557&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=mhZ1KQRXpOKw7Mn0ybjFnalaker53h7H9iqLyLzA2vRsYXtbGyDUBNXdm8cLOEiOY__NGPUSWHTckdJ-1xsJldG9ANIdcpDvReUZbJIiMUZQNGJxRco5mxgogSGToxWDOToncHIuySAMHRJA1pw0hPsvJ6xegUQXxYncg8eF1LzOuyp9Ty6PlAH6ek6lX_oTuKLAzms7l51dGGfZzBzloXaUjwFlLbXm4DpVVtfGrwczSYIROXKdjnYi6G774cOaDvo6aeaWVzGAnKkimlTNSzIa-jLo7ttXMvVcBQNjj0F02tHWu_mfN4MvIjZJyDr8IoPasSfibkAi1j-N_cQKfw&h=9hWiDI8-fMgbrAP4BiH0zZHdeogg3wSiBlsDyfijOHg pragma: - no-cache strict-transport-security: @@ -514,20 +382,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/centraluseuap/d05aeb42-92e3-4d09-a72d-c583e6c70c61 - x-ms-ratelimit-remaining-subscription-writes: - - '799' - x-ms-throttle-levels: - - operationConcurrencyPct=0.7, subscriptionWriteRatePct=0.6, etc - x-ms-throttling-version: - - v2 + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/db0216d9-cc5a-4574-8567-4de6aefddb18 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' x-msedge-ref: - - 'Ref A: C6756A4E35404AEDBA5316B70A3BE612 Ref B: PNQ231110909062 Ref C: 2026-04-06T10:04:02Z' + - 'Ref A: 539D3CC47A0D4FA9B242AEA9CC5B85B4 Ref B: CO6AA3150220021 Ref C: 2025-08-25T05:32:57Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -536,15 +400,16 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway get-failover-single-test-detail + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --failover-test-id --peering-location + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666432997023&c=MIIHwDCCBqigAwIBAgIRAOLyXYEFZxXyPR71BHOO_vwwDQYJKoZIhvcNAQELBQAwNTEzMDEGA1UEAxMqQ0NNRSBHMSBUTFMgUlNBIDIwNDggU0hBMjU2IDIwNDkgQ1VTIENBIDAxMB4XDTI2MDQwMzE2MTI0NloXDTI2MDYyODIyMTI0NlowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD6e0ItTZWgUb3SCvoGJ40HIXdmD22FsTh-YySWxx62vtKAPNyDx72LN1wymj8aFcB2ZZKpogPkOOsu8cJ0vIExMjHkkIGOGLzgduvpeNpPINLNW-9LFGbWXQbrOn1GtzI2ALdYobPxm4COOjNHFTwhv-WWO5JtmfB1mS83621vtQ0A8MgiWt59o-ownHIiYUvNpnGDUvqVb8WEgI68ZOlbenlLKFwTplUlAt8kgyWFZdZOtQJHjcgLT6vVDNLv_cXckq1ziw_Z398gOvqVBrgeyJQX5d6T6DqMSkQdgY-xLwGPxAr-sHUw6FbnzP8x7k7znvX_y37Zn6QIxLWtTA6BAgMBAAGjggS-MIIEujCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBS3hq7uo8pubisAA4YA32jngcNvmzAfBgNVHSMEGDAWgBT85FoKL4UO50S5B3N44NREB6IZETCCAcYGA1UdHwSCAb0wggG5MG6gbKBqhmhodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBwoG6gbIZqaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNC9jdXJyZW50LmNybDBfoF2gW4ZZaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jcmxzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxLzQvY3VycmVudC5jcmwwdKByoHCGbmh0dHA6Ly9jY21lY2VudHJhbHVzcGtpLmNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWVjZW50cmFsdXNpY2EwMS80L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACkoLECUYtlIP1-sMvjLp1o-hbkXDFVLTNmPkW-K43C3PF1Y_4gKz3mdnT2v5SElKPyNjp3tFE9FfM0F8s9y556fXvC4fny4IXsD7Rz_WhH4Qx447FeozInwy7HYf6xfSOzH-zaPR6JPh9HYRuBTlsFvRUYMUBx1x89kzaknoosIZPRiTfGE3qtmhxn-uPzitAprRJQREMnmVpjYsEYtZE4oq9Q5qDCME7ebzyay9NCG6Ila6bFTjvvTpbo6PETIay80CspdZ2Aao3UAa1vaeyx-StciwHmT0LD1zqExwog4NjGXPoL3f6FZby7ko-GY6kVgnziexLhn5CDmDULHThg&s=Kixm9W4WTDBK5uGXOEOBB16snX0CvCGHS9xp5oD1HJjXe8Q3sSudh3ZAQld3g1HXzlmMRIkbv284ZZ05AhanT25xzyd7_Z1o-6Kq_4NUagEXx0DIxy6IB-PEGqqtGCVKAXu1BwVw3YCvs3qM4w0-hTZXQJuD-yzJC-uJzUR9lvXof4l0YoV6WaCLZ4IERewSmLPgMOZdgxP1NcLXTzRNMg1rdTd7FjE6VRkX_LF6hOxZvNYAq3s_uNmjhpJ8ZfgEhqZutASjpRx03SRmMbkF3WW2qNjdbSz_hmuL6m-lkncO2snYacKMDgBzOjQfM-HNAClo8sbOs1KoGEjH7iBinA&h=sovQH2XRAT4qkjvKgU1rWrd6C53-2BE62HNsj_oyVgE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967776104557&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=mhZ1KQRXpOKw7Mn0ybjFnalaker53h7H9iqLyLzA2vRsYXtbGyDUBNXdm8cLOEiOY__NGPUSWHTckdJ-1xsJldG9ANIdcpDvReUZbJIiMUZQNGJxRco5mxgogSGToxWDOToncHIuySAMHRJA1pw0hPsvJ6xegUQXxYncg8eF1LzOuyp9Ty6PlAH6ek6lX_oTuKLAzms7l51dGGfZzBzloXaUjwFlLbXm4DpVVtfGrwczSYIROXKdjnYi6G774cOaDvo6aeaWVzGAnKkimlTNSzIa-jLo7ttXMvVcBQNjj0F02tHWu_mfN4MvIjZJyDr8IoPasSfibkAi1j-N_cQKfw&h=9hWiDI8-fMgbrAP4BiH0zZHdeogg3wSiBlsDyfijOHg response: body: string: 'null' @@ -558,11 +423,11 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:04:05 GMT + - Mon, 25 Aug 2025 05:33:08 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666455378307&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lKlLMnM-Bklqo2NxQWgVWus460X94tb1v3OoGps2_z7VR7UW-9FECsZcxWxbxy6tThlXzClAHc-M4x_q08O4BtLwFwud9FXc703HCeyuidq-1NrEVJxp8yXb7LRZv6LT30OgHLHG2N8BIcgZzIJ1sf3ebdFPsfjXNG9MMMnJUhu56xw3_NzBj_HV-gfp3it0pOp00t8sByVfLBZmrNk1UKBEYGzZFnHZ8-CLx4Z1iQmVoo_Cn2GzGZJdL3FzawIPCsVUU74m4lT_NDOvXW7sIm9rV0g-1eEoISsBkOMmdd_5KrND6MCxsW5xXQS2ciwYRFMMjLSspjHBX2vnNU-KTw&h=XOAVPuQPDuQ2Xwy_2xiw1332s9vQyn5NGmGYSGZ0w4w + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967880112439&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=BDbzDyGV8RcGavGk26WI1KNOkYs0yQ-1Ek9n81oJv3fF-SmAqoOIxdMJb0HVdHFluIzllQ2qJnHnDx9qVJBd87wyCv8iDmOL5uhlLH6Cx6WxtpvNtynW2p6_FLXBPU-gZxXGp1VvfC2NKuC5KkW5I2Oy0T4sDOFaTm4Ui0cfQKkRq1uOllwojeAjsOZr0KgEeXsM_NBvRp-SFxH3OlQeMXshw_jRSjKfyIs1WWPEgWzUC7w-kXxCEzO14ZIy6RtK-iJVDyZMCimSqtib1BhHluLjhWcjJwjoTyTn7RhNFy7GKUI_gRjuPpZk2-Zw38nbEN68hCbH6y6-xzqJTk-0QQ&h=P2AB_9zoAnS7L2-o1knxZb1HzlLaG9JJj37Bf2nvhA8 pragma: - no-cache strict-transport-security: @@ -572,19 +437,16 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/633e9d79-96a8-4bd5-96c5-b8bd927dc90b + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/b7f7d22e-36a2-4782-b96d-4458a5557ed3 x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.3, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.2, - etc x-msedge-ref: - - 'Ref A: 3765712D87A644E6B9ED3206E58584B6 Ref B: PNQ231110908029 Ref C: 2026-04-06T10:04:03Z' + - 'Ref A: 865081012026492F9BE1A2B82ABAC951 Ref B: MWH011020808052 Ref C: 2025-08-25T05:33:07Z' status: code: 202 - message: '' + message: Accepted - request: body: null headers: @@ -593,33 +455,34 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - network express-route gateway get-failover-single-test-detail + - network vnet-gateway stop-site-failover-test Connection: - keep-alive ParameterSetName: - - --resource-group --name --failover-test-id --peering-location + - -g --virtual-network-gateway-name --peering-location --was-simulation-successful + --details User-Agent: - - AZURECLI/2.84.0 azsdk-python-core/1.38.0 Python/3.11.9 (Windows-10-10.0.26200-SP0) + - AZURECLI/2.76.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22631-SP0) method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666455378307&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=lKlLMnM-Bklqo2NxQWgVWus460X94tb1v3OoGps2_z7VR7UW-9FECsZcxWxbxy6tThlXzClAHc-M4x_q08O4BtLwFwud9FXc703HCeyuidq-1NrEVJxp8yXb7LRZv6LT30OgHLHG2N8BIcgZzIJ1sf3ebdFPsfjXNG9MMMnJUhu56xw3_NzBj_HV-gfp3it0pOp00t8sByVfLBZmrNk1UKBEYGzZFnHZ8-CLx4Z1iQmVoo_Cn2GzGZJdL3FzawIPCsVUU74m4lT_NDOvXW7sIm9rV0g-1eEoISsBkOMmdd_5KrND6MCxsW5xXQS2ciwYRFMMjLSspjHBX2vnNU-KTw&h=XOAVPuQPDuQ2Xwy_2xiw1332s9vQyn5NGmGYSGZ0w4w + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967880112439&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=BDbzDyGV8RcGavGk26WI1KNOkYs0yQ-1Ek9n81oJv3fF-SmAqoOIxdMJb0HVdHFluIzllQ2qJnHnDx9qVJBd87wyCv8iDmOL5uhlLH6Cx6WxtpvNtynW2p6_FLXBPU-gZxXGp1VvfC2NKuC5KkW5I2Oy0T4sDOFaTm4Ui0cfQKkRq1uOllwojeAjsOZr0KgEeXsM_NBvRp-SFxH3OlQeMXshw_jRSjKfyIs1WWPEgWzUC7w-kXxCEzO14ZIy6RtK-iJVDyZMCimSqtib1BhHluLjhWcjJwjoTyTn7RhNFy7GKUI_gRjuPpZk2-Zw38nbEN68hCbH6y6-xzqJTk-0QQ&h=P2AB_9zoAnS7L2-o1knxZb1HzlLaG9JJj37Bf2nvhA8 response: body: - string: '{"value":[{"peeringLocation":"DataPathLocation1","startTimeUTC":"2026-04-06T09:18:04","endTimeUTC":"2026-04-06T09:22:55","status":"Completed","attestation":false,"redundantRoutes":[],"nonRedundantRoutes":[],"wasSimulationSuccessful":true,"failoverConnectionDetails":[{"failoverConnectionName":"ExRConnection-centraluseuap-1772183583607","failoverLocation":"DataPathLocation1","isVerified":false}]}]}' + string: 'null' headers: azure-asyncnotification: - Enabled cache-control: - no-cache content-length: - - '399' + - '4' content-type: - application/json; charset=utf-8 date: - - Mon, 06 Apr 2026 10:04:16 GMT + - Mon, 25 Aug 2025 05:33:18 GMT expires: - '-1' location: - - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centraluseuap/operationResults/801d8e21-81d4-4663-a3ec-27c98b485097?api-version=2025-07-01&t=639110666569878829&c=MIIHwzCCBqugAwIBAgIQQrzen8ntyG23jnSRPkzJczANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMjI0MTMwOTQwWhcNMjYwODE5MTkwOTQwWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANFN8s4ngDrLhyu9UPUGTbvi15zX2MOJB99Exa7Xalivby6OECgDb8FmlvcLh8HtqmX6U8Fw8k0wiQ9v1zaOhHWCxze9DVWV9pFFyqffL6zv5F5WYulge39tn38dmjqTSFBYR3XT7loeFg26ONEZQs3Flm4CUdXvKA80QvsmJKcmgIq7MSAfwtnLFf-jRnK3Im5bMSmbCMtJB9eO7gbZdj5iD_GuHO48amAr2-VcysMUeqyI--4kMJl6ssk0YboJeBB0BMWOkr6vab89F8MaHWf3we90R8bNCgIzmSpP4VEG3JGkbe3ULTB1BWBqSUbeGDh8P5L0qCqOaxQaDX313DkCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFNwVJGfJMPzc2RBbGTua6wklbM9IMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNDUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS80NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzQ1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBACIH9hfxSpEtsdAKSp_0WUotERGSC6-Q1qeBuw5R1QCWA389wIkc1WBu2qsXVCm51rrAtouC7OzMpjfnxnm31jNWd1L8f7_gLkENYXrOX_2bGAefiYoRudnJf96h21yVV6WJgpPI-oxTQRWJzrTtaqg2ULc4QC_FU2Jf0m7Ix8Ge193CfHVGM-cEemx40raOySzyDqPZULyjOyKxMx1fK74BSk3qRwhrZ-dEpnNt2NFBd8HtkCty3omgswvqol_XzwGDllQIx53v1xrMCPIVGFuSe-0LLtlUSbzO1DK9dBPeZebPDgxERPvBFvlSSfosUR60r94dKlTec4t0-g_boqA&s=XlSxWUeAZ8qASLq4Et1xs6ajRSv1Tids84ddDhWEKtb78T9LliLXdKVGxIk2urBQBNYYXou2RWkFBX0_m_pjxjbvJnP9Cg-9j4Qy-CT_ik3gd_9hoJEA73-81KSzQ-P5xer3juHBUW0b4K_T3Lvupdk09eCNtMtJXYQ3aLTNSNFLrSBqB50Atett9MGD9NxZuWhswQoTDpwyFQwwFakhBpEpqIPnupKjuU317ncVJvZV5D_PbL0Q-EruJuVDTYwI48wny00qdkbClu00alE9N3qqsBRIIdDyjt5NunOz1RMUimAmZHs3EYrTd59XwgnMq6TbOvzIrik93S9m2WkQZg&h=4DtWKyHRrrMHzaq48cZ45MoYHaxGOmPyGb7pEJcVIxw + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus2euap/operationResults/c893191b-e4c3-490a-9cb1-01de916dfaf8?api-version=2024-05-01&t=638916967983910907&c=MIIIpTCCBo2gAwIBAgITFgGpymN7LTW4kGDY9AABAanKYzANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDMwHhcNMjUwNzE2MDY0NzU2WhcNMjYwMTEyMDY0NzU2WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTm5YrLmfx9BQfyqn0KlKU5oAoMO71ploN13WymwudXY4jancWivKtgBQUtClbNOMf8GYtxePPkFtxCfON6ynaA50b2GFHRrjRAHMFB49frm55UXml1ym0Wz3JH6bXBwGJBhpQkMn2aLk58hRpzNpxEu8BK4avf0oZczbk_PMUH85rY1z-QQUNFQb_nIO7v3SIOCK3CKt4GdAKztacTI1NAnA_-1QYq5xcwep6CETOHLmlB_JNwscGCDdFNyGB72czos_xXG50Xhzs81LE3w3j92c_7ddvO9ojBuiNMBdFbP7GW31DrqzglZVWg5GHxjEcuVEIKM8kcIdQ2s7z8aGkCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9BTTNQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAzKDEpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQU0zUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMygxKS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0FNM1BLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3J0MB0GA1UdDgQWBBTviIwcnAMMwKNPI0scxiwQPceQFTAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDMoMSkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBRIo61gdWpv7GDzaVXRALEyV_xs5DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7FilN5Nb2BMo0idhK0QI7CLur1vEiQDTx3r1PyBucoZKAhxeeSGSgzuFXBjtOGdl6KlaAyTE6thgbXA5VqVyLYuRnuvUDMFTX51g7bJmFMAwi3IsYN5OQ5fQkuPX3Ao0gysXGrQmU3uH3rbGlVWXLp9xDSUfHh3jfeoU0Q4cgn2VZBiXWIGMiSW0OI1ZQtmEAvtUUja-Za7Q8TrERfxJg1nnqfjm8pH78RqklGECDK_m93WbGutB81jiRb598PoEFLqatWtUWEOagPl1wHToKm4tfgg5pN24otf99UUJQrf6A8kHQVZhuyARbhm-_Y9HSN43NooeVkaEzxST2gsLitbuz9EW6djyVhce8jc4d89cfOQaamQ7wOpiwXusaP-u5Vh-mmGXqkJVn4g_pDI4iv6NGaCosqQodrbEwWjkxiG_jX08qhEuGUhw-vo0jXacuguanQ0ap7Rns1PSLEOSmOB0LlsacAuoBAAQasSIYAX1woGPttqGnuqoCxw6jclcJayt0x4q1URe4WhXuTzySAt-1OtDyzZrXnwfkNB-J1J0iocdL_DCgWGQa2MlPP9EZiR9ox-VqkrOPQAMZBqtP9tQacMeO-V3JqiNzdu8ZzGnJrVT0fbgiS5E3emSyi_rYbuKDR06QJurZseja_toZCirAeHMjBVtn2wNuaY6Rr&s=LWyshowfdfvMhNm1JgIKi1xatOcxJG5HeHhrJ8cJ1jDzJXJ_cNdwkT7_AMI5JFOQ-XHGtDAd7g3q8yW85ZY4uaUZrI8O1e3-THtTd7El8mD6R4XFKr-3i5VDvOwXo5ebFcLs8se3CNV3Nsw9ia9bqXgwHicrJ0sFRh_rUAbuJr0fjJwMCdfU8i4CwsQrwQfT_5pr2gQOTSl-MW8kp8Mw10KWMCLHtIhevCdPlVZWitY4oyFAxRusOuK9ZTi8rpfvNcIUCSxvlt_XGavQEsFvgR2AUNcR5U7tCvdPz4SD34xEBQfZihm01dk_85JtWhPJ_GMRbS2MzSmLShSMXd1DPg&h=DREDzZqQl-aTG8_W_kqnvSEzkdT0lBIFrlonMUSWB6c pragma: - no-cache strict-transport-security: @@ -629,17 +492,14 @@ interactions: x-content-type-options: - nosniff x-ms-arm-service-request-id: - - fbcbad36-9137-43ee-adc0-589b0eb7d5b4 + - 8934bbc0-4ff4-4002-ac0b-a43afa56cb68 x-ms-operation-identifier: - - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=fbf3350c-c79e-4c6d-bde8-a6e9513d1a1a/westindia/3ba90780-0911-4a72-9c6f-9ff79f811e3c + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=c6ad19c2-72f2-4346-a543-46c812a1a212/eastus/e344d5de-272e-4ce5-bdbb-241b0c79408a x-ms-ratelimit-remaining-subscription-global-reads: - '16499' - x-ms-throttle-levels: - - operationRatePct=0.2, operationConcurrencyPct=0.7, subscriptionReadRatePct=2.6, - etc x-msedge-ref: - - 'Ref A: F6595CEF49D4431B8AFD9A254426C89E Ref B: PNQ231110909060 Ref C: 2026-04-06T10:04:15Z' + - 'Ref A: C5E5E74D1F484D6281A71AD71E616129 Ref B: MWH011020807025 Ref C: 2025-08-25T05:33:18Z' status: code: 200 - message: '' + message: OK version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py index cea2fc87b2b..b7203e42db0 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py @@ -8947,10 +8947,12 @@ def test_network_vnet_gateway_get_routes_and_resiliency_information(self, resour class NetworkExpressRouteGatewayFailoverSimulationScenarioTest(ScenarioTest): @live_only() - def test_start_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER + def test_network_express_route_gateway_failover(self): # live_only as the express route is extremely expensive, contact service team for an available ER resource_group = "bhavana-vwan-failover" er_gateway_name = "422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw" peering_location = "DataPathLocation1" + test_guid = "fb5c66a6-6852-49d9-bf56-fc3e8d2f2a3b" + was_simulation_successful = True self.kwargs.update({ 'rg': resource_group, @@ -8966,17 +8968,9 @@ def test_start_site_failover_test(self): # live_only as the express route is ext # Validate that result is a string (per _schema_on_200 = AAZStrType()) self.assertIsInstance(result, dict) - - @live_only() - def test_stop_site_failover_test(self): # live_only as the express route is extremely expensive, contact service team for an available ER + import time - - time.sleep(2 * 60) # 120 seconds To wait for sometime before stopping the test failover - resource_group = "bhavana-vwan-failover" - er_gateway_name = "422dcfc236aa44f6838f556330b628e1-centraluseuap-er-gw" - peering_location = "DataPathLocation1" - test_guid = "e009d347-7d2c-4499-8ccd-6e5a03fa0f0d" - was_simulation_successful = True + time.sleep(2 * 60) # 120 seconds To wait for sometime before stopping the test failover # Construct failover test connection details failover_details = [ @@ -9037,6 +9031,7 @@ def test_stop_site_failover_test(self): # live_only as the express route is extr # Validate response structure self.assertIsInstance(single_test_result, dict) + class NetworkExpressRouteGatewayRoutesResiliencyScenarioTest(ScenarioTest): @live_only() # live_only as express route gateways require expensive resources