blob: eef3b353cc6c630334fe900e2ca83a3a87127597 [file] [log] [blame]
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +02001local kube = import "../../../kube/kube.libsonnet";
Rafał Hirsz12ab93a2020-05-16 21:02:52 +02002local defaultWorldguardConfig = import "worldguard.libsonnet";
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +02003
4{
5 local minecraft = self,
6 versions:: {
Rafał Hirsz12ab93a2020-05-16 21:02:52 +02007 "spigot-1.15.2": "registry.k0.hswaw.net/q3k/minecraft:spigot-1.15.2-r3",
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +02008 },
9 server(name, version):: {
10 local server = self,
11 name:: name,
12 version:: version,
13 image:: minecraft.versions[server.version],
14
15 metadata:: {
16 namespace: "minecraft",
17 },
18
19 componentName(component):: "%s-%s" % [server.name, component],
20
21 properties:: {
22 "spawn-protection": 16,
23 "max-tick-time": 60000,
24 "query.port": 25565,
25 "generator-settings": "",
26 "force-gamemode": false,
27 "allow-nether": true,
28 "enforce-whitelist": false,
29 "gamemode": "survival",
30 "broadcast-console-to-ops": true,
31 "enable-query": false,
32 "player-idle-timeout": 0,
33 "difficulty": "easy",
34 "broadcast-rcon-to-ops": true,
35 "spawn-monsters": true,
36 "op-permission-level": 4,
37 "pvp": true,
38 "snooper-enabled": true,
39 "level-type": "default",
40 "hardcore": false,
41 "enable-command-block": false,
42 "network-compression-threshold": 256,
43 "max-players": 20,
44 "max-world-size": 29999984,
45 "resource-pack-sha1": "",
46 "function-permission-level": 2,
47 "rcon.port": 25575,
48 "server-port": 25565,
49 "debug": false,
50 "server-ip": "",
51 "spawn-npcs": true,
52 "allow-flight": false,
53 "level-name": "world",
54 "view-distance": 10,
55 "resource-pack": "",
56 "spawn-animals": true,
57 "white-list": false,
58 "rcon.password": "",
59 "generate-structures": true,
60 "online-mode": true,
61 "max-build-height": 256,
62 "level-seed": "",
63 "prevent-proxy-connections": false,
64 "use-native-transport": true,
65 "motd": "A Minecraft Server",
66 "enable-rcon": false,
67 },
68
Rafał Hirsz12ab93a2020-05-16 21:02:52 +020069 worldguardConfig:: defaultWorldguardConfig,
70
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +020071 startsh:: |||
72 #!/usr/bin/env bash
73 cd /home/minecraft/world
74 cp /home/minecraft/config/server.properties .
75 cp /home/minecraft/spigot.jar .
Rafał Hirsz12ab93a2020-05-16 21:02:52 +020076 mkdir -p plugins/WorldGuard
77 cp /home/minecraft/worldedit-*.jar plugins
78 cp /home/minecraft/worldguard-*.jar plugins
79 cp /home/minecraft/config/worldguard_config.yaml plugins/WorldGuard/config.yml
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +020080 echo "eula=true" > eula.txt
81
82 bash /home/minecraft/config/overviewer.sh &
83 exec java -Xmx4G -Xms4G -jar spigot.jar
84 |||,
85
86 overviewersh:: |||
87 #!/usr/bin/env bash
88 mkdir -p overviewer/world
89 sleep 60
90 while true; do
91 echo "Rendering Overviewer map..."
92 overviewer.py -p 1 --rendermodes=normal,lighting,smooth-lighting,cave world overviewer/world
93 echo "Done."
94 sleep 900
95 done
96 |||,
97
98 secretProperties: kube.Secret(server.componentName("properties")) {
99 metadata+: server.metadata,
100 data: {
101 local properties = std.join("\n", ["%s=%s" % [k, std.toString(server.properties[k])] for k in std.objectFields(server.properties)]),
102 "server.properties": std.base64(properties),
Rafał Hirsz12ab93a2020-05-16 21:02:52 +0200103 local worldguardConfig = std.manifestYamlDoc(server.worldguardConfig),
104 "worldguard_config.yaml": std.base64(worldguardConfig),
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200105 "start.sh": std.base64(server.startsh),
106 "overviewer.sh": std.base64(server.overviewersh),
107 },
108 },
109
110 worldVolume: kube.PersistentVolumeClaim(server.componentName("world")) {
111 metadata+: server.metadata,
112 spec+: {
113 storageClassName: "waw-hdd-redundant-3",
114 accessModes: ["ReadWriteOnce"],
115 resources: {
116 requests: {
117 storage: "10Gi",
118 },
119 },
120 },
121 },
122
123 deploy: kube.Deployment(server.componentName("deploy")) {
124 metadata+: server.metadata,
125 spec+: {
126 template+: {
127 spec+: {
128 volumes_: {
129 config: kube.SecretVolume(server.secretProperties),
130 world: kube.PersistentVolumeClaimVolume(server.worldVolume),
131 },
132 containers_: {
133 default: kube.Container("default") {
134 image: server.image,
135 command: [
136 "bash", "/home/minecraft/config/start.sh",
137 ],
138 volumeMounts_: {
139 config: { mountPath: "/home/minecraft/config" },
140 world: { mountPath: "/home/minecraft/world" },
141 },
142 ports_: {
143 minecraft: { containerPort: 25565 },
Sergiusz Bazanski7fa92b42020-05-18 01:06:07 +0200144 grpc: { containerPort: 2137 },
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200145 },
146 resources: {
147 requests: {
148 memory: "6G",
149 cpu: "2",
150 },
151 limits: {
152 memory: "6G",
153 cpu: "4",
154 },
155 },
156 },
157 overviewer: kube.Container("overviewer") {
158 image: "halverneus/static-file-server:v1.8.0",
159 env_: {
160 FOLDER: "/home/minecraft/world/overviewer/world",
161 },
162 volumeMounts_: {
163 world: { mountPath: "/home/minecraft/world" },
164 },
165 ports_: {
166 web: { containerPort: 8080 },
167 },
168 },
Sergiusz Bazanskif3169322020-05-18 23:47:37 +0200169 bridge: kube.Container("bridge") {
170 image: "registry.k0.hswaw.net/q3k/minecraft-hscloud-bridge:20200518c",
171 command: [
172 "/personal/q3k/minecraft/plugin/hscloud/bridge/bridge",
173 "-plugin", "127.0.0.1:2137",
174 ],
175 ports_: {
176 bridge: { containerPort: 8081 },
177 },
178 },
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200179 },
180 },
181 },
182 },
183 },
184
185 svc: kube.Service(server.componentName("svc")) {
186 metadata+: server.metadata,
187 target_pod:: server.deploy.spec.template,
188 spec+: {
189 ports: [
190 { name: "minecraft", port: 25565, targetPort: 25565, protocol: "TCP" },
191 { name: "web", port: 80, targetPort: 8080, protocol: "TCP" },
Sergiusz Bazanskif3169322020-05-18 23:47:37 +0200192 { name: "bridge", port: 8080, targetPort: 8081, protocol: "TCP" },
Sergiusz Bazanski7fa92b42020-05-18 01:06:07 +0200193 { name: "grpc", port: 2137, targetPort: 2137, protocol: "TCP" },
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200194 ],
195 type: "LoadBalancer",
196 externalTrafficPolicy: "Local",
197 },
198 },
199 },
200
201 ns: kube.Namespace("minecraft"),
202
203 q3k: {
204 survival: minecraft.server("q3k-survival", "spigot-1.15.2") {
205 properties+: {
206 motd: "wypierdol z polski kropka pe el",
Sergiusz Bazanski6a0b75b2020-05-16 21:05:09 +0200207 "enforce-whitelist": true,
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200208 },
Rafał Hirsz12ab93a2020-05-16 21:02:52 +0200209 worldguardConfig+: {
210 mobs+: {
211 "block-creeper-block-damage": true,
212 },
213 },
Sergiusz Bazanskid1ccdcf2020-05-06 20:34:06 +0200214 },
215 },
216}