summary refs log tree commit diff
path: root/nixos/modules/services/computing/torque/mom.nix
blob: 6747bd4b0d5aae70cc9bd5987839e0744b8aad95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{ config, pkgs, lib, ... }:

with lib;

let

  cfg = config.services.torque.mom;
  torque = pkgs.torque;

  momConfig = pkgs.writeText "torque-mom-config" ''
    $pbsserver ${cfg.serverNode}
    $logevent 225
  '';

in
{
  options = {

    services.torque.mom = {
      enable = mkEnableOption "torque computing node";

      serverNode = mkOption {
        type = types.str;
        description = "Hostname running pbs server.";
      };

    };

  };

  config = mkIf cfg.enable {
    environment.systemPackages = [ pkgs.torque ];

    systemd.services.torque-mom-init = {
      path = with pkgs; [ torque util-linux procps inetutils ];

      script = ''
        pbs_mkdirs -v aux
        pbs_mkdirs -v mom
        hostname > /var/spool/torque/server_name
        cp -v ${momConfig} /var/spool/torque/mom_priv/config
      '';

      serviceConfig.Type = "oneshot";
      unitConfig.ConditionPathExists = "!/var/spool/torque";
    };

    systemd.services.torque-mom = {
      path = [ torque ];

      wantedBy = [ "multi-user.target" ];
      requires = [ "torque-mom-init.service" ];
      after = [ "torque-mom-init.service" "network.target" ];

      serviceConfig = {
        Type = "forking";
        ExecStart = "${torque}/bin/pbs_mom";
        PIDFile = "/var/spool/torque/mom_priv/mom.lock";
      };
    };

  };
}