blob: 491a28a5f2f2f558d75ef651b1a932ad0f729433 [file] [log] [blame]
local kube = import "../../../kube/kube.libsonnet";
local defaultWorldguardConfig = import "worldguard.libsonnet";
{
local minecraft = self,
versions:: {
"spigot-1.15.2": "registry.k0.hswaw.net/q3k/minecraft:spigot-1.15.2-r3",
},
server(name, version):: {
local server = self,
name:: name,
version:: version,
image:: minecraft.versions[server.version],
metadata:: {
namespace: "minecraft",
},
componentName(component):: "%s-%s" % [server.name, component],
properties:: {
"spawn-protection": 16,
"max-tick-time": 60000,
"query.port": 25565,
"generator-settings": "",
"force-gamemode": false,
"allow-nether": true,
"enforce-whitelist": false,
"gamemode": "survival",
"broadcast-console-to-ops": true,
"enable-query": false,
"player-idle-timeout": 0,
"difficulty": "easy",
"broadcast-rcon-to-ops": true,
"spawn-monsters": true,
"op-permission-level": 4,
"pvp": true,
"snooper-enabled": true,
"level-type": "default",
"hardcore": false,
"enable-command-block": false,
"network-compression-threshold": 256,
"max-players": 20,
"max-world-size": 29999984,
"resource-pack-sha1": "",
"function-permission-level": 2,
"rcon.port": 25575,
"server-port": 25565,
"debug": false,
"server-ip": "",
"spawn-npcs": true,
"allow-flight": false,
"level-name": "world",
"view-distance": 10,
"resource-pack": "",
"spawn-animals": true,
"white-list": false,
"rcon.password": "",
"generate-structures": true,
"online-mode": true,
"max-build-height": 256,
"level-seed": "",
"prevent-proxy-connections": false,
"use-native-transport": true,
"motd": "A Minecraft Server",
"enable-rcon": false,
},
worldguardConfig:: defaultWorldguardConfig,
startsh:: |||
#!/usr/bin/env bash
cd /home/minecraft/world
cp /home/minecraft/config/server.properties .
cp /home/minecraft/spigot.jar .
mkdir -p plugins/WorldGuard
cp /home/minecraft/worldedit-*.jar plugins
cp /home/minecraft/worldguard-*.jar plugins
cp /home/minecraft/config/worldguard_config.yaml plugins/WorldGuard/config.yml
echo "eula=true" > eula.txt
bash /home/minecraft/config/overviewer.sh &
exec java -Xmx4G -Xms4G -jar spigot.jar
|||,
overviewersh:: |||
#!/usr/bin/env bash
mkdir -p overviewer/world
sleep 60
while true; do
echo "Rendering Overviewer map..."
overviewer.py -p 1 --rendermodes=normal,lighting,smooth-lighting,cave world overviewer/world
echo "Done."
sleep 900
done
|||,
secretProperties: kube.Secret(server.componentName("properties")) {
metadata+: server.metadata,
data: {
local properties = std.join("\n", ["%s=%s" % [k, std.toString(server.properties[k])] for k in std.objectFields(server.properties)]),
"server.properties": std.base64(properties),
local worldguardConfig = std.manifestYamlDoc(server.worldguardConfig),
"worldguard_config.yaml": std.base64(worldguardConfig),
"start.sh": std.base64(server.startsh),
"overviewer.sh": std.base64(server.overviewersh),
},
},
worldVolume: kube.PersistentVolumeClaim(server.componentName("world")) {
metadata+: server.metadata,
spec+: {
storageClassName: "waw-hdd-redundant-3",
accessModes: ["ReadWriteOnce"],
resources: {
requests: {
storage: "10Gi",
},
},
},
},
deploy: kube.Deployment(server.componentName("deploy")) {
metadata+: server.metadata,
spec+: {
template+: {
spec+: {
volumes_: {
config: kube.SecretVolume(server.secretProperties),
world: kube.PersistentVolumeClaimVolume(server.worldVolume),
},
containers_: {
default: kube.Container("default") {
image: server.image,
command: [
"bash", "/home/minecraft/config/start.sh",
],
volumeMounts_: {
config: { mountPath: "/home/minecraft/config" },
world: { mountPath: "/home/minecraft/world" },
},
ports_: {
minecraft: { containerPort: 25565 },
grpc: { containerPort: 2137 },
},
resources: {
requests: {
memory: "6G",
cpu: "2",
},
limits: {
memory: "6G",
cpu: "4",
},
},
},
overviewer: kube.Container("overviewer") {
image: "halverneus/static-file-server:v1.8.0",
env_: {
FOLDER: "/home/minecraft/world/overviewer/world",
},
volumeMounts_: {
world: { mountPath: "/home/minecraft/world" },
},
ports_: {
web: { containerPort: 8080 },
},
},
},
},
},
},
},
svc: kube.Service(server.componentName("svc")) {
metadata+: server.metadata,
target_pod:: server.deploy.spec.template,
spec+: {
ports: [
{ name: "minecraft", port: 25565, targetPort: 25565, protocol: "TCP" },
{ name: "web", port: 80, targetPort: 8080, protocol: "TCP" },
{ name: "grpc", port: 2137, targetPort: 2137, protocol: "TCP" },
],
type: "LoadBalancer",
externalTrafficPolicy: "Local",
},
},
},
ns: kube.Namespace("minecraft"),
q3k: {
survival: minecraft.server("q3k-survival", "spigot-1.15.2") {
properties+: {
motd: "wypierdol z polski kropka pe el",
"enforce-whitelist": true,
},
worldguardConfig+: {
mobs+: {
"block-creeper-block-damage": true,
},
},
},
},
}