diff --git a/morph/lib/issuer.nix b/morph/lib/issuer.nix index 69b0527cd74e0752ded6ffbe7513db126f0613f5..86c46a14762f0b9e1aba6602140bc0a2bc245e7c 100644 --- a/morph/lib/issuer.nix +++ b/morph/lib/issuer.nix @@ -2,12 +2,11 @@ # "issuer"-type system. { lib, config, ...}: let - inherit (config.grid) publicKeyPath privateKeyPath monitoringvpnEndpoint monitoringvpnIPv4; + inherit (config.grid) privateKeyPath; inherit (config.grid.issuer) issuerDomains allowedChargeOrigins; in { imports = [ - ../../nixos/modules/monitoring/vpn/client.nix - ../../nixos/modules/monitoring/exporters/node.nix + ./monitoringvpn-client.nix ]; options.grid.issuer = { @@ -47,26 +46,8 @@ in { permissions = "0400"; action = ["sudo" "systemctl" "restart" "zkapissuer.service"]; }; - - "monitoringvpn-secret-key" = { - destination = "/run/keys/monitoringvpn/client.key"; - source = "${privateKeyPath}/monitoringvpn/${monitoringvpnIPv4}.key"; - owner.user = "root"; - owner.group = "root"; - permissions = "0400"; - action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; - }; - "monitoringvpn-preshared-key" = { - destination = "/run/keys/monitoringvpn/preshared.key"; - source = "${privateKeyPath}/monitoringvpn/preshared.key"; - owner.user = "root"; - owner.group = "root"; - permissions = "0400"; - action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; - }; }; }; - services.private-storage-issuer = { enable = true; tls = true; @@ -79,12 +60,7 @@ in { domains = issuerDomains; }; - services.private-storage.monitoring.vpn.client = { - enable = true; - ip = monitoringvpnIPv4; - endpoint = monitoringvpnEndpoint; - endpointPublicKeyFile = "${publicKeyPath}/monitoringvpn/server.pub"; - }; + services.private-storage.monitoring.exporters.node.enable = true; system.stateVersion = "19.03"; }; diff --git a/morph/lib/monitoring.nix b/morph/lib/monitoring.nix index d299d62ae7997511897517f9574e33c6de94b7a5..d2552ebedf026a07a92da783b1de410be9ceca38 100644 --- a/morph/lib/monitoring.nix +++ b/morph/lib/monitoring.nix @@ -31,7 +31,6 @@ in { ../../nixos/modules/monitoring/server/grafana.nix ../../nixos/modules/monitoring/server/prometheus.nix ../../nixos/modules/monitoring/server/loki.nix - ../../nixos/modules/monitoring/exporters/node.nix ../../nixos/modules/monitoring/exporters/blackbox.nix ]; @@ -161,5 +160,7 @@ in { inherit letsEncryptAdminEmail; domains = cfg.monitoringDomains; }; + + services.private-storage.monitoring.exporters.node.enable = true; }; } diff --git a/morph/lib/monitoringvpn-client.nix b/morph/lib/monitoringvpn-client.nix new file mode 100644 index 0000000000000000000000000000000000000000..e7b87201fd04dfe429e97fa89f13f37ef760042b --- /dev/null +++ b/morph/lib/monitoringvpn-client.nix @@ -0,0 +1,34 @@ +{ lib, config, ...}: +let + inherit (config.grid) publicKeyPath privateKeyPath monitoringvpnEndpoint monitoringvpnIPv4; +in { + config = { + deployment = { + secrets = { + "monitoringvpn-secret-key" = { + destination = "/run/keys/monitoringvpn/client.key"; + source = "${privateKeyPath}/monitoringvpn/${monitoringvpnIPv4}.key"; + owner.user = "root"; + owner.group = "root"; + permissions = "0400"; + action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; + }; + "monitoringvpn-preshared-key" = { + destination = "/run/keys/monitoringvpn/preshared.key"; + source = "${privateKeyPath}/monitoringvpn/preshared.key"; + owner.user = "root"; + owner.group = "root"; + permissions = "0400"; + action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; + }; + }; + }; + + services.private-storage.monitoring.vpn.client = { + enable = true; + ip = monitoringvpnIPv4; + endpoint = monitoringvpnEndpoint; + endpointPublicKeyFile = "${publicKeyPath}/monitoringvpn/server.pub"; + }; + }; +} diff --git a/morph/lib/storage.nix b/morph/lib/storage.nix index 9424784dcd33b8e12b9da9cc309a657be07f66b3..83c12f55cc077abb683482b8435dbcbd5025be10 100644 --- a/morph/lib/storage.nix +++ b/morph/lib/storage.nix @@ -2,19 +2,11 @@ # "storage"-type system. { lib, config, ...} : let - inherit (config.grid) publicKeyPath privateKeyPath monitoringvpnIPv4 monitoringvpnEndpoint; + inherit (config.grid) privateKeyPath; in { # Any extra NixOS modules to load on this server. imports = [ - # Bring in our module for configuring the Tahoe-LAFS service and other - # Private Storage-specific things. - ../../nixos/modules/private-storage.nix - # Connect to the monitoringvpn. - ../../nixos/modules/monitoring/vpn/client.nix - # Expose base system metrics over the monitoringvpn. - ../../nixos/modules/monitoring/exporters/node.nix - # Collect Tahoe OpenMetrics statistics. - ../../nixos/modules/monitoring/exporters/tahoe.nix + ./monitoringvpn-client.nix ]; options.grid.storage = { @@ -48,25 +40,10 @@ in { # extract it from the tahoe-lafs nixos module somehow? action = ["sudo" "systemctl" "restart" "tahoe.storage.service"]; }; - "monitoringvpn-secret-key" = { - destination = "/run/keys/monitoringvpn/client.key"; - source = "${privateKeyPath}/monitoringvpn/${monitoringvpnIPv4}.key"; - owner.user = "root"; - owner.group = "root"; - permissions = "0400"; - action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; - }; - "monitoringvpn-preshared-key" = { - destination = "/run/keys/monitoringvpn/preshared.key"; - source = "${privateKeyPath}/monitoringvpn/preshared.key"; - owner.user = "root"; - owner.group = "root"; - permissions = "0400"; - action = ["sudo" "systemctl" "restart" "wireguard-monitoringvpn.service"]; - }; }; }; + services.private-storage.monitoring.exporters.node.enable = true; services.private-storage.monitoring.exporters.tahoe.enable = true; # Turn on the Private Storage (Tahoe-LAFS) service. @@ -77,12 +54,5 @@ in { ristrettoSigningKeyPath = config.deployment.secrets.ristretto-signing-key.destination; inherit (config.grid.storage) passValue publicStoragePort; }; - - services.private-storage.monitoring.vpn.client = { - enable = true; - ip = monitoringvpnIPv4; - endpoint = monitoringvpnEndpoint; - endpointPublicKeyFile = "${publicKeyPath}/monitoringvpn/server.pub"; - }; }; } diff --git a/nixos/modules/default.nix b/nixos/modules/default.nix index f7e247f99406ad982c3b1e59d8248e2c80a3a658..09796ef543026ce947dd18c600f98617b9eb3f5d 100644 --- a/nixos/modules/default.nix +++ b/nixos/modules/default.nix @@ -12,6 +12,10 @@ imports = [ ./packages.nix ./issuer.nix + ./private-storage.nix + ./monitoring/vpn/client.nix + ./monitoring/exporters/node.nix + ./monitoring/exporters/tahoe.nix ./monitoring/exporters/promtail.nix ]; } diff --git a/nixos/modules/monitoring/exporters/node.nix b/nixos/modules/monitoring/exporters/node.nix index 6a84a31ce58859969e2fb08cff79abb957c6099e..407011069ec0cfdec129244b37a60edd09a57f2b 100644 --- a/nixos/modules/monitoring/exporters/node.nix +++ b/nixos/modules/monitoring/exporters/node.nix @@ -16,13 +16,15 @@ let in { options.services.private-storage.monitoring.exporters.node = { + enable = lib.mkEnableOption "Base system metrics collection"; textfiles-directory = lib.mkOption { type = lib.types.str; description = "Directory used by the textfiles collector."; default = "/run/prometheus-node-exporter"; }; }; - config.services.prometheus.exporters.node = { + + config.services.prometheus.exporters.node = lib.mkIf cfg.enable { enable = true; openFirewall = true; firewallFilter = "-i monitoringvpn -p tcp -m tcp --dport 9100"; diff --git a/nixos/modules/monitoring/exporters/tahoe.nix b/nixos/modules/monitoring/exporters/tahoe.nix index 087e6532e372b11bb2db826456957fa14dfa3c3d..0f24bb6c099725242647e4fa23fba20da644811d 100644 --- a/nixos/modules/monitoring/exporters/tahoe.nix +++ b/nixos/modules/monitoring/exporters/tahoe.nix @@ -39,6 +39,15 @@ in { config = lib.mkIf cfg.enable { + assertions = [ + { + assertion = config.services.private-storage.monitoring.exporters.node.enable; + message = '' + services.private-storage.monitoring.tahoe requires services.private-storage.monitoring.exporters.node to provide the textfile prometheus collector. + ''; + } + ]; + environment.systemPackages = [ pkgs.curl ]; systemd.services.tahoe-metrics-collector = {