nixos: iscsi/target: init module

Co-authored-by: Graham Christensen <graham@floxdev.com>

ajs124 c2da1d7b 0e679de5

Changed files
+54
nixos
modules
services
networking
iscsi
+1
nixos/modules/module-list.nix
···
./services/networking/iodine.nix
./services/networking/iperf3.nix
./services/networking/ircd-hybrid/default.nix
+
./services/networking/iscsi/target.nix
./services/networking/iwd.nix
./services/networking/jicofo.nix
./services/networking/jitsi-videobridge.nix
+53
nixos/modules/services/networking/iscsi/target.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
let
+
cfg = config.services.target;
+
in
+
{
+
###### interface
+
options = {
+
services.target = with types; {
+
enable = mkEnableOption "the kernel's LIO iscsi target";
+
+
config = mkOption {
+
type = attrs;
+
default = {};
+
description = ''
+
Content of /etc/target/saveconfig.json
+
This file is normally read and written by targetcli
+
'';
+
};
+
};
+
};
+
+
###### implementation
+
config = mkIf cfg.enable {
+
environment.etc."target/saveconfig.json" = {
+
text = builtins.toJSON cfg.config;
+
mode = "0600";
+
};
+
+
environment.systemPackages = with pkgs; [ targetcli ];
+
+
boot.kernelModules = [ "configfs" "target_core_mod" "iscsi_target_mod" ];
+
+
systemd.services.iscsi-target = {
+
enable = true;
+
after = [ "network.target" "local-fs.target" ];
+
requires = [ "sys-kernel-config.mount" ];
+
wantedBy = [ "multi-user.target" ];
+
serviceConfig = {
+
Type = "oneshot";
+
ExecStart = "${pkgs.python3.pkgs.rtslib}/bin/targetctl restore";
+
ExecStop = "${pkgs.python3.pkgs.rtslib}/bin/targetctl clear";
+
RemainAfterExit = "yes";
+
};
+
};
+
+
systemd.tmpfiles.rules = [
+
"d /etc/target 0700 root root - -"
+
];
+
};
+
}