blob: 4db375d8e19d5647edf99b8656d09156019f1976 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/usr/bin/env python3
#
# Copyright (C) 2020 Francois Mertz fireboxled at gmail.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import re
from sys import exit
from vyos.config import Config
from vyos import ConfigError
from vyos.util import run
from vyos.template import render
from vyos import airbag
airbag.enable()
def get_config():
c = Config()
if not c.exists('system display'):
return None
c.set_level('system display')
return c.get_config_dict([])
def generate(c):
if c == None:
return None
# Render config file for daemon LCDd
render('/etc/LCDd.conf', 'system-display/LCDd.conf.tmpl', c)
# Render config file for client lcdproc
render('/etc/lcdproc.conf', 'system-display/lcdproc.conf.tmpl', c)
return None
def verify(c):
if c == None:
return None
if c.get('model') == None:
raise ConfigError('For system display, a model is [REQUIRED]')
if c.get('show') == None:
raise ConfigError('For system display, show cannot be empty')
if 'network' in c['show'] and 'interface' not in c['show']['network']:
raise ConfigError('system display show network must have at least one interface')
if 'network' in c['show'] and 'interface' in c['show']['network'] and len(c['show']['network']['interface']) > 3:
raise ConfigError('system display show network interface cannot have more than 3 entries')
return None
def apply(c):
if not c or c['config'] == 'disabled':
# Stop client first
run('systemctl stop lcdproc.service')
# Stop server next
return run('systemctl stop LCDd.service')
# Stop client first
run('systemctl stop lcdproc.service')
# Restart server next
run('systemctl restart LCDd.service')
# Start client
run('systemctl start lcdproc.service')
return None
if __name__ == '__main__':
try:
c = get_config()
verify(c)
generate(c)
apply(c)
except ConfigError as e:
print(e)
exit(1)
|