diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__cmd_group.py new file mode 100644 index 00000000000..e6eef068116 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__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-circuit", +) +class __CMDGroup(AAZCommandGroup): + """Manage Express Route Circuit + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__init__.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__init__.py new file mode 100644 index 00000000000..03ad5ccc58e --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/__init__.py @@ -0,0 +1,15 @@ +# -------------------------------------------------------------------------------------------- +# 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_circuit_link_failover_all_tests_detail import * +from ._get_circuit_link_failover_single_test_detail import * +from ._start_circuit_link_failover_test import * +from ._stop_circuit_link_failover_test import * diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_all_tests_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_all_tests_detail.py new file mode 100644 index 00000000000..2bdc811af63 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_all_tests_detail.py @@ -0,0 +1,264 @@ +# -------------------------------------------------------------------------------------------- +# 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-circuit get-circuit-link-failover-all-tests-detail", +) +class GetCircuitLinkFailoverAllTestsDetail(AAZCommand): + """This operation retrieves the details of all the failover tests performed on the ExpressRoute circuit for different peering locations + + :example: ExpressRouteCircuitLinkFailoverAllTestsDetails + az network express-route-circuit get-circuit-link-failover-all-tests-detail --resource-group rg1 --express-route-circuit-name erckt --failover-test-type LinkFailover --fetch-latest True + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutecircuits/{}/getcircuitlinkfailoveralltestsdetails", "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_circuit_name = AAZStrArg( + options=["--express-route-circuit-name"], + help="The name of the express route circuit.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.failover_test_type = AAZStrArg( + options=["--failover-test-type"], + help="The type of failover test", + required=True, + enum={"All": "All", "LinkFailover": "LinkFailover", "MultiSiteFailover": "MultiSiteFailover", "SingleSiteFailover": "SingleSiteFailover"}, + ) + _args_schema.fetch_latest = AAZBoolArg( + options=["--fetch-latest"], + help="Fetch only the latest tests for each peering location", + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteCircuitsGetCircuitLinkFailoverAllTestsDetails(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 ExpressRouteCircuitsGetCircuitLinkFailoverAllTestsDetails(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/expressRouteCircuits/{expressRouteCircuitName}/getCircuitLinkFailoverAllTestsDetails", + **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( + "expressRouteCircuitName", self.ctx.args.express_route_circuit_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( + "failoverTestType", self.ctx.args.failover_test_type, + required=True, + ), + **self.serialize_query_param( + "fetchLatest", self.ctx.args.fetch_latest, + 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.bgp_status = AAZListType( + serialized_name="bgpStatus", + flags={"read_only": True}, + ) + _element.circuit_test_category = AAZStrType( + serialized_name="circuitTestCategory", + flags={"read_only": True}, + ) + _element.end_time = AAZStrType( + serialized_name="endTime", + flags={"read_only": True}, + ) + _element.issues = AAZListType( + flags={"read_only": True}, + ) + _element.link_type = AAZStrType( + serialized_name="linkType", + 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}, + ) + _element.was_simulation_successful = AAZBoolType( + serialized_name="wasSimulationSuccessful", + flags={"read_only": True}, + ) + + bgp_status = cls._schema_on_200.Element.bgp_status + bgp_status.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.bgp_status.Element + _element.bgp_status_type = AAZStrType( + serialized_name="bgpStatusType", + flags={"read_only": True}, + ) + _element.check_time = AAZStrType( + serialized_name="checkTime", + flags={"read_only": True}, + ) + _element.link = AAZStrType() + _element.status = AAZStrType( + flags={"read_only": True}, + ) + + issues = cls._schema_on_200.Element.issues + issues.Element = AAZStrType() + + return cls._schema_on_200 + + +class _GetCircuitLinkFailoverAllTestsDetailHelper: + """Helper class for GetCircuitLinkFailoverAllTestsDetail""" + + +__all__ = ["GetCircuitLinkFailoverAllTestsDetail"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_single_test_detail.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_single_test_detail.py new file mode 100644 index 00000000000..fba7a6466bb --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_get_circuit_link_failover_single_test_detail.py @@ -0,0 +1,336 @@ +# -------------------------------------------------------------------------------------------- +# 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-circuit get-circuit-link-failover-single-test-detail", +) +class GetCircuitLinkFailoverSingleTestDetail(AAZCommand): + """This operation retrieves the details of a particular failover test performed on the circuit based on the test Guid + + :example: ExpressRouteCircuitLinkFailoverSingleTestDetails + az network express-route-circuit get-circuit-link-failover-single-test-detail --resource-group rg1 --express-route-circuit-name erckt --failover-test-id fe458ae8-d2ae-4520-a104-44bc233bde7e --link-type Primary --circuit-maintenance-category BgpDisconnect + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutecircuits/{}/getcircuitlinkfailoversingletestdetails", "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_circuit_name = AAZStrArg( + options=["--express-route-circuit-name"], + help="The name of the express route circuit.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.circuit_maintenance_category = AAZStrArg( + options=["--circuit-maintenance-category"], + help="The type of maintenance test category", + required=True, + enum={"ASPathPrepend": "ASPathPrepend", "BgpDisconnect": "BgpDisconnect"}, + ) + _args_schema.failover_test_id = AAZStrArg( + options=["--failover-test-id"], + help="The unique Guid value which identifies the test", + required=True, + ) + _args_schema.link_type = AAZStrArg( + options=["--link-type"], + help="The type of link on which failover test was performed", + required=True, + enum={"Primary": "Primary", "Secondary": "Secondary"}, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteCircuitsGetCircuitLinkFailoverSingleTestDetails(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 ExpressRouteCircuitsGetCircuitLinkFailoverSingleTestDetails(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/expressRouteCircuits/{expressRouteCircuitName}/getCircuitLinkFailoverSingleTestDetails", + **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( + "expressRouteCircuitName", self.ctx.args.express_route_circuit_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( + "circuitMaintenanceCategory", self.ctx.args.circuit_maintenance_category, + required=True, + ), + **self.serialize_query_param( + "failoverTestId", self.ctx.args.failover_test_id, + required=True, + ), + **self.serialize_query_param( + "linkType", self.ctx.args.link_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.bgp_status = AAZListType( + serialized_name="bgpStatus", + flags={"read_only": True}, + ) + _element.circuit_test_category = AAZStrType( + serialized_name="circuitTestCategory", + flags={"read_only": True}, + ) + _element.end_time = AAZStrType( + serialized_name="endTime", + flags={"read_only": True}, + ) + _element.is_simulation_verified = AAZBoolType( + serialized_name="isSimulationVerified", + flags={"read_only": True}, + ) + _element.link_type = AAZStrType( + serialized_name="linkType", + flags={"read_only": True}, + ) + _element.non_redundant_routes = AAZObjectType( + serialized_name="nonRedundantRoutes", + flags={"read_only": True}, + ) + _GetCircuitLinkFailoverSingleTestDetailHelper._build_schema_express_route_link_failover_route_list_read(_element.non_redundant_routes) + _element.redundant_routes = AAZObjectType( + serialized_name="redundantRoutes", + flags={"read_only": True}, + ) + _GetCircuitLinkFailoverSingleTestDetailHelper._build_schema_express_route_link_failover_route_list_read(_element.redundant_routes) + _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}, + ) + + bgp_status = cls._schema_on_200.Element.bgp_status + bgp_status.Element = AAZObjectType() + + _element = cls._schema_on_200.Element.bgp_status.Element + _element.bgp_status_type = AAZStrType( + serialized_name="bgpStatusType", + flags={"read_only": True}, + ) + _element.check_time = AAZStrType( + serialized_name="checkTime", + flags={"read_only": True}, + ) + _element.link = AAZStrType() + _element.status = AAZStrType( + flags={"read_only": True}, + ) + + return cls._schema_on_200 + + +class _GetCircuitLinkFailoverSingleTestDetailHelper: + """Helper class for GetCircuitLinkFailoverSingleTestDetail""" + + _schema_express_route_link_failover_route_list_read = None + + @classmethod + def _build_schema_express_route_link_failover_route_list_read(cls, _schema): + if cls._schema_express_route_link_failover_route_list_read is not None: + _schema.before_simulation = cls._schema_express_route_link_failover_route_list_read.before_simulation + _schema.during_simulation = cls._schema_express_route_link_failover_route_list_read.during_simulation + return + + cls._schema_express_route_link_failover_route_list_read = _schema_express_route_link_failover_route_list_read = AAZObjectType( + flags={"read_only": True} + ) + + express_route_link_failover_route_list_read = _schema_express_route_link_failover_route_list_read + express_route_link_failover_route_list_read.before_simulation = AAZListType( + serialized_name="beforeSimulation", + ) + express_route_link_failover_route_list_read.during_simulation = AAZListType( + serialized_name="duringSimulation", + ) + + before_simulation = _schema_express_route_link_failover_route_list_read.before_simulation + before_simulation.Element = AAZObjectType() + cls._build_schema_express_route_link_failover_route_read(before_simulation.Element) + + during_simulation = _schema_express_route_link_failover_route_list_read.during_simulation + during_simulation.Element = AAZObjectType() + cls._build_schema_express_route_link_failover_route_read(during_simulation.Element) + + _schema.before_simulation = cls._schema_express_route_link_failover_route_list_read.before_simulation + _schema.during_simulation = cls._schema_express_route_link_failover_route_list_read.during_simulation + + _schema_express_route_link_failover_route_read = None + + @classmethod + def _build_schema_express_route_link_failover_route_read(cls, _schema): + if cls._schema_express_route_link_failover_route_read is not None: + _schema.next_hop = cls._schema_express_route_link_failover_route_read.next_hop + _schema.primary_as_path = cls._schema_express_route_link_failover_route_read.primary_as_path + _schema.route = cls._schema_express_route_link_failover_route_read.route + _schema.secondary_as_path = cls._schema_express_route_link_failover_route_read.secondary_as_path + return + + cls._schema_express_route_link_failover_route_read = _schema_express_route_link_failover_route_read = AAZObjectType() + + express_route_link_failover_route_read = _schema_express_route_link_failover_route_read + express_route_link_failover_route_read.next_hop = AAZStrType( + serialized_name="nextHop", + ) + express_route_link_failover_route_read.primary_as_path = AAZStrType( + serialized_name="primaryASPath", + ) + express_route_link_failover_route_read.route = AAZStrType() + express_route_link_failover_route_read.secondary_as_path = AAZStrType( + serialized_name="secondaryASPath", + ) + + _schema.next_hop = cls._schema_express_route_link_failover_route_read.next_hop + _schema.primary_as_path = cls._schema_express_route_link_failover_route_read.primary_as_path + _schema.route = cls._schema_express_route_link_failover_route_read.route + _schema.secondary_as_path = cls._schema_express_route_link_failover_route_read.secondary_as_path + + +__all__ = ["GetCircuitLinkFailoverSingleTestDetail"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_start_circuit_link_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_start_circuit_link_failover_test.py new file mode 100644 index 00000000000..99f41f21285 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_start_circuit_link_failover_test.py @@ -0,0 +1,202 @@ +# -------------------------------------------------------------------------------------------- +# 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-circuit start-circuit-link-failover-test", +) +class StartCircuitLinkFailoverTest(AAZCommand): + """This operation starts failover simulation on the circuit for the specified link type + + :example: ExpressRouteCircuitStartLinkFailoverSimulation + az network express-route-circuit start-circuit-link-failover-test --resource-group rg1 --express-route-circuit-name erckt --link-type Primary --circuit-maintenance-category BgpDisconnect + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutecircuits/{}/startcircuitlinkfailovertest", "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_circuit_name = AAZStrArg( + options=["--express-route-circuit-name"], + help="The name of the express route circuit.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[A-Za-z0-9_]+", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.circuit_maintenance_category = AAZStrArg( + options=["--circuit-maintenance-category"], + help="The type of maintenance that can occur during an ExpressRoute Circuit failover test", + required=True, + enum={"ASPathPrepend": "ASPathPrepend", "BgpDisconnect": "BgpDisconnect"}, + ) + _args_schema.link_type = AAZStrArg( + options=["--link-type"], + help="The type of link on which failover test was performed", + required=True, + enum={"Primary": "Primary", "Secondary": "Secondary"}, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteCircuitsStartCircuitLinkFailoverTest(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 ExpressRouteCircuitsStartCircuitLinkFailoverTest(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/expressRouteCircuits/{expressRouteCircuitName}/startCircuitLinkFailoverTest", + **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( + "expressRouteCircuitName", self.ctx.args.express_route_circuit_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( + "circuitMaintenanceCategory", self.ctx.args.circuit_maintenance_category, + required=True, + ), + **self.serialize_query_param( + "linkType", self.ctx.args.link_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 = AAZStrType() + + return cls._schema_on_200 + + +class _StartCircuitLinkFailoverTestHelper: + """Helper class for StartCircuitLinkFailoverTest""" + + +__all__ = ["StartCircuitLinkFailoverTest"] diff --git a/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_stop_circuit_link_failover_test.py b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_stop_circuit_link_failover_test.py new file mode 100644 index 00000000000..6a9ba1c61ba --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/aaz/latest/network/express_route_circuit/_stop_circuit_link_failover_test.py @@ -0,0 +1,229 @@ +# -------------------------------------------------------------------------------------------- +# 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-circuit stop-circuit-link-failover-test", +) +class StopCircuitLinkFailoverTest(AAZCommand): + """This operation stops an ongoing failover simulation on the circuit for the specified link type + + :example: ExpressRouteCircuitStopLinkFailoverSimulation + az network express-route-circuit stop-circuit-link-failover-test --resource-group rg1 --express-route-circuit-name erckt --circuit-test-category BgpDisconnect --link-type Primary --was-simulation-successful True --is-verified True + """ + + _aaz_info = { + "version": "2025-07-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.network/expressroutecircuits/{}/stopcircuitlinkfailovertest", "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_circuit_name = AAZStrArg( + options=["--express-route-circuit-name"], + help="The name of the express route circuit.", + 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.circuit_test_category = AAZStrArg( + options=["--circuit-test-category"], + arg_group="StopParameters", + help="The type of maintenance test category", + required=True, + enum={"ASPathPrepend": "ASPathPrepend", "BgpDisconnect": "BgpDisconnect"}, + ) + _args_schema.is_verified = AAZBoolArg( + options=["--is-verified"], + arg_group="StopParameters", + help="Whether the customer was able to establish connectivity through this failover link or not", + required=True, + ) + _args_schema.link_type = AAZStrArg( + options=["--link-type"], + arg_group="StopParameters", + help="The type of link on which failover test was performed", + required=True, + enum={"Primary": "Primary", "Secondary": "Secondary"}, + ) + _args_schema.was_simulation_successful = AAZBoolArg( + options=["--was-simulation-successful"], + arg_group="StopParameters", + help="Whether the failover simulation was successful or not", + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.ExpressRouteCircuitsStopCircuitLinkFailoverTest(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 ExpressRouteCircuitsStopCircuitLinkFailoverTest(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/expressRouteCircuits/{expressRouteCircuitName}/stopCircuitLinkFailoverTest", + **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( + "expressRouteCircuitName", self.ctx.args.express_route_circuit_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("circuitTestCategory", AAZStrType, ".circuit_test_category", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("isVerified", AAZBoolType, ".is_verified", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("linkType", AAZStrType, ".link_type", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("wasSimulationSuccessful", AAZBoolType, ".was_simulation_successful", typ_kwargs={"flags": {"required": True}}) + + 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 _StopCircuitLinkFailoverTestHelper: + """Helper class for StopCircuitLinkFailoverTest""" + + +__all__ = ["StopCircuitLinkFailoverTest"]