From 0e7527249fa74890be25a8478454f26f99d28330 Mon Sep 17 00:00:00 2001 From: ninpan-ms <71061174+ninpan-ms@users.noreply.github.com> Date: Tue, 21 Dec 2021 13:18:43 +0800 Subject: [PATCH] Add instance count for scg&api portal in service creation (#42) --- .../azext_spring_cloud/_enterprise.py | 16 +++++++++------- src/spring-cloud/azext_spring_cloud/_params.py | 16 +++++++++++++++- .../azext_spring_cloud/_tanzu_component.py | 12 +++++++++--- .../azext_spring_cloud/_validators_enterprise.py | 12 ++++++++++++ .../tier_routing_spring_cloud.py | 4 ++++ 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/spring-cloud/azext_spring_cloud/_enterprise.py b/src/spring-cloud/azext_spring_cloud/_enterprise.py index cb6cc9e3d4..ad903df496 100644 --- a/src/spring-cloud/azext_spring_cloud/_enterprise.py +++ b/src/spring-cloud/azext_spring_cloud/_enterprise.py @@ -43,9 +43,10 @@ def spring_cloud_create(cmd, client, resource_group, name, location=None, app_insights_key=None, app_insights=None, sampling_rate=None, disable_app_insights=None, enable_java_agent=None, enable_application_configuration_service=None, enable_service_registry=None, - enable_gateway=None, enable_api_portal=None, + enable_gateway=None, gateway_instance_count=None, + enable_api_portal=None, api_portal_instance_count=None, sku=None, tags=None, build_pool_size=None, no_wait=False): - resource = _create_service(cmd, client, resource_group, name, + poller = _create_service(cmd, client, resource_group, name, location=location, service_runtime_subnet=service_runtime_subnet, app_subnet=app_subnet, @@ -54,19 +55,20 @@ def spring_cloud_create(cmd, client, resource_group, name, location=None, app_network_resource_group=app_network_resource_group, sku=sku, tags=tags) + + service = client.services.get(resource_group, name) pollers = [ _update_default_build_agent_pool(cmd, client, resource_group, name, build_pool_size), create_application_configuration_service(cmd, client, resource_group, name, enable_application_configuration_service), create_service_registry(cmd, client, resource_group, name, enable_service_registry), - create_gateway(cmd, client, resource_group, name, enable_gateway), - create_api_portal(cmd, client, resource_group, name, enable_api_portal), + create_gateway(cmd, client, resource_group, name, enable_gateway, gateway_instance_count, service.sku), + create_api_portal(cmd, client, resource_group, name, enable_api_portal, api_portal_instance_count, service.sku), create_default_buildpack_binding_for_application_insights(cmd, client, resource_group, name, location, app_insights_key, - app_insights, sampling_rate, disable_app_insights) - ] + app_insights, sampling_rate, disable_app_insights)] pollers = [x for x in pollers if x] if not no_wait: _wait_till_end(cmd, *pollers) - return resource + return poller def app_create_enterprise(cmd, client, resource_group, service, name, diff --git a/src/spring-cloud/azext_spring_cloud/_params.py b/src/spring-cloud/azext_spring_cloud/_params.py index ef1af285e7..61c7615fbd 100644 --- a/src/spring-cloud/azext_spring_cloud/_params.py +++ b/src/spring-cloud/azext_spring_cloud/_params.py @@ -20,7 +20,7 @@ validate_buildpack_binding_not_exist, validate_buildpack_binding_exist, validate_git_uri, validate_acs_patterns, validate_routes, validate_builder, validate_build_pool_size, validate_builder_resource, validate_builder_create, - validate_builder_update) + validate_builder_update, validate_gateway_instance_count, validate_api_portal_instance_count) from ._app_validator import (fulfill_deployment_param, active_deployment_exist, active_deployment_exist_under_app, ensure_not_active_deployment) from ._utils import ApiType @@ -97,15 +97,29 @@ def load_arguments(self, _): is_preview=True, help='Only support in enterprise tier now. Enable Service Registry.') c.argument('enable_gateway', + arg_group="Spring Cloud Gateway", arg_type=get_three_state_flag(), default=False, is_preview=True, help='Only support in enterprise tier now. Enable Spring Cloud Gateway.') + c.argument('gateway_instance_count', + arg_group="Spring Cloud Gateway", + type=int, + validator=validate_gateway_instance_count, + is_preview=True, + help='Only support in enterprise tier now. Number of Spring Cloud Gateway instances.') c.argument('enable_api_portal', + arg_group="API portal", arg_type=get_three_state_flag(), default=False, is_preview=True, help='Only support in enterprise tier now. Enable API portal.') + c.argument('api_portal_instance_count', + arg_group="API portal", + type=int, + validator=validate_api_portal_instance_count, + is_preview=True, + help='Only support in enterprise tier now. Number of API portal instances.') with self.argument_context('spring-cloud update') as c: c.argument('sku', arg_type=get_enum_type(['Basic', 'Standard', 'Enterprise']), validator=validate_sku, help='Name of SKU.') diff --git a/src/spring-cloud/azext_spring_cloud/_tanzu_component.py b/src/spring-cloud/azext_spring_cloud/_tanzu_component.py index 7a35607dd5..b7f68c5ab9 100644 --- a/src/spring-cloud/azext_spring_cloud/_tanzu_component.py +++ b/src/spring-cloud/azext_spring_cloud/_tanzu_component.py @@ -14,7 +14,7 @@ DEFAULT_NAME = "default" logger = get_logger(__name__) -def create_application_configuration_service(cmd, client, resource_group, service, enable_application_configuration_service=None): +def create_application_configuration_service(cmd, client, resource_group, service, enable_application_configuration_service): if enable_application_configuration_service: logger.warning(" - Creating Application Configuration Service ..") acs_resource = models.ConfigurationServiceResource() @@ -27,14 +27,17 @@ def create_service_registry(cmd, client, resource_group, service, enable_service return client.service_registries.begin_create_or_update(resource_group, service, DEFAULT_NAME) -def create_gateway(cmd, client, resource_group, service, enable_gateway): +def create_gateway(cmd, client, resource_group, service, enable_gateway, gateway_instance_count, sku): if enable_gateway: logger.warning(" - Creating Spring Cloud Gateway ..") gateway_resource = models.GatewayResource() + if gateway_instance_count and sku: + gateway_resource.sku = models.Sku(name=sku.name, tier=sku.tier, + capacity=gateway_instance_count) return client.gateways.begin_create_or_update(resource_group, service, DEFAULT_NAME, gateway_resource) -def create_api_portal(cmd, client, resource_group, service, enable_api_portal): +def create_api_portal(cmd, client, resource_group, service, enable_api_portal, api_portal_instance_count, sku): if enable_api_portal: logger.warning(" - Creating API portal ..") gateway_id = resource_id( @@ -52,4 +55,7 @@ def create_api_portal(cmd, client, resource_group, service, enable_api_portal): gateway_ids=[gateway_id] ) ) + if api_portal_instance_count and sku: + api_portal_resource.sku = models.Sku(name=sku.name, tier=sku.tier, + capacity=api_portal_instance_count) return client.api_portals.begin_create_or_update(resource_group, service, DEFAULT_NAME, api_portal_resource) diff --git a/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py b/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py index 7eaf896f6b..4072e30821 100644 --- a/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py +++ b/src/spring-cloud/azext_spring_cloud/_validators_enterprise.py @@ -195,3 +195,15 @@ def validate_builder_resource(namespace): def validate_build_pool_size(namespace): if _parse_sku_name(namespace.sku) != 'enterprise': namespace.build_pool_size = None + + +def validate_gateway_instance_count(namespace): + if namespace.gateway_instance_count is not None: + if namespace.gateway_instance_count < 1: + raise CLIError("--gateway-instance-count must be greater than 0") + + +def validate_api_portal_instance_count(namespace): + if namespace.api_portal_instance_count is not None: + if namespace.api_portal_instance_count < 1: + raise CLIError("--api-portal-instance-count must be greater than 0") diff --git a/src/spring-cloud/azext_spring_cloud/tier_routing_spring_cloud.py b/src/spring-cloud/azext_spring_cloud/tier_routing_spring_cloud.py index 60d9ab40fa..e563838387 100644 --- a/src/spring-cloud/azext_spring_cloud/tier_routing_spring_cloud.py +++ b/src/spring-cloud/azext_spring_cloud/tier_routing_spring_cloud.py @@ -29,7 +29,9 @@ def spring_cloud_create(cmd, client, resource_group, name, enable_application_configuration_service=None, enable_service_registry=None, enable_gateway=None, + gateway_instance_count=None, enable_api_portal=None, + api_portal_instance_count=None, sku=None, tags=None, build_pool_size=None, @@ -51,7 +53,9 @@ def spring_cloud_create(cmd, client, resource_group, name, enable_application_configuration_service=enable_application_configuration_service, enable_service_registry=enable_service_registry, enable_gateway=enable_gateway, + gateway_instance_count=gateway_instance_count, enable_api_portal=enable_api_portal, + api_portal_instance_count=api_portal_instance_count, sku=sku, tags=tags, build_pool_size=build_pool_size,