diff --git a/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_webapp_commands_thru_mock.py b/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_webapp_commands_thru_mock.py index ec6a96e6502..0bbf1062643 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_webapp_commands_thru_mock.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_webapp_commands_thru_mock.py @@ -40,6 +40,7 @@ list_startup_logs, show_startup_log, create_webapp) +from azure.cli.command_modules.appservice.utils import _rename_server_farm_props # pylint: disable=line-too-long from azure.cli.core.profiles import ResourceType @@ -61,6 +62,27 @@ class TestWebappMocked(unittest.TestCase): def setUp(self): self.client = WebSiteManagementClient(mock.MagicMock(), '123455678') + def test_rename_server_farm_props_handles_mutable_mapping(self): + site = { + 'location': 'westus', + 'serverFarmId': '/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Web/serverfarms/plan' + } + + _rename_server_farm_props(site) + + self.assertEqual(site['appServicePlanId'], '/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Web/serverfarms/plan') + self.assertNotIn('serverFarmId', site.keys()) + + def test_rename_server_farm_props_handles_object_attributes(self): + site = types.SimpleNamespace( + server_farm_id='/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Web/serverfarms/plan') + + _rename_server_farm_props(site) + + self.assertEqual(site.app_service_plan_id, + '/subscriptions/sub/resourceGroups/rg/providers/Microsoft.Web/serverfarms/plan') + self.assertFalse(hasattr(site, 'server_farm_id')) + @mock.patch('azure.cli.command_modules.appservice.custom._update_site_source_control_properties_for_gh_action') @mock.patch('azure.cli.command_modules.appservice.custom._add_publish_profile_to_github') @mock.patch('azure.cli.command_modules.appservice.custom.prompt_y_n') diff --git a/src/azure-cli/azure/cli/command_modules/appservice/utils.py b/src/azure-cli/azure/cli/command_modules/appservice/utils.py index 1d6e10431bc..d4cd621be18 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/utils.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/utils.py @@ -8,6 +8,7 @@ import urllib import urllib3 import certifi +from collections.abc import MutableMapping from datetime import datetime from knack.log import get_logger @@ -249,7 +250,11 @@ def _list_app(cli_ctx, resource_group_name=None): def _rename_server_farm_props(webapp): # Should be renamed in SDK in a future release server_farm_id = get_site_server_farm_id(webapp) - setattr(webapp, 'app_service_plan_id', server_farm_id) + if isinstance(webapp, MutableMapping): + webapp["appServicePlanId"] = server_farm_id + webapp.pop("serverFarmId", None) + else: + setattr(webapp, 'app_service_plan_id', server_farm_id) # Remove server_farm_id if it exists as an attribute (for old SDK compatibility) if hasattr(webapp, 'server_farm_id'): try: