From 3247d1edec6bd4b5958c7a67c8202311162b046a Mon Sep 17 00:00:00 2001 From: xinyangli Date: Tue, 11 Feb 2025 15:28:12 +0800 Subject: [PATCH] monitor: wait for tailscale interface --- modules/nixos/monitor/exporters.nix | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/nixos/monitor/exporters.nix b/modules/nixos/monitor/exporters.nix index d0e006f..a178525 100644 --- a/modules/nixos/monitor/exporters.nix +++ b/modules/nixos/monitor/exporters.nix @@ -5,7 +5,7 @@ ... }: let - inherit (lib) mkIf concatStringsSep; + inherit (lib) mkIf getExe; inherit (config.my-lib.settings) prometheusCollectors; cfg = config.custom.prometheus.exporters; in @@ -16,6 +16,30 @@ in ++ (lib.optional cfg.blackbox.enable "prometheus-blackbox-exporters.service") ++ (lib.optional config.services.caddy.enable "caddy.service"); + systemd.services.tailscaled.serviceConfig.ExecStartPost = + pkgs.writers.writePython3Bin "tailscale-wait-online" + { + flakeIgnore = [ + "E401" # import on one line + "E501" # line length limit + ]; + } + '' + import subprocess, json, time + + for _ in range(30): + status = json.loads( + subprocess.run( + ["${getExe config.services.tailscale.package}", "status", "--peers=false", "--json"], capture_output=True + ).stdout + )["Self"]["Online"] + if status: + exit(0) + time.sleep(1) + + exit(1) + ''; + services.prometheus.exporters.node = mkIf cfg.node.enable { enable = true; enabledCollectors = [