Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 7-days-to-die/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: 7-days-to-die
displayName: 7 Days to Die
version: 2.0.3
version: 2.0.4
game: 7-days-to-die
categories: [Survival, Horror, Co-op, Shooter]
summary: 7 Days to Die dedicated server (vinanrra/7dtd-server) with persistent world saves and image-native mod installers. No RCON console or wizard server settings — this image spreads them across directories the operator can't all mount at once.
Expand Down
8 changes: 7 additions & 1 deletion 7-days-to-die/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ metadata:
spec:
displayName: 7 Days to Die
game: 7-days-to-die
version: 2.0.3
version: 2.0.4
categories: [Survival, Horror, Co-op, Shooter]
accentColor: "#8b0000"
description: |
Expand Down Expand Up @@ -136,6 +136,12 @@ spec:
# independent of storage.mountPath, so they still work: install runs
# before the pod is considered ready, and re-runs (fetching fresh) on
# every restart since serverfiles/ isn't persisted either.
#
# No capabilities.actions either (on top of requiring RCON, which this
# template doesn't have): 7 Days to Die's `settime` parameter format is
# undocumented and `settime 0` reportedly crashes the server, so even if
# RCON were wired up here, shipping a time-control action would be a
# guess. No actions.
configSchema:
- name: UNDEAD_LEGACY
displayName: Install Undead Legacy
Expand Down
2 changes: 1 addition & 1 deletion ark-survival-ascended/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: ark-survival-ascended
displayName: "ARK: Survival Ascended"
version: 1.0.6
version: 1.0.7
game: ark-survival-ascended
categories: [Survival, PvP, Co-op, Modded]
summary: "ARK: Survival Ascended dedicated server (mschnitzer/asa-linux-server) with RCON console/moderation. CurseForge mods install via the game's own -mods= launch parameter."
Expand Down
24 changes: 23 additions & 1 deletion ark-survival-ascended/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ metadata:
spec:
displayName: "ARK: Survival Ascended"
game: ark-survival-ascended
version: 1.0.6
version: 1.0.7
categories: [Survival, PvP, Co-op, Modded]
accentColor: "#00b2e2"
description: |
Expand Down Expand Up @@ -144,6 +144,7 @@ spec:
displayName: Broadcast
description: Send a chat message to everyone on the server.
icon: megaphone
group: Server
command: "ServerChat {{.Params.message}}"
params:
- name: message
Expand All @@ -153,7 +154,28 @@ spec:
- id: save-world
displayName: Save world
icon: save
group: World
command: "SaveWorld"
- id: set-time
displayName: Set time of day
description: Time as HH:MM.
icon: clock
group: World
command: "SetTimeOfDay {{.Params.time}}"
params:
- name: time
displayName: Time
type: string
default: "12:00"
required: true
- id: destroy-wild-dinos
displayName: Destroy wild dinos
description: Clears and respawns all wild creatures. Tamed creatures are unaffected.
icon: skull
group: World
danger: true
confirm: true
command: "DestroyWildDinos"
mods:
# ASA has no mods directory and no mods env — its only hook is a
# -mods=<curseforge-id>,... flag on the launch string, which also
Expand Down
2 changes: 1 addition & 1 deletion cs2/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: cs2
displayName: Counter-Strike 2
version: 1.0.3
version: 1.0.4
game: cs2
categories: [Shooter, PvP]
summary: Counter-Strike 2 dedicated server (joedwards32/CS2) with Source RCON and a Metamod/CS# plugins volume.
Expand Down
43 changes: 42 additions & 1 deletion cs2/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ metadata:
spec:
displayName: Counter-Strike 2
game: cs2
version: 1.0.3
version: 1.0.4
categories: [Shooter, PvP]
accentColor: "#f4a900"
description: |
Expand Down Expand Up @@ -94,12 +94,53 @@ spec:
- id: broadcast
displayName: Broadcast
icon: megaphone
group: Server
command: 'say "{{.Params.message}}"'
params:
- name: message
displayName: Message
type: string
required: true
- id: restart-round
displayName: Restart round
icon: rotate-ccw
group: World
command: "mp_restartgame {{.Params.seconds}}"
params:
- name: seconds
displayName: Seconds
type: int
default: "1"
required: true
- id: change-map
displayName: Change map
icon: map
group: World
danger: true
confirm: true
command: "changelevel {{.Params.map}}"
params:
- name: map
displayName: Map
type: string
default: de_dust2
required: true
- id: reload-config
displayName: Exec config
icon: settings
group: Server
command: "exec {{.Params.cfg}}"
params:
- name: cfg
displayName: Config file
type: string
default: server.cfg
required: true
- id: warmup-start
displayName: Start warmup
icon: clock
group: World
command: "mp_warmup_start"
# No version/loader axis for CS2, so mods use the legacy single-path
# form. Metamod stays at game/csgo/addons; CounterStrikeSharp nests one
# level deeper (game/csgo/addons/counterstrikesharp/plugins) but is
Expand Down
87 changes: 87 additions & 0 deletions dayz/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# `dayz` module

