grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / databases / hbase-standalone.nix
blobd3d2999eaeed50db84c1ad612cb9ec388ebf78db
1 { config, options, lib, pkgs, ... }:
2 let
3   cfg = config.services.hbase-standalone;
4   opt = options.services.hbase-standalone;
6   buildProperty = configAttr:
7     (builtins.concatStringsSep "\n"
8       (lib.mapAttrsToList
9         (name: value: ''
10           <property>
11             <name>${name}</name>
12             <value>${builtins.toString value}</value>
13           </property>
14         '')
15         configAttr));
17   configFile = pkgs.writeText "hbase-site.xml"
18     ''<configuration>
19         ${buildProperty (opt.settings.default // cfg.settings)}
20       </configuration>
21     '';
23   configDir = pkgs.runCommand "hbase-config-dir" { preferLocalBuild = true; } ''
24     mkdir -p $out
25     cp ${cfg.package}/conf/* $out/
26     rm $out/hbase-site.xml
27     ln -s ${configFile} $out/hbase-site.xml
28   '' ;
30 in {
32   imports = [
33     (lib.mkRenamedOptionModule [ "services" "hbase" ] [ "services" "hbase-standalone" ])
34   ];
36   ###### interface
38   options = {
39     services.hbase-standalone = {
41       enable = lib.mkEnableOption ''
42         HBase master in standalone mode with embedded regionserver and zookeper.
43         Do not use this configuration for production nor for evaluating HBase performance
44       '';
46       package = lib.mkPackageOption pkgs "hbase" { };
48       user = lib.mkOption {
49         type = lib.types.str;
50         default = "hbase";
51         description = ''
52           User account under which HBase runs.
53         '';
54       };
56       group = lib.mkOption {
57         type = lib.types.str;
58         default = "hbase";
59         description = ''
60           Group account under which HBase runs.
61         '';
62       };
64       dataDir = lib.mkOption {
65         type = lib.types.path;
66         default = "/var/lib/hbase";
67         description = ''
68           Specifies location of HBase database files. This location should be
69           writable and readable for the user the HBase service runs as
70           (hbase by default).
71         '';
72       };
74       logDir = lib.mkOption {
75         type = lib.types.path;
76         default = "/var/log/hbase";
77         description = ''
78           Specifies the location of HBase log files.
79         '';
80       };
82       settings = lib.mkOption {
83         type = with lib.types; attrsOf (oneOf [ str int bool ]);
84         default = {
85           "hbase.rootdir" = "file://${cfg.dataDir}/hbase";
86           "hbase.zookeeper.property.dataDir" = "${cfg.dataDir}/zookeeper";
87         };
88         defaultText = lib.literalExpression ''
89           {
90             "hbase.rootdir" = "file://''${config.${opt.dataDir}}/hbase";
91             "hbase.zookeeper.property.dataDir" = "''${config.${opt.dataDir}}/zookeeper";
92           }
93         '';
94         description = ''
95           configurations in hbase-site.xml, see <https://github.com/apache/hbase/blob/master/hbase-server/src/test/resources/hbase-site.xml> for details.
96         '';
97       };
99     };
100   };
102   ###### implementation
104   config = lib.mkIf cfg.enable {
106     systemd.tmpfiles.rules = [
107       "d '${cfg.dataDir}' - ${cfg.user} ${cfg.group} - -"
108       "d '${cfg.logDir}' - ${cfg.user} ${cfg.group} - -"
109     ];
111     systemd.services.hbase = {
112       description = "HBase Server";
113       wantedBy = [ "multi-user.target" ];
115       environment = {
116         # JRE 15 removed option `UseConcMarkSweepGC` which is needed.
117         JAVA_HOME = "${pkgs.jre8}";
118         HBASE_LOG_DIR = cfg.logDir;
119       };
121       serviceConfig = {
122         User = cfg.user;
123         Group = cfg.group;
124         ExecStart = "${cfg.package}/bin/hbase --config ${configDir} master start";
125       };
126     };
128     users.users.hbase = {
129       description = "HBase Server user";
130       group = "hbase";
131       uid = config.ids.uids.hbase;
132     };
134     users.groups.hbase.gid = config.ids.gids.hbase;
136   };