forked from hswaw/hscloud
Serge Bazanski
f157fbfb08
Change-Id: If8130391e17b87aa4396983d3aefa43c477a4f55 Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1203
157 lines
5.7 KiB
Text
157 lines
5.7 KiB
Text
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,
|
|
spec+: {
|
|
storageClassName: cfg.storageClassName,
|
|
accessModes: [ "ReadWriteOnce" ],
|
|
resources: {
|
|
requests: {
|
|
storage: "5Gi",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
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",
|
|
},
|
|
},
|
|
},
|
|
}
|