From 9c8dac06170eaddd312abb52b0b5724ada4c5ee8 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Mon, 13 Apr 2020 12:38:37 +0200
Subject: dhcp-relay: T2185: migrate from SysVinit to systemd

---
 src/conf_mode/dhcp_relay.py        | 22 ++++++++++++++--------
 src/systemd/isc-dhcp-relay.service | 14 ++++++++++++++
 2 files changed, 28 insertions(+), 8 deletions(-)
 create mode 100644 src/systemd/isc-dhcp-relay.service

(limited to 'src')

diff --git a/src/conf_mode/dhcp_relay.py b/src/conf_mode/dhcp_relay.py
index fdc8d2443..ce0e01308 100755
--- a/src/conf_mode/dhcp_relay.py
+++ b/src/conf_mode/dhcp_relay.py
@@ -19,11 +19,11 @@ import os
 from sys import exit
 
 from vyos.config import Config
-from vyos import ConfigError
-from vyos.util import call
 from vyos.template import render
+from vyos.util import call
+from vyos import ConfigError
 
-config_file = r'/etc/default/isc-dhcp-relay'
+config_file = r'/run/dhcp-relay/dhcp.conf'
 
 default_config_data = {
     'interface': [],
@@ -95,19 +95,25 @@ def verify(relay):
 
 def generate(relay):
     # bail out early - looks like removal from running config
-    if relay is None:
+    if not relay:
         return None
 
+    # Create configuration directory on demand
+    dirname = os.path.dirname(config_file)
+    if not os.path.isdir(dirname):
+        os.mkdir(dirname)
+
     render(config_file, 'dhcp-relay/config.tmpl', relay)
     return None
 
 def apply(relay):
-    if relay is not None:
-        call('sudo systemctl restart isc-dhcp-relay.service')
+    if relay:
+        call('systemctl restart isc-dhcp-relay.service')
     else:
         # DHCP relay support is removed in the commit
-        call('sudo systemctl stop isc-dhcp-relay.service')
-        os.unlink(config_file)
+        call('systemctl stop isc-dhcp-relay.service')
+        if os.path.exists(config_file):
+            os.unlink(config_file)
 
     return None
 
diff --git a/src/systemd/isc-dhcp-relay.service b/src/systemd/isc-dhcp-relay.service
new file mode 100644
index 000000000..ebf4d234e
--- /dev/null
+++ b/src/systemd/isc-dhcp-relay.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=ISC DHCP IPv4 relay
+Documentation=man:dhcrelay(8)
+Wants=network-online.target
+ConditionPathExists=/run/dhcp-relay/dhcp.conf
+After=vyos-router.service
+
+[Service]
+WorkingDirectory=/run/dhcp-relay
+EnvironmentFile=/run/dhcp-relay/dhcp.conf
+ExecStart=/usr/sbin/dhcrelay -d -4 $OPTIONS
+
+[Install]
+WantedBy=multi-user.target
-- 
cgit v1.2.3