This service is only limited in configuration options. But it is sufficient to run glusterd and configure it using the gluster command
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  inherit (pkgs) glusterfs;
 | 
						|
 | 
						|
  cfg = config.services.glusterfs;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    services.glusterfs = {
 | 
						|
 | 
						|
      enable = mkEnableOption "GlusterFS Daemon";
 | 
						|
 | 
						|
      logLevel = mkOption {
 | 
						|
        type = types.enum ["DEBUG" "INFO" "WARNING" "ERROR" "CRITICAL" "TRACE" "NONE"];
 | 
						|
        description = "Log level used by the GlusterFS daemon";
 | 
						|
        default = "INFO";
 | 
						|
      };
 | 
						|
 | 
						|
      extraFlags = mkOption {
 | 
						|
        type = types.listOf types.str;
 | 
						|
        description = "Extra flags passed to the GlusterFS daemon";
 | 
						|
        default = [];
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
    environment.systemPackages = [ pkgs.glusterfs ];
 | 
						|
 | 
						|
    services.rpcbind.enable = true;
 | 
						|
 | 
						|
    systemd.services.glusterd = {
 | 
						|
 | 
						|
      description = "GlusterFS, a clustered file-system server";
 | 
						|
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
 | 
						|
      requires = [ "rpcbind.service" ];
 | 
						|
      after = [ "rpcbind.service" "network.target" "local-fs.target" ];
 | 
						|
      before = [ "network-online.target" ];
 | 
						|
 | 
						|
      preStart = ''
 | 
						|
        install -m 0755 -d /var/log/glusterfs
 | 
						|
      '';
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        Type="forking";
 | 
						|
        PIDFile="/run/glusterd.pid";
 | 
						|
        LimitNOFILE=65536;
 | 
						|
        ExecStart="${glusterfs}/sbin/glusterd -p /run/glusterd.pid --log-level=${cfg.logLevel} ${toString cfg.extraFlags}";
 | 
						|
        KillMode="process";
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    systemd.services.glustereventsd = {
 | 
						|
 | 
						|
      description = "Gluster Events Notifier";
 | 
						|
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
 | 
						|
      after = [ "syslog.target" "network.target" ];
 | 
						|
 | 
						|
      serviceConfig = {
 | 
						|
        Type="simple";
 | 
						|
        Environment="PYTHONPATH=${glusterfs}/usr/lib/python2.7/site-packages";
 | 
						|
        PIDFile="/run/glustereventsd.pid";
 | 
						|
        ExecStart="${glusterfs}/sbin/glustereventsd --pid-file /run/glustereventsd.pid";
 | 
						|
        ExecReload="/bin/kill -SIGUSR2 $MAINPID";
 | 
						|
        KillMode="control-group";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |