at 18.09-beta 2.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.memcached; 8 9 memcached = pkgs.memcached; 10 11in 12 13{ 14 15 ###### interface 16 17 options = { 18 19 services.memcached = { 20 21 enable = mkOption { 22 default = false; 23 description = " 24 Whether to enable Memcached. 25 "; 26 }; 27 28 user = mkOption { 29 default = "memcached"; 30 description = "The user to run Memcached as"; 31 }; 32 33 listen = mkOption { 34 default = "127.0.0.1"; 35 description = "The IP address to bind to"; 36 }; 37 38 port = mkOption { 39 default = 11211; 40 description = "The port to bind to"; 41 }; 42 43 enableUnixSocket = mkEnableOption "unix socket at /run/memcached/memcached.sock"; 44 45 maxMemory = mkOption { 46 default = 64; 47 description = "The maximum amount of memory to use for storage, in megabytes."; 48 }; 49 50 maxConnections = mkOption { 51 default = 1024; 52 description = "The maximum number of simultaneous connections"; 53 }; 54 55 extraOptions = mkOption { 56 default = []; 57 description = "A list of extra options that will be added as a suffix when running memcached"; 58 }; 59 }; 60 61 }; 62 63 ###### implementation 64 65 config = mkIf config.services.memcached.enable { 66 67 users.users = optional (cfg.user == "memcached") { 68 name = "memcached"; 69 description = "Memcached server user"; 70 }; 71 72 environment.systemPackages = [ memcached ]; 73 74 systemd.services.memcached = { 75 description = "Memcached server"; 76 77 wantedBy = [ "multi-user.target" ]; 78 after = [ "network.target" ]; 79 80 serviceConfig = { 81 PermissionsStartOnly = true; 82 ExecStartPre = optionals cfg.enableUnixSocket [ 83 "${pkgs.coreutils}/bin/install -d -o ${cfg.user} /run/memcached/" 84 "${pkgs.coreutils}/bin/chown -R ${cfg.user} /run/memcached/" 85 ]; 86 ExecStart = 87 let 88 networking = if cfg.enableUnixSocket 89 then "-s /run/memcached/memcached.sock" 90 else "-l ${cfg.listen} -p ${toString cfg.port}"; 91 in "${memcached}/bin/memcached ${networking} -m ${toString cfg.maxMemory} -c ${toString cfg.maxConnections} ${concatStringsSep " " cfg.extraOptions}"; 92 93 User = cfg.user; 94 }; 95 }; 96 }; 97 imports = [ 98 (mkRemovedOptionModule ["services" "memcached" "socket"] '' 99 This option was replaced by a fixed unix socket path at /run/memcached/memcached.sock enabled using services.memached.enableUnixSocket. 100 '') 101 ]; 102 103}