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