storage-refactor #9

Open
jan-leila wants to merge 40 commits from storage-refactor into main
Showing only changes of commit 2fd14e4cc0 - Show all commits

View file

@ -1,9 +1,13 @@
args @ {lib, ...}: let args @ {
lib,
pkgs,
config,
...
}: let
datasetSubmodule = (import ./submodules/dataset.nix) args; datasetSubmodule = (import ./submodules/dataset.nix) args;
in { in {
options.storage = { options.storage = {
zfs = { zfs = {
# TODO: enable option implementation
enable = lib.mkEnableOption "Should zfs be enabled on this system."; enable = lib.mkEnableOption "Should zfs be enabled on this system.";
notifications = { notifications = {
@ -30,10 +34,6 @@ in {
}; };
}; };
# TODO: we need options to configure zfs pools
# we should have warnings when the configured pool is missing drives after activation
# TODO: implementation of this
# TODO: validations that we have at least one boot drive
pool = let pool = let
deviceType = deviceType =
lib.types.coercedTo lib.types.str (device: { lib.types.coercedTo lib.types.str (device: {
@ -56,7 +56,7 @@ in {
}; };
}; };
# TODO:create the root dataset automatically # TODO: create the root dataset automatically
# TODO: dataset option that is a submodule that adds datasets to the system # TODO: dataset option that is a submodule that adds datasets to the system
# warnings for when a dataset was created in the past on a system but it is now missing some of the options defined for it # warnings for when a dataset was created in the past on a system but it is now missing some of the options defined for it
datasets = lib.mkOption { datasets = lib.mkOption {
@ -64,4 +64,60 @@ in {
}; };
}; };
}; };
config = lib.mkIf config.storage.zfs.enable (lib.mkMerge [
{
services.zfs = {
autoScrub.enable = true;
autoSnapshot.enable = true;
};
# TODO: post activation script that makes sure that our configured pool match the pool that exist on the system
# TODO: validation that we have a boot drive
# TODO: disko config mapping
}
(lib.mkIf config.storage.zfs.notifications.enable {
programs.msmtp = {
enable = true;
setSendmail = true;
defaults = {
aliases = "/etc/aliases";
port = config.storage.zfs.notifications.port;
tls_trust_file = "/etc/ssl/certs/ca-certificates.crt";
tls = "on";
auth = "login";
tls_starttls = "off";
};
accounts = {
zfs_notifications = {
auth = true;
tls = true;
host = config.storage.zfs.notifications.host;
passwordeval = "cat ${config.storage.zfs.notifications.tokenFile}";
user = config.storage.zfs.notifications.user;
from = config.storage.zfs.notifications.user;
};
};
};
services.zfs = {
zed = {
enableMail = true;
settings = {
ZED_DEBUG_LOG = "/tmp/zed.debug.log";
ZED_EMAIL_ADDR = [config.storage.zfs.notifications.to];
ZED_EMAIL_PROG = "${pkgs.msmtp}/bin/msmtp";
ZED_EMAIL_OPTS = "-a zfs_notifications @ADDRESS@";
ZED_NOTIFY_INTERVAL_SECS = 3600;
ZED_NOTIFY_VERBOSE = true;
ZED_USE_ENCLOSURE_LEDS = true;
ZED_SCRUB_AFTER_RESILVER = true;
};
};
};
})
]);
} }