From 5250c53bf52ada57a474ee751146a7b23f11d8e5 Mon Sep 17 00:00:00 2001 From: Shikha Jha Date: Tue, 19 May 2026 16:20:44 +0530 Subject: [PATCH 1/3] default linux for plan create --- src/azure-cli/azure/cli/command_modules/appservice/_params.py | 3 ++- .../azure/cli/command_modules/appservice/_validators.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/appservice/_params.py b/src/azure-cli/azure/cli/command_modules/appservice/_params.py index 1083ac6ff29..8eaf72090a1 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_params.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_params.py @@ -126,7 +126,8 @@ def load_arguments(self, _): subscription than the app service environment, please use the resource ID for --app-service-environment parameter. ", local_context_attribute=LocalContextAttribute(name='ase_name', actions=[LocalContextAction.GET])) c.argument('sku', arg_type=sku_arg_type) - c.argument('is_linux', action='store_true', required=False, help='host web app on Linux worker') + c.argument('is_linux', arg_type=get_three_state_flag(), default=True, required=False, + help='Host web app on Linux worker. Defaults to true. Use "--is-linux false" to create a Windows plan.') c.argument('hyper_v', action='store_true', required=False, help='Host Windows Container Web App on Hyper-V worker.') c.argument('per_site_scaling', action='store_true', required=False, help='Enable per-app scaling at the ' 'App Service plan level to allow for ' diff --git a/src/azure-cli/azure/cli/command_modules/appservice/_validators.py b/src/azure-cli/azure/cli/command_modules/appservice/_validators.py index 264063f5799..6a27f3a1c13 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_validators.py @@ -109,6 +109,9 @@ def _validate_asp_sku(sku, app_service_environment, zone_redundant): def validate_asp_create(namespace): validate_tags(namespace) + # When --hyper-v is set, override is_linux to False (Windows container plan) + if namespace.hyper_v: + namespace.is_linux = False if namespace.sku is None: if namespace.is_linux: namespace.sku = 'P0V3' From f7d73896e211be1f44404f1b4dd1c9cbea59cfa9 Mon Sep 17 00:00:00 2001 From: Shikha Jha Date: Wed, 20 May 2026 15:36:06 +0530 Subject: [PATCH 2/3] edge case --- .../azure/cli/command_modules/appservice/custom.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/appservice/custom.py b/src/azure-cli/azure/cli/command_modules/appservice/custom.py index 5da17f08f94..62df0906aee 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/custom.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/custom.py @@ -66,7 +66,6 @@ retryable_method, raise_missing_token_suggestion, _get_location_from_resource_group, - _list_app, is_functionapp, is_linux_webapp, _rename_server_farm_props, @@ -4921,6 +4920,11 @@ def create_app_service_plan(cmd, resource_group_name, name, is_linux, hyper_v, p is_managed_instance=None, mi_system_assigned=None, mi_user_assigned=None, default_identity=None, rdp_enabled=None, vnet=None, subnet=None, registry_adapters=None, install_scripts=None, storage_mounts=None): + if is_linux and hyper_v: + raise MutuallyExclusiveArgumentError('--hyper-v creates a Windows container plan and cannot be combined ' + 'with --is-linux. Use "--is-linux false --hyper-v" to create a ' + 'Windows container plan.') + if sku is None: sku = 'P0V3' if is_linux else 'B1' From 79d02de99dfdae4a3bbb3ad54064563259ab518e Mon Sep 17 00:00:00 2001 From: Shikha Jha Date: Wed, 20 May 2026 17:57:50 +0530 Subject: [PATCH 3/3] PR comments --- .../azure/cli/command_modules/appservice/_params.py | 5 +++-- .../cli/command_modules/appservice/_validators.py | 11 ++++++----- .../azure/cli/command_modules/appservice/custom.py | 4 +++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/appservice/_params.py b/src/azure-cli/azure/cli/command_modules/appservice/_params.py index 8eaf72090a1..8a2c497b7a8 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_params.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_params.py @@ -126,8 +126,9 @@ def load_arguments(self, _): subscription than the app service environment, please use the resource ID for --app-service-environment parameter. ", local_context_attribute=LocalContextAttribute(name='ase_name', actions=[LocalContextAction.GET])) c.argument('sku', arg_type=sku_arg_type) - c.argument('is_linux', arg_type=get_three_state_flag(), default=True, required=False, - help='Host web app on Linux worker. Defaults to true. Use "--is-linux false" to create a Windows plan.') + c.argument('is_linux', arg_type=get_three_state_flag(), default=None, required=False, + help='Host web app on Linux worker. Defaults to true unless --hyper-v is specified. ' + 'Use "--is-linux false" to create a Windows plan.') c.argument('hyper_v', action='store_true', required=False, help='Host Windows Container Web App on Hyper-V worker.') c.argument('per_site_scaling', action='store_true', required=False, help='Enable per-app scaling at the ' 'App Service plan level to allow for ' diff --git a/src/azure-cli/azure/cli/command_modules/appservice/_validators.py b/src/azure-cli/azure/cli/command_modules/appservice/_validators.py index 6a27f3a1c13..4c2386efb76 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_validators.py @@ -109,9 +109,12 @@ def _validate_asp_sku(sku, app_service_environment, zone_redundant): def validate_asp_create(namespace): validate_tags(namespace) - # When --hyper-v is set, override is_linux to False (Windows container plan) - if namespace.hyper_v: - namespace.is_linux = False + # is_linux is None when not explicitly provided by the user (default). + # Resolve the default: Linux unless --hyper-v is specified. + if namespace.is_linux is None: + namespace.is_linux = not namespace.hyper_v + elif namespace.is_linux and namespace.hyper_v: + raise MutuallyExclusiveArgumentError('Usage error: --is-linux true and --hyper-v cannot be used together.') if namespace.sku is None: if namespace.is_linux: namespace.sku = 'P0V3' @@ -123,8 +126,6 @@ def validate_asp_create(namespace): namespace.sku = 'B1' sku = _normalize_sku(namespace.sku) _validate_asp_sku(sku, namespace.app_service_environment, namespace.zone_redundant) - if namespace.is_linux and namespace.hyper_v: - raise MutuallyExclusiveArgumentError('Usage error: --is-linux and --hyper-v cannot be used together.') def validate_functionapp_asp_create(namespace): diff --git a/src/azure-cli/azure/cli/command_modules/appservice/custom.py b/src/azure-cli/azure/cli/command_modules/appservice/custom.py index 62df0906aee..b6bd2ed53b8 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/custom.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/custom.py @@ -4920,7 +4920,9 @@ def create_app_service_plan(cmd, resource_group_name, name, is_linux, hyper_v, p is_managed_instance=None, mi_system_assigned=None, mi_user_assigned=None, default_identity=None, rdp_enabled=None, vnet=None, subnet=None, registry_adapters=None, install_scripts=None, storage_mounts=None): - if is_linux and hyper_v: + if is_linux is None: + is_linux = not hyper_v + elif is_linux and hyper_v: raise MutuallyExclusiveArgumentError('--hyper-v creates a Windows container plan and cannot be combined ' 'with --is-linux. Use "--is-linux false --hyper-v" to create a ' 'Windows container plan.')