Skip to content

Commit 2ba94b2

Browse files
authored
{AppService} az functionapp create: Updating DAPR config to match experience in Portal (#28291)
1 parent 9c62a21 commit 2ba94b2

File tree

3 files changed

+5337
-24
lines changed

3 files changed

+5337
-24
lines changed

src/azure-cli/azure/cli/command_modules/appservice/custom.py

+47-20
Original file line numberDiff line numberDiff line change
@@ -3918,12 +3918,12 @@ def update_functionapp_polling(cmd, resource_group_name, name, functionapp):
39183918
updated_functionapp = json.dumps(
39193919
{
39203920
"properties": {
3921-
"daprConfig": {
3921+
"daprConfig": {"enabled": False} if functionapp.dapr_config is None else {
39223922
"enabled": functionapp.dapr_config.enabled,
39233923
"appId": functionapp.dapr_config.app_id,
39243924
"appPort": functionapp.dapr_config.app_port,
3925-
"httpReadBufferSize": functionapp.dapr_config.http_read_buffer_size,
3926-
"httpMaxRequestSize": functionapp.dapr_config.http_max_request_size,
3925+
"httpReadBufferSize": functionapp.dapr_config.http_read_buffer_size or 4,
3926+
"httpMaxRequestSize": functionapp.dapr_config.http_max_request_size or 4,
39273927
"logLevel": functionapp.dapr_config.log_level,
39283928
"enableApiLogging": functionapp.dapr_config.enable_api_logging
39293929
},
@@ -3956,19 +3956,37 @@ def update_dapr_and_workload_config(cmd, resource_group_name, name, enabled=None
39563956
enable_api_logging=None, workload_profile_name=None, cpu=None, memory=None):
39573957
site = _generic_site_operation(cmd.cli_ctx, resource_group_name, name, 'get')
39583958
DaprConfig = cmd.get_models('DaprConfig')
3959-
if site.dapr_config is None:
3960-
site.dapr_config = DaprConfig()
39613959

3962-
import inspect
3963-
frame = inspect.currentframe()
3964-
bool_flags = ['enabled', 'enable_api_logging']
3965-
int_flags = ['app_port', 'http_max_request_size', 'http_read_buffer_size']
3966-
args, _, _, values = inspect.getargvalues(frame) # pylint: disable=deprecated-method
3967-
for arg in args[3:10]:
3968-
if arg in int_flags and values[arg] is not None:
3969-
values[arg] = validate_and_convert_to_int(arg, values[arg])
3970-
if values.get(arg, None):
3971-
setattr(site.dapr_config, arg, values[arg] if arg not in bool_flags else values[arg] == 'true')
3960+
if enabled is None:
3961+
if site.dapr_config and site.dapr_config.enabled is False:
3962+
site.dapr_config = None
3963+
elif enabled == "false":
3964+
site.dapr_config = None
3965+
elif enabled == "true":
3966+
if site.dapr_config is None:
3967+
site.dapr_config = DaprConfig()
3968+
site.dapr_config.enabled = True
3969+
elif site.dapr_config and site.dapr_config.enabled is False:
3970+
site.dapr_config.enabled = True
3971+
3972+
if any([app_id, app_port, http_max_request_size, http_read_buffer_size, log_level, enable_api_logging]) \
3973+
and site.dapr_config is None:
3974+
raise ArgumentUsageError("usage error: parameters --dapr-app-id, "
3975+
"--dapr-app-port, --dapr-http-max-request-size, "
3976+
"--dapr-http-read-buffer-size, --dapr-log-level and "
3977+
"--dapr-enable-api-logging must be used with parameter --enable-dapr true.")
3978+
3979+
if site.dapr_config is not None:
3980+
import inspect
3981+
frame = inspect.currentframe()
3982+
bool_flags = ['enabled', 'enable_api_logging']
3983+
int_flags = ['app_port', 'http_max_request_size', 'http_read_buffer_size']
3984+
args, _, _, values = inspect.getargvalues(frame) # pylint: disable=deprecated-method
3985+
for arg in args[3:10]:
3986+
if arg in int_flags and values[arg] is not None:
3987+
values[arg] = validate_and_convert_to_int(arg, values[arg])
3988+
if values.get(arg, None):
3989+
setattr(site.dapr_config, arg, values[arg] if arg not in bool_flags else values[arg] == 'true')
39723990

39733991
if cpu is not None and memory is not None:
39743992
setattr(site.resource_config, 'cpu', cpu)
@@ -3996,6 +4014,7 @@ def create_functionapp(cmd, resource_group_name, name, storage_account, plan=Non
39964014
if functions_version is None:
39974015
logger.warning("No functions version specified so defaulting to 4.")
39984016
functions_version = '4'
4017+
enable_dapr = (enable_dapr == "true")
39994018
if deployment_source_url and deployment_local_git:
40004019
raise MutuallyExclusiveArgumentError('usage error: --deployment-source-url <url> | --deployment-local-git')
40014020
if any([cpu, memory, workload_profile_name]) and environment is None:
@@ -4017,6 +4036,13 @@ def create_functionapp(cmd, resource_group_name, name, storage_account, plan=Non
40174036
"dapr-enable-api-logging must be used with parameter --environment,"
40184037
"please provide the name of the container app environment using "
40194038
"--environment.")
4039+
if any([dapr_app_id, dapr_app_port, dapr_http_max_request_size, dapr_http_read_buffer_size,
4040+
dapr_log_level, dapr_enable_api_logging]) and not enable_dapr:
4041+
raise ArgumentUsageError("usage error: parameters --dapr-app-id, "
4042+
"--dapr-app-port, --dapr-http-max-request-size, "
4043+
"--dapr-http-read-buffer-size, --dapr-log-level and "
4044+
"dapr-enable-api-logging must be used with parameter --enable-dapr true.")
4045+
40204046
from azure.mgmt.web.models import Site
40214047
SiteConfig, NameValuePair, DaprConfig, ResourceConfig = cmd.get_models('SiteConfig', 'NameValuePair',
40224048
'DaprConfig', 'ResourceConfig')
@@ -4025,8 +4051,6 @@ def create_functionapp(cmd, resource_group_name, name, storage_account, plan=Non
40254051
site_config = SiteConfig(app_settings=[])
40264052
client = web_client_factory(cmd.cli_ctx)
40274053

4028-
dapr_config = DaprConfig()
4029-
40304054
if vnet or subnet:
40314055
if plan:
40324056
if is_valid_resource_id(plan):
@@ -4056,7 +4080,7 @@ def create_functionapp(cmd, resource_group_name, name, storage_account, plan=Non
40564080
subnet_resource_id = None
40574081
vnet_route_all_enabled = None
40584082

4059-
functionapp_def = Site(location=None, site_config=site_config, dapr_config=dapr_config, tags=tags,
4083+
functionapp_def = Site(location=None, site_config=site_config, tags=tags,
40604084
virtual_network_subnet_id=subnet_resource_id, https_only=https_only,
40614085
vnet_route_all_enabled=vnet_route_all_enabled)
40624086

@@ -4225,13 +4249,16 @@ def create_functionapp(cmd, resource_group_name, name, storage_account, plan=Non
42254249
if enable_dapr:
42264250
logger.warning("Please note while using Dapr Extension for Azure Functions, app port is "
42274251
"mandatory when using Dapr triggers and should be empty when using only Dapr bindings.")
4252+
dapr_enable_api_logging = (dapr_enable_api_logging == "true")
4253+
dapr_config = DaprConfig()
42284254
dapr_config.enabled = True
42294255
dapr_config.app_id = dapr_app_id
42304256
dapr_config.app_port = dapr_app_port
4231-
dapr_config.http_max_request_size = dapr_http_max_request_size
4232-
dapr_config.http_read_buffer_size = dapr_http_read_buffer_size
4257+
dapr_config.http_max_request_size = dapr_http_max_request_size or 4
4258+
dapr_config.http_read_buffer_size = dapr_http_read_buffer_size or 4
42334259
dapr_config.log_level = dapr_log_level
42344260
dapr_config.enable_api_logging = dapr_enable_api_logging
4261+
functionapp_def.dapr_config = dapr_config
42354262

42364263
managed_environment = get_managed_environment(cmd, resource_group_name, environment)
42374264
location = managed_environment.location

0 commit comments

Comments
 (0)