Best server
Change-Id: I3da422644b3eb49d23d94f4ea719e2d0c2b0fb3d
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1151
diff --git a/personal/noisersup/openrct2.jsonnet b/personal/noisersup/openrct2.jsonnet
new file mode 100644
index 0000000..cd9eec0
--- /dev/null
+++ b/personal/noisersup/openrct2.jsonnet
@@ -0,0 +1,157 @@
+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.2.4",
+ save: error "save must be set",
+
+ password: "", # disabled if empty.
+
+ admins: {
+ q3k: "a6a3727038eb53b35ad28ba88dc80810f94c6c3d",
+ },
+ },
+
+ 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-alcatraz") {
+ cfg+: {
+ namespace: "personal-noisersup",
+ save: "https://q3k.org/u/480883b2d44658523dcf6561d71d7e3eb91be13253e2bc96378f86a62b380a97.sv6",
+ },
+ },
+ },
+}