mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-10-30 14:11:21 +00:00
nixos/collectd: put extraconfig before plugins
this is necessary to override the global option Interval. If set after the plugins, it has no effect.
This commit is contained in:
parent
f9fe536c8f
commit
44a3d91e5f
@ -5,36 +5,15 @@ with lib;
|
||||
let
|
||||
cfg = config.services.collectd;
|
||||
|
||||
unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" ''
|
||||
BaseDir "${cfg.dataDir}"
|
||||
AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
|
||||
Hostname "${config.networking.hostName}"
|
||||
|
||||
LoadPlugin syslog
|
||||
<Plugin "syslog">
|
||||
LogLevel "info"
|
||||
NotifyLevel "OKAY"
|
||||
</Plugin>
|
||||
|
||||
${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
|
||||
LoadPlugin ${plugin}
|
||||
<Plugin "${plugin}">
|
||||
${pluginConfig}
|
||||
</Plugin>
|
||||
'') cfg.plugins)}
|
||||
|
||||
${concatMapStrings (f: ''
|
||||
Include "${f}"
|
||||
'') cfg.include}
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
baseDirLine = ''BaseDir "${cfg.dataDir}"'';
|
||||
unvalidated_conf = pkgs.writeText "collectd-unvalidated.conf" cfg.extraConfig;
|
||||
|
||||
conf = if cfg.validateConfig then
|
||||
pkgs.runCommand "collectd.conf" {} ''
|
||||
echo testing ${unvalidated_conf}
|
||||
cp ${unvalidated_conf} collectd.conf
|
||||
# collectd -t fails if BaseDir does not exist.
|
||||
sed '1s/^BaseDir.*$/BaseDir "."/' ${unvalidated_conf} > collectd.conf
|
||||
substituteInPlace collectd.conf --replace ${lib.escapeShellArgs [ baseDirLine ]} 'BaseDir "."'
|
||||
${package}/bin/collectd -t -C collectd.conf
|
||||
cp ${unvalidated_conf} $out
|
||||
'' else unvalidated_conf;
|
||||
@ -123,7 +102,8 @@ in {
|
||||
extraConfig = mkOption {
|
||||
default = "";
|
||||
description = ''
|
||||
Extra configuration for collectd.
|
||||
Extra configuration for collectd. Use mkBefore to add lines before the
|
||||
default config, and mkAfter to add them below.
|
||||
'';
|
||||
type = lines;
|
||||
};
|
||||
@ -131,6 +111,30 @@ in {
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# 1200 is after the default (1000) but before mkAfter (1500).
|
||||
services.collectd.extraConfig = lib.mkOrder 1200 ''
|
||||
${baseDirLine}
|
||||
AutoLoadPlugin ${boolToString cfg.autoLoadPlugin}
|
||||
Hostname "${config.networking.hostName}"
|
||||
|
||||
LoadPlugin syslog
|
||||
<Plugin "syslog">
|
||||
LogLevel "info"
|
||||
NotifyLevel "OKAY"
|
||||
</Plugin>
|
||||
|
||||
${concatStrings (mapAttrsToList (plugin: pluginConfig: ''
|
||||
LoadPlugin ${plugin}
|
||||
<Plugin "${plugin}">
|
||||
${pluginConfig}
|
||||
</Plugin>
|
||||
'') cfg.plugins)}
|
||||
|
||||
${concatMapStrings (f: ''
|
||||
Include "${f}"
|
||||
'') cfg.include}
|
||||
'';
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d '${cfg.dataDir}' - ${cfg.user} - - -"
|
||||
];
|
||||
|
@ -3,11 +3,14 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
meta = { };
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
services.collectd = {
|
||||
enable = true;
|
||||
extraConfig = lib.mkBefore ''
|
||||
Interval 30
|
||||
'';
|
||||
plugins = {
|
||||
rrdtool = ''
|
||||
DataDir "/var/lib/collectd/rrd"
|
||||
@ -26,6 +29,8 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
machine.succeed(f"rrdinfo {file} | logger")
|
||||
# check that this file contains a shortterm metric
|
||||
machine.succeed(f"rrdinfo {file} | grep -F 'ds[shortterm].min = '")
|
||||
# check that interval was set before the plugins
|
||||
machine.succeed(f"rrdinfo {file} | grep -F 'step = 30'")
|
||||
# check that there are frequent updates
|
||||
machine.succeed(f"cp {file} before")
|
||||
machine.wait_until_fails(f"cmp before {file}")
|
||||
|
Loading…
Reference in New Issue
Block a user