Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 1 | local kube = import "../../../kube/kube.libsonnet"; |
Rafał Hirsz | 12ab93a | 2020-05-16 21:02:52 +0200 | [diff] [blame] | 2 | local defaultWorldguardConfig = import "worldguard.libsonnet"; |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 3 | |
| 4 | { |
| 5 | local minecraft = self, |
| 6 | versions:: { |
Serge Bazanski | bbb1623 | 2020-08-01 12:04:04 +0200 | [diff] [blame] | 7 | "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 Bazanski | 9173333 | 2020-12-06 18:57:51 +0100 | [diff] [blame] | 9 | "paper-1.16.4": "registry.k0.hswaw.net/q3k/minecraft:paper-1.16.4-r1", |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 10 | "paper-1.16.5": "registry.k0.hswaw.net/q3k/minecraft:paper-1.16.5-r2", |
Remigiusz Marcinkiewicz | ff79daa | 2021-07-21 15:51:59 +0000 | [diff] [blame^] | 11 | "vanilla-1.16.5": "registry.k0.hswaw.net/enleth/minectaft:vanilla-1.16.5", |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 12 | }, |
| 13 | server(name, version):: { |
| 14 | local server = self, |
| 15 | name:: name, |
| 16 | version:: version, |
| 17 | image:: minecraft.versions[server.version], |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 18 | worldedit:: true, |
| 19 | overviewer:: true, |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 20 | |
| 21 | metadata:: { |
| 22 | namespace: "minecraft", |
| 23 | }, |
| 24 | |
| 25 | componentName(component):: "%s-%s" % [server.name, component], |
| 26 | |
| 27 | properties:: { |
| 28 | "spawn-protection": 16, |
| 29 | "max-tick-time": 60000, |
| 30 | "query.port": 25565, |
| 31 | "generator-settings": "", |
| 32 | "force-gamemode": false, |
| 33 | "allow-nether": true, |
| 34 | "enforce-whitelist": false, |
| 35 | "gamemode": "survival", |
| 36 | "broadcast-console-to-ops": true, |
| 37 | "enable-query": false, |
| 38 | "player-idle-timeout": 0, |
| 39 | "difficulty": "easy", |
| 40 | "broadcast-rcon-to-ops": true, |
| 41 | "spawn-monsters": true, |
| 42 | "op-permission-level": 4, |
| 43 | "pvp": true, |
| 44 | "snooper-enabled": true, |
| 45 | "level-type": "default", |
| 46 | "hardcore": false, |
| 47 | "enable-command-block": false, |
| 48 | "network-compression-threshold": 256, |
| 49 | "max-players": 20, |
| 50 | "max-world-size": 29999984, |
| 51 | "resource-pack-sha1": "", |
| 52 | "function-permission-level": 2, |
| 53 | "rcon.port": 25575, |
| 54 | "server-port": 25565, |
| 55 | "debug": false, |
| 56 | "server-ip": "", |
| 57 | "spawn-npcs": true, |
| 58 | "allow-flight": false, |
| 59 | "level-name": "world", |
| 60 | "view-distance": 10, |
| 61 | "resource-pack": "", |
| 62 | "spawn-animals": true, |
| 63 | "white-list": false, |
| 64 | "rcon.password": "", |
| 65 | "generate-structures": true, |
| 66 | "online-mode": true, |
| 67 | "max-build-height": 256, |
| 68 | "level-seed": "", |
| 69 | "prevent-proxy-connections": false, |
| 70 | "use-native-transport": true, |
| 71 | "motd": "A Minecraft Server", |
| 72 | "enable-rcon": false, |
| 73 | }, |
| 74 | |
Rafał Hirsz | 12ab93a | 2020-05-16 21:02:52 +0200 | [diff] [blame] | 75 | worldguardConfig:: defaultWorldguardConfig, |
| 76 | |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 77 | startSteps:: [ |
| 78 | ] + (if server.worldedit then [ |
| 79 | "mkdir -p plugins/WorldGuard", |
| 80 | "cp /home/minecraft/worldedit-*.jar plugins", |
| 81 | "cp /home/minecraft/worldguard-*.jar plugins", |
| 82 | "cp /home/minecraft/config/worldguard_config.yaml plugins/WorldGuard/config.yml", |
| 83 | ] else []), |
| 84 | |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 85 | startsh:: ||| |
| 86 | #!/usr/bin/env bash |
| 87 | cd /home/minecraft/world |
| 88 | cp /home/minecraft/config/server.properties . |
Serge Bazanski | bbb1623 | 2020-08-01 12:04:04 +0200 | [diff] [blame] | 89 | cp /home/minecraft/server.jar . |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 90 | echo "eula=true" > eula.txt |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 91 | %s |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 92 | |
| 93 | bash /home/minecraft/config/overviewer.sh & |
Serge Bazanski | bbb1623 | 2020-08-01 12:04:04 +0200 | [diff] [blame] | 94 | exec java -Xmx4G -Xms4G -jar server.jar |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 95 | ||| % [std.join("\n", server.startSteps)], |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 96 | |
| 97 | overviewersh:: ||| |
| 98 | #!/usr/bin/env bash |
| 99 | mkdir -p overviewer/world |
| 100 | sleep 60 |
| 101 | while true; do |
| 102 | echo "Rendering Overviewer map..." |
| 103 | overviewer.py -p 1 --rendermodes=normal,lighting,smooth-lighting,cave world overviewer/world |
| 104 | echo "Done." |
| 105 | sleep 900 |
| 106 | done |
| 107 | |||, |
| 108 | |
| 109 | secretProperties: kube.Secret(server.componentName("properties")) { |
| 110 | metadata+: server.metadata, |
| 111 | data: { |
| 112 | local properties = std.join("\n", ["%s=%s" % [k, std.toString(server.properties[k])] for k in std.objectFields(server.properties)]), |
| 113 | "server.properties": std.base64(properties), |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 114 | "start.sh": std.base64(server.startsh), |
| 115 | } + (if server.worldedit then { |
Rafał Hirsz | 12ab93a | 2020-05-16 21:02:52 +0200 | [diff] [blame] | 116 | local worldguardConfig = std.manifestYamlDoc(server.worldguardConfig), |
| 117 | "worldguard_config.yaml": std.base64(worldguardConfig), |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 118 | } else {} )+ (if server.overviewer then { |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 119 | "overviewer.sh": std.base64(server.overviewersh), |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 120 | } else {}), |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 121 | }, |
| 122 | |
| 123 | worldVolume: kube.PersistentVolumeClaim(server.componentName("world")) { |
| 124 | metadata+: server.metadata, |
| 125 | spec+: { |
| 126 | storageClassName: "waw-hdd-redundant-3", |
| 127 | accessModes: ["ReadWriteOnce"], |
| 128 | resources: { |
| 129 | requests: { |
| 130 | storage: "10Gi", |
| 131 | }, |
| 132 | }, |
| 133 | }, |
| 134 | }, |
| 135 | |
| 136 | deploy: kube.Deployment(server.componentName("deploy")) { |
| 137 | metadata+: server.metadata, |
| 138 | spec+: { |
| 139 | template+: { |
| 140 | spec+: { |
| 141 | volumes_: { |
| 142 | config: kube.SecretVolume(server.secretProperties), |
| 143 | world: kube.PersistentVolumeClaimVolume(server.worldVolume), |
| 144 | }, |
| 145 | containers_: { |
| 146 | default: kube.Container("default") { |
| 147 | image: server.image, |
| 148 | command: [ |
| 149 | "bash", "/home/minecraft/config/start.sh", |
| 150 | ], |
| 151 | volumeMounts_: { |
| 152 | config: { mountPath: "/home/minecraft/config" }, |
| 153 | world: { mountPath: "/home/minecraft/world" }, |
| 154 | }, |
| 155 | ports_: { |
| 156 | minecraft: { containerPort: 25565 }, |
Sergiusz Bazanski | 7fa92b4 | 2020-05-18 01:06:07 +0200 | [diff] [blame] | 157 | grpc: { containerPort: 2137 }, |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 158 | }, |
| 159 | resources: { |
| 160 | requests: { |
| 161 | memory: "6G", |
| 162 | cpu: "2", |
| 163 | }, |
| 164 | limits: { |
| 165 | memory: "6G", |
| 166 | cpu: "4", |
| 167 | }, |
| 168 | }, |
| 169 | }, |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 170 | bridge: kube.Container("bridge") { |
| 171 | image: "registry.k0.hswaw.net/q3k/minecraft-hscloud-bridge:20200518c", |
| 172 | command: [ |
| 173 | "/personal/q3k/minecraft/plugin/hscloud/bridge/bridge", |
| 174 | "-plugin", "127.0.0.1:2137", |
| 175 | ], |
| 176 | ports_: { |
| 177 | bridge: { containerPort: 8081 }, |
| 178 | }, |
| 179 | }, |
| 180 | } + (if server.overviewer then { |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 181 | overviewer: kube.Container("overviewer") { |
| 182 | image: "halverneus/static-file-server:v1.8.0", |
| 183 | env_: { |
| 184 | FOLDER: "/home/minecraft/world/overviewer/world", |
| 185 | }, |
| 186 | volumeMounts_: { |
| 187 | world: { mountPath: "/home/minecraft/world" }, |
| 188 | }, |
| 189 | ports_: { |
| 190 | web: { containerPort: 8080 }, |
| 191 | }, |
| 192 | }, |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 193 | } else {}), |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 194 | }, |
| 195 | }, |
| 196 | }, |
| 197 | }, |
| 198 | |
| 199 | svc: kube.Service(server.componentName("svc")) { |
| 200 | metadata+: server.metadata, |
| 201 | target_pod:: server.deploy.spec.template, |
| 202 | spec+: { |
| 203 | ports: [ |
| 204 | { name: "minecraft", port: 25565, targetPort: 25565, protocol: "TCP" }, |
| 205 | { name: "web", port: 80, targetPort: 8080, protocol: "TCP" }, |
Sergiusz Bazanski | f316932 | 2020-05-18 23:47:37 +0200 | [diff] [blame] | 206 | { name: "bridge", port: 8080, targetPort: 8081, protocol: "TCP" }, |
Sergiusz Bazanski | 7fa92b4 | 2020-05-18 01:06:07 +0200 | [diff] [blame] | 207 | { name: "grpc", port: 2137, targetPort: 2137, protocol: "TCP" }, |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 208 | ], |
| 209 | type: "LoadBalancer", |
| 210 | externalTrafficPolicy: "Local", |
| 211 | }, |
| 212 | }, |
| 213 | }, |
| 214 | |
| 215 | ns: kube.Namespace("minecraft"), |
| 216 | |
Serge Bazanski | f0a38ba | 2021-07-21 14:56:25 +0000 | [diff] [blame] | 217 | admins: minecraft.ns.Contain(kube.RoleBinding("admins")) { |
| 218 | roleRef: { |
| 219 | apiGroup: "rbac.authorization.k8s.io", |
| 220 | kind: "ClusterRole", |
| 221 | name: "system:admin-namespace", |
| 222 | }, |
| 223 | subjects: [ |
| 224 | kube.User("enleth@hackerspace.pl"), |
| 225 | ], |
| 226 | }, |
| 227 | |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 228 | q3k: { |
Remigiusz Marcinkiewicz | ff79daa | 2021-07-21 15:51:59 +0000 | [diff] [blame^] | 229 | "nova-arcana": minecraft.server("q3k-nova-arcana", "vanilla-1.16.5") { |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 230 | overviewer: false, |
| 231 | worldedit: false, |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 232 | properties+: { |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 233 | motd: "Nova Arcana V1.1.4", |
| 234 | //"enforce-whitelist": true, |
| 235 | "enable-rcon": "true", |
| 236 | "rcon.password": "dupa.8", |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 237 | }, |
Serge Bazanski | 4afed98 | 2021-07-21 14:40:49 +0000 | [diff] [blame] | 238 | startSteps+: [ |
| 239 | ||| |
| 240 | if [ ! -e world/map-installed.txt ]; then |
| 241 | set -e -x |
| 242 | mkdir -p world |
| 243 | cd world |
| 244 | rm -rf * |
| 245 | wget https://object.ceph-waw3.hswaw.net/q3k-personal/f1a73ad0518a2629a5bed072a7de4e4534a3c89705d6cea2f203a05cccd01634.zip -O map.zip |
| 246 | unzip -o map.zip |
| 247 | mv Untold*/* . |
| 248 | rm -rf Untold* |
| 249 | rm map.zip |
| 250 | touch map-installed.txt |
| 251 | ls -la |
| 252 | cd .. |
| 253 | set +e +x |
| 254 | fi |
| 255 | ||| |
| 256 | ], |
Sergiusz Bazanski | d1ccdcf | 2020-05-06 20:34:06 +0200 | [diff] [blame] | 257 | }, |
| 258 | }, |
| 259 | } |