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
3 changes: 3 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ jobs:
- name: Check flush-only backup capabilities
run: python3 test-backup-capabilities.py

- name: Check placement of amd64-only game images
run: python3 test-game-placement.py

- name: Run module preflight validator
run: python3 validate.py

Expand Down
6 changes: 6 additions & 0 deletions .schema/gametemplate.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1822,6 +1822,12 @@
}
]
},
"requiredNodeArchitecture": {
"description": "RequiredNodeArchitecture is the kubernetes.io/arch label required by\nthe game executable (for example, amd64). Omit for portable templates.\nThe requirement also applies to version selections and image overrides.",
"maxLength": 63,
"pattern": "^[a-z0-9]+$",
"type": "string"
},
"resources": {
"description": "Resources are the default compute resources for the game container.",
"properties": {
Expand Down
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ OCI game templates for Gameplane. Each `<name>/` folder holds `module.yaml`,
`template.yaml`, `README.md` and optional `icon.png`, `specs.md`, `samples/`.
`build.sh push` publishes them; `validate.py` preflight-checks them in CI.

## Mixed-architecture clusters

Squad, The Isle, Mount & Blade II: Bannerlord, Nuclear Option and ARK: Survival
Evolved pin Linux amd64 images. Their templates require an amd64 game worker.
Before installing these revisions, upgrade the GameTemplate CRD and operator to
a release that supports `spec.requiredNodeArchitecture`. This also applies when
installing a template directly with `kubectl apply`, which bypasses the module
version check.

Existing module digests retain their original placement rules. Until you
upgrade those templates, set `spec.nodeSelector` on the affected GameServers
to include `kubernetes.io/arch: amd64` and ensure the selected worker can mount
the game's persistent volumes.

## Translations

A module can ship translations in `<name>/locales/<tag>.json` (flat JSON,
Expand Down
4 changes: 2 additions & 2 deletions ark-survival-evolved/module.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: gameplane.local/module/v1
name: ark-survival-evolved
displayName: "ARK: Survival Evolved"
version: 2.0.1
version: 2.0.2
game: ark-survival-evolved
categories: [Survival, Open World, Multiplayer, Dinosaurs]
summary: "ARK: Survival Evolved with Source RCON, cluster travel, and persistent worlds. For 1.x upgrades, stop and back up first. Move 1.0 saves to /app/server/ShooterGame/Saved or the 1.1 install to /app/server, and transfers to /cluster."
homepage: https://survivetheark.com/
license: MIT
gameplaneMinVersion: 0.2.0-beta.7
gameplaneMinVersion: 0.4.1
3 changes: 2 additions & 1 deletion ark-survival-evolved/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ metadata:
spec:
displayName: "ARK: Survival Evolved"
game: ark-survival-evolved
version: 2.0.1
version: 2.0.2
requiredNodeArchitecture: amd64
categories: [Survival, Open World, Multiplayer, Dinosaurs]
accentColor: "#00b2e2"
description: |
Expand Down
4 changes: 2 additions & 2 deletions mount-and-blade-2-bannerlord/module.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: gameplane.local/module/v1
name: mount-and-blade-2-bannerlord
displayName: "Mount & Blade II: Bannerlord"
version: 1.1.0
version: 1.1.1
game: mount-and-blade-2-bannerlord
categories: [Action, RPG, Medieval, Multiplayer]
summary: "Mount & Blade II: Bannerlord dedicated multiplayer server with PTY console and match-based skirmish hosting."
homepage: https://www.taleworlds.com/en/Games/Bannerlord
license: MIT
gameplaneMinVersion: 0.2.0-beta.7
gameplaneMinVersion: 0.4.1
3 changes: 2 additions & 1 deletion mount-and-blade-2-bannerlord/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ metadata:
spec:
displayName: "Mount & Blade II: Bannerlord"
game: mount-and-blade-2-bannerlord
version: 1.1.0
version: 1.1.1
requiredNodeArchitecture: amd64
categories: [Action, RPG, Medieval, Multiplayer]
accentColor: "#b45309"
description: |
Expand Down
4 changes: 2 additions & 2 deletions nuclear-option/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,5 @@ Backups capture the entire `/data` volume, so the game config and the ban list (

## Version

- **Module version**: 1.1.0
- **Requires Gameplane**: ≥ 0.2.0-beta.7
- **Module version**: 1.1.1
- **Requires Gameplane**: ≥ 0.4.1
4 changes: 2 additions & 2 deletions nuclear-option/module.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: gameplane.local/module/v1
name: nuclear-option
displayName: Nuclear Option
version: 1.1.0
version: 1.1.1
game: nuclear-option
categories: [Simulation, PvP]
summary: Nuclear Option dedicated server with remote-command console, runtime-downloaded via SteamCMD.
homepage: https://www.nuclearoption.com/
license: MIT
gameplaneMinVersion: 0.2.0-beta.7
gameplaneMinVersion: 0.4.1
3 changes: 2 additions & 1 deletion nuclear-option/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ spec:
displayName: Nuclear Option
game: nuclear-option
# Kept in lockstep with module.yaml's bundle version.
version: 1.1.0
version: 1.1.1
requiredNodeArchitecture: amd64
categories: [Simulation, PvP]
# Brand color for the dashboard.
accentColor: "#ff6b6b"
Expand Down
4 changes: 2 additions & 2 deletions squad/module.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: gameplane.local/module/v1
name: squad
displayName: Squad
version: 1.1.0
version: 1.1.1
game: squad
categories: [Shooter, Tactical, Military, Multiplayer]
summary: Squad dedicated server (Unreal Engine 4) with Source-family RCON console, match-based rotation, and Steam Workshop modding support.
homepage: https://joinsquad.com/
license: MIT
gameplaneMinVersion: 0.2.0-beta.7
gameplaneMinVersion: 0.4.1
3 changes: 2 additions & 1 deletion squad/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ metadata:
spec:
displayName: Squad
game: squad
version: 1.1.0
version: 1.1.1
requiredNodeArchitecture: amd64
categories: [Shooter, Tactical, Military, Multiplayer]
accentColor: "#2d3748"
description: |
Expand Down
20 changes: 20 additions & 0 deletions test-game-placement.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"""Keep the audited x86 game images on compatible workers."""

from pathlib import Path
import unittest

import yaml


class GamePlacementTest(unittest.TestCase):
def test_amd64_only_games_require_amd64_workers(self):
for game in ("ark-survival-evolved", "mount-and-blade-2-bannerlord",
"nuclear-option", "squad", "the-isle"):
with self.subTest(game=game):
path = Path(__file__).parent / game / "template.yaml"
spec = yaml.safe_load(path.read_text(encoding="utf-8"))["spec"]
self.assertEqual(spec.get("requiredNodeArchitecture"), "amd64")


if __name__ == "__main__":
unittest.main()
4 changes: 2 additions & 2 deletions the-isle/module.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: gameplane.local/module/v1
name: the-isle
displayName: The Isle
version: 1.1.0
version: 1.1.1
game: the-isle
categories: [Survival, Dinosaurs, Open World, Multiplayer]
summary: The Isle dedicated server (Unreal Engine 4) with Source RCON remote administration and persistent world save management.
homepage: https://findtheisle.com/
license: MIT
gameplaneMinVersion: 0.2.0-beta.7
gameplaneMinVersion: 0.4.1
3 changes: 2 additions & 1 deletion the-isle/template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ metadata:
spec:
displayName: The Isle
game: the-isle
version: 1.1.0
version: 1.1.1
requiredNodeArchitecture: amd64
categories: [Survival, Dinosaurs, Open World, Multiplayer]
accentColor: "#22543d"
description: |
Expand Down
Loading