From 4bfdbea62a890ad14e93371e63a14551464b2c00 Mon Sep 17 00:00:00 2001
From: Florian Sesser <florian@private.storage>
Date: Wed, 3 Nov 2021 16:54:07 +0000
Subject: [PATCH] Add second domain to monitoring cert

Copy everything from how the issuer does it.
---
 morph/grid/local/config.json                |  1 +
 morph/grid/local/grid.nix                   |  2 +-
 morph/grid/production/config.json           |  4 ++++
 morph/grid/production/grid.nix              |  2 +-
 morph/grid/testing/config.json              |  4 ++++
 morph/grid/testing/grid.nix                 |  2 +-
 morph/lib/customize-monitoring.nix          |  3 ++-
 nixos/modules/issuer.nix                    |  1 -
 nixos/modules/monitoring/server/grafana.nix | 22 +++++++++++++--------
 9 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/morph/grid/local/config.json b/morph/grid/local/config.json
index 8b23b6f1..8bd686a0 100644
--- a/morph/grid/local/config.json
+++ b/morph/grid/local/config.json
@@ -5,6 +5,7 @@
 , "monitoringvpnEndpoint": "192.168.67.24:51820"
 , "passValue": 1000000
 , "issuerDomains": ["payments.localdev"]
+, "monitoringDomains": ["monitoring.localdev"]
 , "letsEncryptAdminEmail": "florian@privatestorage.io"
 , "allowedChargeOrigins": [
     "http://localhost:5000"
diff --git a/morph/grid/local/grid.nix b/morph/grid/local/grid.nix
index 5502b8fa..4a1524c6 100644
--- a/morph/grid/local/grid.nix
+++ b/morph/grid/local/grid.nix
@@ -116,7 +116,7 @@ let
                 nodeExporterTargets
                 paymentExporterTargets
                 blackboxExporterHttpsTargets;
-        inherit (grid-config) letsEncryptAdminEmail;
+        inherit (grid-config) letsEncryptAdminEmail monitoringDomains;
         googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID;
         enableSlackAlert = false;
         monitoringvpnIPv4 = "172.23.23.1";
diff --git a/morph/grid/production/config.json b/morph/grid/production/config.json
index fcae1563..1696b5fb 100644
--- a/morph/grid/production/config.json
+++ b/morph/grid/production/config.json
@@ -8,6 +8,10 @@
     "payments.privatestorage.io"
   , "payments.private.storage"
   ]
+, "monitoringDomains": [
+    "monitoring.privatestorage.io"
+  , "monitoring.private.storage"
+  ]
 , "letsEncryptAdminEmail": "jean-paul@privatestorage.io"
 , "allowedChargeOrigins": [
     "https://privatestorage.io"
diff --git a/morph/grid/production/grid.nix b/morph/grid/production/grid.nix
index b42f4a3e..4f410abb 100644
--- a/morph/grid/production/grid.nix
+++ b/morph/grid/production/grid.nix
@@ -49,7 +49,7 @@ let
                 nodeExporterTargets
                 paymentExporterTargets
                 blackboxExporterHttpsTargets;
-        inherit (grid-config) letsEncryptAdminEmail;
+        inherit (grid-config) letsEncryptAdminEmail monitoringDomains;
         googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID;
         enableSlackAlert = true;
         monitoringvpnIPv4 = "172.23.23.1";
diff --git a/morph/grid/testing/config.json b/morph/grid/testing/config.json
index a10840db..7c3775df 100644
--- a/morph/grid/testing/config.json
+++ b/morph/grid/testing/config.json
@@ -8,6 +8,10 @@
     "payments.privatestorage-staging.com"
   , "payments.extra.privatestorage-staging.com"
   ]
