summaryrefslogtreecommitdiff
path: root/src/conf_mode/bcast_relay.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_mode/bcast_relay.py')
-rwxr-xr-xsrc/conf_mode/bcast_relay.py64
1 files changed, 31 insertions, 33 deletions
diff --git a/src/conf_mode/bcast_relay.py b/src/conf_mode/bcast_relay.py
index 8889e701c..8d4c4a89a 100755
--- a/src/conf_mode/bcast_relay.py
+++ b/src/conf_mode/bcast_relay.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2017 VyOS maintainers and contributors
+# Copyright (C) 2017-2020 VyOS maintainers and contributors
#
# 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
@@ -13,42 +13,35 @@
#
# 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 sys
import os
import fnmatch
-import jinja2
+
+from sys import exit
+from copy import deepcopy
+from jinja2 import FileSystemLoader, Environment
from vyos.config import Config
+from vyos.defaults import directories as vyos_data_dir
from vyos import ConfigError
+from vyos.util import call
config_file = r'/etc/default/udp-broadcast-relay'
-config_tmpl = """
-### Autogenerated by bcast_relay.py ###
-
-# UDP broadcast relay configuration for instance {{ id }}
-{%- if description %}
-# Comment: {{ description }}
-{% endif %}
-DAEMON_ARGS="{% if address %}-s {{ address }} {% endif %}{{ id }} {{ port }} {{ interfaces | join(' ') }}"
-
-"""
-
default_config_data = {
'disabled': False,
'instances': []
}
def get_config():
- relay = default_config_data
+ relay = deepcopy(default_config_data)
conf = Config()
- if not conf.exists('service broadcast-relay'):
+ base = ['service', 'broadcast-relay']
+
+ if not conf.exists(base):
return None
else:
- conf.set_level('service broadcast-relay')
+ conf.set_level(base)
# Service can be disabled by user
if conf.exists('disable'):
@@ -58,7 +51,7 @@ def get_config():
# Parse configuration of each individual instance
if conf.exists('id'):
for id in conf.list_nodes('id'):
- conf.set_level('service broadcast-relay id {0}'.format(id))
+ conf.set_level(base + ['id', id])
config = {
'id': id,
'disabled': False,
@@ -69,24 +62,24 @@ def get_config():
}
# Check if individual broadcast relay service is disabled
- if conf.exists('disable'):
+ if conf.exists(['disable']):
config['disabled'] = True
# Source IP of forwarded packets, if empty original senders address is used
- if conf.exists('address'):
- config['address'] = conf.return_value('address')
+ if conf.exists(['address']):
+ config['address'] = conf.return_value(['address'])
# A description for each individual broadcast relay service
- if conf.exists('description'):
- config['description'] = conf.return_value('description')
+ if conf.exists(['description']):
+ config['description'] = conf.return_value(['description'])
# UDP port to listen on for broadcast frames
- if conf.exists('port'):
- config['port'] = conf.return_value('port')
+ if conf.exists(['port']):
+ config['port'] = conf.return_value(['port'])
# Network interfaces to listen on for broadcast frames to be relayed
- if conf.exists('interface'):
- config['interfaces'] = conf.return_values('interface')
+ if conf.exists(['interface']):
+ config['interfaces'] = conf.return_values(['interface'])
relay['instances'].append(config)
@@ -119,6 +112,11 @@ def generate(relay):
if relay is None:
return None
+ # Prepare Jinja2 template loader from files
+ tmpl_path = os.path.join(vyos_data_dir['data'], 'templates', 'bcast-relay')
+ fs_loader = FileSystemLoader(tmpl_path)
+ env = Environment(loader=fs_loader)
+
config_dir = os.path.dirname(config_file)
config_filename = os.path.basename(config_file)
active_configs = []
@@ -148,7 +146,7 @@ def generate(relay):
# configuration filename contains instance id
file = config_file + str(r['id'])
- tmpl = jinja2.Template(config_tmpl)
+ tmpl = env.get_template('udp-broadcast-relay.tmpl')
config_text = tmpl.render(r)
with open(file, 'w') as f:
f.write(config_text)
@@ -157,7 +155,7 @@ def generate(relay):
def apply(relay):
# first stop all running services
- os.system('sudo systemctl stop udp-broadcast-relay@{1..99}')
+ call('sudo systemctl stop udp-broadcast-relay@{1..99}')
if (relay is None) or relay['disabled']:
return None
@@ -167,7 +165,7 @@ def apply(relay):
# Don't start individual instance when it's disabled
if r['disabled']:
continue
- os.system('sudo systemctl start udp-broadcast-relay@{0}'.format(r['id']))
+ call('sudo systemctl start udp-broadcast-relay@{0}'.format(r['id']))
return None
@@ -179,4 +177,4 @@ if __name__ == '__main__':
apply(c)
except ConfigError as e:
print(e)
- sys.exit(1)
+ exit(1)