smartd: change 'devices' option from "list of strings" to "list of attribute sets"
The smartd used to expect a list of devices to monitor. After this patch, it expects a list of attribute sets, which may have two attributes: - device: path to the device (required) - options: smartd options to apply to this particular device (optional) A concrete example configuration would be: services.smartd = { enable = true; devices = [ { device = "/dev/sda"; } { device = "/dev/sdb"; options = "-d sat"; } ]; }; Furthermore, the config option 'deviceOpts' can be used to configure options that are applied to *every* device.
This commit is contained in:
parent
763835e770
commit
415ff3c39a
@ -6,6 +6,27 @@ let
|
|||||||
|
|
||||||
cfg = config.services.smartd;
|
cfg = config.services.smartd;
|
||||||
|
|
||||||
|
smartdOpts = { name, ... }: {
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
device = mkOption {
|
||||||
|
example = "/dev/sda";
|
||||||
|
type = types.string;
|
||||||
|
description = "Location of the device.";
|
||||||
|
};
|
||||||
|
|
||||||
|
options = mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "-d sat";
|
||||||
|
type = types.string;
|
||||||
|
merge = pkgs.lib.concatStringsSep " ";
|
||||||
|
description = "Options that determine how smartd monitors the device";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
smartdMail = pkgs.writeScript "smartdmail.sh" ''
|
smartdMail = pkgs.writeScript "smartdmail.sh" ''
|
||||||
#! ${pkgs.stdenv.shell}
|
#! ${pkgs.stdenv.shell}
|
||||||
TMPNAM=/tmp/smartd-message.$$.tmp
|
TMPNAM=/tmp/smartd-message.$$.tmp
|
||||||
@ -24,7 +45,7 @@ let
|
|||||||
|
|
||||||
smartdConf = pkgs.writeText "smartd.conf" (concatMapStrings (device:
|
smartdConf = pkgs.writeText "smartd.conf" (concatMapStrings (device:
|
||||||
''
|
''
|
||||||
${device} -a -m root -M exec ${smartdMail} ${cfg.deviceOpts}
|
${device.device} -a -m root -M exec ${smartdMail} ${device.options} ${cfg.deviceOpts}
|
||||||
''
|
''
|
||||||
) cfg.devices);
|
) cfg.devices);
|
||||||
|
|
||||||
@ -63,7 +84,9 @@ in
|
|||||||
|
|
||||||
devices = mkOption {
|
devices = mkOption {
|
||||||
default = [];
|
default = [];
|
||||||
example = ["/dev/sda" "/dev/sdb"];
|
example = [ { device = "/dev/sda"; } { device = "/dev/sdb"; options = "-d sat"; } ];
|
||||||
|
type = types.list types.optionSet;
|
||||||
|
options = [ smartdOpts ];
|
||||||
description = ''
|
description = ''
|
||||||
List of devices to monitor. By default -- if this list is empty --,
|
List of devices to monitor. By default -- if this list is empty --,
|
||||||
smartd will monitor all devices connected to the machine at the time
|
smartd will monitor all devices connected to the machine at the time
|
||||||
|
Loading…
x
Reference in New Issue
Block a user