Gameplane GameTemplate for DayZ dedicated servers.

## Install

```sh
kubectl apply -f modules/dayz/template.yaml
```

## Image

[`GodBleak/ServerZ`](https://github.com/GodBleak/ServerZ), pulled from
the project's own OCI registry:
`registry.godbleak.dev/godbleak/serverz:latest`. This replaces the
previous draft's `jammsen/dayz-dedicated-server`, which does not exist on
any registry.

**Not Docker Hub or GHCR.** The image is hosted on the project's
self-hosted GitLab container registry — verified reachable and
anonymously pullable (`docker pull` needs no login), but it is a single
maintainer's own infrastructure rather than a major registry. If that's
a concern for your deployment, mirror the image into your own registry
before installing.

## Console and admin

DayZ speaks proprietary **BattlEye RCon** — not Source RCON or telnet.
Gameplane's agent implements it (`rcon.protocol: battleye`, UDP 2305), so
the Console tab and the players list both work. ServerZ only writes a
`beserver_x64.cfg` when one of `BE_IP`/`BE_PORT`/`BE_PASSWORD` is set, so
this template sets all three: the operator injects the generated password
into `BE_PASSWORD`, and `BE_IP` pins the listener to loopback — the agent
sidecar shares the pod's network namespace and reaches it there, while an
RCon port that isn't on a public interface can't be brute-forced.

**No kick/ban buttons, and no quick actions.** BattlEye targets players by
*number* rather than name, so wiring moderation to the name the list
returns would risk hitting the wrong player. Its command set is also too
restricted to verify a broadcast for DayZ specifically, so no quick actions
are declared rather than shipping buttons that may error.

**No lifecycle stop sequence.** DayZ persists continuously rather than on a
save command, so a SIGTERM isn't the data-loss risk it is for Minecraft or
Valheim; a stop sequence that doesn't reliably work across builds would be
a lie. Consider a generous `stopGracePeriodSeconds` on the GameServer.

## Mods

**Workshop mod IDs** is a plain config field (comma-separated Steam
Workshop item IDs) — DayZ mods are `-mod=` launch-parameter driven, not a
panel-managed folder, so there is no `capabilities.mods` block.

**Mods require a one-time interactive Steam login.** The base dedicated
server installs anonymously (no Steam account needed) — but Workshop
downloads need one. ServerZ's recommended flow is a QR code shown in the
container logs (scan with the Steam mobile app); this can't be automated
through the Gameplane dashboard today. To use mods:

1. Set **Workshop mod IDs**, start the server, then `kubectl logs` the
game pod and scan the QR code within its timeout.
2. This template does **not** persist `/root/.steam` (see Storage below),
so a rescheduled/restarted pod loses that login and needs it redone.

Running with no mods needs none of this.

## Ports

| Name | Port | Protocol | Advertised |
| ----- | ----- | -------- | ---------- |
| game | 2302 | UDP | yes |
| query | 27015 | UDP | no |

## Storage

The image documents four separate paths (`/data`, `/overrides`,
`/install`, `/root/.steam`) with no common parent besides `/` — only
`/data` (world/profile state) is mounted here. `/install` is left
ephemeral, so **every pod (re)start re-downloads the full ~10GB+ server
via SteamCMD** — the same tradeoff the shipped `valheim` module already
makes with its own SteamCMD-on-boot image. Default size is 40 GiB.

## No readiness/liveness probes

Every port this image exposes is UDP, and it has no HTTP endpoint —
there is no TCP or HTTP surface to probe, so none is declared. Kubernetes
falls back to treating the pod as ready once the container is running.
2 changes: 1 addition & 1 deletion dayz/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: dayz
displayName: DayZ
version: 1.1.0
version: 1.1.1
game: dayz
categories: [Survival, Shooter, PvP, Horror]
summary: DayZ dedicated server (GodBleak/ServerZ). No RCON is reachable (proprietary BattlEye RCon, not Source RCON) — manage via SIGTERM-safe restarts and config fields.
Expand Down
14 changes: 9 additions & 5 deletions dayz/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ metadata:
spec:
displayName: DayZ
game: dayz
version: 1.0.1
version: 1.1.1
categories: [Survival, Shooter, PvP, Horror]
accentColor: "#bd2020"
description: |
DayZ dedicated server using
[GodBleak/ServerZ](https://github.com/GodBleak/ServerZ). No RCON is
reachable (DayZ uses proprietary BattlEye RCon, not Source RCON) —
manage the server via SIGTERM-safe restarts and the config fields
below.
[GodBleak/ServerZ](https://github.com/GodBleak/ServerZ). Console and
the players list run over BattlEye RCon. Kick/ban aren't offered:
BattlEye targets players by number rather than name, so a button would
risk hitting the wrong one — moderate in-game instead.

image: registry.godbleak.dev/godbleak/serverz:latest

Expand Down Expand Up @@ -110,6 +110,10 @@ spec:
# BattlEye moderation is by player number, not name — the dashboard
# passes what the list returned, so kick/ban are left unset rather
# than shipping commands that would silently target the wrong player.
# No capabilities.actions either: BattlEye RCon's command set is too
# restricted, and a broadcast command ("say -1 <msg>") could not be
# verified for DayZ specifically (BE's "say" semantics vary by game).
# No actions rather than shipping buttons that may error.

# No console/probes block: the game's only ports are UDP (no TCP surface
# to probe), and there is no HTTP endpoint either. Kubernetes falls back
Expand Down
2 changes: 1 addition & 1 deletion dont-starve-together/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: dont-starve-together
displayName: Don't Starve Together
version: 1.0.1
version: 1.1.0
game: dont-starve-together
categories: [Survival, Co-op]
summary: DST dedicated server.
Expand Down
43 changes: 42 additions & 1 deletion dont-starve-together/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ metadata:
spec:
displayName: Don't Starve Together
game: dont-starve-together
version: 1.0.1
version: 1.1.0
categories: [Survival, Co-op]
accentColor: "#cc0000"
description: DST dedicated server.
Expand Down Expand Up @@ -44,6 +44,47 @@ spec:
# shut down cleanly. Note: the stdin attachment may reach the master
# shard or caves shard depending on container startup order.
stop: ["c_save()", "c_shutdown(true)"]
# DST's server console is a Lua console (hence the c_ function-call
# syntax below, not plain-text RCON commands) reached only via stdin —
# there is no RCON (rcon.protocol: none above), so every action sets
# transport: stdin explicitly. Stdin actions are fire-and-forget: the
# agent writes to the container's stdin and returns immediately with no
# command output; any response appears in the Console tab instead.
actions:
- id: broadcast
displayName: Broadcast message
description: Send a chat message to everyone on the server.
icon: megaphone
group: Server
transport: stdin
command: 'c_announce("{{.Params.message}}")'
params:
- name: message
displayName: Message
type: string
required: true
- id: save-world
displayName: Save world
description: Flush the world to disk now.
icon: save
group: World
transport: stdin
command: "c_save()"
- id: rollback
displayName: Rollback world
description: Roll the world back by N day-saves. Players lose progress since then.
icon: rotate-ccw
group: World
danger: true
confirm: true
transport: stdin
command: "c_rollback({{.Params.days}})"
params:
- name: days
displayName: Days
type: int
default: "1"
required: true
configSchema:
- name: DST_CLUSTER_TOKEN
displayName: Cluster Token
Expand Down
2 changes: 1 addition & 1 deletion enshrouded/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: enshrouded
displayName: Enshrouded
version: 1.0.1
version: 1.0.2
game: enshrouded
categories: [Survival, Co-op, Building, Adventure]
summary: Enshrouded dedicated server.
Expand Down
4 changes: 3 additions & 1 deletion enshrouded/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ metadata:
spec:
displayName: Enshrouded
game: enshrouded
version: 1.0.1
version: 1.0.2
categories: [Survival, Co-op, Building, Adventure]
accentColor: "#2a4b7c"
description: Enshrouded dedicated server.
Expand All @@ -27,6 +27,8 @@ spec:
resources:
requests: {cpu: "2", memory: 8Gi}
limits: {cpu: "4", memory: 16Gi}
# No remote console of any kind (no RCON, no stdin), so no capabilities
# block and no actions — there is no transport to run a command over.
rcon:
protocol: none
consoleMode: none
Expand Down
2 changes: 1 addition & 1 deletion factorio/module.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gameplane.local/module/v1
name: factorio
displayName: Factorio (Headless)
version: 1.1.1
version: 1.1.2
game: factorio
categories: [Simulation, Building, Sandbox, Modded, Co-op]
summary: Factorio headless server (factoriotools/factorio) with a stable/latest/pinned channel picker, server-settings managed from the wizard, and a mods volume with in-app Factorio mod portal browse. Console via container stdin.
Expand Down
Loading
Loading