166 lines
5.1 KiB
Python
166 lines
5.1 KiB
Python
defaults = {
|
|
'apt': {
|
|
'packages': {
|
|
'redis-server': {},
|
|
},
|
|
},
|
|
'backup': {
|
|
'paths': {
|
|
'/var/lib/redis',
|
|
},
|
|
},
|
|
'redis': {
|
|
'server': {
|
|
'port': '6379',
|
|
},
|
|
},
|
|
}
|
|
|
|
if node.has_bundle('zfs'):
|
|
defaults['zfs'] = {
|
|
'datasets': {
|
|
'tank/redis': {
|
|
'mountpoint': '/var/lib/redis',
|
|
'needed_by': [
|
|
'pkg_apt:redis-server',
|
|
'directory:/var/lib/redis',
|
|
],
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'redis',
|
|
)
|
|
def config(metadata):
|
|
redis = {}
|
|
|
|
for name, conf in metadata.get('redis').items():
|
|
redis[name] = {
|
|
'bind': '127.0.0.1 ::1',
|
|
'protected-mode': 'yes',
|
|
'port': '0',
|
|
'tcp-backlog': '511',
|
|
'unixsocket': f'/var/run/redis/{name}.sock',
|
|
'unixsocketperm': '777',
|
|
'timeout': '0',
|
|
'tcp-keepalive': '300',
|
|
'daemonize': 'yes',
|
|
'supervised': 'no',
|
|
'pidfile': f'/var/run/redis/{name}.pid',
|
|
'loglevel': 'notice',
|
|
'logfile': f'/var/log/redis/{name}.log',
|
|
'databases': '16',
|
|
'always-show-logo': 'yes',
|
|
'save': {
|
|
'900 1',
|
|
'300 10',
|
|
'60 10000',
|
|
},
|
|
'stop-writes-on-bgsave-error': 'yes',
|
|
'rdbcompression': 'yes',
|
|
'rdbchecksum': 'yes',
|
|
'dbfilename': f'{name}.rdb',
|
|
'dir': '/var/lib/redis',
|
|
'lazyfree-lazy-eviction': 'no',
|
|
'lazyfree-lazy-expire': 'no',
|
|
'lazyfree-lazy-server-del': 'no',
|
|
'appendonly': 'no',
|
|
'appendfilename': '"appendonly.aof"',
|
|
'appendfsync': 'everysec',
|
|
'no-appendfsync-on-rewrite': 'no',
|
|
'auto-aof-rewrite-percentage': '100',
|
|
'auto-aof-rewrite-min-size': '64mb',
|
|
'aof-load-truncated': 'yes',
|
|
'aof-use-rdb-preamble': 'yes',
|
|
'lua-time-limit': '5000',
|
|
'slowlog-log-slower-than': '10000',
|
|
'slowlog-max-len': '128',
|
|
'latency-monitor-threshold': '0',
|
|
'notify-keyspace-events': '""',
|
|
'hash-max-ziplist-entries': '512',
|
|
'hash-max-ziplist-value': '64',
|
|
'list-max-ziplist-size': '-2',
|
|
'list-compress-depth': '0',
|
|
'set-max-intset-entries': '512',
|
|
'zset-max-ziplist-entries': '128',
|
|
'zset-max-ziplist-value': '64',
|
|
'hll-sparse-max-bytes': '3000',
|
|
'stream-node-max-bytes': '4096',
|
|
'stream-node-max-entries': '100',
|
|
'activerehashing': 'yes',
|
|
'client-output-buffer-limit': {
|
|
'normal 0 0 0',
|
|
'pubsub 32mb 8mb 60',
|
|
},
|
|
'hz': '10',
|
|
'dynamic-hz': 'yes',
|
|
'aof-rewrite-incremental-fsync': 'yes',
|
|
'rdb-save-incremental-fsync': 'yes',
|
|
**metadata.get(f'redis/{name}', {}),
|
|
}
|
|
|
|
return {
|
|
'redis': redis,
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'systemd/units',
|
|
)
|
|
def units(metadata):
|
|
units = {}
|
|
|
|
for name, conf in metadata.get('redis').items():
|
|
units[f'redis-{name}.service'] = {
|
|
'Unit': {
|
|
'Description': f'redis {name}',
|
|
'After': 'network.target',
|
|
},
|
|
'Service': {
|
|
'Type': 'notify',
|
|
'ExecStart': f'/usr/bin/redis-server /etc/redis/{name}.conf --supervised systemd --daemonize no',
|
|
'PIDFile': f'/run/redis/{name}.pid',
|
|
'TimeoutStopSec': '0',
|
|
'Restart': 'always',
|
|
'User': 'redis',
|
|
'Group': 'redis',
|
|
'RuntimeDirectory': f'redis',
|
|
'RuntimeDirectoryMode': '2755',
|
|
|
|
'UMask': '007',
|
|
'PrivateTmp': 'yes',
|
|
'LimitNOFILE': '65535',
|
|
'PrivateDevices': 'yes',
|
|
'ProtectHome': 'yes',
|
|
'ReadOnlyDirectories': '/',
|
|
'ReadWritePaths': [
|
|
'-/var/lib/redis',
|
|
'-/var/log/redis',
|
|
f'-/var/run/redis',
|
|
],
|
|
|
|
'NoNewPrivileges': 'true',
|
|
'CapabilityBoundingSet': 'CAP_SETGID CAP_SETUID CAP_SYS_RESOURCE',
|
|
'MemoryDenyWriteExecute': 'true',
|
|
'ProtectKernelModules': 'true',
|
|
'ProtectKernelTunables': 'true',
|
|
'ProtectControlGroups': 'true',
|
|
'RestrictRealtime': 'true',
|
|
'RestrictNamespaces': 'true',
|
|
'RestrictAddressFamilies': 'AF_INET AF_INET6 AF_UNIX',
|
|
|
|
'ProtectSystem': 'true',
|
|
},
|
|
'Install': {
|
|
'WantedBy': {'multi-user.target'},
|
|
'Alias': f'redis-{name}.service',
|
|
},
|
|
}
|
|
|
|
return {
|
|
'systemd': {
|
|
'units': units,
|
|
}
|
|
}
|