summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-05-15 12:44:04 +0200
committerChristian Poessinger <christian@poessinger.com>2021-05-15 12:47:45 +0200
commitead5198e69cf0e854127b43102fd0f1f58b38924 (patch)
tree4a72519398783de96fac42062252b5a923d4ba3c
parent52135032b6ab556db98b5f3fc2a3e6e2cbe9a607 (diff)
downloadvyos-1x-ead5198e69cf0e854127b43102fd0f1f58b38924.tar.gz
vyos-1x-ead5198e69cf0e854127b43102fd0f1f58b38924.zip
dhcp-server: T3544: fix FileNotFoundError on first invokation
The problem of using the move() operation over render() is that render will silently create the directory tree in the background and move() does not. This means that on first boot when /run/dhcp-server does not exist, move will fail with a FileNotFoundError. Instead of using move() we render() the configuration two times, one for validating it via dhcpd -t and the other time to really apply it to the service. The performance impact should be little as the config should still be cached in the system RAM. (cherry picked from commit 1f68b69328c961e450ac70b12f7bf073d70355d7)
-rwxr-xr-xsrc/conf_mode/dhcp_server.py7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/conf_mode/dhcp_server.py b/src/conf_mode/dhcp_server.py
index af77c6d43..0ed09e130 100755
--- a/src/conf_mode/dhcp_server.py
+++ b/src/conf_mode/dhcp_server.py
@@ -18,7 +18,6 @@ import os
from ipaddress import ip_address
from ipaddress import ip_network
-from shutil import move
from sys import exit
from vyos.config import Config
@@ -289,9 +288,9 @@ def generate(dhcp):
raise ConfigError('Configuration file errors encountered - check your options!')
# Now that we know that the newly rendered configuration is "good" we can
- # move the temporary configuration to the "real" configuration - we could
- # also render it two times but that would not be as fast as a move operation
- move(tmp_file, config_file)
+ # render the "real" configuration
+ render(config_file, 'dhcp-server/dhcpd.conf.tmpl', dhcp,
+ formater=lambda _: _.replace("&quot;", '"'))
return None