bundlewrap/bundles/redis/metadata.py
2021-11-13 14:57:43 +01:00

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,
}
}