mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[enh] Split app_remove action into service_add/remove
This commit is contained in:
parent
2f6af85b46
commit
11a38641e8
4 changed files with 103 additions and 63 deletions
|
@ -423,27 +423,6 @@ app:
|
||||||
help: Delete the key
|
help: Delete the key
|
||||||
action: store_true
|
action: store_true
|
||||||
|
|
||||||
### app_service()
|
|
||||||
service:
|
|
||||||
action_help: Add or remove a YunoHost monitored service
|
|
||||||
api: POST /services
|
|
||||||
arguments:
|
|
||||||
service:
|
|
||||||
help: Service to add/remove
|
|
||||||
-s:
|
|
||||||
full: --status
|
|
||||||
help: Custom status command
|
|
||||||
-l:
|
|
||||||
full: --log
|
|
||||||
help: Absolute path to log file to display
|
|
||||||
-r:
|
|
||||||
full: --runlevel
|
|
||||||
help: Runlevel priority of the service
|
|
||||||
-R:
|
|
||||||
full: --remove
|
|
||||||
help: Remove service
|
|
||||||
action: store_true
|
|
||||||
|
|
||||||
### app_checkport()
|
### app_checkport()
|
||||||
checkport:
|
checkport:
|
||||||
action_help: Check availability of a local port
|
action_help: Check availability of a local port
|
||||||
|
@ -707,6 +686,32 @@ service:
|
||||||
category_help: Manage services
|
category_help: Manage services
|
||||||
actions:
|
actions:
|
||||||
|
|
||||||
|
### service_add()
|
||||||
|
add:
|
||||||
|
action_help: Add a service
|
||||||
|
# api: POST /services
|
||||||
|
arguments:
|
||||||
|
name:
|
||||||
|
help: Service name to add
|
||||||
|
-s:
|
||||||
|
full: --status
|
||||||
|
help: Custom status command
|
||||||
|
-l:
|
||||||
|
full: --log
|
||||||
|
help: Absolute path to log file to display
|
||||||
|
-r:
|
||||||
|
full: --runlevel
|
||||||
|
help: Runlevel priority of the service
|
||||||
|
type: int
|
||||||
|
|
||||||
|
### service_remove()
|
||||||
|
remove:
|
||||||
|
action_help: Remove a service
|
||||||
|
# api: DELETE /services
|
||||||
|
arguments:
|
||||||
|
name:
|
||||||
|
help: Service name to remove
|
||||||
|
|
||||||
### service_start()
|
### service_start()
|
||||||
start:
|
start:
|
||||||
action_help: Start one or more services
|
action_help: Start one or more services
|
||||||
|
|
39
app.py
39
app.py
|
@ -740,45 +740,6 @@ def app_setting(app, key, value=None, delete=False):
|
||||||
yaml.safe_dump(app_settings, f, default_flow_style=False)
|
yaml.safe_dump(app_settings, f, default_flow_style=False)
|
||||||
|
|
||||||
|
|
||||||
def app_service(service, status=None, log=None, runlevel=None, remove=False):
|
|
||||||
"""
|
|
||||||
Add or remove a YunoHost monitored service
|
|
||||||
|
|
||||||
Keyword argument:
|
|
||||||
service -- Service to add/remove
|
|
||||||
status -- Custom status command
|
|
||||||
log -- Absolute path to log file to display
|
|
||||||
runlevel -- Runlevel priority of the service
|
|
||||||
remove -- Remove service
|
|
||||||
|
|
||||||
"""
|
|
||||||
service_file = '/etc/yunohost/services.yml'
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(service_file) as f:
|
|
||||||
services = yaml.load(f)
|
|
||||||
except IOError:
|
|
||||||
# Do not fail if service file is not there
|
|
||||||
services = {}
|
|
||||||
|
|
||||||
if remove and service in services:
|
|
||||||
del services[service]
|
|
||||||
else:
|
|
||||||
if status is None:
|
|
||||||
services[service] = { 'status': 'service' }
|
|
||||||
else:
|
|
||||||
services[service] = { 'status': status }
|
|
||||||
|
|
||||||
if log is not None:
|
|
||||||
services[service]['log'] = log
|
|
||||||
|
|
||||||
if runlevel is not None:
|
|
||||||
services[service]['runlevel'] = runlevel
|
|
||||||
|
|
||||||
with open(service_file, 'w') as f:
|
|
||||||
yaml.safe_dump(services, f, default_flow_style=False)
|
|
||||||
|
|
||||||
|
|
||||||
def app_checkport(port):
|
def app_checkport(port):
|
||||||
"""
|
"""
|
||||||
Check availability of a local port
|
Check availability of a local port
|
||||||
|
|
|
@ -85,6 +85,10 @@
|
||||||
"monitor_glances_con_failed" : "Unable to connect to Glances server",
|
"monitor_glances_con_failed" : "Unable to connect to Glances server",
|
||||||
|
|
||||||
"service_unknown" : "Unknown service '%s'",
|
"service_unknown" : "Unknown service '%s'",
|
||||||
|
"service_add_failed" : "Unable to add service '%s'",
|
||||||
|
"service_added" : "Service successfully added",
|
||||||
|
"service_remove_failed" : "Unable to remove service '%s'",
|
||||||
|
"service_removed" : "Service successfully removed",
|
||||||
"service_start_failed" : "Unable to start service '%s'",
|
"service_start_failed" : "Unable to start service '%s'",
|
||||||
"service_already_started" : "Service '%s' is already started",
|
"service_already_started" : "Service '%s' is already started",
|
||||||
"service_started" : "Service '%s' successfully started",
|
"service_started" : "Service '%s' successfully started",
|
||||||
|
|
76
service.py
76
service.py
|
@ -32,6 +32,61 @@ import os.path
|
||||||
from moulinette.core import MoulinetteError
|
from moulinette.core import MoulinetteError
|
||||||
|
|
||||||
|
|
||||||
|
def service_add(name, status=None, log=None, runlevel=None):
|
||||||
|
"""
|
||||||
|
Add a custom service
|
||||||
|
|
||||||
|
Keyword argument:
|
||||||
|
name -- Service name to add
|
||||||
|
status -- Custom status command
|
||||||
|
log -- Absolute path to log file to display
|
||||||
|
runlevel -- Runlevel priority of the service
|
||||||
|
|
||||||
|
"""
|
||||||
|
services = _get_services()
|
||||||
|
|
||||||
|
if not status:
|
||||||
|
services[name] = { 'status': 'service' }
|
||||||
|
else:
|
||||||
|
services[name] = { 'status': status }
|
||||||
|
|
||||||
|
if log is not None:
|
||||||
|
services[name]['log'] = log
|
||||||
|
|
||||||
|
if runlevel is not None:
|
||||||
|
services[name]['runlevel'] = runlevel
|
||||||
|
|
||||||
|
try:
|
||||||
|
_save_services(services)
|
||||||
|
except:
|
||||||
|
raise MoulinetteError(errno.EIO, m18n.n('service_add_failed') % name)
|
||||||
|
|
||||||
|
msignals.display(m18n.n('service_added'), 'success')
|
||||||
|
|
||||||
|
|
||||||
|
def service_remove(name):
|
||||||
|
"""
|
||||||
|
Remove a custom service
|
||||||
|
|
||||||
|
Keyword argument:
|
||||||
|
name -- Service name to remove
|
||||||
|
|
||||||
|
"""
|
||||||
|
services = _get_services()
|
||||||
|
|
||||||
|
try:
|
||||||
|
del services[name]
|
||||||
|
except KeyError:
|
||||||
|
raise MoulinetteError(errno.EINVAL, m18n.n('service_unknown') % name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
_save_services(services)
|
||||||
|
except:
|
||||||
|
raise MoulinetteError(errno.EIO, m18n.n('service_remove_failed') % name)
|
||||||
|
|
||||||
|
msignals.display(m18n.n('service_removed'), 'success')
|
||||||
|
|
||||||
|
|
||||||
def service_start(names):
|
def service_start(names):
|
||||||
"""
|
"""
|
||||||
Start one or more services
|
Start one or more services
|
||||||
|
@ -238,10 +293,25 @@ def _get_services():
|
||||||
Get a dict of managed services with their parameters
|
Get a dict of managed services with their parameters
|
||||||
|
|
||||||
"""
|
"""
|
||||||
with open('/etc/yunohost/services.yml', 'r') as f:
|
try:
|
||||||
services = yaml.load(f)
|
with open('/etc/yunohost/services.yml', 'r') as f:
|
||||||
return services
|
services = yaml.load(f)
|
||||||
|
except:
|
||||||
|
return {}
|
||||||
|
else:
|
||||||
|
return services
|
||||||
|
|
||||||
|
def _save_services(services):
|
||||||
|
"""
|
||||||
|
Save managed services to files
|
||||||
|
|
||||||
|
Keyword argument:
|
||||||
|
services -- A dict of managed services with their parameters
|
||||||
|
|
||||||
|
"""
|
||||||
|
# TODO: Save to custom services.yml
|
||||||
|
with open('/etc/yunohost/services.yml', 'w') as f:
|
||||||
|
yaml.safe_dump(services, f, default_flow_style=False)
|
||||||
|
|
||||||
def _tail(file, n, offset=None):
|
def _tail(file, n, offset=None):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue