# Buggy code
def load_command_table(self, _):
    # region Command Types
    network_ag_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.application_gateways_operations#ApplicationGatewaysOperations.{}",
        client_factory=cf_application_gateways,
    )

    network_util = CliCommandType(
        operations_tmpl="azure.cli.command_modules.network._util#{}",
        client_factory=None,
    )

    network_asg_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.application_security_groups_operations#ApplicationSecurityGroupsOperations.{}",
        client_factory=cf_application_security_groups,
    )

    network_dns_zone_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.dns.operations.zones_operations#ZonesOperations.{}",
        client_factory=cf_dns_mgmt_zones,
    )

    network_dns_record_set_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.dns.operations.record_sets_operations#RecordSetsOperations.{}",
        client_factory=cf_dns_mgmt_record_sets,
    )

    network_endpoint_service_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.available_endpoint_services_operations#AvailableEndpointServicesOperations.{}",
        client_factory=cf_endpoint_services,
        min_api="2017-06-01",
    )

    network_er_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuits_operations#ExpressRouteCircuitsOperations.{}",
        client_factory=cf_express_route_circuits,
        min_api="2016-09-01",
    )

    network_erca_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuit_authorizations_operations#ExpressRouteCircuitAuthorizationsOperations.{}",
        client_factory=cf_express_route_circuit_authorizations,
        min_api="2016-09-01",
    )

    network_ersp_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_service_providers_operations#ExpressRouteServiceProvidersOperations.{}",
        client_factory=cf_express_route_service_providers,
        min_api="2016-09-01",
    )

    network_er_peering_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuit_peerings_operations#ExpressRouteCircuitPeeringsOperations.{}",
        client_factory=cf_express_route_circuit_peerings,
    )

    network_lb_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.load_balancers_operations#LoadBalancersOperations.{}",
        client_factory=cf_load_balancers,
    )

    network_lgw_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.local_network_gateways_operations#LocalNetworkGatewaysOperations.{}",
        client_factory=cf_local_network_gateways,
    )

    network_nic_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_interfaces_operations#NetworkInterfacesOperations.{}",
        client_factory=cf_network_interfaces,
    )

    network_nsg_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_security_groups_operations#NetworkSecurityGroupsOperations.{}",
        client_factory=cf_network_security_groups,
    )

    network_nsg_rule_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.security_rules_operations#SecurityRulesOperations.{}",
        client_factory=cf_security_rules,
    )

    network_public_ip_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.public_ip_addresses_operations#PublicIPAddressesOperations.{}",
        client_factory=cf_public_ip_addresses,
    )

    network_rf_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations#RouteFiltersOperations.{}",
        client_factory=cf_route_filters,
        min_api="2016-12-01",
    )

    network_rfr_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations#RouteFilterRulesOperations.{}",
        client_factory=cf_route_filter_rules,
        min_api="2016-12-01",
    )

    network_rt_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.route_tables_operations#RouteTablesOperations.{}",
        client_factory=cf_route_tables,
    )

    network_subnet_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.subnets_operations#SubnetsOperations.{}",
        client_factory=cf_subnets,
    )

    network_tmp_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.trafficmanager.operations.profiles_operations#ProfilesOperations.{}",
        client_factory=cf_traffic_manager_mgmt_profiles,
    )

    network_tme_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.trafficmanager.operations.endpoints_operations#EndpointsOperations.{}",
        client_factory=cf_traffic_manager_mgmt_endpoints,
    )

    network_vgw_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_gateways_operations#VirtualNetworkGatewaysOperations.{}",
        client_factory=cf_virtual_network_gateways,
    )

    network_vnet_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_networks_operations#VirtualNetworksOperations.{}",
        client_factory=cf_virtual_networks,
    )

    network_vnet_peering_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_peerings_operations#VirtualNetworkPeeringsOperations.{}",
        client_factory=cf_virtual_network_peerings,
    )

    network_vpn_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_gateway_connections_operations#VirtualNetworkGatewayConnectionsOperations.{}",
        client_factory=cf_virtual_network_gateway_connections,
    )

    network_watcher_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_watchers_operations#NetworkWatchersOperations.{}",
        client_factory=cf_network_watcher,
    )

    network_watcher_pc_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.packet_captures_operations#PacketCapturesOperations.{}",
        client_factory=cf_packet_capture,
    )

    # endregion

    # region NetworkRoot
    usage_path = "azure.mgmt.network.operations.usages_operations#UsagesOperations.{}"
    with self.command_group("network") as g:
        g.command(
            "list-usages",
            "list",
            operations_tmpl=usage_path,
            client_factory=cf_usages,
            transform=transform_network_usage_list,
            table_transformer=transform_network_usage_table,
        )

    # endregion

    # region ApplicationGateways
    with self.command_group("network application-gateway", network_ag_sdk) as g:
        g.custom_command(
            "create",
            "create_application_gateway",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            no_wait_param="no_wait",
            table_transformer=deployment_validate_table_format,
            validator=process_ag_create_namespace,
        )
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_application_gateways")
        g.command("start", "start")
        g.command("stop", "stop")
        g.command("show-backend-health", "backend_health", min_api="2016-09-01")
        g.generic_update_command(
            "update", no_wait_param="raw", custom_func_name="update_application_gateway"
        )
        g.generic_wait_command("wait")

    subresource_properties = [
        {"prop": "authentication_certificates", "name": "auth-cert"},
        {"prop": "ssl_certificates", "name": "ssl-cert"},
        {"prop": "frontend_ip_configurations", "name": "frontend-ip"},
        {"prop": "frontend_ports", "name": "frontend-port"},
        {"prop": "backend_address_pools", "name": "address-pool"},
        {
            "prop": "backend_http_settings_collection",
            "name": "http-settings",
            "validator": process_ag_http_settings_create_namespace,
        },
        {
            "prop": "http_listeners",
            "name": "http-listener",
            "validator": process_ag_listener_create_namespace,
        },
        {
            "prop": "request_routing_rules",
            "name": "rule",
            "validator": process_ag_rule_create_namespace,
        },
        {"prop": "probes", "name": "probe"},
        {
            "prop": "url_path_maps",
            "name": "url-path-map",
            "validator": process_ag_url_path_map_create_namespace,
        },
    ]

    def _make_singular(value):
        try:
            if value.endswith("ies"):
                value = value[:-3] + "y"
            elif value.endswith("s"):
                value = value[:-1]
            return value
        except AttributeError:
            return value

    for kwargs in subresource_properties:
        alias = kwargs["name"]
        subresource = kwargs["prop"]
        create_validator = kwargs.get("validator", None)
        with self.command_group(
            "network application-gateway {}".format(alias), network_util
        ) as g:
            g.command(
                "list",
                list_network_resource_property("application_gateways", subresource),
            )
            g.command(
                "show",
                get_network_resource_property_entry(
                    "application_gateways", subresource
                ),
                exception_handler=empty_on_404,
            )
            g.command(
                "delete",
                delete_network_resource_property_entry(
                    "application_gateways", subresource
                ),
                no_wait_param="no_wait",
            )
            g.custom_command(
                "create",
                "create_ag_{}".format(_make_singular(subresource)),
                no_wait_param="no_wait",
                validator=create_validator,
            )
            g.generic_update_command(
                "update",
                command_type=network_ag_sdk,
                no_wait_param="raw",
                custom_func_name="update_ag_{}".format(_make_singular(subresource)),
                child_collection_prop_name=subresource,
                validator=create_validator,
            )

    with self.command_group(
        "network application-gateway redirect-config",
        network_util,
        min_api="2017-06-01",
    ) as g:
        subresource = "redirect_configurations"
        g.command(
            "list", list_network_resource_property("application_gateways", subresource)
        )
        g.command(
            "show",
            get_network_resource_property_entry("application_gateways", subresource),
            exception_handler=empty_on_404,
        )
        g.command(
            "delete",
            delete_network_resource_property_entry("application_gateways", subresource),
            no_wait_param="no_wait",
        )
        g.custom_command(
            "create",
            "create_ag_{}".format(_make_singular(subresource)),
            no_wait_param="no_wait",
            doc_string_source="ApplicationGatewayRedirectConfiguration",
        )
        g.generic_update_command(
            "update",
            command_type=network_ag_sdk,
            client_factory=cf_application_gateways,
            no_wait_param="raw",
            custom_func_name="update_ag_{}".format(_make_singular(subresource)),
            child_collection_prop_name=subresource,
            doc_string_source="ApplicationGatewayRedirectConfiguration",
        )

    with self.command_group("network application-gateway ssl-policy") as g:
        g.custom_command(
            "set",
            "set_ag_ssl_policy_2017_06_01",
            min_api="2017-06-01",
            no_wait_param="no_wait",
            validator=process_ag_ssl_policy_set_namespace,
            doc_string_source="ApplicationGatewaySslPolicy",
        )
        g.custom_command(
            "set",
            "set_ag_ssl_policy_2017_03_01",
            max_api="2017-03-01",
            no_wait_param="no_wait",
            validator=process_ag_ssl_policy_set_namespace,
        )
        g.custom_command("show", "show_ag_ssl_policy", exception_handler=empty_on_404)

    with self.command_group(
        "network application-gateway ssl-policy", network_ag_sdk, min_api="2017-06-01"
    ) as g:
        g.command("list-options", "list_available_ssl_options")
        g.command("predefined list", "list_available_ssl_predefined_policies")
        g.command("predefined show", "get_ssl_predefined_policy")

    with self.command_group("network application-gateway url-path-map rule") as g:
        g.custom_command(
            "create",
            "create_ag_url_path_map_rule",
            no_wait_param="no_wait",
            validator=process_ag_url_path_map_rule_create_namespace,
        )
        g.custom_command(
            "delete", "delete_ag_url_path_map_rule", no_wait_param="no_wait"
        )

    with self.command_group("network application-gateway waf-config") as g:
        g.custom_command(
            "set",
            "set_ag_waf_config_2017_03_01",
            min_api="2017-03-01",
            no_wait_param="no_wait",
        )
        g.custom_command(
            "set",
            "set_ag_waf_config_2016_09_01",
            max_api="2016-09-01",
            no_wait_param="no_wait",
        )
        g.custom_command("show", "show_ag_waf_config", exception_handler=empty_on_404)
        g.custom_command(
            "list-rule-sets",
            "list_ag_waf_rule_sets",
            min_api="2017-03-01",
            client_factory=cf_application_gateways,
            table_transformer=transform_waf_rule_sets_table_output,
        )

    # endregion

    # region ApplicationSecurityGroups
    with self.command_group(
        "network asg",
        network_asg_sdk,
        client_factory=cf_application_security_groups,
        min_api="2017-09-01",
    ) as g:
        g.custom_command("create", "create_asg")
        g.command("show", "get")
        g.command("list", "list_all")
        g.command("delete", "delete")
        g.generic_update_command("update", custom_func_name="update_asg")

    # endregion

    # region DNS
    with self.command_group("network dns zone", network_dns_zone_sdk) as g:
        g.command("delete", "delete", confirmation=True)
        g.command(
            "show",
            "get",
            table_transformer=transform_dns_zone_table_output,
            exception_handler=empty_on_404,
        )
        g.custom_command(
            "list", "list_dns_zones", table_transformer=transform_dns_zone_table_output
        )
        g.custom_command("import", "import_zone")
        g.custom_command("export", "export_zone")
        g.custom_command("create", "create_dns_zone", client_factory=cf_dns_mgmt_zones)
        g.generic_update_command("update")

    with self.command_group("network dns record-set") as g:
        g.custom_command(
            "list",
            "list_dns_record_set",
            client_factory=cf_dns_mgmt_record_sets,
            transform=transform_dns_record_set_output,
        )

    for record in ["a", "aaaa", "mx", "ns", "ptr", "srv", "txt", "caa"]:
        with self.command_group(
            "network dns record-set {}".format(record), network_dns_record_set_sdk
        ) as g:
            g.command(
                "show",
                "get",
                transform=transform_dns_record_set_output,
                exception_handler=empty_on_404,
            )
            g.command("delete", "delete", confirmation=True)
            g.custom_command(
                "list",
                "list_dns_record_set",
                client_factory=cf_dns_mgmt_record_sets,
                transform=transform_dns_record_set_output,
                table_transformer=transform_dns_record_set_table_output,
            )
            g.custom_command(
                "create",
                "create_dns_record_set",
                transform=transform_dns_record_set_output,
                doc_string_source="azure.mgmt.dns.operations#RecordSetsOperations.create_or_update",
            )
            g.custom_command(
                "add-record",
                "add_dns_{}_record".format(record),
                transform=transform_dns_record_set_output,
            )
            g.custom_command(
                "remove-record",
                "remove_dns_{}_record".format(record),
                transform=transform_dns_record_set_output,
            )
            g.generic_update_command(
                "update",
                custom_func_name="update_dns_record_set",
                transform=transform_dns_record_set_output,
            )

    with self.command_group(
        "network dns record-set soa", network_dns_record_set_sdk
    ) as g:
        g.command(
            "show",
            "get",
            transform=transform_dns_record_set_output,
            exception_handler=empty_on_404,
        )
        g.custom_command(
            "update", "update_dns_soa_record", transform=transform_dns_record_set_output
        )

    with self.command_group(
        "network dns record-set cname", network_dns_record_set_sdk
    ) as g:
        g.command(
            "show",
            "get",
            transform=transform_dns_record_set_output,
            exception_handler=empty_on_404,
        )
        g.command("delete", "delete")
        g.custom_command(
            "list",
            "list_dns_record_set",
            client_factory=cf_dns_mgmt_record_sets,
            transform=transform_dns_record_set_output,
            table_transformer=transform_dns_record_set_table_output,
        )
        g.custom_command(
            "create",
            "create_dns_record_set",
            transform=transform_dns_record_set_output,
            doc_string_source="azure.mgmt.dns.operations#RecordSetsOperations.create_or_update",
        )
        g.custom_command(
            "set-record",
            "add_dns_cname_record",
            transform=transform_dns_record_set_output,
        )
        g.custom_command(
            "remove-record",
            "remove_dns_cname_record",
            transform=transform_dns_record_set_output,
        )

    # endregion

    # region ExpressRoutes
    with self.command_group("network express-route", network_er_sdk) as g:
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("get-stats", "get_stats")
        g.command("list-arp-tables", "list_arp_table")
        g.command("list-route-tables", "list_routes_table")
        g.custom_command("create", "create_express_route", no_wait_param="no_wait")
        g.custom_command("list", "list_express_route_circuits")
        g.command("list-service-providers", "list", command_type=network_ersp_sdk)
        g.generic_update_command(
            "update", custom_func_name="update_express_route", no_wait_param="raw"
        )
        g.generic_wait_command("wait")

    with self.command_group("network express-route auth", network_erca_sdk) as g:
        g.command("create", "create_or_update", validator=process_auth_create_namespace)
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")

    with self.command_group(
        "network express-route peering", network_er_peering_sdk
    ) as g:
        g.custom_command(
            "create",
            "create_express_route_peering",
            client_factory=cf_express_route_circuit_peerings,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.generic_update_command(
            "update",
            setter_arg_name="peering_parameters",
            custom_func_name="update_express_route_peering",
        )

    # endregion

    # region LoadBalancers
    with self.command_group("network lb", network_lb_sdk) as g:
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command(
            "create",
            "create_load_balancer",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            no_wait_param="no_wait",
            table_transformer=deployment_validate_table_format,
            validator=process_lb_create_namespace,
        )
        g.command("delete", "delete")
        g.custom_command("list", "list_lbs")
        g.generic_update_command("update")

    property_map = {
        "frontend_ip_configurations": "frontend-ip",
        "inbound_nat_rules": "inbound-nat-rule",
        "inbound_nat_pools": "inbound-nat-pool",
        "backend_address_pools": "address-pool",
        "load_balancing_rules": "rule",
        "probes": "probe",
    }
    for subresource, alias in property_map.items():
        with self.command_group("network lb {}".format(alias), network_util) as g:
            g.command(
                "list", list_network_resource_property("load_balancers", subresource)
            )
            g.command(
                "show",
                get_network_resource_property_entry("load_balancers", subresource),
                exception_handler=empty_on_404,
            )
            g.command(
                "delete",
                delete_network_resource_property_entry("load_balancers", subresource),
            )

    with self.command_group("network lb frontend-ip", network_lb_sdk) as g:
        g.custom_command(
            "create",
            "create_lb_frontend_ip_configuration",
            validator=process_lb_frontend_ip_namespace,
        )
        g.generic_update_command(
            "update",
            child_collection_prop_name="frontend_ip_configurations",
            custom_func_name="set_lb_frontend_ip_configuration",
            validator=process_lb_frontend_ip_namespace,
        )

    with self.command_group("network lb inbound-nat-rule", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_inbound_nat_rule")
        g.generic_update_command(
            "update",
            child_collection_prop_name="inbound_nat_rules",
            custom_func_name="set_lb_inbound_nat_rule",
        )

    with self.command_group("network lb inbound-nat-pool", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_inbound_nat_pool")
        g.generic_update_command(
            "update",
            child_collection_prop_name="inbound_nat_pools",
            custom_func_name="set_lb_inbound_nat_pool",
        )

    with self.command_group("network lb address-pool", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_backend_address_pool")

    with self.command_group("network lb rule", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_rule")
        g.generic_update_command(
            "update",
            child_collection_prop_name="load_balancing_rules",
            custom_func_name="set_lb_rule",
        )

    with self.command_group("network lb probe", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_probe")
        g.generic_update_command(
            "update",
            child_collection_prop_name="probes",
            custom_func_name="set_lb_probe",
        )

    # endregion

    # region LocalGateways
    with self.command_group("network local-gateway", network_lgw_sdk) as g:
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command(
            "list", "list", table_transformer=transform_local_gateway_table_output
        )
        g.custom_command(
            "create",
            "create_local_gateway",
            no_wait_param="no_wait",
            validator=process_local_gateway_create_namespace,
        )
        g.generic_update_command(
            "update", custom_func_name="update_local_gateway", no_wait_param="raw"
        )
        g.generic_wait_command("wait")

    # endregion

    # region NetworkInterfaces: (NIC)

    with self.command_group("network nic", network_nic_sdk) as g:
        g.custom_command(
            "create",
            "create_nic",
            transform=transform_nic_create_output,
            validator=process_nic_create_namespace,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_nics")
        g.command(
            "show-effective-route-table",
            "get_effective_route_table",
            min_api="2016-09-01",
        )
        g.command(
            "list-effective-nsg",
            "list_effective_network_security_groups",
            min_api="2016-09-01",
        )
        g.generic_update_command("update", custom_func_name="update_nic")

    resource = "network_interfaces"
    subresource = "ip_configurations"
    with self.command_group("network nic ip-config", network_nic_sdk) as g:
        g.custom_command("create", "create_nic_ip_config")
        g.generic_update_command(
            "update",
            child_collection_prop_name="ip_configurations",
            child_arg_name="ip_config_name",
            custom_func_name="set_nic_ip_config",
        )
        g.command(
            "list",
            list_network_resource_property(resource, subresource),
            command_type=network_util,
        )
        g.command(
            "show",
            get_network_resource_property_entry(resource, subresource),
            command_type=network_util,
            exception_handler=empty_on_404,
        )
        g.command(
            "delete",
            delete_network_resource_property_entry(resource, subresource),
            command_type=network_util,
        )

    with self.command_group("network nic ip-config address-pool") as g:
        g.custom_command("add", "add_nic_ip_config_address_pool")
        g.custom_command("remove", "remove_nic_ip_config_address_pool")

    with self.command_group("network nic ip-config inbound-nat-rule") as g:
        g.custom_command("add", "add_nic_ip_config_inbound_nat_rule")
        g.custom_command("remove", "remove_nic_ip_config_inbound_nat_rule")

    # endregion

    # region NetworkSecurityGroups
    with self.command_group("network nsg", network_nsg_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_nsgs")
        g.custom_command("create", "create_nsg", transform=transform_nsg_create_output)
        g.generic_update_command("update")

    with self.command_group("network nsg rule", network_nsg_rule_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.custom_command("create", "create_nsg_rule_2017_06_01", min_api="2017-06-01")
        g.generic_update_command(
            "update",
            setter_arg_name="security_rule_parameters",
            min_api="2017-06-01",
            custom_func_name="update_nsg_rule_2017_06_01",
            doc_string_source="SecurityRule",
        )
        g.custom_command("create", "create_nsg_rule_2017_03_01", max_api="2017-03-01")
        g.generic_update_command(
            "update",
            max_api="2017-03-01",
            setter_arg_name="security_rule_parameters",
            custom_func_name="update_nsg_rule_2017_03_01",
            doc_string_source="SecurityRule",
        )
    # endregion

    # region NetworkWatchers
    with self.command_group(
        "network watcher",
        network_watcher_sdk,
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command("configure", "configure_network_watcher")
        g.command("list", "list_all")
        g.custom_command(
            "test-ip-flow", "check_nw_ip_flow", client_factory=cf_network_watcher
        )
        g.custom_command(
            "test-connectivity",
            "check_nw_connectivity",
            client_factory=cf_network_watcher,
            validator=process_nw_test_connectivity_namespace,
        )
        g.custom_command(
            "show-next-hop", "show_nw_next_hop", client_factory=cf_network_watcher
        )
        g.custom_command(
            "show-security-group-view",
            "show_nw_security_view",
            client_factory=cf_network_watcher,
        )
        g.command(
            "show-topology", "get_topology", validator=process_nw_topology_namespace
        )

    with self.command_group(
        "network watcher packet-capture", network_watcher_pc_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command(
            "create",
            "create_nw_packet_capture",
            client_factory=cf_packet_capture,
            validator=process_nw_packet_capture_create_namespace,
        )
        g.command("show", "get")
        g.command("show-status", "get_status")
        g.command("delete", "delete")
        g.command("stop", "stop")
        g.command("list", "list")

    with self.command_group(
        "network watcher flow-log",
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command(
            "configure",
            "set_nsg_flow_logging",
            validator=process_nw_flow_log_set_namespace,
        )
        g.custom_command(
            "show",
            "show_nsg_flow_logging",
            validator=process_nw_flow_log_show_namespace,
        )

    with self.command_group(
        "network watcher troubleshooting",
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command(
            "start",
            "start_nw_troubleshooting",
            no_wait_param="no_wait",
            validator=process_nw_troubleshooting_start_namespace,
        )
        g.custom_command(
            "show",
            "show_nw_troubleshooting_result",
            validator=process_nw_troubleshooting_show_namespace,
        )
    # endregion

    # region PublicIPAddresses

    public_ip_show_table_transform = "{Name:name, ResourceGroup:resourceGroup, Location:location, $zone$AddressVersion:publicIpAddressVersion, AllocationMethod:publicIpAllocationMethod, IdleTimeoutInMinutes:idleTimeoutInMinutes, ProvisioningState:provisioningState}"
    public_ip_show_table_transform = public_ip_show_table_transform.replace(
        "$zone$",
        "Zones: (!zones && ' ') || join(` `, zones), "
        if self.supported_api_version(min_api="2017-06-01")
        else " ",
    )

    with self.command_group("network public-ip", network_public_ip_sdk) as g:
        g.command("delete", "delete")
        g.command(
            "show",
            "get",
            exception_handler=empty_on_404,
            table_transformer=public_ip_show_table_transform,
        )
        g.custom_command(
            "list",
            "list_public_ips",
            table_transformer="[]." + public_ip_show_table_transform,
        )
        g.custom_command(
            "create",
            "create_public_ip",
            transform=transform_public_ip_create_output,
            validator=process_public_ip_create_namespace,
        )
        g.generic_update_command("update", custom_func_name="update_public_ip")

    # endregion

    # region RouteFilters
    with self.command_group(
        "network route-filter", network_rf_sdk, min_api="2016-12-01"
    ) as g:
        g.custom_command(
            "create", "create_route_filter", client_factory=cf_route_filters
        )
        g.custom_command("list", "list_route_filters", client_factory=cf_route_filters)
        g.command("show", "get")
        g.command("delete", "delete")
        g.generic_update_command("update", setter_arg_name="route_filter_parameters")

    with self.command_group(
        "network route-filter rule", network_rfr_sdk, min_api="2016-12-01"
    ) as g:
        g.custom_command(
            "create", "create_route_filter_rule", client_factory=cf_route_filter_rules
        )
        g.command("list", "list_by_route_filter")
        g.command("show", "get")
        g.command("delete", "delete")
        g.generic_update_command(
            "update", setter_arg_name="route_filter_rule_parameters"
        )
        sc_path = "azure.mgmt.network.operations#BgpServiceCommunitiesOperations.{}"
        g.command(
            "list-service-communities",
            "list",
            operations_tmpl=sc_path,
            client_factory=cf_service_community,
            table_transformer=transform_service_community_table_output,
        )

    # endregion

    # region RouteTables
    with self.command_group("network route-table", network_rt_sdk) as g:
        g.custom_command(
            "create",
            "create_route_table",
            validator=process_route_table_create_namespace,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_route_tables")
        g.generic_update_command("update", custom_func_name="update_route_table")

    network_rtr_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.routes_operations#RoutesOperations.{}",
        client_factory=cf_routes,
    )
    with self.command_group("network route-table route", network_rtr_sdk) as g:
        g.custom_command("create", "create_route")
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.generic_update_command(
            "update",
            setter_arg_name="route_parameters",
            custom_func_name="update_route",
        )

    # endregion

    # region TrafficManagers
    with self.command_group("network traffic-manager profile", network_tmp_sdk) as g:
        g.command("check-dns", "check_traffic_manager_relative_dns_name_availability")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("delete", "delete")
        g.custom_command("list", "list_traffic_manager_profiles")
        g.custom_command(
            "create",
            "create_traffic_manager_profile",
            transform=transform_traffic_manager_create_output,
        )
        g.generic_update_command(
            "update", custom_func_name="update_traffic_manager_profile"
        )

    with self.command_group("network traffic-manager endpoint", network_tme_sdk) as g:
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("delete", "delete")
        g.custom_command(
            "create",
            "create_traffic_manager_endpoint",
            validator=process_tm_endpoint_create_namespace,
        )
        g.custom_command("list", "list_traffic_manager_endpoints")
        g.generic_update_command(
            "update", custom_func_name="update_traffic_manager_endpoint"
        )

        tm_geographic_path = "azure.mgmt.trafficmanager.operations.geographic_hierarchies_operations#GeographicHierarchiesOperations.{}"
        g.command(
            "show-geographic-hierarchy",
            "get_default",
            client_factory=cf_tm_geographic,
            operations_tmpl=tm_geographic_path,
            table_transformer=transform_geographic_hierachy_table_output,
        )

    # endregion

    # region VirtualNetworks
    with self.command_group("network vnet", network_vnet_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_vnet")
        g.command(
            "check-ip-address", "check_ip_address_availability", min_api="2016-09-01"
        )
        g.custom_command(
            "create",
            "create_vnet",
            transform=transform_vnet_create_output,
            validator=process_vnet_create_namespace,
        )
        g.generic_update_command("update", custom_func_name="update_vnet")
        g.command(
            "list-endpoint-services", "list", command_type=network_endpoint_service_sdk
        )

    with self.command_group(
        "network vnet peering", network_vnet_peering_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command("create", "create_vnet_peering")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.command("delete", "delete")
        g.generic_update_command(
            "update", setter_arg_name="virtual_network_peering_parameters"
        )

    with self.command_group("network vnet subnet", network_subnet_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.custom_command("create", "create_subnet")
        g.generic_update_command(
            "update",
            setter_arg_name="subnet_parameters",
            custom_func_name="update_subnet",
        )

    # endregion

    # region VirtualNetworkGateways

    with self.command_group(
        "network vnet-gateway", network_vgw_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command(
            "create",
            "create_vnet_gateway",
            no_wait_param="no_wait",
            transform=transform_vnet_gateway_create_output,
            validator=process_vnet_gateway_create_namespace,
        )
        g.generic_update_command(
            "update",
            custom_func_name="update_vnet_gateway",
            no_wait_param="raw",
            validator=process_vnet_gateway_update_namespace,
        )
        g.generic_wait_command("wait")
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.command("reset", "reset")
        g.command("list-bgp-peer-status", "get_bgp_peer_status")
        g.command("list-advertised-routes", "get_advertised_routes")
        g.command("list-learned-routes", "get_learned_routes")

    with self.command_group("network vnet-gateway vpn-client", network_vgw_sdk) as g:
        g.custom_command("generate", "generate_vpn_client")
        g.command("show-url", "get_vpn_profile_package_url", min_api="2017-08-01")

    with self.command_group("network vnet-gateway revoked-cert", network_vgw_sdk) as g:
        g.custom_command("create", "create_vnet_gateway_revoked_cert")
        g.custom_command("delete", "delete_vnet_gateway_revoked_cert")

    with self.command_group("network vnet-gateway root-cert", network_vgw_sdk) as g:
        g.custom_command("create", "create_vnet_gateway_root_cert")
        g.custom_command("delete", "delete_vnet_gateway_root_cert")

    # endregion

    # region VirtualNetworkGatewayConnections
    with self.command_group("network vpn-connection", network_vpn_sdk) as g:
        g.custom_command(
            "create",
            "create_vpn_connection",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            table_transformer=deployment_validate_table_format,
            validator=process_vpn_connection_create_namespace,
        )
        g.command("delete", "delete")
        g.command(
            "show",
            "get",
            exception_handler=empty_on_404,
            transform=transform_vpn_connection,
        )
        g.command("list", "list", transform=transform_vpn_connection_list)
        g.generic_update_command("update", custom_func_name="update_vpn_connection")

    with self.command_group("network vpn-connection shared-key", network_vpn_sdk) as g:
        g.command("show", "get_shared_key", exception_handler=empty_on_404)
        g.command("reset", "reset_shared_key")
        g.generic_update_command("update", setter_name="set_shared_key")

    with self.command_group(
        "network vpn-connection ipsec-policy", network_vpn_sdk, min_api="2017-03-01"
    ) as g:
        g.custom_command(
            "add",
            "add_vpn_conn_ipsec_policy",
            no_wait_param="no_wait",
            doc_string_source="IpsecPolicy",
        )
        g.custom_command("list", "list_vpn_conn_ipsec_policies")
        g.custom_command(
            "clear", "clear_vpn_conn_ipsec_policies", no_wait_param="no_wait"
        )


# Traceback (TypeError)
$ az network vnet-gateway vpn-client generate -g debekoe1 -n myvnetgateway
generate_vpn_client() missing 1 required positional argument: 'client'
Traceback (most recent call last):
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/knack/cli.py", line 193, in invoke
cmd_result = self.invocation.execute(args)
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 319, in execute
six.reraise(*sys.exc_info())
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 292, in execute
result = cmd(params)
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/azure/cli/core/commands/__init__.py", line 169, in __call__
return super(AzCliCommand, self).__call__(*args, **kwargs)
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/knack/commands.py", line 109, in __call__
return self.handler(*args, **kwargs)
File "/usr/local/Cellar/azure-cli/2.0.24_1/libexec/lib/python3.6/site-packages/azure/cli/core/__init__.py", line 328, in default_command_handler
result = op(**command_args)
TypeError: generate_vpn_client() missing 1 required positional argument: 'client'

# Fixed code
def load_command_table(self, _):
    # region Command Types
    network_ag_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.application_gateways_operations#ApplicationGatewaysOperations.{}",
        client_factory=cf_application_gateways,
    )

    network_util = CliCommandType(
        operations_tmpl="azure.cli.command_modules.network._util#{}",
        client_factory=None,
    )

    network_asg_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.application_security_groups_operations#ApplicationSecurityGroupsOperations.{}",
        client_factory=cf_application_security_groups,
    )

    network_dns_zone_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.dns.operations.zones_operations#ZonesOperations.{}",
        client_factory=cf_dns_mgmt_zones,
    )

    network_dns_record_set_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.dns.operations.record_sets_operations#RecordSetsOperations.{}",
        client_factory=cf_dns_mgmt_record_sets,
    )

    network_endpoint_service_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.available_endpoint_services_operations#AvailableEndpointServicesOperations.{}",
        client_factory=cf_endpoint_services,
        min_api="2017-06-01",
    )

    network_er_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuits_operations#ExpressRouteCircuitsOperations.{}",
        client_factory=cf_express_route_circuits,
        min_api="2016-09-01",
    )

    network_erca_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuit_authorizations_operations#ExpressRouteCircuitAuthorizationsOperations.{}",
        client_factory=cf_express_route_circuit_authorizations,
        min_api="2016-09-01",
    )

    network_ersp_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_service_providers_operations#ExpressRouteServiceProvidersOperations.{}",
        client_factory=cf_express_route_service_providers,
        min_api="2016-09-01",
    )

    network_er_peering_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.express_route_circuit_peerings_operations#ExpressRouteCircuitPeeringsOperations.{}",
        client_factory=cf_express_route_circuit_peerings,
    )

    network_lb_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.load_balancers_operations#LoadBalancersOperations.{}",
        client_factory=cf_load_balancers,
    )

    network_lgw_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.local_network_gateways_operations#LocalNetworkGatewaysOperations.{}",
        client_factory=cf_local_network_gateways,
    )

    network_nic_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_interfaces_operations#NetworkInterfacesOperations.{}",
        client_factory=cf_network_interfaces,
    )

    network_nsg_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_security_groups_operations#NetworkSecurityGroupsOperations.{}",
        client_factory=cf_network_security_groups,
    )

    network_nsg_rule_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.security_rules_operations#SecurityRulesOperations.{}",
        client_factory=cf_security_rules,
    )

    network_public_ip_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.public_ip_addresses_operations#PublicIPAddressesOperations.{}",
        client_factory=cf_public_ip_addresses,
    )

    network_rf_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations#RouteFiltersOperations.{}",
        client_factory=cf_route_filters,
        min_api="2016-12-01",
    )

    network_rfr_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations#RouteFilterRulesOperations.{}",
        client_factory=cf_route_filter_rules,
        min_api="2016-12-01",
    )

    network_rt_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.route_tables_operations#RouteTablesOperations.{}",
        client_factory=cf_route_tables,
    )

    network_subnet_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.subnets_operations#SubnetsOperations.{}",
        client_factory=cf_subnets,
    )

    network_tmp_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.trafficmanager.operations.profiles_operations#ProfilesOperations.{}",
        client_factory=cf_traffic_manager_mgmt_profiles,
    )

    network_tme_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.trafficmanager.operations.endpoints_operations#EndpointsOperations.{}",
        client_factory=cf_traffic_manager_mgmt_endpoints,
    )

    network_vgw_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_gateways_operations#VirtualNetworkGatewaysOperations.{}",
        client_factory=cf_virtual_network_gateways,
    )

    network_vnet_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_networks_operations#VirtualNetworksOperations.{}",
        client_factory=cf_virtual_networks,
    )

    network_vnet_peering_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_peerings_operations#VirtualNetworkPeeringsOperations.{}",
        client_factory=cf_virtual_network_peerings,
    )

    network_vpn_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.virtual_network_gateway_connections_operations#VirtualNetworkGatewayConnectionsOperations.{}",
        client_factory=cf_virtual_network_gateway_connections,
    )

    network_watcher_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.network_watchers_operations#NetworkWatchersOperations.{}",
        client_factory=cf_network_watcher,
    )

    network_watcher_pc_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.packet_captures_operations#PacketCapturesOperations.{}",
        client_factory=cf_packet_capture,
    )

    # endregion

    # region NetworkRoot
    usage_path = "azure.mgmt.network.operations.usages_operations#UsagesOperations.{}"
    with self.command_group("network") as g:
        g.command(
            "list-usages",
            "list",
            operations_tmpl=usage_path,
            client_factory=cf_usages,
            transform=transform_network_usage_list,
            table_transformer=transform_network_usage_table,
        )

    # endregion

    # region ApplicationGateways
    with self.command_group("network application-gateway", network_ag_sdk) as g:
        g.custom_command(
            "create",
            "create_application_gateway",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            no_wait_param="no_wait",
            table_transformer=deployment_validate_table_format,
            validator=process_ag_create_namespace,
        )
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_application_gateways")
        g.command("start", "start")
        g.command("stop", "stop")
        g.command("show-backend-health", "backend_health", min_api="2016-09-01")
        g.generic_update_command(
            "update", no_wait_param="raw", custom_func_name="update_application_gateway"
        )
        g.generic_wait_command("wait")

    subresource_properties = [
        {"prop": "authentication_certificates", "name": "auth-cert"},
        {"prop": "ssl_certificates", "name": "ssl-cert"},
        {"prop": "frontend_ip_configurations", "name": "frontend-ip"},
        {"prop": "frontend_ports", "name": "frontend-port"},
        {"prop": "backend_address_pools", "name": "address-pool"},
        {
            "prop": "backend_http_settings_collection",
            "name": "http-settings",
            "validator": process_ag_http_settings_create_namespace,
        },
        {
            "prop": "http_listeners",
            "name": "http-listener",
            "validator": process_ag_listener_create_namespace,
        },
        {
            "prop": "request_routing_rules",
            "name": "rule",
            "validator": process_ag_rule_create_namespace,
        },
        {"prop": "probes", "name": "probe"},
        {
            "prop": "url_path_maps",
            "name": "url-path-map",
            "validator": process_ag_url_path_map_create_namespace,
        },
    ]

    def _make_singular(value):
        try:
            if value.endswith("ies"):
                value = value[:-3] + "y"
            elif value.endswith("s"):
                value = value[:-1]
            return value
        except AttributeError:
            return value

    for kwargs in subresource_properties:
        alias = kwargs["name"]
        subresource = kwargs["prop"]
        create_validator = kwargs.get("validator", None)
        with self.command_group(
            "network application-gateway {}".format(alias), network_util
        ) as g:
            g.command(
                "list",
                list_network_resource_property("application_gateways", subresource),
            )
            g.command(
                "show",
                get_network_resource_property_entry(
                    "application_gateways", subresource
                ),
                exception_handler=empty_on_404,
            )
            g.command(
                "delete",
                delete_network_resource_property_entry(
                    "application_gateways", subresource
                ),
                no_wait_param="no_wait",
            )
            g.custom_command(
                "create",
                "create_ag_{}".format(_make_singular(subresource)),
                no_wait_param="no_wait",
                validator=create_validator,
            )
            g.generic_update_command(
                "update",
                command_type=network_ag_sdk,
                no_wait_param="raw",
                custom_func_name="update_ag_{}".format(_make_singular(subresource)),
                child_collection_prop_name=subresource,
                validator=create_validator,
            )

    with self.command_group(
        "network application-gateway redirect-config",
        network_util,
        min_api="2017-06-01",
    ) as g:
        subresource = "redirect_configurations"
        g.command(
            "list", list_network_resource_property("application_gateways", subresource)
        )
        g.command(
            "show",
            get_network_resource_property_entry("application_gateways", subresource),
            exception_handler=empty_on_404,
        )
        g.command(
            "delete",
            delete_network_resource_property_entry("application_gateways", subresource),
            no_wait_param="no_wait",
        )
        g.custom_command(
            "create",
            "create_ag_{}".format(_make_singular(subresource)),
            no_wait_param="no_wait",
            doc_string_source="ApplicationGatewayRedirectConfiguration",
        )
        g.generic_update_command(
            "update",
            command_type=network_ag_sdk,
            client_factory=cf_application_gateways,
            no_wait_param="raw",
            custom_func_name="update_ag_{}".format(_make_singular(subresource)),
            child_collection_prop_name=subresource,
            doc_string_source="ApplicationGatewayRedirectConfiguration",
        )

    with self.command_group("network application-gateway ssl-policy") as g:
        g.custom_command(
            "set",
            "set_ag_ssl_policy_2017_06_01",
            min_api="2017-06-01",
            no_wait_param="no_wait",
            validator=process_ag_ssl_policy_set_namespace,
            doc_string_source="ApplicationGatewaySslPolicy",
        )
        g.custom_command(
            "set",
            "set_ag_ssl_policy_2017_03_01",
            max_api="2017-03-01",
            no_wait_param="no_wait",
            validator=process_ag_ssl_policy_set_namespace,
        )
        g.custom_command("show", "show_ag_ssl_policy", exception_handler=empty_on_404)

    with self.command_group(
        "network application-gateway ssl-policy", network_ag_sdk, min_api="2017-06-01"
    ) as g:
        g.command("list-options", "list_available_ssl_options")
        g.command("predefined list", "list_available_ssl_predefined_policies")
        g.command("predefined show", "get_ssl_predefined_policy")

    with self.command_group("network application-gateway url-path-map rule") as g:
        g.custom_command(
            "create",
            "create_ag_url_path_map_rule",
            no_wait_param="no_wait",
            validator=process_ag_url_path_map_rule_create_namespace,
        )
        g.custom_command(
            "delete", "delete_ag_url_path_map_rule", no_wait_param="no_wait"
        )

    with self.command_group("network application-gateway waf-config") as g:
        g.custom_command(
            "set",
            "set_ag_waf_config_2017_03_01",
            min_api="2017-03-01",
            no_wait_param="no_wait",
        )
        g.custom_command(
            "set",
            "set_ag_waf_config_2016_09_01",
            max_api="2016-09-01",
            no_wait_param="no_wait",
        )
        g.custom_command("show", "show_ag_waf_config", exception_handler=empty_on_404)
        g.custom_command(
            "list-rule-sets",
            "list_ag_waf_rule_sets",
            min_api="2017-03-01",
            client_factory=cf_application_gateways,
            table_transformer=transform_waf_rule_sets_table_output,
        )

    # endregion

    # region ApplicationSecurityGroups
    with self.command_group(
        "network asg",
        network_asg_sdk,
        client_factory=cf_application_security_groups,
        min_api="2017-09-01",
    ) as g:
        g.custom_command("create", "create_asg")
        g.command("show", "get")
        g.command("list", "list_all")
        g.command("delete", "delete")
        g.generic_update_command("update", custom_func_name="update_asg")

    # endregion

    # region DNS
    with self.command_group("network dns zone", network_dns_zone_sdk) as g:
        g.command("delete", "delete", confirmation=True)
        g.command(
            "show",
            "get",
            table_transformer=transform_dns_zone_table_output,
            exception_handler=empty_on_404,
        )
        g.custom_command(
            "list", "list_dns_zones", table_transformer=transform_dns_zone_table_output
        )
        g.custom_command("import", "import_zone")
        g.custom_command("export", "export_zone")
        g.custom_command("create", "create_dns_zone", client_factory=cf_dns_mgmt_zones)
        g.generic_update_command("update")

    with self.command_group("network dns record-set") as g:
        g.custom_command(
            "list",
            "list_dns_record_set",
            client_factory=cf_dns_mgmt_record_sets,
            transform=transform_dns_record_set_output,
        )

    for record in ["a", "aaaa", "mx", "ns", "ptr", "srv", "txt", "caa"]:
        with self.command_group(
            "network dns record-set {}".format(record), network_dns_record_set_sdk
        ) as g:
            g.command(
                "show",
                "get",
                transform=transform_dns_record_set_output,
                exception_handler=empty_on_404,
            )
            g.command("delete", "delete", confirmation=True)
            g.custom_command(
                "list",
                "list_dns_record_set",
                client_factory=cf_dns_mgmt_record_sets,
                transform=transform_dns_record_set_output,
                table_transformer=transform_dns_record_set_table_output,
            )
            g.custom_command(
                "create",
                "create_dns_record_set",
                transform=transform_dns_record_set_output,
                doc_string_source="azure.mgmt.dns.operations#RecordSetsOperations.create_or_update",
            )
            g.custom_command(
                "add-record",
                "add_dns_{}_record".format(record),
                transform=transform_dns_record_set_output,
            )
            g.custom_command(
                "remove-record",
                "remove_dns_{}_record".format(record),
                transform=transform_dns_record_set_output,
            )
            g.generic_update_command(
                "update",
                custom_func_name="update_dns_record_set",
                transform=transform_dns_record_set_output,
            )

    with self.command_group(
        "network dns record-set soa", network_dns_record_set_sdk
    ) as g:
        g.command(
            "show",
            "get",
            transform=transform_dns_record_set_output,
            exception_handler=empty_on_404,
        )
        g.custom_command(
            "update", "update_dns_soa_record", transform=transform_dns_record_set_output
        )

    with self.command_group(
        "network dns record-set cname", network_dns_record_set_sdk
    ) as g:
        g.command(
            "show",
            "get",
            transform=transform_dns_record_set_output,
            exception_handler=empty_on_404,
        )
        g.command("delete", "delete")
        g.custom_command(
            "list",
            "list_dns_record_set",
            client_factory=cf_dns_mgmt_record_sets,
            transform=transform_dns_record_set_output,
            table_transformer=transform_dns_record_set_table_output,
        )
        g.custom_command(
            "create",
            "create_dns_record_set",
            transform=transform_dns_record_set_output,
            doc_string_source="azure.mgmt.dns.operations#RecordSetsOperations.create_or_update",
        )
        g.custom_command(
            "set-record",
            "add_dns_cname_record",
            transform=transform_dns_record_set_output,
        )
        g.custom_command(
            "remove-record",
            "remove_dns_cname_record",
            transform=transform_dns_record_set_output,
        )

    # endregion

    # region ExpressRoutes
    with self.command_group("network express-route", network_er_sdk) as g:
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("get-stats", "get_stats")
        g.command("list-arp-tables", "list_arp_table")
        g.command("list-route-tables", "list_routes_table")
        g.custom_command("create", "create_express_route", no_wait_param="no_wait")
        g.custom_command("list", "list_express_route_circuits")
        g.command("list-service-providers", "list", command_type=network_ersp_sdk)
        g.generic_update_command(
            "update", custom_func_name="update_express_route", no_wait_param="raw"
        )
        g.generic_wait_command("wait")

    with self.command_group("network express-route auth", network_erca_sdk) as g:
        g.command("create", "create_or_update", validator=process_auth_create_namespace)
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")

    with self.command_group(
        "network express-route peering", network_er_peering_sdk
    ) as g:
        g.custom_command(
            "create",
            "create_express_route_peering",
            client_factory=cf_express_route_circuit_peerings,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.generic_update_command(
            "update",
            setter_arg_name="peering_parameters",
            custom_func_name="update_express_route_peering",
        )

    # endregion

    # region LoadBalancers
    with self.command_group("network lb", network_lb_sdk) as g:
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command(
            "create",
            "create_load_balancer",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            no_wait_param="no_wait",
            table_transformer=deployment_validate_table_format,
            validator=process_lb_create_namespace,
        )
        g.command("delete", "delete")
        g.custom_command("list", "list_lbs")
        g.generic_update_command("update")

    property_map = {
        "frontend_ip_configurations": "frontend-ip",
        "inbound_nat_rules": "inbound-nat-rule",
        "inbound_nat_pools": "inbound-nat-pool",
        "backend_address_pools": "address-pool",
        "load_balancing_rules": "rule",
        "probes": "probe",
    }
    for subresource, alias in property_map.items():
        with self.command_group("network lb {}".format(alias), network_util) as g:
            g.command(
                "list", list_network_resource_property("load_balancers", subresource)
            )
            g.command(
                "show",
                get_network_resource_property_entry("load_balancers", subresource),
                exception_handler=empty_on_404,
            )
            g.command(
                "delete",
                delete_network_resource_property_entry("load_balancers", subresource),
            )

    with self.command_group("network lb frontend-ip", network_lb_sdk) as g:
        g.custom_command(
            "create",
            "create_lb_frontend_ip_configuration",
            validator=process_lb_frontend_ip_namespace,
        )
        g.generic_update_command(
            "update",
            child_collection_prop_name="frontend_ip_configurations",
            custom_func_name="set_lb_frontend_ip_configuration",
            validator=process_lb_frontend_ip_namespace,
        )

    with self.command_group("network lb inbound-nat-rule", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_inbound_nat_rule")
        g.generic_update_command(
            "update",
            child_collection_prop_name="inbound_nat_rules",
            custom_func_name="set_lb_inbound_nat_rule",
        )

    with self.command_group("network lb inbound-nat-pool", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_inbound_nat_pool")
        g.generic_update_command(
            "update",
            child_collection_prop_name="inbound_nat_pools",
            custom_func_name="set_lb_inbound_nat_pool",
        )

    with self.command_group("network lb address-pool", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_backend_address_pool")

    with self.command_group("network lb rule", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_rule")
        g.generic_update_command(
            "update",
            child_collection_prop_name="load_balancing_rules",
            custom_func_name="set_lb_rule",
        )

    with self.command_group("network lb probe", network_lb_sdk) as g:
        g.custom_command("create", "create_lb_probe")
        g.generic_update_command(
            "update",
            child_collection_prop_name="probes",
            custom_func_name="set_lb_probe",
        )

    # endregion

    # region LocalGateways
    with self.command_group("network local-gateway", network_lgw_sdk) as g:
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command(
            "list", "list", table_transformer=transform_local_gateway_table_output
        )
        g.custom_command(
            "create",
            "create_local_gateway",
            no_wait_param="no_wait",
            validator=process_local_gateway_create_namespace,
        )
        g.generic_update_command(
            "update", custom_func_name="update_local_gateway", no_wait_param="raw"
        )
        g.generic_wait_command("wait")

    # endregion

    # region NetworkInterfaces: (NIC)

    with self.command_group("network nic", network_nic_sdk) as g:
        g.custom_command(
            "create",
            "create_nic",
            transform=transform_nic_create_output,
            validator=process_nic_create_namespace,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_nics")
        g.command(
            "show-effective-route-table",
            "get_effective_route_table",
            min_api="2016-09-01",
        )
        g.command(
            "list-effective-nsg",
            "list_effective_network_security_groups",
            min_api="2016-09-01",
        )
        g.generic_update_command("update", custom_func_name="update_nic")

    resource = "network_interfaces"
    subresource = "ip_configurations"
    with self.command_group("network nic ip-config", network_nic_sdk) as g:
        g.custom_command("create", "create_nic_ip_config")
        g.generic_update_command(
            "update",
            child_collection_prop_name="ip_configurations",
            child_arg_name="ip_config_name",
            custom_func_name="set_nic_ip_config",
        )
        g.command(
            "list",
            list_network_resource_property(resource, subresource),
            command_type=network_util,
        )
        g.command(
            "show",
            get_network_resource_property_entry(resource, subresource),
            command_type=network_util,
            exception_handler=empty_on_404,
        )
        g.command(
            "delete",
            delete_network_resource_property_entry(resource, subresource),
            command_type=network_util,
        )

    with self.command_group("network nic ip-config address-pool") as g:
        g.custom_command("add", "add_nic_ip_config_address_pool")
        g.custom_command("remove", "remove_nic_ip_config_address_pool")

    with self.command_group("network nic ip-config inbound-nat-rule") as g:
        g.custom_command("add", "add_nic_ip_config_inbound_nat_rule")
        g.custom_command("remove", "remove_nic_ip_config_inbound_nat_rule")

    # endregion

    # region NetworkSecurityGroups
    with self.command_group("network nsg", network_nsg_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_nsgs")
        g.custom_command("create", "create_nsg", transform=transform_nsg_create_output)
        g.generic_update_command("update")

    with self.command_group("network nsg rule", network_nsg_rule_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.custom_command("create", "create_nsg_rule_2017_06_01", min_api="2017-06-01")
        g.generic_update_command(
            "update",
            setter_arg_name="security_rule_parameters",
            min_api="2017-06-01",
            custom_func_name="update_nsg_rule_2017_06_01",
            doc_string_source="SecurityRule",
        )
        g.custom_command("create", "create_nsg_rule_2017_03_01", max_api="2017-03-01")
        g.generic_update_command(
            "update",
            max_api="2017-03-01",
            setter_arg_name="security_rule_parameters",
            custom_func_name="update_nsg_rule_2017_03_01",
            doc_string_source="SecurityRule",
        )
    # endregion

    # region NetworkWatchers
    with self.command_group(
        "network watcher",
        network_watcher_sdk,
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command("configure", "configure_network_watcher")
        g.command("list", "list_all")
        g.custom_command(
            "test-ip-flow", "check_nw_ip_flow", client_factory=cf_network_watcher
        )
        g.custom_command(
            "test-connectivity",
            "check_nw_connectivity",
            client_factory=cf_network_watcher,
            validator=process_nw_test_connectivity_namespace,
        )
        g.custom_command(
            "show-next-hop", "show_nw_next_hop", client_factory=cf_network_watcher
        )
        g.custom_command(
            "show-security-group-view",
            "show_nw_security_view",
            client_factory=cf_network_watcher,
        )
        g.command(
            "show-topology", "get_topology", validator=process_nw_topology_namespace
        )

    with self.command_group(
        "network watcher packet-capture", network_watcher_pc_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command(
            "create",
            "create_nw_packet_capture",
            client_factory=cf_packet_capture,
            validator=process_nw_packet_capture_create_namespace,
        )
        g.command("show", "get")
        g.command("show-status", "get_status")
        g.command("delete", "delete")
        g.command("stop", "stop")
        g.command("list", "list")

    with self.command_group(
        "network watcher flow-log",
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command(
            "configure",
            "set_nsg_flow_logging",
            validator=process_nw_flow_log_set_namespace,
        )
        g.custom_command(
            "show",
            "show_nsg_flow_logging",
            validator=process_nw_flow_log_show_namespace,
        )

    with self.command_group(
        "network watcher troubleshooting",
        client_factory=cf_network_watcher,
        min_api="2016-09-01",
    ) as g:
        g.custom_command(
            "start",
            "start_nw_troubleshooting",
            no_wait_param="no_wait",
            validator=process_nw_troubleshooting_start_namespace,
        )
        g.custom_command(
            "show",
            "show_nw_troubleshooting_result",
            validator=process_nw_troubleshooting_show_namespace,
        )
    # endregion

    # region PublicIPAddresses

    public_ip_show_table_transform = "{Name:name, ResourceGroup:resourceGroup, Location:location, $zone$AddressVersion:publicIpAddressVersion, AllocationMethod:publicIpAllocationMethod, IdleTimeoutInMinutes:idleTimeoutInMinutes, ProvisioningState:provisioningState}"
    public_ip_show_table_transform = public_ip_show_table_transform.replace(
        "$zone$",
        "Zones: (!zones && ' ') || join(` `, zones), "
        if self.supported_api_version(min_api="2017-06-01")
        else " ",
    )

    with self.command_group("network public-ip", network_public_ip_sdk) as g:
        g.command("delete", "delete")
        g.command(
            "show",
            "get",
            exception_handler=empty_on_404,
            table_transformer=public_ip_show_table_transform,
        )
        g.custom_command(
            "list",
            "list_public_ips",
            table_transformer="[]." + public_ip_show_table_transform,
        )
        g.custom_command(
            "create",
            "create_public_ip",
            transform=transform_public_ip_create_output,
            validator=process_public_ip_create_namespace,
        )
        g.generic_update_command("update", custom_func_name="update_public_ip")

    # endregion

    # region RouteFilters
    with self.command_group(
        "network route-filter", network_rf_sdk, min_api="2016-12-01"
    ) as g:
        g.custom_command(
            "create", "create_route_filter", client_factory=cf_route_filters
        )
        g.custom_command("list", "list_route_filters", client_factory=cf_route_filters)
        g.command("show", "get")
        g.command("delete", "delete")
        g.generic_update_command("update", setter_arg_name="route_filter_parameters")

    with self.command_group(
        "network route-filter rule", network_rfr_sdk, min_api="2016-12-01"
    ) as g:
        g.custom_command(
            "create", "create_route_filter_rule", client_factory=cf_route_filter_rules
        )
        g.command("list", "list_by_route_filter")
        g.command("show", "get")
        g.command("delete", "delete")
        g.generic_update_command(
            "update", setter_arg_name="route_filter_rule_parameters"
        )
        sc_path = "azure.mgmt.network.operations#BgpServiceCommunitiesOperations.{}"
        g.command(
            "list-service-communities",
            "list",
            operations_tmpl=sc_path,
            client_factory=cf_service_community,
            table_transformer=transform_service_community_table_output,
        )

    # endregion

    # region RouteTables
    with self.command_group("network route-table", network_rt_sdk) as g:
        g.custom_command(
            "create",
            "create_route_table",
            validator=process_route_table_create_namespace,
        )
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_route_tables")
        g.generic_update_command("update", custom_func_name="update_route_table")

    network_rtr_sdk = CliCommandType(
        operations_tmpl="azure.mgmt.network.operations.routes_operations#RoutesOperations.{}",
        client_factory=cf_routes,
    )
    with self.command_group("network route-table route", network_rtr_sdk) as g:
        g.custom_command("create", "create_route")
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.generic_update_command(
            "update",
            setter_arg_name="route_parameters",
            custom_func_name="update_route",
        )

    # endregion

    # region TrafficManagers
    with self.command_group("network traffic-manager profile", network_tmp_sdk) as g:
        g.command("check-dns", "check_traffic_manager_relative_dns_name_availability")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("delete", "delete")
        g.custom_command("list", "list_traffic_manager_profiles")
        g.custom_command(
            "create",
            "create_traffic_manager_profile",
            transform=transform_traffic_manager_create_output,
        )
        g.generic_update_command(
            "update", custom_func_name="update_traffic_manager_profile"
        )

    with self.command_group("network traffic-manager endpoint", network_tme_sdk) as g:
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("delete", "delete")
        g.custom_command(
            "create",
            "create_traffic_manager_endpoint",
            validator=process_tm_endpoint_create_namespace,
        )
        g.custom_command("list", "list_traffic_manager_endpoints")
        g.generic_update_command(
            "update", custom_func_name="update_traffic_manager_endpoint"
        )

        tm_geographic_path = "azure.mgmt.trafficmanager.operations.geographic_hierarchies_operations#GeographicHierarchiesOperations.{}"
        g.command(
            "show-geographic-hierarchy",
            "get_default",
            client_factory=cf_tm_geographic,
            operations_tmpl=tm_geographic_path,
            table_transformer=transform_geographic_hierachy_table_output,
        )

    # endregion

    # region VirtualNetworks
    with self.command_group("network vnet", network_vnet_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.custom_command("list", "list_vnet")
        g.command(
            "check-ip-address", "check_ip_address_availability", min_api="2016-09-01"
        )
        g.custom_command(
            "create",
            "create_vnet",
            transform=transform_vnet_create_output,
            validator=process_vnet_create_namespace,
        )
        g.generic_update_command("update", custom_func_name="update_vnet")
        g.command(
            "list-endpoint-services", "list", command_type=network_endpoint_service_sdk
        )

    with self.command_group(
        "network vnet peering", network_vnet_peering_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command("create", "create_vnet_peering")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.command("delete", "delete")
        g.generic_update_command(
            "update", setter_arg_name="virtual_network_peering_parameters"
        )

    with self.command_group("network vnet subnet", network_subnet_sdk) as g:
        g.command("delete", "delete")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.custom_command("create", "create_subnet")
        g.generic_update_command(
            "update",
            setter_arg_name="subnet_parameters",
            custom_func_name="update_subnet",
        )

    # endregion

    # region VirtualNetworkGateways

    with self.command_group(
        "network vnet-gateway", network_vgw_sdk, min_api="2016-09-01"
    ) as g:
        g.custom_command(
            "create",
            "create_vnet_gateway",
            no_wait_param="no_wait",
            transform=transform_vnet_gateway_create_output,
            validator=process_vnet_gateway_create_namespace,
        )
        g.generic_update_command(
            "update",
            custom_func_name="update_vnet_gateway",
            no_wait_param="raw",
            validator=process_vnet_gateway_update_namespace,
        )
        g.generic_wait_command("wait")
        g.command("delete", "delete", no_wait_param="raw")
        g.command("show", "get", exception_handler=empty_on_404)
        g.command("list", "list")
        g.command("reset", "reset")
        g.command("list-bgp-peer-status", "get_bgp_peer_status")
        g.command("list-advertised-routes", "get_advertised_routes")
        g.command("list-learned-routes", "get_learned_routes")

    with self.command_group(
        "network vnet-gateway vpn-client",
        network_vgw_sdk,
        client_factory=cf_virtual_network_gateways,
    ) as g:
        g.custom_command("generate", "generate_vpn_client")
        g.command("show-url", "get_vpn_profile_package_url", min_api="2017-08-01")

    with self.command_group("network vnet-gateway revoked-cert", network_vgw_sdk) as g:
        g.custom_command("create", "create_vnet_gateway_revoked_cert")
        g.custom_command("delete", "delete_vnet_gateway_revoked_cert")

    with self.command_group("network vnet-gateway root-cert", network_vgw_sdk) as g:
        g.custom_command("create", "create_vnet_gateway_root_cert")
        g.custom_command("delete", "delete_vnet_gateway_root_cert")

    # endregion

    # region VirtualNetworkGatewayConnections
    with self.command_group("network vpn-connection", network_vpn_sdk) as g:
        g.custom_command(
            "create",
            "create_vpn_connection",
            transform=DeploymentOutputLongRunningOperation(self.cli_ctx),
            table_transformer=deployment_validate_table_format,
            validator=process_vpn_connection_create_namespace,
        )
        g.command("delete", "delete")
        g.command(
            "show",
            "get",
            exception_handler=empty_on_404,
            transform=transform_vpn_connection,
        )
        g.command("list", "list", transform=transform_vpn_connection_list)
        g.generic_update_command("update", custom_func_name="update_vpn_connection")

    with self.command_group("network vpn-connection shared-key", network_vpn_sdk) as g:
        g.command("show", "get_shared_key", exception_handler=empty_on_404)
        g.command("reset", "reset_shared_key")
        g.generic_update_command("update", setter_name="set_shared_key")

    with self.command_group(
        "network vpn-connection ipsec-policy", network_vpn_sdk, min_api="2017-03-01"
    ) as g:
        g.custom_command(
            "add",
            "add_vpn_conn_ipsec_policy",
            no_wait_param="no_wait",
            doc_string_source="IpsecPolicy",
        )
        g.custom_command("list", "list_vpn_conn_ipsec_policies")
        g.custom_command(
            "clear", "clear_vpn_conn_ipsec_policies", no_wait_param="no_wait"
        )