1{ 2 config, 3 pkgs, 4 lib, 5 ... 6}: 7let 8 9 cfg = config.services.torque.mom; 10 torque = pkgs.torque; 11 12 momConfig = pkgs.writeText "torque-mom-config" '' 13 $pbsserver ${cfg.serverNode} 14 $logevent 225 15 ''; 16 17in 18{ 19 options = { 20 21 services.torque.mom = { 22 enable = lib.mkEnableOption "torque computing node"; 23 24 serverNode = lib.mkOption { 25 type = lib.types.str; 26 description = "Hostname running pbs server."; 27 }; 28 29 }; 30 31 }; 32 33 config = lib.mkIf cfg.enable { 34 environment.systemPackages = [ pkgs.torque ]; 35 36 systemd.services.torque-mom-init = { 37 path = with pkgs; [ 38 torque 39 util-linux 40 procps 41 inetutils 42 ]; 43 44 script = '' 45 pbs_mkdirs -v aux 46 pbs_mkdirs -v mom 47 hostname > /var/spool/torque/server_name 48 cp -v ${momConfig} /var/spool/torque/mom_priv/config 49 ''; 50 51 serviceConfig.Type = "oneshot"; 52 unitConfig.ConditionPathExists = "!/var/spool/torque"; 53 }; 54 55 systemd.services.torque-mom = { 56 path = [ torque ]; 57 58 wantedBy = [ "multi-user.target" ]; 59 requires = [ "torque-mom-init.service" ]; 60 after = [ 61 "torque-mom-init.service" 62 "network.target" 63 ]; 64 65 serviceConfig = { 66 Type = "forking"; 67 ExecStart = "${torque}/bin/pbs_mom"; 68 PIDFile = "/var/spool/torque/mom_priv/mom.lock"; 69 }; 70 }; 71 72 }; 73}