[PR #1] [MERGED] feat: optional dedicated data volume for GoW state (keep game libraries off root) #1

Closed
opened 2026-10-15 12:46:19 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/ansible-role-run-gow/pull/1
Author: @JBailes
Created: 6/5/2026
Status: ✅ Merged
Merged: 6/5/2026
Merged by: @JBailes

Base: main ← Head: feat/optional-data-volume


📝 Commits (1)

  • 4f39d95 feat: optional dedicated data volume for GoW state (keep game libraries off root)

📊 Changes

3 files changed (+101 additions, -2 deletions)

View changed files

📝 README.md (+26 -0)
📝 defaults/main.yml (+20 -1)
📝 tasks/main.yml (+55 -1)

📄 Description

Why

GoW's persistent state (gow_paths.state / local_state) holds app data and game libraries — tens to hundreds of GB. On a host where that path is on the OS root filesystem, a game download silently fills root and destabilizes the whole node (exactly what happened on a PVE box where Wolf's profile-data sat on a 26 G root pool).

What

An optional, disabled-by-default gow_data_volume. When enabled, the role — before any state is created/written — formats (optional, only a blank device, never wipes data) and mounts an operator-provided block device at the state path, persisted in /etc/fstab:

gow_data_volume:
  enabled: true
  device: /dev/storage/gow-data
  mountpoint: ""        # empty = gow_paths.state
  fstype: ext4
  format: true
  mount_opts: "defaults,nofail"

The block device is operator-provided (LV/partition/disk); for an LVM thin pool: lvcreate -V 1024G --thinpool <pool> -n gow-data <vg>.

Implementation: builtin modules only (no new collection deps), idempotent — probe-before-format, mountpoint guard, fstab keyed by mountpoint. Disabled by default → existing deployments unchanged.

Also

Fixes a pre-existing one-line indentation error in tasks/main.yml (the First time setup when: was indented 3 spaces, making the whole file fail to parse as YAML). Without it the role — including this new block — can't load. Verified both defaults/main.yml and tasks/main.yml now parse cleanly.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/ansible-role-run-gow/pull/1 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/5/2026 **Status:** ✅ Merged **Merged:** 6/5/2026 **Merged by:** [@JBailes](https://github.com/JBailes) **Base:** `main` ← **Head:** `feat/optional-data-volume` --- ### 📝 Commits (1) - [`4f39d95`](https://github.com/games-on-whales/ansible-role-run-gow/commit/4f39d955af98329a6e9d58bdbf2b6002678ef7b7) feat: optional dedicated data volume for GoW state (keep game libraries off root) ### 📊 Changes **3 files changed** (+101 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `README.md` (+26 -0) 📝 `defaults/main.yml` (+20 -1) 📝 `tasks/main.yml` (+55 -1) </details> ### 📄 Description ## Why GoW's persistent state (`gow_paths.state` / `local_state`) holds app data and **game libraries** — tens to hundreds of GB. On a host where that path is on the OS root filesystem, a game download silently fills root and destabilizes the whole node (exactly what happened on a PVE box where Wolf's `profile-data` sat on a 26 G root pool). ## What An optional, **disabled-by-default** `gow_data_volume`. When enabled, the role — before any state is created/written — formats (optional, **only a blank device**, never wipes data) and mounts an operator-provided block device at the state path, persisted in `/etc/fstab`: ```yaml gow_data_volume: enabled: true device: /dev/storage/gow-data mountpoint: "" # empty = gow_paths.state fstype: ext4 format: true mount_opts: "defaults,nofail" ``` The block device is operator-provided (LV/partition/disk); for an LVM thin pool: `lvcreate -V 1024G --thinpool <pool> -n gow-data <vg>`. Implementation: **builtin modules only** (no new collection deps), idempotent — probe-before-format, mountpoint guard, fstab keyed by mountpoint. Disabled by default → existing deployments unchanged. ## Also Fixes a pre-existing one-line indentation error in `tasks/main.yml` (the *First time setup* `when:` was indented 3 spaces, making the whole file fail to parse as YAML). Without it the role — including this new block — can't load. Verified both `defaults/main.yml` and `tasks/main.yml` now parse cleanly. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 12:46:19 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/ansible-role-run-gow#1
No description provided.