diff --git a/src/azure-cli/azure/cli/command_modules/appservice/_help.py b/src/azure-cli/azure/cli/command_modules/appservice/_help.py index dfa22270e59..1f1800efe7e 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_help.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_help.py @@ -2556,6 +2556,8 @@ examples: - name: List app settings of the static app. text: az staticwebapp appsettings list -n MyStaticAppName + - name: List app settings of the static app environment. + text: az staticwebapp appsettings list -n MyStaticAppName --environment-name MyEnvironmentName """ helps['staticwebapp appsettings set'] = """ @@ -2564,6 +2566,8 @@ examples: - name: Add to or change the app settings of the static app. text: az staticwebapp appsettings set -n MyStaticAppName --setting-names key1=val1 key2=val2 + - name: Add to or change the app settings of the static app environment. + text: az staticwebapp appsettings set -n MyStaticAppName --setting-names key1=val1 key2=val2 --environment-name MyEnvironmentName """ helps['staticwebapp appsettings delete'] = """ @@ -2572,6 +2576,8 @@ examples: - name: Delete given app settings of the static app. text: az staticwebapp appsettings delete -n MyStaticAppName --setting-names key1 key2 + - name: Delete given app settings of the static app. + text: az staticwebapp appsettings delete -n MyStaticAppName --setting-names key1 key2 --environment-name MyEnvironmentName """ helps['staticwebapp identity'] = """ 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 9d1340f280b..7d52efdc937 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/_params.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/_params.py @@ -1100,6 +1100,7 @@ def load_arguments(self, _): help="Validation method for the custom domain.", arg_type=get_enum_type(["cname-delegation", "dns-txt-token"])) with self.argument_context('staticwebapp appsettings') as c: + c.argument('environment_name', help="Name of the environment of static site") c.argument('setting_pairs', options_list=['--setting-names'], help="Space-separated app settings in 'key=value' format. ", nargs='*') diff --git a/src/azure-cli/azure/cli/command_modules/appservice/static_sites.py b/src/azure-cli/azure/cli/command_modules/appservice/static_sites.py index dcc15b71cfb..c90e8703b04 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/static_sites.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/static_sites.py @@ -272,15 +272,18 @@ def list_staticsite_functions(cmd, name, resource_group_name=None, environment_n return client.list_static_site_build_functions(resource_group_name, name, environment_name) -def list_staticsite_app_settings(cmd, name, resource_group_name=None): +def list_staticsite_app_settings(cmd, name, resource_group_name=None, environment_name=None): client = _get_staticsites_client_factory(cmd.cli_ctx) if not resource_group_name: resource_group_name = _get_resource_group_name_of_staticsite(client, name) - return client.list_static_site_app_settings(resource_group_name, name) + if not environment_name: + return client.list_static_site_app_settings(resource_group_name, name) + return client.list_static_site_build_app_settings(resource_group_name, name, environment_name) -def set_staticsite_app_settings(cmd, name, setting_pairs, resource_group_name=None): + +def set_staticsite_app_settings(cmd, name, setting_pairs, resource_group_name=None, environment_name=None): client = _get_staticsites_client_factory(cmd.cli_ctx) if not resource_group_name: resource_group_name = _get_resource_group_name_of_staticsite(client, name) @@ -291,20 +294,24 @@ def set_staticsite_app_settings(cmd, name, setting_pairs, resource_group_name=No setting_dict[key] = value # fetch current settings to prevent deleting existing app settings - settings = list_staticsite_app_settings(cmd, name, resource_group_name) + app_settings = list_staticsite_app_settings(cmd, name, resource_group_name, environment_name) for k, v in setting_dict.items(): - settings.properties[k] = v + app_settings.properties[k] = v + + if not environment_name: + return client.create_or_update_static_site_app_settings( + resource_group_name, name, app_settings=app_settings) - return client.create_or_update_static_site_app_settings( - resource_group_name, name, app_settings=settings) + return client.create_or_update_static_site_build_app_settings( + resource_group_name, name, environment_name, app_settings=app_settings) -def delete_staticsite_app_settings(cmd, name, setting_names, resource_group_name=None): +def delete_staticsite_app_settings(cmd, name, setting_names, resource_group_name=None, environment_name=None): client = _get_staticsites_client_factory(cmd.cli_ctx) if not resource_group_name: resource_group_name = _get_resource_group_name_of_staticsite(client, name) - app_settings = client.list_static_site_app_settings(resource_group_name, name) + app_settings = list_staticsite_app_settings(cmd, name, resource_group_name, environment_name) for key in setting_names: if key in app_settings.properties: @@ -312,8 +319,12 @@ def delete_staticsite_app_settings(cmd, name, setting_names, resource_group_name else: logger.warning("key '%s' not found in app settings", key) - return client.create_or_update_static_site_app_settings( - resource_group_name, name, app_settings=app_settings) + if not environment_name: + return client.create_or_update_static_site_app_settings( + resource_group_name, name, app_settings=app_settings) + + return client.create_or_update_static_site_build_app_settings( + resource_group_name, name, environment_name, app_settings=app_settings) def list_staticsite_users(cmd, name, resource_group_name=None, authentication_provider='all'): diff --git a/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_staticapp_commands_thru_mock.py b/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_staticapp_commands_thru_mock.py index 38d5f1a1fb0..f529807a1bc 100644 --- a/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_staticapp_commands_thru_mock.py +++ b/src/azure-cli/azure/cli/command_modules/appservice/tests/latest/test_staticapp_commands_thru_mock.py @@ -404,6 +404,39 @@ class AppSettings: # validate self.staticapp_client.create_or_update_static_site_app_settings.assert_called_once() + def test_list_staticsite_app_settings_with_resourcegroup_with_environment(self): + list_staticsite_app_settings(self.mock_cmd, self.name1, self.rg1, self.environment1) + + self.staticapp_client.list_static_site_build_app_settings.assert_called_once_with( + self.rg1, self.name1, self.environment1) + + def test_set_staticsite_app_settings_with_resourcegroup_with_environment(self): + from azure.mgmt.web.models import StringDictionary + + app_settings1_input = ['key1=val1', 'key2=val2==', 'key3=val3='] + + self.staticapp_client.list_static_site_build_app_settings.return_value = StringDictionary(properties={}) + + set_staticsite_app_settings(self.mock_cmd, self.name1, app_settings1_input, self.rg1, self.environment1) + + self.staticapp_client.create_or_update_static_site_build_app_settings.assert_called_once() + + def test_delete_staticsite_app_settings_with_resourcegroup_with_environment(self): + # setup + current_app_settings = {'key1': 'val1', 'key2': 'val2'} + app_settings_keys_to_delete = ['key1'] + + class AppSettings: + properties = current_app_settings + + self.staticapp_client.list_static_site_build_app_settings.return_value = AppSettings + + # action + delete_staticsite_app_settings(self.mock_cmd, self.name1, app_settings_keys_to_delete, self.rg1, self.environment1) + + # validate + self.staticapp_client.create_or_update_static_site_build_app_settings.assert_called_once() + def test_list_staticsite_users_with_resourcegroup(self): authentication_provider = 'GitHub'