Skip to content
5 changes: 5 additions & 0 deletions src/spring/HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
Release History
===============
1.18.0
---
* Add arguments `--bind-service-registry` in `spring app create`.
* Add arguments `--bind-application-configuration-service` in `spring app create`.

1.17.0
---
* Add arguments `--enable-api-try-out` in `spring api-portal update`
Expand Down
13 changes: 13 additions & 0 deletions src/spring/azext_spring/_app_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def _format_properties(self, **kwargs):
kwargs['vnet_addons'] = self._load_vnet_addons(**kwargs)
kwargs['ingress_settings'] = self._load_ingress_settings(**kwargs)
kwargs['secrets'] = self._load_secrets_config(**kwargs)
kwargs['addon_configs'] = self._load_addon_configs(**kwargs)
return models.AppResourceProperties(**kwargs)

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

return secret_var_def

def _load_addon_configs(self, bind_service_registry=None, bind_application_configuration_service=None, **_):
if not bind_service_registry and not bind_application_configuration_service:
return None

addon_configs = {}

if bind_service_registry:
addon_configs['serviceRegistry'] = {'resourceId': bind_service_registry}
if bind_application_configuration_service:
addon_configs['applicationConfigurationService'] = {'resourceId': bind_application_configuration_service}
return addon_configs


class BasicTierApp(DefaultApp):
def _get_persistent_disk_size(self, enable_persistent_storage, **_):
Expand Down
2 changes: 2 additions & 0 deletions src/spring/azext_spring/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup
- name: Create an public accessible app with 3 instances and 2 cpu cores and 3 GB of memory per instance.
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup --assign-endpoint true --cpu 2 --memory 3 --instance-count 3
- name: Create an app binding to the default Service Registry and Application Configuration Service.
text: az spring app create -n MyApp -s MyCluster -g MyResourceGroup --bind-service-registry --bind-application-configuration-service
"""

helps['spring app append-persistent-storage'] = """
Expand Down
13 changes: 12 additions & 1 deletion src/spring/azext_spring/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
validate_acs_ssh_or_warn, validate_apm_properties, validate_apm_secrets,
validate_apm_not_exist, validate_apm_update, validate_apm_reference,
validate_apm_reference_and_enterprise_tier, validate_cert_reference,
validate_build_cert_reference, validate_acs_create, not_support_enterprise)
validate_build_cert_reference, validate_acs_create, not_support_enterprise,
validate_create_app_binding_default_application_configuration_service, validate_create_app_binding_default_service_registry)
from ._app_validator import (fulfill_deployment_param, active_deployment_exist,
ensure_not_active_deployment, validate_deloy_path, validate_deloyment_create_path,
validate_cpu, validate_build_cpu, validate_memory, validate_build_memory,
Expand Down Expand Up @@ -333,6 +334,16 @@ def load_arguments(self, _):
nargs='+',
validator=validate_create_app_with_user_identity_or_warning,
help="Space-separated user-assigned managed identity resource IDs to assgin to an app.")
c.argument('bind_service_registry',
action='store_true',
options_list=['--bind-service-registry', '--bind-sr'],
validator=validate_create_app_binding_default_service_registry,
help='Bind the app to the default Service Registry automatically.')
c.argument('bind_application_configuration_service',
action='store_true',
options_list=['--bind-application-configuration-service', '--bind-acs'],
validator=validate_create_app_binding_default_application_configuration_service,
help='Bind the app to the default Application Configuration Service automatically.')
c.argument('cpu', arg_type=cpu_type)
c.argument('memory', arg_type=memory_type)
c.argument('instance_count', type=int,
Expand Down
36 changes: 36 additions & 0 deletions src/spring/azext_spring/_validators_enterprise.py
Original file line number Diff line number Diff line change
Expand Up @@ -657,3 +657,39 @@ def validate_build_cert_reference(cmd, namespace):
get_cert_resource_id(cert_names, cmd, namespace, result)

namespace.build_certificates = result


def validate_create_app_binding_default_service_registry(cmd, namespace):
if namespace.bind_service_registry:
namespace.bind_service_registry = _get_eactly_one_service_registry_resource_id(cmd,
namespace.resource_group,
namespace.service)


def _get_eactly_one_service_registry_resource_id(cmd, resource_group, service):
client = get_client(cmd)
service_registry_resources = list(client.service_registries.list(resource_group, service))
if len(service_registry_resources) == 0:
raise ClientRequestError('App cannot bind to service registry because it is not configured.')
if len(service_registry_resources) > 1:
raise ClientRequestError('App cannot bind to multiple service registries.')
return service_registry_resources[0].id


def validate_create_app_binding_default_application_configuration_service(cmd, namespace):
if namespace.bind_application_configuration_service:
namespace.bind_application_configuration_service \
= _get_eactly_one_application_configuration_service_resource_id(cmd,
namespace.resource_group,
namespace.service)


def _get_eactly_one_application_configuration_service_resource_id(cmd, resource_group, service):
client = get_client(cmd)
acs_resources = list(client.configuration_services.list(resource_group, service))
if len(acs_resources) == 0:
raise ClientRequestError('App cannot bind to application configuration service '
'because it is not configured.')
if len(acs_resources) > 1:
raise ClientRequestError('App cannot bind to multiple application configuration services.')
return acs_resources[0].id
4 changes: 4 additions & 0 deletions src/spring/azext_spring/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ def app_create(cmd, client, resource_group, service, name,
assign_identity=None,
system_assigned=None,
user_assigned=None,
bind_service_registry=None,
bind_application_configuration_service=None,
# app.update
enable_persistent_storage=None,
persistent_storage=None,
Expand Down Expand Up @@ -115,6 +117,8 @@ def app_create(cmd, client, resource_group, service, name,
create_app_kwargs = {
'system_assigned': system_assigned,
'user_assigned': user_assigned,
'bind_service_registry': bind_service_registry,
'bind_application_configuration_service': bind_application_configuration_service,
'enable_temporary_disk': True,
'enable_persistent_storage': enable_persistent_storage,
'persistent_storage': persistent_storage,
Expand Down
Loading