summaryrefslogtreecommitdiff
path: root/src/conf_mode/system-display.py
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)