aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/databases/rethinkdb.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/databases/rethinkdb.nix')
-rw-r--r--nixpkgs/nixos/modules/services/databases/rethinkdb.nix110
1 files changed, 110 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/databases/rethinkdb.nix b/nixpkgs/nixos/modules/services/databases/rethinkdb.nix
new file mode 100644
index 00000000000..4828e594b32
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/databases/rethinkdb.nix
@@ -0,0 +1,110 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.rethinkdb;
+ rethinkdb = cfg.package;
+in
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.rethinkdb = {
+
+ enable = mkOption {
+ default = false;
+ description = "Whether to enable the RethinkDB server.";
+ };
+
+ #package = mkOption {
+ # default = pkgs.rethinkdb;
+ # description = "Which RethinkDB derivation to use.";
+ #};
+
+ user = mkOption {
+ default = "rethinkdb";
+ description = "User account under which RethinkDB runs.";
+ };
+
+ group = mkOption {
+ default = "rethinkdb";
+ description = "Group which rethinkdb user belongs to.";
+ };
+
+ dbpath = mkOption {
+ default = "/var/db/rethinkdb";
+ description = "Location where RethinkDB stores its data, 1 data directory per instance.";
+ };
+
+ pidpath = mkOption {
+ default = "/run/rethinkdb";
+ description = "Location where each instance's pid file is located.";
+ };
+
+ #cfgpath = mkOption {
+ # default = "/etc/rethinkdb/instances.d";
+ # description = "Location where RethinkDB stores it config files, 1 config file per instance.";
+ #};
+
+ # TODO: currently not used by our implementation.
+ #instances = mkOption {
+ # type = types.attrsOf types.str;
+ # default = {};
+ # description = "List of named RethinkDB instances in our cluster.";
+ #};
+
+ };
+
+ };
+
+ ###### implementation
+ config = mkIf config.services.rethinkdb.enable {
+
+ environment.systemPackages = [ rethinkdb ];
+
+ systemd.services.rethinkdb = {
+ description = "RethinkDB server";
+
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+
+ serviceConfig = {
+ # TODO: abstract away 'default', which is a per-instance directory name
+ # allowing end user of this nix module to provide multiple instances,
+ # and associated directory per instance
+ ExecStart = "${rethinkdb}/bin/rethinkdb -d ${cfg.dbpath}/default";
+ ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
+ User = cfg.user;
+ Group = cfg.group;
+ PIDFile = "${cfg.pidpath}/default.pid";
+ PermissionsStartOnly = true;
+ };
+
+ preStart = ''
+ if ! test -e ${cfg.dbpath}; then
+ install -d -m0755 -o ${cfg.user} -g ${cfg.group} ${cfg.dbpath}
+ install -d -m0755 -o ${cfg.user} -g ${cfg.group} ${cfg.dbpath}/default
+ chown -R ${cfg.user}:${cfg.group} ${cfg.dbpath}
+ fi
+ if ! test -e "${cfg.pidpath}/default.pid"; then
+ install -D -o ${cfg.user} -g ${cfg.group} /dev/null "${cfg.pidpath}/default.pid"
+ fi
+ '';
+ };
+
+ users.users.rethinkdb = mkIf (cfg.user == "rethinkdb")
+ { name = "rethinkdb";
+ description = "RethinkDB server user";
+ };
+
+ users.groups = optionalAttrs (cfg.group == "rethinkdb") (singleton
+ { name = "rethinkdb";
+ });
+
+ };
+
+}