An ansible role to run GOW
  • Dockerfile 100%
Find a file
JBailes e8de3eb340
feat: optional dedicated data volume for GoW state (keep game libraries off root) (#1)
GoW's persistent 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.

Add an optional, disabled-by-default `gow_data_volume`: when enabled, the role
formats (only a blank device — never wipes data) and mounts an operator-provided
block device at the state path, persisted in /etc/fstab, before any state is
written. Builtin modules only; idempotent (probe-before-format, mountpoint
guard, fstab keyed by mountpoint).

Also fixes a pre-existing one-line indentation error in tasks/main.yml (the
First time setup `when:` was indented 3 spaces, which made the whole file fail
to parse as YAML) — without it the role, including this new block, can't load.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 10:07:13 +02:00
defaults feat: optional dedicated data volume for GoW state (keep game libraries off root) (#1) 2026-06-05 10:07:13 +02:00
handlers feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
meta feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
molecule/default feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
tasks feat: optional dedicated data volume for GoW state (keep game libraries off root) (#1) 2026-06-05 10:07:13 +02:00
tests feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
vars feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
.gitignore feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
.travis.yml feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
.yamllint feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
LICENSE feat: basic ansible task to configure and install GOW 2023-02-17 15:53:43 +00:00
README.md feat: optional dedicated data volume for GoW state (keep game libraries off root) (#1) 2026-06-05 10:07:13 +02:00

Role Name

A brief description of the role goes here.

Requirements

Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.

Role Variables

A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.

gow_data_volume — keep persistent state off the OS root

GoW's persistent state (gow_paths.state, i.e. local_state) holds app data and game libraries — tens to hundreds of GB. Left on the OS root filesystem, a game download silently fills root and destabilizes the whole host. Set gow_data_volume to mount a dedicated block device at the state path (persisted in /etc/fstab) before any state is written:

gow_data_volume:
  enabled: true
  device: /dev/storage/gow-data   # operator-provided block device (LV/partition/disk)
  mountpoint: ""                  # empty = gow_paths.state
  fstype: ext4
  format: true                    # mkfs — only acts on a BLANK device, never wipes data
  mount_opts: "defaults,nofail"

The block device is operator-provided. For an LVM thin pool, e.g.:

lvcreate -V 1024G --thinpool <thinpool> -n gow-data <vg>

Disabled by default (enabled: false), so existing deployments are unchanged.

Dependencies

A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.

Example Playbook

Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:

- hosts: servers
  roles:
     - { role: username.rolename, x: 42 }

License

MIT

Author Information

An optional section for the role authors to include contact information, or a website (HTML is not allowed).