From 44ed22af88626310fef04fb541cfde1bd951c9f1 Mon Sep 17 00:00:00 2001 From: Zunli Hu Date: Thu, 13 Aug 2020 10:57:47 +0800 Subject: [PATCH] {db-up} Fix issue 942: Add more arguments for `down` (#2090) * add more argument * add release note * fix style --- src/db-up/HISTORY.rst | 4 ++++ src/db-up/azext_db_up/_params.py | 3 +-- src/db-up/azext_db_up/_validators.py | 22 ++++++++++++++++++---- src/db-up/azext_db_up/util.py | 5 +++++ src/db-up/setup.py | 2 +- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/db-up/HISTORY.rst b/src/db-up/HISTORY.rst index b848f6a2a1..a03d3de386 100644 --- a/src/db-up/HISTORY.rst +++ b/src/db-up/HISTORY.rst @@ -3,6 +3,10 @@ Release History =============== +0.2.0 (2020-7-29) +++++++++++++++++ +* `az postgres down`: Add more arguments to fix issue #942 + 0.1.15 (2020-7-20) ++++++++++++++++ * `az mysql up`: Refine error message for error PasswordNotComplex diff --git a/src/db-up/azext_db_up/_params.py b/src/db-up/azext_db_up/_params.py index 6d47b216f2..cb49ef360c 100644 --- a/src/db-up/azext_db_up/_params.py +++ b/src/db-up/azext_db_up/_params.py @@ -38,8 +38,7 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem help='The login password of the administrator.') with self.argument_context('{} down'.format(scope)) as c: - c.ignore('server_name') - c.ignore('resource_group_name') + c.argument('server_name', options_list=['--server-name', '-s'], help='Name of the server.') c.argument('delete_group', action='store_true', help="Delete the resource group.") for scope in ('mysql', 'postgres'): diff --git a/src/db-up/azext_db_up/_validators.py b/src/db-up/azext_db_up/_validators.py index e1a69bf26e..c127ee54c7 100644 --- a/src/db-up/azext_db_up/_validators.py +++ b/src/db-up/azext_db_up/_validators.py @@ -14,7 +14,7 @@ from msrest.exceptions import ValidationError from azext_db_up._client_factory import resource_client_factory from azext_db_up.random_name.generate import generate_username -from azext_db_up.util import create_random_resource_name, get_config_value, set_config_value +from azext_db_up.util import create_random_resource_name, get_config_value, set_config_value, remove_config_value logger = get_logger(__name__) @@ -87,13 +87,27 @@ def _process_db_up_namespace(cmd, namespace, db_type=None): def _process_db_down_namespace(namespace, db_type=None): # populate from cache if existing - _set_value(db_type, namespace, 'resource_group_name', 'group', cache=False) - _set_value(db_type, namespace, 'server_name', 'server', cache=False) + if namespace.resource_group_name is None: + namespace.resource_group_name = _get_value(db_type, namespace, 'resource_group_name', 'group') + remove_config_value(db_type, 'group') + if namespace.server_name is None and not namespace.delete_group: + namespace.server_name = _get_value(db_type, namespace, 'server_name', 'server') + remove_config_value(db_type, 'server') + remove_config_value(db_type, 'login') + remove_config_value(db_type, 'database') + remove_config_value(db_type, 'location') # put resource group info back in config if user does not want to delete it - if not namespace.delete_group: + if not namespace.delete_group and namespace.resource_group_name: _set_value(db_type, namespace, 'resource_group_name', 'group') + # error handling + if namespace.delete_group and not namespace.resource_group_name: + raise CLIError("Please specify the resource group name to delete.") + if not namespace.delete_group and not namespace.resource_group_name and not namespace.server_name: + raise CLIError("Please specify the {} server name to delete and its resource group name if you only want to " + "delete the specific {} server.".format(db_type, db_type)) + def _set_value(db_type, namespace, attribute, option, default=None, cache=True): if getattr(namespace, attribute) is None: diff --git a/src/db-up/azext_db_up/util.py b/src/db-up/azext_db_up/util.py index d343c44df5..6c89a04d95 100644 --- a/src/db-up/azext_db_up/util.py +++ b/src/db-up/azext_db_up/util.py @@ -38,6 +38,11 @@ def get_config_value(db_type, option, fallback='_fallback_none'): return None +def remove_config_value(db_type, option): + config_section = CONFIG_MAP[db_type] + DB_CONFIG.remove_option(config_section, option) + + def set_config_value(db_type, option, value): config_section = CONFIG_MAP[db_type] DB_CONFIG.set_value(config_section, option, value) diff --git a/src/db-up/setup.py b/src/db-up/setup.py index d01d135cb6..31477536d8 100644 --- a/src/db-up/setup.py +++ b/src/db-up/setup.py @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup, find_packages -VERSION = "0.1.15" +VERSION = "0.2.0" CLASSIFIERS = [ 'Development Status :: 4 - Beta',