Skip to content

Commit efe317b

Browse files
authored
nixosModules.services.mrtg: init mrtg-generator (socallinuxexpo#923)
2 parents c13bbf3 + e547482 commit efe317b

File tree

4 files changed

+97
-1
lines changed

4 files changed

+97
-1
lines changed

nix/nixos-configurations/core-master/configuration.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
services.rsyslogd.enable = true;
1111
services.signs.enable = true;
1212
services.monitoring.enable = true;
13+
services.mrtg.enable = true;
1314
services.prometheus.enable = true;
1415
services.ssh.enable = true;
1516
services.wasgeht.enable = true;

nix/nixos-modules/default.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ inputs: {
77
./facts.nix
88
./libvirt.nix
99
./time.nix
10-
1110
./services
1211
./users
1312
];

nix/nixos-modules/services/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
./gitlab.nix
77
./kea-master.nix
88
./monitoring.nix
9+
./mrtg.nix
910
./ntp.nix
1011
./prometheus.nix
1112
./rsyslogd.nix
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}:
7+
let
8+
9+
cfg = config.scale-network.services.mrtg;
10+
11+
inherit (lib)
12+
types
13+
;
14+
15+
inherit (lib.modules)
16+
mkIf
17+
;
18+
19+
inherit (lib.options)
20+
mkEnableOption
21+
mkOption
22+
;
23+
in
24+
25+
{
26+
27+
options.scale-network.services.mrtg = {
28+
29+
enable = mkEnableOption "SCaLE mrtg monitoring service";
30+
31+
user = mkOption {
32+
type = types.str;
33+
default = "mrtg";
34+
};
35+
36+
group = mkOption {
37+
type = types.str;
38+
default = "mrtg";
39+
};
40+
41+
statePath = mkOption {
42+
type = types.str;
43+
default = "/persist/var/lib/mrtg";
44+
};
45+
};
46+
47+
config = mkIf cfg.enable {
48+
systemd.services.mrtg-generator =
49+
let
50+
unfilteredList = (
51+
builtins.split "\n" (
52+
builtins.readFile "${pkgs.scale-network.scaleInventory}/config/all-network-devices"
53+
)
54+
);
55+
filteredList = (builtins.filter (line: line != [ ] && line != "") unfilteredList);
56+
script = pkgs.writeShellScript "" ''
57+
set -x
58+
mkdir -p ${cfg.statePath}/configs
59+
mkdir -p ${cfg.statePath}/graphs
60+
for hostname in ${toString filteredList}; do
61+
echo "''${hostname}"
62+
${pkgs.mrtg}/bin/cfgmaker \
63+
--enable-ipv6 \
64+
--no-down \
65+
--show-op-down \
66+
--output="${cfg.statePath}/configs/''${hostname}.cfg" \
67+
--global="WorkDir: ${cfg.statePath}/graphs/''${hostname}/" \
68+
Junitux@''${hostname}
69+
done
70+
'';
71+
in
72+
{
73+
description = "mrtg generator";
74+
after = [ "network.target" ];
75+
wantedBy = [ "multi-user.target" ];
76+
serviceConfig = {
77+
User = "${cfg.user}";
78+
Group = "${cfg.group}";
79+
ExecStart = "${script}";
80+
Type = "simple";
81+
};
82+
};
83+
systemd.tmpfiles.rules = [
84+
"d ${cfg.statePath} 0755 ${cfg.user} ${cfg.group}"
85+
];
86+
87+
users = {
88+
users."${cfg.user}" = {
89+
isNormalUser = true;
90+
group = "${cfg.group}";
91+
};
92+
groups.${cfg.group} = { };
93+
};
94+
};
95+
}

0 commit comments

Comments
 (0)