nixos/preload: init
[NixPkgs.git] / nixos / modules / services / network-filesystems / orangefs / client.nix
blob68f23f477af19d07926656455cac0dac5e873f87
1 { config, lib, pkgs, ...} :
3 with lib;
5 let
6   cfg = config.services.orangefs.client;
8 in {
9   ###### interface
11   options = {
12     services.orangefs.client = {
13       enable = mkEnableOption (lib.mdDoc "OrangeFS client daemon");
15       extraOptions = mkOption {
16         type = with types; listOf str;
17         default = [];
18         description = lib.mdDoc "Extra command line options for pvfs2-client.";
19       };
21       fileSystems = mkOption {
22         description = lib.mdDoc ''
23           The orangefs file systems to be mounted.
24           This option is preferred over using {option}`fileSystems` directly since
25           the pvfs client service needs to be running for it to be mounted.
26         '';
28         example = [{
29           mountPoint = "/orangefs";
30           target = "tcp://server:3334/orangefs";
31         }];
33         type = with types; listOf (submodule ({ ... } : {
34           options = {
36             mountPoint = mkOption {
37               type = types.str;
38               default = "/orangefs";
39               description = lib.mdDoc "Mount point.";
40             };
42             options = mkOption {
43               type = with types; listOf str;
44               default = [];
45               description = lib.mdDoc "Mount options";
46             };
48             target = mkOption {
49               type = types.str;
50               example = "tcp://server:3334/orangefs";
51               description = lib.mdDoc "Target URL";
52             };
53           };
54         }));
55       };
56     };
57   };
60   ###### implementation
62   config = mkIf cfg.enable {
63     environment.systemPackages = [ pkgs.orangefs ];
65     boot.supportedFilesystems = [ "pvfs2" ];
66     boot.kernelModules = [ "orangefs" ];
68     systemd.services.orangefs-client = {
69       requires = [ "network-online.target" ];
70       after = [ "network-online.target" ];
72       serviceConfig = {
73         Type = "simple";
75          ExecStart = ''
76            ${pkgs.orangefs}/bin/pvfs2-client-core \
77               --logtype=syslog ${concatStringsSep " " cfg.extraOptions}
78         '';
80         TimeoutStopSec = "120";
81       };
82     };
84     systemd.mounts = map (fs: {
85       requires = [ "orangefs-client.service" ];
86       after = [ "orangefs-client.service" ];
87       bindsTo = [ "orangefs-client.service" ];
88       wantedBy = [ "remote-fs.target" ];
89       type = "pvfs2";
90       options = concatStringsSep "," fs.options;
91       what = fs.target;
92       where = fs.mountPoint;
93     }) cfg.fileSystems;
94   };