Merge pull request #611 from bourreP/enh-add-reload-and-restart-service

[enh] add reload and restart service
This commit is contained in:
Alexandre Aubin 2019-01-17 16:11:19 +01:00 committed by GitHub
commit ff1286885d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 3 deletions

View file

@ -1178,6 +1178,33 @@ service:
nargs: "+"
metavar: NAME
### service_reload()
reload:
action_help: Reload one or more services
arguments:
names:
help: Service name to reload
nargs: "+"
metavar: NAME
### service_restart()
restart:
action_help: Restart one or more services. If the services are not running yet, they will be started.
arguments:
names:
help: Service name to restart
nargs: "+"
metavar: NAME
### service_reload_or_restart()
reload_or_restart:
action_help: Reload one or more services if they support it. If not, restart them instead. If the services are not running yet, they will be started.
arguments:
names:
help: Service name to reload or restart
nargs: "+"
metavar: NAME
### service_enable()
enable:
action_help: Enable one or more services

View file

@ -222,7 +222,6 @@
"log_help_to_get_log": "To view the log of the operation '{desc}', use the command 'yunohost log display {name}'",
"log_link_to_failed_log": "The operation '{desc}' has failed! To get help, please <a href=\"#/tools/logs/{name}\">provide the full log of this operation by clicking here</a>",
"log_help_to_get_failed_log": "The operation '{desc}' has failed! To get help, please share the full log of this operation using the command 'yunohost log display {name} --share'",
"log_category_404": "The log category '{category}' does not exist",
"log_does_exists": "There is not operation log with the name '{log}', use 'yunohost log list to see all available operation logs'",
"log_operation_unit_unclosed_properly": "Operation unit has not been closed properly",
"log_app_addaccess": "Add access to '{}'",
@ -444,6 +443,12 @@
"service_regenconf_pending_applying": "Applying pending configuration for service '{service}'…",
"service_remove_failed": "Unable to remove service '{service:s}'",
"service_removed": "The service '{service:s}' has been removed",
"service_reload_failed": "Unable to reload service '{service:s}'\n\nRecent service logs:{logs:s}",
"service_reloaded": "The service '{service:s}' has been reloaded",
"service_restart_failed": "Unable to restart service '{service:s}'\n\nRecent service logs:{logs:s}",
"service_restarted": "The service '{service:s}' has been restarted",
"service_reload_or_restart_failed": "Unable to reload or restart service '{service:s}'\n\nRecent service logs:{logs:s}",
"service_reloaded_or_restarted": "The service '{service:s}' has been reloaded or restarted",
"service_start_failed": "Unable to start service '{service:s}'\n\nRecent service logs:{logs:s}",
"service_started": "The service '{service:s}' has been started",
"service_status_failed": "Unable to determine status of service '{service:s}'",

View file

@ -152,6 +152,60 @@ def service_stop(names):
logger.debug(m18n.n('service_already_stopped', service=name))
def service_reload(names):
"""
Reload one or more services
Keyword argument:
name -- Services name to reload
"""
if isinstance(names, str):
names = [names]
for name in names:
if _run_service_command('reload', name):
logger.success(m18n.n('service_reloaded', service=name))
else:
if service_status(name)['status'] != 'inactive':
raise YunohostError('service_reload_failed', service=name, logs=_get_journalctl_logs(name))
def service_restart(names):
"""
Restart one or more services. If the services are not running yet, they will be started.
Keyword argument:
name -- Services name to restart
"""
if isinstance(names, str):
names = [names]
for name in names:
if _run_service_command('restart', name):
logger.success(m18n.n('service_restarted', service=name))
else:
if service_status(name)['status'] != 'inactive':
raise YunohostError('service_restart_failed', service=name, logs=_get_journalctl_logs(name))
def service_reload_or_restart(names):
"""
Reload one or more services if they support it. If not, restart them instead. If the services are not running yet, they will be started.
Keyword argument:
name -- Services name to reload or restart
"""
if isinstance(names, str):
names = [names]
for name in names:
if _run_service_command('reload-or-restart', name):
logger.success(m18n.n('service_reloaded_or_restarted', service=name))
else:
if service_status(name)['status'] != 'inactive':
raise YunohostError('service_reload_or_restart_failed', service=name, logs=_get_journalctl_logs(name))
@is_unit_operation()
def service_enable(operation_logger, names):
"""
@ -597,14 +651,14 @@ def _run_service_command(action, service):
if service not in services.keys():
raise YunohostError('service_unknown', service=service)
possible_actions = ['start', 'stop', 'restart', 'reload', 'enable', 'disable']
possible_actions = ['start', 'stop', 'restart', 'reload', 'reload-or-restart', 'enable', 'disable']
if action not in possible_actions:
raise ValueError("Unknown action '%s', available actions are: %s" % (action, ", ".join(possible_actions)))
cmd = 'systemctl %s %s' % (action, service)
need_lock = services[service].get('need_lock', False) \
and action in ['start', 'stop', 'restart', 'reload']
and action in ['start', 'stop', 'restart', 'reload', 'reload-or-restart']
try:
# Launch the command