From 671e9f0f3738203e2f6f518925fc937d2135541b Mon Sep 17 00:00:00 2001
From: Florian Sesser <florian@privatestorage.io>
Date: Sun, 30 May 2021 18:48:52 +0000
Subject: [PATCH] Make VPN optional - fix testing and production grid configs

---
 morph/grid/testing/grid.nix |  2 --
 morph/lib/make-issuer.nix   | 51 ++++++++++++++++++++++---------------
 morph/lib/make-testing.nix  | 51 ++++++++++++++++++++++---------------
 3 files changed, 60 insertions(+), 44 deletions(-)

diff --git a/morph/grid/testing/grid.nix b/morph/grid/testing/grid.nix
index 760826b8..c1a9f60a 100644
--- a/morph/grid/testing/grid.nix
+++ b/morph/grid/testing/grid.nix
@@ -15,7 +15,6 @@ import ../../lib/make-grid.nix {
   in {
     "payments" = import ../../lib/make-issuer.nix ({
       publicIPv4 = "18.197.42.120";
-      monitoringvpnIPv4 = "172.23.23.11";
       inherit sshUsers;
       hardware = ../../lib/issuer-aws.nix;
       stateVersion = "19.03";
@@ -23,7 +22,6 @@ import ../../lib/make-grid.nix {
 
     "storage001" = import ../../lib/make-testing.nix (cfg // {
       publicIPv4 = "3.120.26.190";
-      monitoringvpnIPv4 = "172.23.23.11";
       inherit sshUsers;
       hardware = ./testing001-hardware.nix;
       stateVersion = "19.03";
diff --git a/morph/lib/make-issuer.nix b/morph/lib/make-issuer.nix
index 912b0224..17382c4b 100644
--- a/morph/lib/make-issuer.nix
+++ b/morph/lib/make-issuer.nix
@@ -1,16 +1,41 @@
 { hardware
 , ristrettoSigningKeyPath
 , stripeSecretKeyPath
-, monitoringvpnSecretKeyDir
 , issuerDomain
 , letsEncryptAdminEmail
 , allowedChargeOrigins
 , sshUsers
 , stateVersion
 , publicIPv4
-, monitoringvpnIPv4
+, monitoringvpnSecretKeyDir ? null
+, monitoringvpnIPv4 ? null
 , ...
-}: rec {
+}: let
+
+  enableVpn = if (monitoringvpnSecretKeyDir != null &&
+                  monitoringvpnIPv4 != null)
+              then true else false;
+
+  vpnSecrets = if !enableVpn then {} else {
+    "monitoringvpn-secret-key" = {
+      source = monitoringvpnSecretKeyDir + "/${monitoringvpnIPv4}.key";
+      destination = "/run/keys/monitoringvpn/client.key";
+      owner.user = "root";
+      owner.group = "root";
+      permissions = "0400";
+      action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
+    };
+    "monitoringvpn-preshared-key" = {
+      source = monitoringvpnSecretKeyDir + "/preshared.key";
+      destination = "/run/keys/monitoringvpn/preshared.key";
+      owner.user = "root";
+      owner.group = "root";
+      permissions = "0400";
+      action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
+    };
+  };
+
+in rec {
   deployment = {
     targetHost = publicIPv4;
 
@@ -31,23 +56,7 @@
         permissions = "0400";
         action = ["sudo" "systemctl" "restart" "zkapissuer.service"];
       };
-      "monitoringvpn-secret-key" = {
-        source = monitoringvpnSecretKeyDir + "/${monitoringvpnIPv4}.key";
-        destination = "/run/keys/monitoringvpn/client.key";
-        owner.user = "root";
-        owner.group = "root";
-        permissions = "0400";
-        action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
-      };
-      "monitoringvpn-preshared-key" = {
-        source = monitoringvpnSecretKeyDir + "/preshared.key";
-        destination = "/run/keys/monitoringvpn/preshared.key";
-        owner.user = "root";
-        owner.group = "root";
-        permissions = "0400";
-        action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
-      };
-    };
+    } // vpnSecrets;
   };
 
   imports = [
@@ -71,7 +80,7 @@
 
   system.stateVersion = stateVersion;
 
-  services.private-storage.monitoring.vpn.client = {
+  services.private-storage.monitoring.vpn.client = if !enableVpn then {} else {
     enable = true;
     ip = monitoringvpnIPv4;
   };
diff --git a/morph/lib/make-testing.nix b/morph/lib/make-testing.nix
index 050c4399..149ae740 100644
--- a/morph/lib/make-testing.nix
+++ b/morph/lib/make-testing.nix
@@ -2,12 +2,37 @@
 , hardware
 , publicStoragePort
 , ristrettoSigningKeyPath
-, monitoringvpnSecretKeyDir
 , passValue
 , sshUsers
 , stateVersion
-, monitoringvpnIPv4
-, ... }: rec {
+, monitoringvpnSecretKeyDir ? null
+, monitoringvpnIPv4 ? null
+, ... }: let
+
+  enableVpn = if (monitoringvpnSecretKeyDir != null &&
+                  monitoringvpnIPv4 != null)
+              then true else false;
+
+  vpnSecrets = if !enableVpn then {} else {
+    "monitoringvpn-secret-key" = {
+      source = monitoringvpnSecretKeyDir + "/${monitoringvpnIPv4}.key";
+      destination = "/run/keys/monitoringvpn/client.key";
+      owner.user = "root";
+      owner.group = "root";
+      permissions = "0400";
+      action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
+    };
+    "monitoringvpn-preshared-key" = {
+      source = monitoringvpnSecretKeyDir + "/preshared.key";
+      destination = "/run/keys/monitoringvpn/preshared.key";
+      owner.user = "root";
+      owner.group = "root";
+      permissions = "0400";
+      action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
+    };
+  };
+
+in rec {
 
   deployment = {
     targetHost = publicIPv4;
@@ -24,23 +49,7 @@
         # extract it from the tahoe-lafs nixos module somehow?
         action = ["sudo" "systemctl" "restart" "tahoe.storage.service"];
       };
-      "monitoringvpn-secret-key" = {
-        source = monitoringvpnSecretKeyDir + "/${monitoringvpnIPv4}.key";
-        destination = "/run/keys/monitoringvpn/client.key";
-        owner.user = "root";
-        owner.group = "root";
-        permissions = "0400";
-        action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
-      };
-      "monitoringvpn-preshared-key" = {
-        source = monitoringvpnSecretKeyDir + "/preshared.key";
-        destination = "/run/keys/monitoringvpn/preshared.key";
-        owner.user = "root";
-        owner.group = "root";
-        permissions = "0400";
-        action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"];
-      };
-    };
+    } // vpnSecrets;
   };
 
   imports = [
@@ -60,7 +69,7 @@
 
   system.stateVersion = stateVersion;
 
-  services.private-storage.monitoring.vpn.client = {
+  services.private-storage.monitoring.vpn.client = if !enableVpn then {} else {
     enable = true;
     ip = monitoringvpnIPv4;
   };
-- 
GitLab