+, "monitoringDomains": [
+    "monitoring.privatestorage-staging.com"
+  , "monitoring.extra.privatestorage-staging.com"
+  ]
 , "letsEncryptAdminEmail": "jean-paul@privatestorage.io"
 , "allowedChargeOrigins": [
     "http://localhost:5000"
diff --git a/morph/grid/testing/grid.nix b/morph/grid/testing/grid.nix
index ea4cd56a..33451877 100644
--- a/morph/grid/testing/grid.nix
+++ b/morph/grid/testing/grid.nix
@@ -62,7 +62,7 @@ let
                 nodeExporterTargets
                 paymentExporterTargets
                 blackboxExporterHttpsTargets;
-        inherit (grid-config) letsEncryptAdminEmail;
+        inherit (grid-config) letsEncryptAdminEmail monitoringDomains;
         googleOAuthClientID = grid-config.monitoringGoogleOAuthClientID;
         enableSlackAlert = true;
         monitoringvpnIPv4 = "172.23.23.1";
diff --git a/morph/lib/customize-monitoring.nix b/morph/lib/customize-monitoring.nix
index ef89119f..2899d994 100644
--- a/morph/lib/customize-monitoring.nix
+++ b/morph/lib/customize-monitoring.nix
@@ -11,6 +11,7 @@
   # See ``customize-issuer.nix``.
 , monitoringvpnIPv4
 , letsEncryptAdminEmail
+, monitoringDomains
 
   # A list of VPN IP addresses as strings indicating which clients will be
   # allowed onto the VPN.
@@ -119,7 +120,7 @@ in {
     inherit letsEncryptAdminEmail;
     inherit googleOAuthClientID;
     inherit enableSlackAlert;
-    domain = "${config.networking.hostName}.${config.networking.domain}";
+    domains = monitoringDomains;
   };
 
   system.stateVersion = stateVersion;
diff --git a/nixos/modules/issuer.nix b/nixos/modules/issuer.nix
index da3eed73..98192fab 100644
--- a/nixos/modules/issuer.nix
+++ b/nixos/modules/issuer.nix
@@ -111,7 +111,6 @@ in {
       # We'll refer to this collection of domains by the first domain in the
       # list.
       domain = builtins.head cfg.domains;
-      certServiceName = "acme-${domain}";
       # Payment server internal http port (arbitrary, non-priviledged):
       internalHttpPort = "1061";
 
diff --git a/nixos/modules/monitoring/server/grafana.nix b/nixos/modules/monitoring/server/grafana.nix
index 1b51abd4..bbded5e9 100644
--- a/nixos/modules/monitoring/server/grafana.nix
+++ b/nixos/modules/monitoring/server/grafana.nix
@@ -20,10 +20,10 @@ let
 
 in {
   options.services.private-storage.monitoring.grafana = {
-    domain = lib.mkOption
-    { type = lib.types.str;
-      example = lib.literalExample "grafana.grid.private.storage";
-      description = "The FQDN of the Grafana host";
+    domains = lib.mkOption
+    { type = lib.types.listOf lib.types.str;
+      example = [ "grafana.grid.private.storage" ];
+      description = "The domain names at which the server is reachable.";
     };
     prometheusUrl = lib.mkOption
     { type = lib.types.str;
@@ -79,13 +79,18 @@ in {
     };
   };
 
-  config = {
+  config =
+    let
+      # We'll refer to this collection of domains by the first domain in the list.
+      domain = builtins.head cfg.domains;
+
+    in {
     # Port 80 for ACME ssl retrieval only. 443 for nginx -> grafana.
     networking.firewall.allowedTCPPorts = [ 80 443 ];
 
     services.grafana = {
       enable = true;
-      domain = cfg.domain;
+      domain = domain;
       port = 2342;
       addr = "127.0.0.1";
 
@@ -144,7 +149,7 @@ in {
           is_default = true;
           send_reminder = false;
           settings = {
-            username = "${cfg.domain}";
+            username = "${domain}";
             uploadImage = true;
           };
           secure_settings = {
@@ -170,7 +175,8 @@ in {
       # Only allow PFS-enabled ciphers with AES256:
       sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
 
-      virtualHosts.${config.services.grafana.domain} = {
+      virtualHosts."${domain}" = {
+        serverAliases = builtins.tail cfg.domains;
         enableACME = true;
         forceSSL = true;
         locations."/" = {
-- 
GitLab