blob: ce49aa3aa69210bdda9388fe55a8beaec00fc216 [file] [log] [blame]
local kube = import "../../kube/kube.libsonnet";
{
local top = self,
Server(name):: {
local server = self,
local cfg = server.cfg,
cfg:: {
namespace: error "namespace must be set",
storageClassName: "waw-hdd-redundant-3",
image: "openrct2/openrct2-cli:0.3.5.1",
save: error "save must be set",
password: "", # disabled if empty.
admins: {
q3k: "1e44d2ac315b9120b4dad868f1635417b1522073",
},
},
metadata:: {
namespace: cfg.namespace,
},
volumeClaim: kube.PersistentVolumeClaim(name) {
metadata+: server.metadata,
storage:: "5Gi",
storageClass:: cfg.storageClassName,
},
config: kube.ConfigMap(name + "-config") {
metadata+: server.metadata,
// admins with local server as co-admin
local admins = cfg.admins + {
openrct2: "",
},
data: {
"users.json": std.manifestJson([
{ hash: admins[name], name: name, groupId: 0 }
for name in std.objectFields(admins)
]),
"run.sh": |||
set -ex
set -o pipefail
SAVES=/home/openrct2/.config/OpenRCT2/save/autosave
if [ -d "$SAVES" ]; then
echo "Save directory exists, checking for autosaves..."
latest="$SAVES/$(ls -Art "$SAVES" | tail -n 1)"
if [ -f "$latest" ]; then
echo "Found new autosave: $latest"
export OPENRCT2_SAVE="$latest"
fi
fi
echo "Running save $OPENRCT2_SAVE..."
if [ ! -z "$OPENRCT2_PASSWORD" ]; then
echo "Running with password..."
openrct2-cli host "$OPENRCT2_SAVE" --password "$OPENRCT2_PASSWORD"
else
echo "Running without password..."
openrct2-cli host "$OPENRCT2_SAVE"
fi
|||
},
},
deployment: kube.Deployment(name) {
metadata+: server.metadata,
spec+: {
template+: {
spec+: {
volumes_: {
data: kube.PersistentVolumeClaimVolume(server.volumeClaim),
config: kube.ConfigMapVolume(server.config),
},
initContainers: [
kube.Container("configure-users") {
image: cfg.image,
command: [
"/bin/bash", "-c",
"cp /config/users.json /home/openrct2/.config/OpenRCT2/users.json",
],
volumeMounts_: {
data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
config: { mountPath: "/config" },
},
},
],
containers_: {
server: kube.Container("server") {
image: cfg.image,
env_: {
OPENRCT2_SAVE: cfg.save,
OPENRCT2_PASSWORD: cfg.password,
},
command: [
"/bin/bash", "/config/run.sh",
],
ports_: {
client: { containerPort: 11753 },
},
volumeMounts_: {
data: { mountPath: "/home/openrct2/.config/OpenRCT2" },
config: { mountPath: "/config" },
},
resources: {
requests: {
cpu: "500m",
memory: "100Mi",
},
limits: {
cpu: "1",
memory: "1Gi",
},
},
},
},
},
},
},
},
svc: kube.Service(name) {
metadata+: server.metadata,
target_pod:: server.deployment.spec.template,
spec+: {
ports: [
{ name: "client", port: 11753, targetPort: 11753, protocol: "TCP" },
],
type: "LoadBalancer",
externalTrafficPolicy: "Local",
},
},
},
servers: {
alcatraz: top.Server("openrct2-q3k-gravity-gardens") {
cfg+: {
namespace: "personal-q3k",
save: "https://object.ceph-eu.hswaw.net/q3k-personal/53fbf23e507866ae4863f937c93a961ac666a3f588b52492a9642b9384d38324.sv6",
},
},
},
}