From b4b0161bc65c35fe6205b1abc19ea6f71973fd5c Mon Sep 17 00:00:00 2001 From: ninpan-ms <71061174+ninpan-ms@users.noreply.github.com> Date: Mon, 13 Dec 2021 15:41:13 +0800 Subject: [PATCH] fix app bind/unbind (#34) --- .../azext_spring_cloud/_enterprise.py | 8 ++- .../_validators_enterprise.py | 8 +-- .../application_configuration_service.py | 50 ++++++++++++------- .../azext_spring_cloud/service_registry.py | 46 ++++++++++++----- 4 files changed, 74 insertions(+), 38 deletions(-) diff --git a/src/spring-cloud/azext_spring_cloud/_enterprise.py b/src/spring-cloud/azext_spring_cloud/_enterprise.py index eb9225c52fb..179a1b88772 100644 --- a/src/spring-cloud/azext_spring_cloud/_enterprise.py +++ b/src/spring-cloud/azext_spring_cloud/_enterprise.py @@ -295,13 +295,11 @@ def _request_upload_url(client, resource_group, service, name): def _get_addon_configs(config_file_patterns): - patterns = models.AddonProfile( - properties = { + addon_configs = { + APPLICATION_CONFIGURATION_SERVICE_NAME: { APPLICATION_CONFIGURATION_SERVICE_PROPERTY_PATTERN: config_file_patterns } - ) - addon_configs = {} - addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME] = patterns + } return addon_configs diff --git a/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py b/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py index 805def0ea91..16ec779af64 100644 --- a/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py +++ b/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py @@ -41,9 +41,8 @@ def validate_memory(namespace): def validate_git_uri(namespace): uri = namespace.uri - if uri and (uri.startswith("https://") or uri.startswith("git@")): - return - raise CLIError("Git URI should start with \"https://\" or \"git@\"") + if uri and (not uri.startswith("https://")) and (not uri.startswith("git@")): + raise CLIError("Git URI should start with \"https://\" or \"git@\"") def validate_config_file_patterns(namespace): @@ -52,7 +51,8 @@ def validate_config_file_patterns(namespace): def validate_acs_patterns(namespace): - _validate_patterns(namespace.patterns) + if namespace.patterns: + _validate_patterns(namespace.patterns) def _validate_patterns(patterns): diff --git a/src/spring-cloud/azext_spring_cloud/application_configuration_service.py b/src/spring-cloud/azext_spring_cloud/application_configuration_service.py index 039ff5a82e9..4bd8a955c61 100644 --- a/src/spring-cloud/azext_spring_cloud/application_configuration_service.py +++ b/src/spring-cloud/azext_spring_cloud/application_configuration_service.py @@ -6,26 +6,29 @@ # pylint: disable=unused-argument, logging-format-interpolation, protected-access, wrong-import-order, too-many-lines import json -from ._enterprise import app_get_enterprise -from ._util_enterprise import (is_enterprise_tier, get_client) from .vendored_sdks.appplatform.v2022_01_01_preview import models as models -from azure.cli.core.commands import cached_put +from azure.cli.core.commands.client_factory import get_subscription_id from azure.cli.core.util import sdk_no_wait from knack.log import get_logger from knack.util import CLIError +from msrestazure.tools import resource_id -APPLICATION_CONFIGURATION_SERVICE_NAME = "ApplicationConfigurationService" +APPLICATION_CONFIGURATION_SERVICE_NAME = "applicationConfigurationService" +RESOURCE_ID = "resourceId" + +RESOURCE_TYPE = "configurationServices" +DEFAULT_NAME = "default" logger = get_logger(__name__) def application_configuration_service_show(cmd, client, service, resource_group): - return client.configuration_services.get(resource_group, service) + return client.configuration_services.get(resource_group, service, DEFAULT_NAME) def application_configuration_service_clear(cmd, client, service, resource_group): properties = models.ConfigurationServiceGitProperty() acs_resource = models.ConfigurationServiceResource(properties=properties) - return client.configuration_services.begin_create_or_update(resource_group, service, acs_resource) + return client.configuration_services.begin_create_or_update(resource_group, service, DEFAULT_NAME, acs_resource) def application_configuration_service_git_add(cmd, client, service, resource_group, @@ -51,7 +54,7 @@ def application_configuration_service_git_add(cmd, client, service, resource_gro _validate_acs_settings(client, resource_group, service, acs_resource.properties.settings) logger.warning("[2/2] Adding item to Application Configuration Service settings, (this operation can take a while to complete)") - return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, acs_resource) + return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, DEFAULT_NAME, acs_resource) def application_configuration_service_git_update(cmd, client, service, resource_group, name, @@ -67,18 +70,17 @@ def application_configuration_service_git_update(cmd, client, service, resource_ strict_host_key_checking=None, no_wait=False): acs_resource = _get_or_default_acs_resource(client, resource_group, service) - repo = _get_existing_repo(acs_resource.properties.settings.git_property.repositories, name) repo = _replace_repo_with_input(repo, patterns, uri, label, search_paths, username, password, host_key, host_key_algorithm, private_key, strict_host_key_checking) _validate_acs_settings(client, resource_group, service, acs_resource.properties.settings) logger.warning("[2/2] Updating item of Application Configuration Service settings, (this operation can take a while to complete)") - return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, acs_resource) + return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, DEFAULT_NAME, acs_resource) def application_configuration_service_git_remove(cmd, client, service, resource_group, name, no_wait=False): - acs_resource = _get_or_default_acs_resource(acs_resource) + acs_resource = _get_or_default_acs_resource(client, resource_group, service) repo = _get_existing_repo(acs_resource.properties.settings.git_property.repositories, name) acs_resource.properties.settings.git_property.repositories.remove(repo) @@ -86,11 +88,11 @@ def application_configuration_service_git_remove(cmd, client, service, resource_ _validate_acs_settings(client, resource_group, service, acs_resource.properties.settings) logger.warning("[2/2] Removing item of Application Configuration Service settings, (this operation can take a while to complete)") - return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, acs_resource) + return sdk_no_wait(no_wait, client.configuration_services.begin_create_or_update, resource_group, service, DEFAULT_NAME, acs_resource) def application_configuration_service_git_list(cmd, client, service, resource_group): - acs_resource = client.configuration_services.get(resource_group, service) + acs_resource = client.configuration_services.get(resource_group, service, DEFAULT_NAME) acs_settings = acs_resource.properties.settings if not acs_settings or not acs_settings.git_property or not acs_settings.git_property.repositories: @@ -111,11 +113,23 @@ def _acs_bind_or_unbind_app(cmd, client, service, resource_group, app_name, enab app = client.apps.get(resource_group, service, app_name) app.properties.addon_configs = _get_app_addon_configs_with_acs(app.properties.addon_configs) - if app.properties.addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME].enabled == enabled: + if (app.properties.addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME][RESOURCE_ID] != "") == enabled: logger.warning('App "{}" has been {}binded'.format(app_name, '' if enabled else 'un')) return - app.properties.addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME].enabled = enabled + acs_id = resource_id( + subscription=get_subscription_id(cmd.cli_ctx), + resource_group=resource_group, + namespace='Microsoft.AppPlatform', + type='Spring', + name=service, + child_type_1=RESOURCE_TYPE, + child_name_1=DEFAULT_NAME + ) + if enabled: + app.properties.addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME][RESOURCE_ID] = acs_id + else: + app.properties.addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME][RESOURCE_ID] = "" return client.apps.begin_update(resource_group, service, app_name, app) @@ -123,7 +137,9 @@ def _get_app_addon_configs_with_acs(addon_configs): if addon_configs is None: addon_configs = {} if addon_configs.get(APPLICATION_CONFIGURATION_SERVICE_NAME) is None: - addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME] = models.AddonProfile() + addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME] = {} + if addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME].get(RESOURCE_ID) is None: + addon_configs[APPLICATION_CONFIGURATION_SERVICE_NAME][RESOURCE_ID] = "" return addon_configs @@ -154,7 +170,7 @@ def _get_existing_repo(repos, name): def _get_or_default_acs_resource(client, resource_group, service): - acs_resource = client.configuration_services.get(resource_group, service) + acs_resource = client.configuration_services.get(resource_group, service, DEFAULT_NAME) if acs_resource is None: acs_resource = models.ConfigurationServiceResource() acs_resource.properties = _get_acs_properties(acs_resource.properties) @@ -193,7 +209,7 @@ def _validate_acs_settings(client, resource_group, service, acs_settings): return try: - result = sdk_no_wait(False, client.configuration_services.begin_validate, resource_group, service, acs_settings).result() + result = sdk_no_wait(False, client.configuration_services.begin_validate, resource_group, service, DEFAULT_NAME, acs_settings).result() except Exception as err: # pylint: disable=broad-except raise CLIError("{0}. You may raise a support ticket if needed by the following link: https://docs.microsoft.com/azure/spring-cloud/spring-cloud-faq?pivots=programming-language-java#how-can-i-provide-feedback-and-report-issues".format(err)) diff --git a/src/spring-cloud/azext_spring_cloud/service_registry.py b/src/spring-cloud/azext_spring_cloud/service_registry.py index a79ab666b57..0f9de6d2d6a 100644 --- a/src/spring-cloud/azext_spring_cloud/service_registry.py +++ b/src/spring-cloud/azext_spring_cloud/service_registry.py @@ -4,20 +4,21 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=unused-argument, logging-format-interpolation, protected-access, wrong-import-order, too-many-lines -from ._enterprise import app_get_enterprise -from ._util_enterprise import (is_enterprise_tier, get_client) from .vendored_sdks.appplatform.v2022_01_01_preview import models as models -from azure.cli.core.commands import cached_put -from azure.cli.core.util import sdk_no_wait +from azure.cli.core.commands.client_factory import get_subscription_id from knack.log import get_logger -from knack.util import CLIError +from msrestazure.tools import resource_id -SERVICE_REGISTRY_NAME = "ServiceRegistry" +SERVICE_REGISTRY_NAME = "serviceRegistry" +RESOURCE_ID = "resourceId" + +RESOURCE_TYPE = "serviceRegistries" +DEFAULT_NAME = "default" logger = get_logger(__name__) def service_registry_show(cmd, client, service, resource_group): - return client.service_registries.get(resource_group, service) + return client.service_registries.get(resource_group, service, DEFAULT_NAME) def service_registry_bind(cmd, client, service, resource_group, app): @@ -30,13 +31,34 @@ def service_registry_unbind(cmd, client, service, resource_group, app): def _service_registry_bind_or_unbind_app(cmd, client, service, resource_group, app_name, enabled): app = client.apps.get(resource_group, service, app_name) - app.properties.addon_configs = { - SERVICE_REGISTRY_NAME: models.AddonProfile() - } if app.properties.addon_configs is None else app.properties.addon_configs + app.properties.addon_configs = _get_app_addon_configs_with_service_registry(app.properties.addon_configs) - if app.properties.addon_configs[SERVICE_REGISTRY_NAME].enabled == enabled: + if (app.properties.addon_configs[SERVICE_REGISTRY_NAME][RESOURCE_ID] != "") == enabled: logger.warning('App "{}" has been {}binded'.format(app_name, '' if enabled else 'un')) return - app.properties.addon_configs[SERVICE_REGISTRY_NAME].enabled = enabled + service_registry_id = resource_id( + subscription=get_subscription_id(cmd.cli_ctx), + resource_group=resource_group, + namespace='Microsoft.AppPlatform', + type='Spring', + name=service, + child_type_1=RESOURCE_TYPE, + child_name_1=DEFAULT_NAME + ) + + if enabled: + app.properties.addon_configs[SERVICE_REGISTRY_NAME][RESOURCE_ID] = service_registry_id + else: + app.properties.addon_configs[SERVICE_REGISTRY_NAME][RESOURCE_ID] = "" return client.apps.begin_update(resource_group, service, app_name, app) + + +def _get_app_addon_configs_with_service_registry(addon_configs): + if addon_configs is None: + addon_configs = {} + if addon_configs.get(SERVICE_REGISTRY_NAME) is None: + addon_configs[SERVICE_REGISTRY_NAME] = {} + if addon_configs[SERVICE_REGISTRY_NAME].get(RESOURCE_ID) is None: + addon_configs[SERVICE_REGISTRY_NAME][RESOURCE_ID] = "" + return addon_configs