summary refs log tree commit diff
path: root/nixos/modules/services/amqp
diff options
context:
space:
mode:
authorEvgeny Egorochkin <phreedom@yandex.ru>2014-07-26 14:33:22 +0300
committerEvgeny Egorochkin <phreedom@yandex.ru>2014-07-26 14:33:53 +0300
commitbe2cec24edc19ff83654abead7e4522505f2e465 (patch)
tree5fcca4852a9eebcf91af43ee313b2f54a19c8404 /nixos/modules/services/amqp
parenta7207cf38973f976127aff3859129d05a732e977 (diff)
downloadnixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar.gz
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar.bz2
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar.lz
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar.xz
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.tar.zst
nixpkgs-be2cec24edc19ff83654abead7e4522505f2e465.zip
RabbitMQ service: add properties essential for clusters
Diffstat (limited to 'nixos/modules/services/amqp')
-rw-r--r--nixos/modules/services/amqp/rabbitmq.nix41
1 files changed, 39 insertions, 2 deletions
diff --git a/nixos/modules/services/amqp/rabbitmq.nix b/nixos/modules/services/amqp/rabbitmq.nix
index bef15fb64b7..a930098bfee 100644
--- a/nixos/modules/services/amqp/rabbitmq.nix
+++ b/nixos/modules/services/amqp/rabbitmq.nix
@@ -4,6 +4,8 @@ with lib;
 
 let
   cfg = config.services.rabbitmq;
+  config_file = pkgs.writeText "rabbitmq.config" cfg.config;
+  config_file_wo_suffix = builtins.substring 0 ((builtins.stringLength config_file) - 7) config_file;
 
 in {
   ###### interface
@@ -31,7 +33,6 @@ in {
         '';
       };
 
-
       dataDir = mkOption {
         type = types.path;
         default = "/var/lib/rabbitmq";
@@ -40,6 +41,30 @@ in {
         '';
       };
 
+      cookie = mkOption {
+        default = "";
+        type = types.str;
+        description = ''
+          Erlang cookie is a string of arbitrary length which must
+          be the same for several nodes to be allowed to communicate.
+          Leave empty to generate automatically.
+        '';
+      };
+
+      config = mkOption {
+        default = "";
+        type = types.str;
+        description = ''
+          Verbatim configuration file contents.
+          See http://www.rabbitmq.com/configure.htm
+        '';
+      };
+
+      plugins = mkOption {
+        default = [];
+        type = types.listOf types.str;
+        description = "The names of plugins to enable";
+      };
     };
   };
 
@@ -69,7 +94,10 @@ in {
         RABBITMQ_NODE_IP_ADDRESS = cfg.listenAddress;
         RABBITMQ_SERVER_START_ARGS = "-rabbit error_logger tty -rabbit sasl_error_logger false";
         SYS_PREFIX = "";
-      };
+        RABBITMQ_ENABLED_PLUGINS_FILE = pkgs.writeText "enabled_plugins" ''
+          [ ${concatStringsSep "," cfg.plugins} ].
+        '';
+      } //  optionalAttrs (cfg.config != "") { RABBITMQ_CONFIG_FILE = config_file_wo_suffix; };
 
       serviceConfig = {
         ExecStart = "${pkgs.rabbitmq_server}/sbin/rabbitmq-server";
@@ -81,6 +109,15 @@ in {
       preStart = ''
         mkdir -p ${cfg.dataDir} && chmod 0700 ${cfg.dataDir}
         if [ "$(id -u)" = 0 ]; then chown rabbitmq:rabbitmq ${cfg.dataDir}; fi
+        
+        ${optionalString (cfg.cookie != "") ''
+            echo -n ${cfg.cookie} > ${cfg.dataDir}/.erlang.cookie
+            chmod 400 ${cfg.dataDir}/.erlang.cookie
+            chown rabbitmq:rabbitmq ${cfg.dataDir}/.erlang.cookie
+        ''}
+
+        mkdir -p /var/log/rabbitmq && chmod 0700 /var/log/rabbitmq
+        chown rabbitmq:rabbitmq /var/log/rabbitmq
       '';
     };