summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/templates/bcast-relay/udp-broadcast-relay.tmpl7
-rwxr-xr-xsrc/conf_mode/bcast_relay.py59
2 files changed, 35 insertions, 31 deletions
diff --git a/data/templates/bcast-relay/udp-broadcast-relay.tmpl b/data/templates/bcast-relay/udp-broadcast-relay.tmpl
new file mode 100644
index 000000000..3d8c3fe94
--- /dev/null
+++ b/data/templates/bcast-relay/udp-broadcast-relay.tmpl
@@ -0,0 +1,7 @@
+### 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(' ') }}"
diff --git a/src/conf_mode/bcast_relay.py b/src/conf_mode/bcast_relay.py
index 8889e701c..96576ddd4 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,34 @@
#
# 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
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 +50,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 +61,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 +111,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 +145,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)
@@ -179,4 +176,4 @@ if __name__ == '__main__':
apply(c)
except ConfigError as e:
print(e)
- sys.exit(1)
+ exit(1)