From b8bae61281af5013a1146bffcb0120b256a9b1cd Mon Sep 17 00:00:00 2001 From: Petru Paler Date: Thu, 6 Jul 2023 07:34:58 +0100 Subject: [PATCH] More robust seaweedfs config. --- hosts/common/seaweedfs.nix | 26 ++++++++++++++------------ hosts/common/seaweedfs_lib.nix | 14 +++++++++----- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/hosts/common/seaweedfs.nix b/hosts/common/seaweedfs.nix index 8c40b34..6464e7c 100644 --- a/hosts/common/seaweedfs.nix +++ b/hosts/common/seaweedfs.nix @@ -1,23 +1,29 @@ -{ pkgs, config, ... }: +{ pkgs, config, lib, ... }: +with builtins; let - masters = [ "192.168.1.71:9333" "192.168.1.72:9333" "192.168.1.73:9333" ]; - master_enabled = true; #builtins.elem config.networking.hostName masters; + masters = { + c1 = "192.168.1.71:9333"; + c2 = "192.168.1.72:9333"; + c3 = "192.168.1.73:9333"; + }; + master_enabled = masters ? ${config.networking.hostName}; in { imports = [ ./seaweedfs_lib.nix ]; services.seaweedfs.master = { enable = master_enabled; - peers = masters; + peers = attrValues masters; + extraConfig.ip = head (split ":" masters.${config.networking.hostName}); }; services.seaweedfs.filer = { enable = true; - master = masters; + master = attrValues masters; }; services.seaweedfs.volumes = { default = { enable = true; - mserver = masters; + mserver = attrValues masters; dir = [ "/persist/weed/volume-default" ]; }; }; @@ -31,15 +37,11 @@ in networking.firewall.allowedTCPPorts = [ config.services.seaweedfs.volumes.default.port - 9333 19333 config.services.seaweedfs.filer.port - 8888 18888 -# ] ++ (if master_enabled then [ + ] ++ (if master_enabled then [ config.services.seaweedfs.master.port - 9333 19333 -# ] else [ ]) - ]; + ] else [ ]); } diff --git a/hosts/common/seaweedfs_lib.nix b/hosts/common/seaweedfs_lib.nix index 8105086..d17aa5b 100644 --- a/hosts/common/seaweedfs_lib.nix +++ b/hosts/common/seaweedfs_lib.nix @@ -25,7 +25,7 @@ let }"); mkWeedExec = subcmd: options: - (toString ([ "${seaweedfs}/bin/weed" subcmd ] ++ mkCmdLineArguments + (toString ([ "${seaweedfs}/bin/weed" "-logtostderr" subcmd ] ++ mkCmdLineArguments ((removeAttrs options [ "enable" "extraConfig" ]) // (if options ? "extraConfig" then (removeAttrs options.extraConfig (builtins.attrNames options)) @@ -59,7 +59,7 @@ let mkVolumeService = id: options: nameValuePair "seaweedfs-volume-${id}" { wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ] + after = [ "network-online.target" ] ++ optional cfg.master.enable "seaweedfs-master.service"; description = "SeaweedFS volume - ${id}"; unitConfig.ConditionPathIsDirectory = options.dir; @@ -68,6 +68,7 @@ let Group = group; ExecStart = mkWeedExec "volume" options; KillSignal = "SIGTERM"; + Restart = "on-failure"; }; }; @@ -139,7 +140,7 @@ in { systemd.services = (mapAttrs' mkVolumeService enabledVolumes) // { seaweedfs-master = mkIf cfg.master.enable { wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; + after = [ "network-online.target" ]; description = "SeaweedFS master"; serviceConfig = rec { User = user; @@ -148,12 +149,13 @@ in { ExecStart = (mkWeedExec "master" cfg.master) + " -mdir=/var/lib/${StateDirectory}"; KillSignal = "SIGTERM"; + Restart = "on-failure"; }; }; seaweedfs-filer = mkIf cfg.filer.enable { wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ] + after = [ "network-online.target" ] ++ optional cfg.master.enable "seaweedfs-master.service"; description = "SeaweedFS filer"; serviceConfig = rec { @@ -163,12 +165,13 @@ in { StateDirectory = "seaweedfs/filer"; ExecStart = mkWeedExec "filer" cfg.filer; KillSignal = "SIGTERM"; + Restart = "on-failure"; }; }; seaweedfs-webdav = mkIf cfg.webdav.enable { wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ] + after = [ "network-online.target" ] ++ optional cfg.filer.enable "seaweedfs-filer.service"; description = "SeaweedFS webdav"; serviceConfig = { @@ -176,6 +179,7 @@ in { Group = group; ExecStart = mkWeedExec "webdav" cfg.webdav; KillSignal = "SIGTERM"; + Restart = "on-failure"; }; }; };