[enh] add new option --remove-apps to 'yunohost domain remove'

This commit is contained in:
Laurent Peuch 2021-01-01 21:27:29 +01:00
parent aacb269b0d
commit 865265ea54
3 changed files with 21 additions and 5 deletions

View file

@ -448,6 +448,10 @@ domain:
help: Domain to delete help: Domain to delete
extra: extra:
pattern: *pattern_domain pattern: *pattern_domain
-r:
full: --remove-apps
help: Remove apps installed on the domain
action: store_true
### domain_dns_conf() ### domain_dns_conf()
dns-conf: dns-conf:

View file

@ -277,6 +277,7 @@
"domain_dyndns_root_unknown": "Unknown DynDNS root domain", "domain_dyndns_root_unknown": "Unknown DynDNS root domain",
"domain_exists": "The domain already exists", "domain_exists": "The domain already exists",
"domain_hostname_failed": "Unable to set new hostname. This might cause an issue later (it might be fine).", "domain_hostname_failed": "Unable to set new hostname. This might cause an issue later (it might be fine).",
"domain_remove_confirm_apps_removal": "Removing this domain will remove those applications:\n{apps}\n\nAre you sure you want to do that? [{answers}]",
"domain_uninstall_app_first": "Those applications are still installed on your domain:\n{apps}\n\nPlease uninstall them using 'yunohost app remove the_app_id' or move them to another domain using 'yunohost app change-url the_app_id' before proceeding to domain removal", "domain_uninstall_app_first": "Those applications are still installed on your domain:\n{apps}\n\nPlease uninstall them using 'yunohost app remove the_app_id' or move them to another domain using 'yunohost app change-url the_app_id' before proceeding to domain removal",
"domain_name_unknown": "Domain '{domain}' unknown", "domain_name_unknown": "Domain '{domain}' unknown",
"domain_unknown": "Unknown domain", "domain_unknown": "Unknown domain",

View file

@ -26,7 +26,7 @@
import os import os
import re import re
from moulinette import m18n, msettings from moulinette import m18n, msettings, msignals
from moulinette.core import MoulinetteError from moulinette.core import MoulinetteError
from yunohost.utils.error import YunohostError from yunohost.utils.error import YunohostError
from moulinette.utils.log import getActionLogger from moulinette.utils.log import getActionLogger
@ -172,17 +172,18 @@ def domain_add(operation_logger, domain, dyndns=False):
@is_unit_operation() @is_unit_operation()
def domain_remove(operation_logger, domain, force=False): def domain_remove(operation_logger, domain, remove_apps=False, force=False):
""" """
Delete domains Delete domains
Keyword argument: Keyword argument:
domain -- Domain to delete domain -- Domain to delete
remove_apps -- Remove applications installed on the domain
force -- Force the domain removal force -- Force the domain removal
""" """
from yunohost.hook import hook_callback from yunohost.hook import hook_callback
from yunohost.app import app_ssowatconf, app_info from yunohost.app import app_ssowatconf, app_info, app_remove
from yunohost.utils.ldap import _get_ldap_interface from yunohost.utils.ldap import _get_ldap_interface
if not force and domain not in domain_list()['domains']: if not force and domain not in domain_list()['domains']:
@ -206,10 +207,20 @@ def domain_remove(operation_logger, domain, force=False):
settings = _get_app_settings(app) settings = _get_app_settings(app)
label = app_info(app)["name"] label = app_info(app)["name"]
if settings.get("domain") == domain: if settings.get("domain") == domain:
apps_on_that_domain.append(" - %s \"%s\" on https://%s%s" % (app, label, domain, settings["path"]) if "path" in settings else app) apps_on_that_domain.append((app, " - %s \"%s\" on https://%s%s" % (app, label, domain, settings["path"]) if "path" in settings else app))
if apps_on_that_domain: if apps_on_that_domain:
raise YunohostError('domain_uninstall_app_first', apps="\n".join(apps_on_that_domain)) if remove_apps:
answer = msignals.prompt(m18n.n('domain_remove_confirm_apps_removal',
apps="\n".join([x[1] for x in apps_on_that_domain]),
answers='y/N'), color="yellow")
if answer.upper() != "Y":
raise YunohostError("aborting")
for app, _ in apps_on_that_domain:
app_remove(app)
else:
raise YunohostError('domain_uninstall_app_first', apps="\n".join([x[1] for x in apps_on_that_domain]))
operation_logger.start() operation_logger.start()
ldap = _get_ldap_interface() ldap = _get_ldap_interface()