203 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
| 
 | |
|   cfg = config.services.riak-cs;
 | |
| 
 | |
| in
 | |
| 
 | |
| {
 | |
| 
 | |
|   ###### interface
 | |
| 
 | |
|   options = {
 | |
| 
 | |
|     services.riak-cs = {
 | |
| 
 | |
|       enable = mkEnableOption "riak-cs";
 | |
| 
 | |
|       package = mkOption {
 | |
|         type = types.package;
 | |
|         default = pkgs.riak-cs;
 | |
|         defaultText = "pkgs.riak-cs";
 | |
|         example = literalExample "pkgs.riak-cs";
 | |
|         description = ''
 | |
|           Riak package to use.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       nodeName = mkOption {
 | |
|         type = types.str;
 | |
|         default = "riak-cs@127.0.0.1";
 | |
|         description = ''
 | |
|           Name of the Erlang node.
 | |
|         '';
 | |
|       };
 | |
|       
 | |
|       anonymousUserCreation = mkOption {
 | |
|         type = types.bool;
 | |
|         default = false;
 | |
|         description = ''
 | |
|           Anonymous user creation.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       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:8080";
 | |
|         description = ''
 | |
|           Name of Riak CS listening service.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       stanchionHost = mkOption {
 | |
|         type = types.str;
 | |
|         default = "127.0.0.1:8085";
 | |
|         description = ''
 | |
|           Name of stanchion hosting service.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       stanchionSsl = mkOption {
 | |
|         type = types.bool;
 | |
|         default = true;
 | |
|         description = ''
 | |
|           Tell stanchion to use SSL.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       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/riak-cs";
 | |
|         description = ''
 | |
|           Data directory for Riak CS.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       logDir = mkOption {
 | |
|         type = types.path;
 | |
|         default = "/var/log/riak-cs";
 | |
|         description = ''
 | |
|           Log directory for Riak CS.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       extraConfig = mkOption {
 | |
|         type = types.lines;
 | |
|         default = "";
 | |
|         description = ''
 | |
|           Additional text to be appended to <filename>riak-cs.conf</filename>.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       extraAdvancedConfig = mkOption {
 | |
|         type = types.lines;
 | |
|         default = "";
 | |
|         description = ''
 | |
|           Additional text to be appended to <filename>advanced.config</filename>.
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
| 
 | |
|   };
 | |
| 
 | |
|   ###### implementation
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
| 
 | |
|     environment.systemPackages = [ cfg.package ];
 | |
|     environment.etc."riak-cs/riak-cs.conf".text = ''
 | |
|       nodename = ${cfg.nodeName}
 | |
|       distributed_cookie = ${cfg.distributedCookie}
 | |
| 
 | |
|       platform_log_dir = ${cfg.logDir}
 | |
| 
 | |
|       riak_host = ${cfg.riakHost}
 | |
|       listener = ${cfg.listener}
 | |
|       stanchion_host = ${cfg.stanchionHost}
 | |
| 
 | |
|       anonymous_user_creation = ${if cfg.anonymousUserCreation then "on" else "off"}
 | |
| 
 | |
|       ${cfg.extraConfig}
 | |
|     '';
 | |
| 
 | |
|     environment.etc."riak-cs/advanced.config".text = ''
 | |
|       ${cfg.extraAdvancedConfig}
 | |
|     '';
 | |
| 
 | |
|     users.users.riak-cs = {
 | |
|       name = "riak-cs";
 | |
|       uid = config.ids.uids.riak-cs;
 | |
|       group = "riak";
 | |
|       description = "Riak CS server user";
 | |
|     };
 | |
| 
 | |
|   systemd.services.riak-cs = {
 | |
|       description = "Riak CS Server";
 | |
| 
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       after = [ "network.target" ];
 | |
| 
 | |
|       path = [
 | |
|         pkgs.utillinux # for `logger`
 | |
|         pkgs.bash
 | |
|       ];
 | |
| 
 | |
|       environment.HOME = "${cfg.dataDir}";
 | |
|       environment.RIAK_CS_DATA_DIR = "${cfg.dataDir}";
 | |
|       environment.RIAK_CS_LOG_DIR = "${cfg.logDir}";
 | |
|       environment.RIAK_CS_ETC_DIR = "/etc/riak";
 | |
| 
 | |
|       preStart = ''
 | |
|         if ! test -e ${cfg.logDir}; then
 | |
|           mkdir -m 0755 -p ${cfg.logDir}
 | |
|           chown -R riak-cs ${cfg.logDir}
 | |
|         fi
 | |
| 
 | |
|         if ! test -e ${cfg.dataDir}; then
 | |
|           mkdir -m 0700 -p ${cfg.dataDir}
 | |
|           chown -R riak-cs ${cfg.dataDir}
 | |
|         fi
 | |
|       '';
 | |
| 
 | |
|       serviceConfig = {
 | |
|         ExecStart = "${cfg.package}/bin/riak-cs console";
 | |
|         ExecStop = "${cfg.package}/bin/riak-cs stop";
 | |
|         StandardInput = "tty";
 | |
|         User = "riak-cs";
 | |
|         Group = "riak-cs";
 | |
|         PermissionsStartOnly = true;
 | |
|         # Give Riak a decent amount of time to clean up.
 | |
|         TimeoutStopSec = 120;
 | |
|         LimitNOFILE = 65536;
 | |
|       };
 | |
| 
 | |
|       unitConfig.RequiresMountsFor = [
 | |
|         "${cfg.dataDir}"
 | |
|         "${cfg.logDir}"
 | |
|         "/etc/riak"
 | |
|       ];
 | |
|     };
 | |
|   };
 | |
| }
 | 
