diff --git a/src/azure-cli/HISTORY.rst b/src/azure-cli/HISTORY.rst index 7d133b53fd1..de677d73553 100644 --- a/src/azure-cli/HISTORY.rst +++ b/src/azure-cli/HISTORY.rst @@ -19,6 +19,10 @@ Release History * [BREAKING CHANGE] Removed --failover-region parameter from manual-failover. Now it will failover to assigned geo-paired secondary region. +**Network** + +* az network list-service-aliases: support list service aliases which can be used for Service Endpoint Policies + **Packaging** * Add back edge builds for pip install diff --git a/src/azure-cli/azure/cli/command_modules/network/_client_factory.py b/src/azure-cli/azure/cli/command_modules/network/_client_factory.py index d4f3633f137..e9b49f9426c 100644 --- a/src/azure-cli/azure/cli/command_modules/network/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/network/_client_factory.py @@ -184,6 +184,10 @@ def cf_virtual_network_peerings(cli_ctx, _): return network_client_factory(cli_ctx).virtual_network_peerings +def cf_service_aliases(cli_ctx, _): + return network_client_factory(cli_ctx).available_service_aliases + + def cf_traffic_manager_mgmt_profiles(cli_ctx, _): from azure.mgmt.trafficmanager import TrafficManagerManagementClient from azure.cli.core.commands.client_factory import get_mgmt_service_client diff --git a/src/azure-cli/azure/cli/command_modules/network/_help.py b/src/azure-cli/azure/cli/command_modules/network/_help.py index de50742f512..61582f2a529 100644 --- a/src/azure-cli/azure/cli/command_modules/network/_help.py +++ b/src/azure-cli/azure/cli/command_modules/network/_help.py @@ -5137,3 +5137,8 @@ --resource-type vpnConnection --storage-account MyStorageAccount \\ --storage-path https://{storageAccountName}.blob.core.windows.net/{containerName} """ + +helps['network list-service-aliases'] = """ +type: command +short-summary: List available service aliases in the region which can be used for Service Endpoint Policies. +""" diff --git a/src/azure-cli/azure/cli/command_modules/network/commands.py b/src/azure-cli/azure/cli/command_modules/network/commands.py index cfa9f69e201..e67ace77f11 100644 --- a/src/azure-cli/azure/cli/command_modules/network/commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/commands.py @@ -27,7 +27,7 @@ cf_express_route_circuit_connections, cf_express_route_gateways, cf_express_route_connections, cf_express_route_ports, cf_express_route_port_locations, cf_express_route_links, cf_app_gateway_waf_policy, cf_service_tags, cf_private_link_services, cf_private_endpoint_types, cf_peer_express_route_circuit_connections, - cf_virtual_router, cf_virtual_router_peering) + cf_virtual_router, cf_virtual_router_peering, cf_service_aliases) from azure.cli.command_modules.network._util import ( list_network_resource_property, get_network_resource_property_entry, delete_network_resource_property_entry) from azure.cli.command_modules.network._format import ( @@ -326,6 +326,12 @@ def load_command_table(self, _): min_api='2019-08-01' ) + network_service_aliases_sdk = CliCommandType( + operations_tmpl='azure.mgmt.network.operations#AvailableServiceAliasesOperations.{}', + client_factory=cf_service_aliases, + min_api='2019-08-01' + ) + network_custom = CliCommandType(operations_tmpl='azure.cli.command_modules.network.custom#{}') # endregion @@ -337,6 +343,7 @@ def load_command_table(self, _): with self.command_group('network', network_service_tags_sdk) as g: g.command('list-service-tags', 'list') + g.custom_command('list-service-aliases', 'list_service_aliases', command_type=network_service_aliases_sdk) # endregion # region ApplicationGateways diff --git a/src/azure-cli/azure/cli/command_modules/network/custom.py b/src/azure-cli/azure/cli/command_modules/network/custom.py index 36fc9101255..fb016032f8c 100644 --- a/src/azure-cli/azure/cli/command_modules/network/custom.py +++ b/src/azure-cli/azure/cli/command_modules/network/custom.py @@ -4796,3 +4796,12 @@ def update_virtual_router_peering(cmd, instance, peer_asn=None, peer_ip=None): c.set_param('peer_ip', peer_ip) return instance # endregion + + +# region service aliases +def list_service_aliases(cmd, location, resource_group_name=None): + client = network_client_factory(cmd.cli_ctx).available_service_aliases + if resource_group_name is not None: + return client.list_by_resource_group(resource_group_name=resource_group_name, location=location) + return client.list(location=location) +# endregion diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_service_aliases.yaml b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_service_aliases.yaml new file mode 100644 index 00000000000..9d2e81e8dc5 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/recordings/test_network_service_aliases.yaml @@ -0,0 +1,190 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network service-aliases list + Connection: + - keep-alive + ParameterSetName: + - -l + User-Agent: + - python/3.7.4 (Windows-10-10.0.18362-SP0) msrest/0.6.10 msrest_azure/0.6.2 + azure-mgmt-network/7.0.0 Azure-SDK-For-Python AZURECLI/2.0.77 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/centralus/availableServiceAliases?api-version=2019-09-01 + response: + body: + string: "{\r\n \"value\": [\r\n {\r\n \"name\": \"servicesAzure\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzure\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure\"\r\n },\r\n {\r\n \"name\": \"servicesAzureActiveDirectory\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureActiveDirectory\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ActiveDirectory\"\r\n },\r\n {\r\n \"name\": + \"servicesAzureAKS\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureAKS\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/AKS\"\r\n },\r\n {\r\n \"name\": \"servicesAzureApiManagement\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureApiManagement\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ApiManagement\"\r\n },\r\n {\r\n \"name\": \"servicesAzureBackup\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureBackup\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Backup\"\r\n },\r\n {\r\n \"name\": \"servicesAzureBatch\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureBatch\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Batch\"\r\n },\r\n {\r\n \"name\": \"servicesAzureDatabricks\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureDatabricks\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Databricks\"\r\n },\r\n {\r\n \"name\": \"servicesAzureDataFactory\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureDataFactory\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/DataFactory\"\r\n },\r\n {\r\n \"name\": \"servicesAzureFirewall\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureFirewall\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Firewall\"\r\n },\r\n {\r\n \"name\": \"servicesAzureHDI\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureHDI\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/HDI\"\r\n },\r\n {\r\n \"name\": \"servicesAzureLogicApps\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureLogicApps\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/LogicApps\"\r\n },\r\n {\r\n \"name\": \"servicesAzureManagedInstance\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureManagedInstance\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ManagedInstance\"\r\n },\r\n {\r\n \"name\": + \"servicesAzureRedisCache\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureRedisCache\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/RedisCache\"\r\n },\r\n {\r\n \"name\": \"servicesAzureWebPI\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureWebPI\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/WebPI\"\r\n }\r\n ]\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '4322' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 02 Dec 2019 06:50:33 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - fd9ec1b9-6ee3-4794-aa0f-f77d597e2ea4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network service-aliases list + Connection: + - keep-alive + ParameterSetName: + - -l -g + User-Agent: + - python/3.7.4 (Windows-10-10.0.18362-SP0) msrest/0.6.10 msrest_azure/0.6.2 + azure-mgmt-network/7.0.0 Azure-SDK-For-Python AZURECLI/2.0.77 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test_network_service_aliases000001/providers/Microsoft.Network/locations/centralus/availableServiceAliases?api-version=2019-09-01 + response: + body: + string: "{\r\n \"value\": [\r\n {\r\n \"name\": \"servicesAzure\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzure\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure\"\r\n },\r\n {\r\n \"name\": \"servicesAzureActiveDirectory\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureActiveDirectory\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ActiveDirectory\"\r\n },\r\n {\r\n \"name\": + \"servicesAzureAKS\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureAKS\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/AKS\"\r\n },\r\n {\r\n \"name\": \"servicesAzureApiManagement\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureApiManagement\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ApiManagement\"\r\n },\r\n {\r\n \"name\": \"servicesAzureBackup\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureBackup\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Backup\"\r\n },\r\n {\r\n \"name\": \"servicesAzureBatch\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureBatch\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Batch\"\r\n },\r\n {\r\n \"name\": \"servicesAzureDatabricks\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureDatabricks\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Databricks\"\r\n },\r\n {\r\n \"name\": \"servicesAzureDataFactory\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureDataFactory\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/DataFactory\"\r\n },\r\n {\r\n \"name\": \"servicesAzureFirewall\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureFirewall\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/Firewall\"\r\n },\r\n {\r\n \"name\": \"servicesAzureHDI\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureHDI\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/HDI\"\r\n },\r\n {\r\n \"name\": \"servicesAzureLogicApps\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureLogicApps\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/LogicApps\"\r\n },\r\n {\r\n \"name\": \"servicesAzureManagedInstance\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureManagedInstance\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/ManagedInstance\"\r\n },\r\n {\r\n \"name\": + \"servicesAzureRedisCache\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureRedisCache\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/RedisCache\"\r\n },\r\n {\r\n \"name\": \"servicesAzureWebPI\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroup/test_network_service_aliases000001/providers/Microsoft.Network/AvailableServiceAliases/servicesAzureWebPI\",\r\n + \ \"type\": \"Microsoft.Network/AvailableServiceAliases\",\r\n \"resourceName\": + \"/services/Azure/WebPI\"\r\n }\r\n ]\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '5582' + content-type: + - application/json; charset=utf-8 + date: + - Mon, 02 Dec 2019 06:50:34 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 31bc3a7d-c047-4268-8a6c-e489cb63dc66 + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py index 2479dccc10e..95c77e44f7d 100644 --- a/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py +++ b/src/azure-cli/azure/cli/command_modules/network/tests/latest/test_network_commands.py @@ -3271,5 +3271,16 @@ def test_network_profile(self, resource_group): self.cmd('network profile delete -g {rg} -n dummy -y') +class NetworkServiceAliasesScenarioTest(ScenarioTest): + + @ResourceGroupPreparer(name_prefix='test_network_service_aliases') + def test_network_service_aliases(self, resource_group): + self.kwargs.update({ + 'rg': resource_group + }) + self.cmd('network list-service-aliases -l centralus') + self.cmd('network list-service-aliases -l centralus -g {rg}') + + if __name__ == '__main__': unittest.main()