Skip to content

Commit 57c4830

Browse files
authored
[Spring] Add new params to support auto binding (#7098)
1 parent 4a8b356 commit 57c4830

File tree

10 files changed

+806
-7
lines changed

10 files changed

+806
-7
lines changed

src/spring/HISTORY.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
Release History
22
===============
3+
1.18.0
4+
---
5+
* Add arguments `--bind-service-registry` in `spring app create`.
6+
* Add arguments `--bind-application-configuration-service` in `spring app create`.
7+
38
1.17.0
49
---
510
* Add arguments `--enable-api-try-out` in `spring api-portal update`

src/spring/azext_spring/_app_factory.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def _format_properties(self, **kwargs):
2424
kwargs['vnet_addons'] = self._load_vnet_addons(**kwargs)
2525
kwargs['ingress_settings'] = self._load_ingress_settings(**kwargs)
2626
kwargs['secrets'] = self._load_secrets_config(**kwargs)
27+
kwargs['addon_configs'] = self._load_addon_configs(**kwargs)
2728
return models.AppResourceProperties(**kwargs)
2829

2930
def _format_identity(self, system_assigned=None, user_assigned=None, **_):
@@ -175,6 +176,18 @@ def _load_secrets_config(self, secrets=None, **_):
175176

176177
return secret_var_def
177178

179+
def _load_addon_configs(self, bind_service_registry=None, bind_application_configuration_service=None, **_):
180+
if not bind_service_registry and not bind_application_configuration_service:
181+
return None
182+
183+
addon_configs = {}
184+
185+
if bind_service_registry:
186+
addon_configs['serviceRegistry'] = {'resourceId': bind_service_registry}
187+
if bind_application_configuration_service:
188+
addon_configs['applicationConfigurationService'] = {'resourceId': bind_application_configuration_service}
189+
return addon_configs
190+
178191

179192
class BasicTierApp(DefaultApp):
180193
def _get_persistent_disk_size(self, enable_persistent_storage, **_):

src/spring/azext_spring/_help.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@
190190
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup
191191
- name: Create an public accessible app with 3 instances and 2 cpu cores and 3 GB of memory per instance.
192192
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup --assign-endpoint true --cpu 2 --memory 3 --instance-count 3
193+
- name: Create an app binding to the default Service Registry and Application Configuration Service.
194+
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup --bind-service-registry --bind-application-configuration-service
193195
"""
194196

195197
helps['spring app append-persistent-storage'] = """

src/spring/azext_spring/_params.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
validate_acs_ssh_or_warn, validate_apm_properties, validate_apm_secrets,
3333
validate_apm_not_exist, validate_apm_update, validate_apm_reference,
3434
validate_apm_reference_and_enterprise_tier, validate_cert_reference,
35-
validate_build_cert_reference, validate_acs_create, not_support_enterprise)
35+
validate_build_cert_reference, validate_acs_create, not_support_enterprise,
36+
validate_create_app_binding_default_application_configuration_service, validate_create_app_binding_default_service_registry)
3637
from ._app_validator import (fulfill_deployment_param, active_deployment_exist,
3738
ensure_not_active_deployment, validate_deloy_path, validate_deloyment_create_path,
3839
validate_cpu, validate_build_cpu, validate_memory, validate_build_memory,
@@ -333,6 +334,16 @@ def load_arguments(self, _):
333334
nargs='+',
334335
validator=validate_create_app_with_user_identity_or_warning,
335336
help="Space-separated user-assigned managed identity resource IDs to assgin to an app.")
337+
c.argument('bind_service_registry',
338+
action='store_true',
339+
options_list=['--bind-service-registry', '--bind-sr'],
340+
validator=validate_create_app_binding_default_service_registry,
341+
help='Bind the app to the default Service Registry automatically.')
342+
c.argument('bind_application_configuration_service',
343+
action='store_true',
344+
options_list=['--bind-application-configuration-service', '--bind-acs'],
345+
validator=validate_create_app_binding_default_application_configuration_service,
346+
help='Bind the app to the default Application Configuration Service automatically.')
336347
c.argument('cpu', arg_type=cpu_type)
337348
c.argument('memory', arg_type=memory_type)
338349
c.argument('instance_count', type=int,

src/spring/azext_spring/_validators_enterprise.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,3 +657,39 @@ def validate_build_cert_reference(cmd, namespace):
657657
get_cert_resource_id(cert_names, cmd, namespace, result)
658658

659659
namespace.build_certificates = result
660+
661+
662+
def validate_create_app_binding_default_service_registry(cmd, namespace):
663+
if namespace.bind_service_registry:
664+
namespace.bind_service_registry = _get_eactly_one_service_registry_resource_id(cmd,
665+
namespace.resource_group,
666+
namespace.service)
667+
668+
669+
def _get_eactly_one_service_registry_resource_id(cmd, resource_group, service):
670+
client = get_client(cmd)
671+
service_registry_resources = list(client.service_registries.list(resource_group, service))
672+
if len(service_registry_resources) == 0:
673+
raise ClientRequestError('App cannot bind to service registry because it is not configured.')
674+
if len(service_registry_resources) > 1:
675+
raise ClientRequestError('App cannot bind to multiple service registries.')
676+
return service_registry_resources[0].id
677+
678+
679+
def validate_create_app_binding_default_application_configuration_service(cmd, namespace):
680+
if namespace.bind_application_configuration_service:
681+
namespace.bind_application_configuration_service \
682+
= _get_eactly_one_application_configuration_service_resource_id(cmd,
683+
namespace.resource_group,
684+
namespace.service)
685+
686+
687+
def _get_eactly_one_application_configuration_service_resource_id(cmd, resource_group, service):
688+
client = get_client(cmd)
689+
acs_resources = list(client.configuration_services.list(resource_group, service))
690+
if len(acs_resources) == 0:
691+
raise ClientRequestError('App cannot bind to application configuration service '
692+
'because it is not configured.')
693+
if len(acs_resources) > 1:
694+
raise ClientRequestError('App cannot bind to multiple application configuration services.')
695+
return acs_resources[0].id

src/spring/azext_spring/app.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ def app_create(cmd, client, resource_group, service, name,
5353
assign_identity=None,
5454
system_assigned=None,
5555
user_assigned=None,
56+
bind_service_registry=None,
57+
bind_application_configuration_service=None,
5658
# app.update
5759
enable_persistent_storage=None,
5860
persistent_storage=None,
@@ -115,6 +117,8 @@ def app_create(cmd, client, resource_group, service, name,
115117
create_app_kwargs = {
116118
'system_assigned': system_assigned,
117119
'user_assigned': user_assigned,
120+
'bind_service_registry': bind_service_registry,
121+
'bind_application_configuration_service': bind_application_configuration_service,
118122
'enable_temporary_disk': True,
119123
'enable_persistent_storage': enable_persistent_storage,
120124
'persistent_storage': persistent_storage,

0 commit comments

Comments
 (0)