summaryrefslogtreecommitdiff
path: root/src/conf_mode/dhcp_relay.py
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-04-05 17:26:29 +0200
committerChristian Poessinger <christian@poessinger.com>2020-04-05 17:26:29 +0200
commita39ae13ccc2a1154a1943246e1b8b45add11c560 (patch)
tree88d156287bb16bd189bdd43fbca3ddd1e9468999 /src/conf_mode/dhcp_relay.py
parente66abf4117d2b2c91d54a418ce10de91584c2035 (diff)
downloadvyos-1x-a39ae13ccc2a1154a1943246e1b8b45add11c560.tar.gz
vyos-1x-a39ae13ccc2a1154a1943246e1b8b45add11c560.zip
dhcp-relay: T2230: move inlined templates to dedicated files
Diffstat (limited to 'src/conf_mode/dhcp_relay.py')
-rwxr-xr-xsrc/conf_mode/dhcp_relay.py66
1 files changed, 25 insertions, 41 deletions
diff --git a/src/conf_mode/dhcp_relay.py b/src/conf_mode/dhcp_relay.py
index a1af2575f..6f8d66e7b 100755
--- a/src/conf_mode/dhcp_relay.py
+++ b/src/conf_mode/dhcp_relay.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2018 VyOS maintainers and contributors
+# Copyright (C) 2018-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,39 +13,18 @@
#
# 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 jinja2
+
+from jinja2 import FileSystemLoader, Environment
+from sys import exit
from vyos.config import Config
+from vyos.defaults import directories as vyos_data_dir
from vyos import ConfigError
config_file = r'/etc/default/isc-dhcp-relay'
-# Please be careful if you edit the template.
-config_tmpl = """
-### Autogenerated by dhcp_relay.py ###
-
-# Defaults for isc-dhcp-relay initscript
-# sourced by /etc/init.d/isc-dhcp-relay
-
-#
-# This is a POSIX shell fragment
-#
-
-# What servers should the DHCP relay forward requests to?
-SERVERS="{{ server | join(' ') }}"
-
-# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
-INTERFACES="{{ interface | join(' ') }}"
-
-# Additional options that are passed to the DHCP relay daemon?
-OPTIONS="-4 {{ options | join(' ') }}"
-"""
-
default_config_data = {
'interface': [],
'server': [],
@@ -57,23 +36,23 @@ default_config_data = {
def get_config():
relay = default_config_data
conf = Config()
- if not conf.exists('service dhcp-relay'):
+ if not conf.exists(['service', 'dhcp-relay']):
return None
else:
- conf.set_level('service dhcp-relay')
+ conf.set_level(['service', 'dhcp-relay'])
# Network interfaces to listen on
- if conf.exists('interface'):
- relay['interface'] = conf.return_values('interface')
+ if conf.exists(['interface']):
+ relay['interface'] = conf.return_values(['interface'])
# Servers equal to the address of the DHCP server(s)
- if conf.exists('server'):
- relay['server'] = conf.return_values('server')
+ if conf.exists(['server']):
+ relay['server'] = conf.return_values(['server'])
- conf.set_level('service dhcp-relay relay-options')
+ conf.set_level(['service', 'dhcp-relay', 'relay-options'])
- if conf.exists('hop-count'):
- count = '-c ' + conf.return_value('hop-count')
+ if conf.exists(['hop-count']):
+ count = '-c ' + conf.return_value(['hop-count'])
relay['options'].append(count)
# Specify the maximum packet size to send to a DHCPv4/BOOTP server.
@@ -81,8 +60,8 @@ def get_config():
# options while still fitting into the Ethernet MTU size.
#
# Available in DHCPv4 mode only:
- if conf.exists('max-size'):
- size = '-A ' + conf.return_value('max-size')
+ if conf.exists(['max-size']):
+ size = '-A ' + conf.return_value(['max-size'])
relay['options'].append(size)
# Control the handling of incoming DHCPv4 packets which already contain
@@ -94,8 +73,8 @@ def get_config():
# field; it may forward the packet unchanged; or, it may discard it.
#
# Available in DHCPv4 mode only:
- if conf.exists('relay-agents-packets'):
- pkt = '-a -m ' + conf.return_value('relay-agents-packets')
+ if conf.exists(['relay-agents-packets']):
+ pkt = '-a -m ' + conf.return_value(['relay-agents-packets'])
relay['options'].append(pkt)
return relay
@@ -119,7 +98,12 @@ def generate(relay):
if relay is None:
return None
- tmpl = jinja2.Template(config_tmpl)
+ # Prepare Jinja2 template loader from files
+ tmpl_path = os.path.join(vyos_data_dir['data'], 'templates', 'dhcp-relay')
+ fs_loader = FileSystemLoader(tmpl_path)
+ env = Environment(loader=fs_loader)
+
+ tmpl = env.get_template('config.tmpl')
config_text = tmpl.render(relay)
with open(config_file, 'w') as f:
f.write(config_text)
@@ -144,4 +128,4 @@ if __name__ == '__main__':
apply(c)
except ConfigError as e:
print(e)
- sys.exit(1)
+ exit(1)