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}