58 lines
1.8 KiB
Nix
58 lines
1.8 KiB
Nix
{ config, pkgs, lib, namespace, host, ... }:
|
|
let
|
|
inherit (lib) types mkIf;
|
|
inherit (lib.${namespace}) mkOpt mkBoolOpt;
|
|
|
|
cfg = config.${namespace}.services.openiscsi;
|
|
cloudInitEnabled = config.${namespace}.services.cloud-init.enable;
|
|
in
|
|
{
|
|
options.${namespace}.services.openiscsi = {
|
|
enable = lib.mkEnableOption "Open iSCSI support";
|
|
name = mkOpt types.str "iqn.2025.reichard.io:${host}" "iSCSI name";
|
|
symlink = mkBoolOpt false "Create a symlink to the iSCSI binaries";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
boot.kernelModules = [ "iscsi_tcp" "libiscsi" "scsi_transport_iscsi" ];
|
|
|
|
services.openiscsi = {
|
|
enable = true;
|
|
name = cfg.name;
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
openiscsi
|
|
];
|
|
|
|
# Predominately used for RKE2 & Democratic CSI
|
|
system.activationScripts.iscsi-symlink = mkIf cfg.symlink ''
|
|
mkdir -p /usr/bin
|
|
ln -sf ${pkgs.openiscsi}/bin/iscsiadm /usr/bin/iscsiadm
|
|
ln -sf ${pkgs.openiscsi}/bin/iscsid /usr/bin/iscsid
|
|
'';
|
|
|
|
# Cloud Init Compatibility
|
|
environment.etc."iscsi/initiatorname.iscsi".enable = mkIf cloudInitEnabled false;
|
|
systemd.services.iscsi-initiator-setup = mkIf cloudInitEnabled {
|
|
description = "Setup iSCSI Initiator Name";
|
|
requires = [ "cloud-final.service" ];
|
|
before = [ "iscsid.service" ];
|
|
after = [ "cloud-final.service" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
};
|
|
|
|
path = [ pkgs.hostname pkgs.util-linux ];
|
|
script = ''
|
|
mkdir -p /run/iscsi
|
|
echo "InitiatorName=iqn.2025.org.nixos:$(hostname)" > /run/iscsi/initiatorname.iscsi
|
|
mount --bind /run/iscsi/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
|
|
'';
|
|
};
|
|
};
|
|
}
|