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