From 26ed2d2ca4cedc5aa8d2ed816b018881366063d0 Mon Sep 17 00:00:00 2001 From: zhoxing Date: Tue, 18 May 2021 16:56:36 +0800 Subject: [PATCH] Add compatible logic for track 2 migration of resource module --- src/aks-preview/HISTORY.md | 5 ++ src/aks-preview/azext_aks_preview/custom.py | 49 +++++++++---------- src/aks-preview/setup.py | 2 +- src/connectedk8s/HISTORY.rst | 4 ++ src/connectedk8s/azext_connectedk8s/custom.py | 6 ++- src/connectedk8s/setup.py | 2 +- src/db-up/HISTORY.rst | 4 ++ src/db-up/azext_db_up/custom.py | 2 +- src/db-up/setup.py | 2 +- src/k8s-extension/HISTORY.rst | 5 ++ .../azext_k8s_extension/custom.py | 3 +- .../partner_extensions/ContainerInsights.py | 49 +++++++++---------- src/k8s-extension/setup.py | 2 +- src/mesh/HISTORY.rst | 6 +++ src/mesh/azext_mesh/custom.py | 22 ++++++--- src/mesh/setup.py | 2 +- src/service_name.json | 5 ++ 17 files changed, 101 insertions(+), 69 deletions(-) diff --git a/src/aks-preview/HISTORY.md b/src/aks-preview/HISTORY.md index 5cd5de8f051..b0a530afb65 100644 --- a/src/aks-preview/HISTORY.md +++ b/src/aks-preview/HISTORY.md @@ -2,6 +2,11 @@ Release History =============== + +0.5.13 ++++++ +* Add compatible logic for the track 2 migration of resource dependence + 0.5.12 +++++ * Add --enable-azure-rbac and --disable-azure-rbac in aks update diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index 0d13f548e0a..f8965f8f10e 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -317,20 +317,16 @@ def _invoke_deployment(cmd, resource_group_name, deployment_name, template, para logger.info(json.dumps(template, indent=2)) logger.info('==== END TEMPLATE ====') - if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES): - Deployment = cmd.get_models( - 'Deployment', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) - deployment = Deployment(properties=properties) - - if validate: - validation_poller = smc.validate( - resource_group_name, deployment_name, deployment) + Deployment = cmd.get_models('Deployment', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + deployment = Deployment(properties=properties) + if validate: + if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES): + validation_poller = smc.begin_validate(resource_group_name, deployment_name, deployment) return LongRunningOperation(cmd.cli_ctx)(validation_poller) - return sdk_no_wait(no_wait, smc.create_or_update, resource_group_name, deployment_name, deployment) + else: + return smc.validate(resource_group_name, deployment_name, deployment) - if validate: - return smc.validate(resource_group_name, deployment_name, properties) - return sdk_no_wait(no_wait, smc.create_or_update, resource_group_name, deployment_name, properties) + return sdk_no_wait(no_wait, smc.begin_create_or_update, resource_group_name, deployment_name, deployment) def create_application(client, display_name, homepage, identifier_uris, @@ -2598,29 +2594,27 @@ def _ensure_default_log_analytics_workspace_for_monitoring(cmd, subscription_id, resource_groups = cf_resource_groups(cmd.cli_ctx, subscription_id) resources = cf_resources(cmd.cli_ctx, subscription_id) + from azure.cli.core.profiles import ResourceType # check if default RG exists if resource_groups.check_existence(default_workspace_resource_group): + from azure.core.exceptions import HttpResponseError try: resource = resources.get_by_id( default_workspace_resource_id, '2015-11-01-preview') return resource.id - except CloudError as ex: + except HttpResponseError as ex: if ex.status_code != 404: raise ex else: - resource_groups.create_or_update(default_workspace_resource_group, { - 'location': workspace_region}) - - default_workspace_params = { - 'location': workspace_region, - 'properties': { - 'sku': { - 'name': 'standalone' - } - } - } - async_poller = resources.create_or_update_by_id(default_workspace_resource_id, '2015-11-01-preview', - default_workspace_params) + ResourceGroup = cmd.get_models('ResourceGroup', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + resource_group = ResourceGroup(location=workspace_region) + resource_groups.create_or_update(default_workspace_resource_group, resource_group) + + GenericResource = cmd.get_models('GenericResource', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + generic_resource = GenericResource(location=workspace_region, properties={'sku': {'name': 'standalone'}}) + + async_poller = resources.begin_create_or_update_by_id(default_workspace_resource_id, '2015-11-01-preview', + generic_resource) ws_resource_id = '' while True: @@ -2669,11 +2663,12 @@ def _ensure_container_insights_for_monitoring(cmd, addon): # region of workspace can be different from region of RG so find the location of the workspace_resource_id resources = cf_resources(cmd.cli_ctx, subscription_id) + from azure.core.exceptions import HttpResponseError try: resource = resources.get_by_id( workspace_resource_id, '2015-11-01-preview') location = resource.location - except CloudError as ex: + except HttpResponseError as ex: raise ex unix_time_in_millis = int( diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index 6ac84f718d6..45e9442e7cc 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -8,7 +8,7 @@ from codecs import open as open1 from setuptools import setup, find_packages -VERSION = "0.5.12" +VERSION = "0.5.13" CLASSIFIERS = [ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', diff --git a/src/connectedk8s/HISTORY.rst b/src/connectedk8s/HISTORY.rst index 64929b2ec41..22bfc6a4882 100644 --- a/src/connectedk8s/HISTORY.rst +++ b/src/connectedk8s/HISTORY.rst @@ -3,6 +3,10 @@ Release History =============== +1.1.4 +++++++ +* Add compatible logic for the track 2 migration of resource dependence + 1.1.3 ++++++ * Fix for list_node() sdk function for AKS v1.19.x clusters diff --git a/src/connectedk8s/azext_connectedk8s/custom.py b/src/connectedk8s/azext_connectedk8s/custom.py index c5d5192a5d4..079430647ef 100644 --- a/src/connectedk8s/azext_connectedk8s/custom.py +++ b/src/connectedk8s/azext_connectedk8s/custom.py @@ -201,9 +201,11 @@ def create_connectedk8s(cmd, client, resource_group_name, cluster_name, https_pr # Resource group Creation if resource_group_exists(cmd.cli_ctx, resource_group_name, subscription_id) is False: - resource_group_params = {'location': location} + from azure.cli.core.profiles import ResourceType + ResourceGroup = cmd.get_models('ResourceGroup', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + parameters = ResourceGroup(location=location) try: - resourceClient.resource_groups.create_or_update(resource_group_name, resource_group_params) + resourceClient.resource_groups.create_or_update(resource_group_name, parameters) except Exception as e: # pylint: disable=broad-except utils.arm_exception_handler(e, consts.Create_ResourceGroup_Fault_Type, 'Failed to create the resource group') diff --git a/src/connectedk8s/setup.py b/src/connectedk8s/setup.py index 20deb5fc240..53a133b0677 100644 --- a/src/connectedk8s/setup.py +++ b/src/connectedk8s/setup.py @@ -17,7 +17,7 @@ # TODO: Confirm this is the right version number you want and it matches your # HISTORY.rst entry. -VERSION = '1.1.3' +VERSION = '1.1.4' # The full list of classifiers is available at # https://pypi.python.org/pypi?%3Aaction=list_classifiers diff --git a/src/db-up/HISTORY.rst b/src/db-up/HISTORY.rst index e28550086f1..1eed22b70f6 100644 --- a/src/db-up/HISTORY.rst +++ b/src/db-up/HISTORY.rst @@ -3,6 +3,10 @@ Release History =============== +0.2.3 (2021-05-10) +++++++++++++++++++ +* Add compatible logic for the track 2 migration of resource dependence + 0.2.2 (2021-03-22) ++++++++++++++++++ * Configure for custom cloud settings diff --git a/src/db-up/azext_db_up/custom.py b/src/db-up/azext_db_up/custom.py index fac6cbaa43b..55fc5ccc24c 100644 --- a/src/db-up/azext_db_up/custom.py +++ b/src/db-up/azext_db_up/custom.py @@ -224,7 +224,7 @@ def server_down(cmd, client, resource_group_name=None, server_name=None, delete_ # delete resource group logger.warning('Deleting Resource Group \'%s\'...', resource_group_name) - return resource_client.resource_groups.delete(resource_group_name) + return resource_client.resource_groups.begin_delete(resource_group_name) logger.warning('Deleting server \'%s\'...', server_name) return client.delete(resource_group_name, server_name) diff --git a/src/db-up/setup.py b/src/db-up/setup.py index 6259c346703..ebe80740a49 100644 --- a/src/db-up/setup.py +++ b/src/db-up/setup.py @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup, find_packages -VERSION = "0.2.2" +VERSION = "0.2.3" CLASSIFIERS = [ 'Development Status :: 4 - Beta', diff --git a/src/k8s-extension/HISTORY.rst b/src/k8s-extension/HISTORY.rst index 75f127f4afd..d0e19128855 100644 --- a/src/k8s-extension/HISTORY.rst +++ b/src/k8s-extension/HISTORY.rst @@ -3,6 +3,11 @@ Release History =============== +0.4.1 +++++++++++++++++++ + +* Add compatible logic for the track 2 migration of resource dependence + 0.4.0 ++++++++++++++++++ diff --git a/src/k8s-extension/azext_k8s_extension/custom.py b/src/k8s-extension/azext_k8s_extension/custom.py index f4f2e1cafdd..f2fae3f54d4 100644 --- a/src/k8s-extension/azext_k8s_extension/custom.py +++ b/src/k8s-extension/azext_k8s_extension/custom.py @@ -223,10 +223,11 @@ def __create_identity(cmd, resource_group_name, cluster_name, cluster_type, clus "Error! Cluster type '{}' is not supported for extension identity".format(cluster_type) ) + from azure.core.exceptions import HttpResponseError try: resource = resources.get_by_id(cluster_resource_id, parent_api_version) location = str(resource.location.lower()) - except CloudError as ex: + except HttpResponseError as ex: raise ex identity_type = "SystemAssigned" diff --git a/src/k8s-extension/azext_k8s_extension/partner_extensions/ContainerInsights.py b/src/k8s-extension/azext_k8s_extension/partner_extensions/ContainerInsights.py index 00e82257e2d..3514122e391 100644 --- a/src/k8s-extension/azext_k8s_extension/partner_extensions/ContainerInsights.py +++ b/src/k8s-extension/azext_k8s_extension/partner_extensions/ContainerInsights.py @@ -98,18 +98,16 @@ def _invoke_deployment(cmd, resource_group_name, deployment_name, template, para logger.info(json.dumps(template, indent=2)) logger.info('==== END TEMPLATE ====') - if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES): - deployment_temp = cmd.get_models('Deployment', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) - deployment = deployment_temp(properties=properties) - - if validate: - validation_poller = smc.validate(resource_group_name, deployment_name, deployment) + deployment_temp = cmd.get_models('Deployment', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + deployment = deployment_temp(properties=properties) + if validate: + if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES): + validation_poller = smc.begin_validate(resource_group_name, deployment_name, deployment) return LongRunningOperation(cmd.cli_ctx)(validation_poller) - return sdk_no_wait(no_wait, smc.create_or_update, resource_group_name, deployment_name, deployment) + else: + return smc.validate(resource_group_name, deployment_name, deployment) - if validate: - return smc.validate(resource_group_name, deployment_name, properties) - return sdk_no_wait(no_wait, smc.create_or_update, resource_group_name, deployment_name, properties) + return sdk_no_wait(no_wait, smc.begin_create_or_update, resource_group_name, deployment_name, deployment) def _ensure_default_log_analytics_workspace_for_monitoring(cmd, subscription_id, @@ -201,6 +199,9 @@ def _ensure_default_log_analytics_workspace_for_monitoring(cmd, subscription_id, "usgovvirginia": "usgovvirginia" } + from azure.core.exceptions import HttpResponseError + from azure.cli.core.profiles import ResourceType + cluster_location = '' resources = cf_resources(cmd.cli_ctx, subscription_id) @@ -209,7 +210,7 @@ def _ensure_default_log_analytics_workspace_for_monitoring(cmd, subscription_id, try: resource = resources.get_by_id(cluster_resource_id, '2020-01-01-preview') cluster_location = resource.location.lower() - except CloudError as ex: + except HttpResponseError as ex: raise ex cloud_name = cmd.cli_ctx.cloud.name.lower() @@ -261,23 +262,18 @@ def _ensure_default_log_analytics_workspace_for_monitoring(cmd, subscription_id, try: resource = resources.get_by_id(default_workspace_resource_id, '2015-11-01-preview') return resource.id - except CloudError as ex: + except HttpResponseError as ex: if ex.status_code != 404: raise ex else: - resource_groups.create_or_update(default_workspace_resource_group, { - 'location': workspace_region}) - - default_workspace_params = { - 'location': workspace_region, - 'properties': { - 'sku': { - 'name': 'standalone' - } - } - } - async_poller = resources.create_or_update_by_id(default_workspace_resource_id, '2015-11-01-preview', - default_workspace_params) + ResourceGroup = cmd.get_models('ResourceGroup', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + resource_group = ResourceGroup(location=workspace_region) + resource_groups.create_or_update(default_workspace_resource_group, resource_group) + + GenericResource = cmd.get_models('GenericResource', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES) + generic_resource = GenericResource(location=workspace_region, properties={'sku': {'name': 'standalone'}}) + async_poller = resources.begin_create_or_update_by_id(default_workspace_resource_id, '2015-11-01-preview', + generic_resource) ws_resource_id = '' while True: @@ -294,11 +290,12 @@ def _ensure_container_insights_for_monitoring(cmd, workspace_resource_id): parsed = parse_resource_id(workspace_resource_id) subscription_id, resource_group = parsed["subscription"], parsed["resource_group"] + from azure.core.exceptions import HttpResponseError resources = cf_resources(cmd.cli_ctx, subscription_id) try: resource = resources.get_by_id(workspace_resource_id, '2015-11-01-preview') location = resource.location - except CloudError as ex: + except HttpResponseError as ex: raise ex unix_time_in_millis = int( diff --git a/src/k8s-extension/setup.py b/src/k8s-extension/setup.py index 64819fc940a..4cc69f2cbef 100644 --- a/src/k8s-extension/setup.py +++ b/src/k8s-extension/setup.py @@ -32,7 +32,7 @@ # TODO: Add any additional SDK dependencies here DEPENDENCIES = [] -VERSION = "0.4.0" +VERSION = "0.4.1" with open('README.rst', 'r', encoding='utf-8') as f: README = f.read() diff --git a/src/mesh/HISTORY.rst b/src/mesh/HISTORY.rst index a5e43276f83..1c29d39fba6 100644 --- a/src/mesh/HISTORY.rst +++ b/src/mesh/HISTORY.rst @@ -2,6 +2,12 @@ Release History =============== + +0.10.7 (2021-5-10) +++++++++++++++++++ + +* Add compatible logic for the track 2 migration of resource dependence + 0.10.6 (2019-6-24) ++++++++++++++++++ diff --git a/src/mesh/azext_mesh/custom.py b/src/mesh/azext_mesh/custom.py index f20395c8551..03e02dcf28f 100644 --- a/src/mesh/azext_mesh/custom.py +++ b/src/mesh/azext_mesh/custom.py @@ -240,12 +240,14 @@ def _generate_arm_template_core(input_yaml_files=None, parameters=None): logger.warning("Generated ARM template file at %s.", output_file_path) -def _deploy_arm_template_core(cli_ctx, resource_group_name, # pylint: disable=too-many-arguments +def _deploy_arm_template_core(cmd, resource_group_name, # pylint: disable=too-many-arguments template_file=None, template_uri=None, input_yaml_files=None, deployment_name=None, parameters=None, mode=None, validate_only=False, no_wait=False): - DeploymentProperties, TemplateLink = get_sdk(cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES, - 'DeploymentProperties', 'TemplateLink', mod='models') + DeploymentProperties, TemplateLink, Deployment = get_sdk(cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES, + 'DeploymentProperties', 'TemplateLink', 'Deployment', + mod='models') + template = None template_link = None template_obj = None @@ -275,21 +277,27 @@ def _deploy_arm_template_core(cli_ctx, resource_group_name, # pylint: disable=t parameters=parameters, mode=mode) # workaround properties.mode = 'incremental' - smc = get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES) + smc = get_mgmt_service_client(cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES).deployments + deployment = Deployment(properties=properties) logger.warning("Deploying . . .") logger.warning("You can get the state of the deployment with the cmd") logger.warning("az group deployment show --name %s --resource-group %s", deployment_name, resource_group_name) if validate_only: - return sdk_no_wait(no_wait, smc.deployments.validate, resource_group_name, deployment_name, properties) + if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES): + from azure.cli.core.commands import LongRunningOperation + validation_poller = smc.begin_validate(resource_group_name, deployment_name, deployment) + return LongRunningOperation(cmd.cli_ctx)(validation_poller) + else: + return sdk_no_wait(no_wait, smc.validate, resource_group_name, deployment_name, deployment) - return sdk_no_wait(no_wait, smc.deployments.create_or_update, resource_group_name, deployment_name, properties) + return sdk_no_wait(no_wait, smc.begin_create_or_update, resource_group_name, deployment_name, deployment) def deploy_arm_template(cmd, resource_group_name, template_file=None, template_uri=None, input_yaml_files=None, deployment_name=None, parameters=None, mode=None, no_wait=False): - return _deploy_arm_template_core(cmd.cli_ctx, resource_group_name, template_file, template_uri, + return _deploy_arm_template_core(cmd, resource_group_name, template_file, template_uri, input_yaml_files, deployment_name, parameters, mode, no_wait=no_wait) diff --git a/src/mesh/setup.py b/src/mesh/setup.py index cc0927088d8..99d0d8baeea 100644 --- a/src/mesh/setup.py +++ b/src/mesh/setup.py @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup, find_packages -VERSION = "0.10.6" +VERSION = "0.10.7" CLASSIFIERS = [ diff --git a/src/service_name.json b/src/service_name.json index 45b19581527..9b715bf16d3 100644 --- a/src/service_name.json +++ b/src/service_name.json @@ -334,6 +334,11 @@ "AzureServiceName": "Azure Spring Cloud", "URL": "https://docs.microsoft.com/azure/spring-cloud/" }, + { + "Command": "az sql", + "AzureServiceName": "Azure SQL", + "URL": "https://docs.microsoft.com/en-us/azure/azure-sql/" + }, { "Command": "az ssh", "AzureServiceName": "Azure Virtual Machines",