aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/databases/stanchion.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/databases/stanchion.nix')
-rw-r--r--nixpkgs/nixos/modules/services/databases/stanchion.nix194
1 files changed, 194 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/databases/stanchion.nix b/nixpkgs/nixos/modules/services/databases/stanchion.nix
new file mode 100644
index 00000000000..97e55bc70c4
--- /dev/null
+++ b/nixpkgs/nixos/modules/services/databases/stanchion.nix
@@ -0,0 +1,194 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.services.stanchion;
+
+in
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.stanchion = {
+
+ enable = mkEnableOption "stanchion";
+
+ package = mkOption {
+ type = types.package;
+ default = pkgs.stanchion;
+ defaultText = "pkgs.stanchion";
+ example = literalExample "pkgs.stanchion";
+ description = ''
+ Stanchion package to use.
+ '';
+ };
+
+ nodeName = mkOption {
+ type = types.str;
+ default = "stanchion@127.0.0.1";
+ description = ''
+ Name of the Erlang node.
+ '';
+ };
+
+ adminKey = mkOption {
+ type = types.str;
+ default = "";
+ description = ''
+ Name of admin user.
+ '';
+ };
+
+ adminSecret = mkOption {
+ type = types.str;
+ default = "";
+ description = ''
+ Name of admin secret
+ '';
+ };
+
+ riakHost = mkOption {
+ type = types.str;
+ default = "127.0.0.1:8087";
+ description = ''
+ Name of riak hosting service.
+ '';
+ };
+
+ listener = mkOption {
+ type = types.str;
+ default = "127.0.0.1:8085";
+ description = ''
+ Name of Riak CS listening service.
+ '';
+ };
+
+ stanchionHost = mkOption {
+ type = types.str;
+ default = "127.0.0.1:8085";
+ description = ''
+ Name of stanchion hosting service.
+ '';
+ };
+
+ distributedCookie = mkOption {
+ type = types.str;
+ default = "riak";
+ description = ''
+ Cookie for distributed node communication. All nodes in the
+ same cluster should use the same cookie or they will not be able to
+ communicate.
+ '';
+ };
+
+ dataDir = mkOption {
+ type = types.path;
+ default = "/var/db/stanchion";
+ description = ''
+ Data directory for Stanchion.
+ '';
+ };
+
+ logDir = mkOption {
+ type = types.path;
+ default = "/var/log/stanchion";
+ description = ''
+ Log directory for Stanchion.
+ '';
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Additional text to be appended to <filename>stanchion.conf</filename>.
+ '';
+ };
+ };
+ };
+
+ ###### implementation
+
+ config = mkIf cfg.enable {
+
+ environment.systemPackages = [ cfg.package ];
+
+ environment.etc."stanchion/advanced.config".text = ''
+ [{stanchion, []}].
+ '';
+
+ environment.etc."stanchion/stanchion.conf".text = ''
+ listener = ${cfg.listener}
+
+ riak_host = ${cfg.riakHost}
+
+ ${optionalString (cfg.adminKey == "") "#"} admin.key=${optionalString (cfg.adminKey != "") cfg.adminKey}
+ ${optionalString (cfg.adminSecret == "") "#"} admin.secret=${optionalString (cfg.adminSecret != "") cfg.adminSecret}
+
+ platform_bin_dir = ${pkgs.stanchion}/bin
+ platform_data_dir = ${cfg.dataDir}
+ platform_etc_dir = /etc/stanchion
+ platform_lib_dir = ${pkgs.stanchion}/lib
+ platform_log_dir = ${cfg.logDir}
+
+ nodename = ${cfg.nodeName}
+
+ distributed_cookie = ${cfg.distributedCookie}
+
+ ${cfg.extraConfig}
+ '';
+
+ users.users.stanchion = {
+ name = "stanchion";
+ uid = config.ids.uids.stanchion;
+ group = "stanchion";
+ description = "Stanchion server user";
+ };
+
+ users.groups.stanchion.gid = config.ids.gids.stanchion;
+
+ systemd.tmpfiles.rules = [
+ "d '${cfg.logDir}' - stanchion stanchion --"
+ "d '${cfg.dataDir}' 0700 stanchion stanchion --"
+ ];
+
+ systemd.services.stanchion = {
+ description = "Stanchion Server";
+
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+
+ path = [
+ pkgs.utillinux # for `logger`
+ pkgs.bash
+ ];
+
+ environment.HOME = "${cfg.dataDir}";
+ environment.STANCHION_DATA_DIR = "${cfg.dataDir}";
+ environment.STANCHION_LOG_DIR = "${cfg.logDir}";
+ environment.STANCHION_ETC_DIR = "/etc/stanchion";
+
+ serviceConfig = {
+ ExecStart = "${cfg.package}/bin/stanchion console";
+ ExecStop = "${cfg.package}/bin/stanchion stop";
+ StandardInput = "tty";
+ User = "stanchion";
+ Group = "stanchion";
+ # Give Stanchion a decent amount of time to clean up.
+ TimeoutStopSec = 120;
+ LimitNOFILE = 65536;
+ };
+
+ unitConfig.RequiresMountsFor = [
+ "${cfg.dataDir}"
+ "${cfg.logDir}"
+ "/etc/stanchion"
+ ];
+ };
+ };
+}