119 lines
3.1 KiB
Python
119 lines
3.1 KiB
Python
from json import dumps
|
|
|
|
JOLOKIA_VERSION = '1.7.1'
|
|
JOLOKIA_SHA1 = 'd9cf8215598480c98c03a2409344aba20d29884b'
|
|
|
|
java_opts = set()
|
|
|
|
for k, v in node.metadata.get('minecraft/java_opts').items():
|
|
if v is None:
|
|
java_opts.add(k)
|
|
else:
|
|
java_opts.add(f'{k}={v}')
|
|
|
|
# World
|
|
directories['/home/minecraft/world'] = {
|
|
'owner': 'minecraft',
|
|
'group': 'minecraft',
|
|
}
|
|
|
|
directories['/home/minecraft/world_nether'] = {
|
|
'owner': 'minecraft',
|
|
'group': 'minecraft',
|
|
}
|
|
|
|
directories['/home/minecraft/world_the_end'] = {
|
|
'owner': 'minecraft',
|
|
'group': 'minecraft',
|
|
}
|
|
|
|
# The actual server
|
|
files['/usr/local/lib/systemd/system/minecraft.service'] = {
|
|
'content_type': 'mako',
|
|
'context': {
|
|
'java_opts': ' '.join(sorted(java_opts)),
|
|
},
|
|
'triggers': {
|
|
'action:systemd-reload',
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|
|
|
|
files['/home/minecraft/eula.txt'] = {
|
|
'content': 'eula=true\n',
|
|
}
|
|
|
|
files['/home/minecraft/server.properties'] = {
|
|
# get it from data/minecraft/files/{node.name}
|
|
'source': node.name,
|
|
'triggers': {
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|
|
|
|
version, build_nr = node.metadata.get('minecraft/version')
|
|
|
|
files['/home/minecraft/minecraft_server.jar'] = {
|
|
'content_type': 'download',
|
|
'source': f'https://api.papermc.io/v2/projects/paper/versions/{version}/builds/{build_nr}/downloads/paper-{version}-{build_nr}.jar',
|
|
'content_hash': node.metadata.get('minecraft/sha1', None),
|
|
'triggers': {
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|
|
|
|
svc_systemd['minecraft'] = {
|
|
'needs': {
|
|
'directory:/home/minecraft/world',
|
|
'directory:/home/minecraft/world_nether',
|
|
'directory:/home/minecraft/world_the_end',
|
|
'file:/home/minecraft/eula.txt',
|
|
'file:/home/minecraft/minecraft_server.jar',
|
|
'file:/home/minecraft/server.properties',
|
|
'file:/usr/local/lib/systemd/system/minecraft.service',
|
|
'pkg_apt:openjdk-17-jre',
|
|
},
|
|
}
|
|
|
|
# Permissions
|
|
files['/home/minecraft/ops.json'] = {
|
|
'content': dumps(
|
|
[
|
|
{
|
|
'uuid': uuid,
|
|
'name': name,
|
|
'level': 4
|
|
} for name, uuid in sorted(node.metadata.get('minecraft/ops', {}).items())
|
|
],
|
|
indent=4,
|
|
),
|
|
'triggers': {
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|
|
|
|
if node.metadata.get('minecraft/allowlist', {}):
|
|
files['/home/minecraft/whitelist.json'] = {
|
|
'content': dumps(
|
|
[
|
|
{
|
|
'uuid': uuid,
|
|
'name': name,
|
|
} for name, uuid in sorted(node.metadata.get('minecraft/allowlist').items())
|
|
],
|
|
indent=4,
|
|
),
|
|
'triggers': {
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|
|
|
|
# Monitoring
|
|
files['/home/minecraft/jolokia.jar'] = {
|
|
'source': f'https://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/{JOLOKIA_VERSION}/jolokia-jvm-{JOLOKIA_VERSION}.jar',
|
|
'content_type': 'download',
|
|
'content_hash': JOLOKIA_SHA1,
|
|
'triggers': {
|
|
'svc_systemd:minecraft:restart',
|
|
},
|
|
}
|