nixos/iscsi/initiator: init
Co-authored-by: Graham Christensen <graham@floxdev.com>
This commit is contained in:
parent
c2da1d7b53
commit
39b5040a4b
|
@ -691,6 +691,7 @@
|
||||||
./services/networking/iodine.nix
|
./services/networking/iodine.nix
|
||||||
./services/networking/iperf3.nix
|
./services/networking/iperf3.nix
|
||||||
./services/networking/ircd-hybrid/default.nix
|
./services/networking/ircd-hybrid/default.nix
|
||||||
|
./services/networking/iscsi/initiator.nix
|
||||||
./services/networking/iscsi/target.nix
|
./services/networking/iscsi/target.nix
|
||||||
./services/networking/iwd.nix
|
./services/networking/iwd.nix
|
||||||
./services/networking/jicofo.nix
|
./services/networking/jicofo.nix
|
||||||
|
|
84
nixos/modules/services/networking/iscsi/initiator.nix
Normal file
84
nixos/modules/services/networking/iscsi/initiator.nix
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
{ config, lib, pkgs, ... }: with lib;
|
||||||
|
let
|
||||||
|
cfg = config.services.openiscsi;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.openiscsi = with types; {
|
||||||
|
enable = mkEnableOption "the openiscsi iscsi daemon";
|
||||||
|
enableAutoLoginOut = mkEnableOption ''
|
||||||
|
automatic login and logout of all automatic targets.
|
||||||
|
You probably do not want this.
|
||||||
|
'';
|
||||||
|
discoverPortal = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = null;
|
||||||
|
description = "Portal to discover targets on";
|
||||||
|
};
|
||||||
|
name = mkOption {
|
||||||
|
type = str;
|
||||||
|
description = "Name of this iscsi initiator";
|
||||||
|
example = "iqn.2020-08.org.linux-iscsi.initiatorhost:example";
|
||||||
|
};
|
||||||
|
package = mkOption {
|
||||||
|
type = package;
|
||||||
|
description = "openiscsi package to use";
|
||||||
|
default = pkgs.openiscsi;
|
||||||
|
defaultText = "pkgs.openiscsi";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "";
|
||||||
|
description = "Lines to append to default iscsid.conf";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfigFile = mkOption {
|
||||||
|
description = ''
|
||||||
|
Append an additional file's contents to /etc/iscsid.conf. Use a non-store path
|
||||||
|
and store passwords in this file.
|
||||||
|
'';
|
||||||
|
default = null;
|
||||||
|
type = nullOr str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.etc."iscsi/iscsid.conf.fragment".source = pkgs.runCommand "iscsid.conf" {} ''
|
||||||
|
cat "${cfg.package}/etc/iscsi/iscsid.conf" > $out
|
||||||
|
cat << 'EOF' >> $out
|
||||||
|
${cfg.extraConfig}
|
||||||
|
${optionalString cfg.enableAutoLoginOut "node.startup = automatic"}
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
environment.etc."iscsi/initiatorname.iscsi".text = "InitiatorName=${cfg.name}";
|
||||||
|
|
||||||
|
system.activationScripts.iscsid = let
|
||||||
|
extraCfgDumper = optionalString (cfg.extraConfigFile != null) ''
|
||||||
|
if [ -f "${cfg.extraConfigFile}" ]; then
|
||||||
|
printf "\n# The following is from ${cfg.extraConfigFile}:\n"
|
||||||
|
cat "${cfg.extraConfigFile}"
|
||||||
|
else
|
||||||
|
echo "Warning: services.openiscsi.extraConfigFile ${cfg.extraConfigFile} does not exist!" >&2
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
in ''
|
||||||
|
(
|
||||||
|
cat ${config.environment.etc."iscsi/iscsid.conf.fragment".source}
|
||||||
|
${extraCfgDumper}
|
||||||
|
) > /etc/iscsi/iscsid.conf
|
||||||
|
'';
|
||||||
|
|
||||||
|
systemd.packages = [ cfg.package ];
|
||||||
|
|
||||||
|
systemd.services."iscsid".wantedBy = [ "multi-user.target" ];
|
||||||
|
systemd.sockets."iscsid".wantedBy = [ "sockets.target" ];
|
||||||
|
|
||||||
|
systemd.services."iscsi" = mkIf cfg.enableAutoLoginOut {
|
||||||
|
wantedBy = [ "remote-fs.target" ];
|
||||||
|
serviceConfig.ExecStartPre = mkIf (cfg.discoverPortal != null) "${cfg.package}/bin/iscsiadm --mode discoverydb --type sendtargets --portal ${escapeShellArg cfg.discoverPortal} --discover";
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [ cfg.package ];
|
||||||
|
boot.kernelModules = [ "iscsi_tcp" ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue