blob: ce49aa3aa69210bdda9388fe55a8beaec00fc216 [file] [log] [blame]
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +01001local kube = import "../../kube/kube.libsonnet";
2
3{
4 local top = self,
5
6 Server(name):: {
7 local server = self,
8 local cfg = server.cfg,
9
10 cfg:: {
11 namespace: error "namespace must be set",
12 storageClassName: "waw-hdd-redundant-3",
13
Serge Bazanskif157fbf2021-12-10 16:09:01 +000014 image: "openrct2/openrct2-cli:0.3.5.1",
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +010015 save: error "save must be set",
16
17 password: "", # disabled if empty.
18
19 admins: {
Serge Bazanskif157fbf2021-12-10 16:09:01 +000020 q3k: "1e44d2ac315b9120b4dad868f1635417b1522073",
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +010021 },
22 },
23
24 metadata:: {
25 namespace: cfg.namespace,
26 },
27
28 volumeClaim: kube.PersistentVolumeClaim(name) {
29 metadata+: server.metadata,
radex36964dc2023-11-24 11:19:46 +010030 storage:: "5Gi",
31 storageClass:: cfg.storageClassName,
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +010032 },
33
34 config: kube.ConfigMap(name + "-config") {
35 metadata+: server.metadata,
Radek Pietruszewskif28cd622023-11-03 17:30:10 +010036
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +010037 // admins with local server as co-admin
38 local admins = cfg.admins + {
39 openrct2: "",
40 },
41 data: {
42 "users.json": std.manifestJson([
43 { hash: admins[name], name: name, groupId: 0 }
44 for name in std.objectFields(admins)
45 ]),
46 "run.sh": |||
47 set -ex
48 set -o pipefail
49
50 SAVES=/home/openrct2/.config/OpenRCT2/save/autosave
51 if [ -d "$SAVES" ]; then
52 echo "Save directory exists, checking for autosaves..."
53 latest="$SAVES/$(ls -Art "$SAVES" | tail -n 1)"
54 if [ -f "$latest" ]; then
55 echo "Found new autosave: $latest"
56 export OPENRCT2_SAVE="$latest"
57 fi
58 fi
59
60 echo "Running save $OPENRCT2_SAVE..."
61 if [ ! -z "$OPENRCT2_PASSWORD" ]; then
62 echo "Running with password..."
63 openrct2-cli host "$OPENRCT2_SAVE" --password "$OPENRCT2_PASSWORD"
64 else
65 echo "Running without password..."
66 openrct2-cli host "$OPENRCT2_SAVE"
67 fi
68 |||
69 },
70 },
71
72 deployment: kube.Deployment(name) {
73 metadata+: server.metadata,
74 spec+: {
75 template+: {
76 spec+: {
77 volumes_: {
78 data: kube.PersistentVolumeClaimVolume(server.volumeClaim),
79 config: kube.ConfigMapVolume(server.config),
80 },
81
82 initContainers: [
83 kube.Container("configure-users") {
84 image: cfg.image,
85 command: [
86 "/bin/bash", "-c",
87 "cp /config/users.json /home/openrct2/.config/OpenRCT2/users.json",
88 ],
89 volumeMounts_: {
90 data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
91 config: { mountPath: "/config" },
92 },
93 },
94 ],
95 containers_: {
96 server: kube.Container("server") {
97 image: cfg.image,
98 env_: {
99 OPENRCT2_SAVE: cfg.save,
100 OPENRCT2_PASSWORD: cfg.password,
101 },
102 command: [
103 "/bin/bash", "/config/run.sh",
104 ],
105 ports_: {
106 client: { containerPort: 11753 },
107 },
108 volumeMounts_: {
109 data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
110 config: { mountPath: "/config" },
111 },
112 resources: {
113 requests: {
114 cpu: "500m",
115 memory: "100Mi",
116 },
117 limits: {
118 cpu: "1",
119 memory: "1Gi",
120 },
121 },
122 },
123 },
124 },
125 },
126 },
127 },
128
129 svc: kube.Service(name) {
130 metadata+: server.metadata,
131 target_pod:: server.deployment.spec.template,
132 spec+: {
133 ports: [
134 { name: "client", port: 11753, targetPort: 11753, protocol: "TCP" },
135 ],
136 type: "LoadBalancer",
Sergiusz Bazanski31058182019-11-24 02:38:17 +0100137 externalTrafficPolicy: "Local",
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +0100138 },
139 },
140 },
141
142 servers: {
Serge Bazanskif157fbf2021-12-10 16:09:01 +0000143 alcatraz: top.Server("openrct2-q3k-gravity-gardens") {
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +0100144 cfg+: {
145 namespace: "personal-q3k",
Serge Bazanskif157fbf2021-12-10 16:09:01 +0000146 save: "https://object.ceph-eu.hswaw.net/q3k-personal/53fbf23e507866ae4863f937c93a961ac666a3f588b52492a9642b9384d38324.sv6",
Sergiusz Bazanski262c6e02019-11-24 02:19:48 +0100147 },
148 },
149 },
150}