[PR #55] Wolf-Agent DRA: Implementation #56

Open
opened 2026-10-15 12:47:03 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/fenrir/pull/55
Author: @axolotlite
Created: 8/14/2026
Status: 🔄 Open

Base: staging ← Head: feature/wolf-dra-sessions


📝 Commits (10+)

  • eb7e0d3 [wolf-dra] initial implementation
  • 5b49974 [lint] apply linter recommendations
  • 031c68b [dev] add resources for testing the wolf-dra
  • eb41900 [dev] add initial readmes for wolf dra manual resources
  • f4d2222 [wolf-dra] add pulse audio mount
  • abd182d [wolf-dra] add wolf-dra standalone deployment and firefox app pod manifests
  • 56c2854 [wolf-dra] add informers to watch for status updates, so it can join sessions to lobbies
  • d9c21e6 [wolf-dra] update resource manifests
  • 5d32f8d [wolf-dra] rename provided resource into lobby, instead of wayland
  • 9b35c62 [dev] rename provided resource into lobby, instead of wayland in the manifests

📊 Changes

40 files changed (+3197 additions, -292 deletions)

View changed files

📝 .dockerignore (+0 -1)
📝 Dockerfile.dev (+4 -1)
📝 cmd/wolf-agent/main.go (+245 -178)
📝 crds/direwolf.games-on-whales.github.io_pairings.yaml (+25 -0)
📝 crds/direwolf.games-on-whales.github.io_sessions.yaml (+27 -0)
➕ hack/deploy/01-wolf-agent-standalone.yaml (+234 -0)
📝 hack/deploy/01-wolf-agent.yaml (+140 -17)
📝 hack/deploy/02-moonlight-proxy.yaml (+0 -61)
📝 hack/deploy/03-misc.yaml (+240 -1)
➕ hack/resources/device_classes/README.md (+6 -0)
➕ hack/resources/device_classes/default_device_class.yaml (+11 -0)
➕ hack/resources/device_classes/multi_gpu_class.yaml (+22 -0)
➕ hack/resources/dra_tests/README.md (+8 -0)
➕ hack/resources/dra_tests/deployment_resource_claim_template.yaml (+63 -0)
➕ hack/resources/dra_tests/firefox.yaml (+117 -0)
➕ hack/resources/dra_tests/firefox_session.yaml (+40 -0)
📝 hack/update-codegen.sh (+1 -1)
📝 pkg/api/v1alpha1/pairing.go (+14 -0)
📝 pkg/api/v1alpha1/session.go (+7 -0)
📝 pkg/api/v1alpha1/zz_generated.deepcopy.go (+34 -3)

...and 20 more files

📄 Description

The wolf-agent DRA device manages a wolf instance, it gets called by the kubelet to create a wayland + pulse audio sockets for a statefulset pod launched by the lobby controller.
Once that resourceClaim is fulfilled, it will recieve a session update from the direwolf-operator's session controller informing it that the user session belongs to it's lobby, triggered Lobby Join for the session.

Lobbies

Each wolf-agent interacts with resourceClaims, which represent a lobby, it doesn't interact with the lobby CRD directly, because the lobby CRD is a cluster wide resource, and the DRA is node specific, meaning that it only needs to treat the resourceClaims as a lobby, without directly interfering with the direwolf-operator.
Instead it tracks it's own lobbies through the registered ResourceClaims.

Sessions

The DRA driver will listen to session creation/update api calls for a lobbyName, checking if this session belongs to any of it's managed lobbies, once a matching lobby name is found a session is creating on this wolf instance, before updating the session CRD's status with WolfSessionID and waiting for the direwolf operator to set the StreamStarted to true, in order to join the session to the lobby.
After the user joins the stream in their moonlight-client, the operator updates the session triggering the join in the wolf-dra.

Basically, the wolf-agent DRA is responsible for lobby creation and session controller.


🔄 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/fenrir/pull/55 **Author:** [@axolotlite](https://github.com/axolotlite) **Created:** 8/14/2026 **Status:** 🔄 Open **Base:** `staging` ← **Head:** `feature/wolf-dra-sessions` --- ### 📝 Commits (10+) - [`eb7e0d3`](https://github.com/games-on-whales/fenrir/commit/eb7e0d3b4c2e5c2e4e483f70ec2325713494f612) [wolf-dra] initial implementation - [`5b49974`](https://github.com/games-on-whales/fenrir/commit/5b499743c6af1ccde63057d1500d5f0eb1ce0886) [lint] apply linter recommendations - [`031c68b`](https://github.com/games-on-whales/fenrir/commit/031c68b96e70f80732fd29d2f59040f6fc8d7f9b) [dev] add resources for testing the wolf-dra - [`eb41900`](https://github.com/games-on-whales/fenrir/commit/eb419001d477bebcf191067f51945ce8086a844c) [dev] add initial readmes for wolf dra manual resources - [`f4d2222`](https://github.com/games-on-whales/fenrir/commit/f4d2222f3d7118d3a3ca6431c3f303e47e17e0f8) [wolf-dra] add pulse audio mount - [`abd182d`](https://github.com/games-on-whales/fenrir/commit/abd182d42284be193d1fd234a7885f40e2be2867) [wolf-dra] add wolf-dra standalone deployment and firefox app pod manifests - [`56c2854`](https://github.com/games-on-whales/fenrir/commit/56c2854fdbbed32078e75a963fe96dfe6ad09ee2) [wolf-dra] add informers to watch for status updates, so it can join sessions to lobbies - [`d9c21e6`](https://github.com/games-on-whales/fenrir/commit/d9c21e650d245bc13b2a98498488e1016be86439) [wolf-dra] update resource manifests - [`5d32f8d`](https://github.com/games-on-whales/fenrir/commit/5d32f8d52816d6223cc0855150466a81408cd7fd) [wolf-dra] rename provided resource into lobby, instead of wayland - [`9b35c62`](https://github.com/games-on-whales/fenrir/commit/9b35c624e2d320876698a259f6e513940b0654fc) [dev] rename provided resource into lobby, instead of wayland in the manifests ### 📊 Changes **40 files changed** (+3197 additions, -292 deletions) <details> <summary>View changed files</summary> 📝 `.dockerignore` (+0 -1) 📝 `Dockerfile.dev` (+4 -1) 📝 `cmd/wolf-agent/main.go` (+245 -178) 📝 `crds/direwolf.games-on-whales.github.io_pairings.yaml` (+25 -0) 📝 `crds/direwolf.games-on-whales.github.io_sessions.yaml` (+27 -0) ➕ `hack/deploy/01-wolf-agent-standalone.yaml` (+234 -0) 📝 `hack/deploy/01-wolf-agent.yaml` (+140 -17) 📝 `hack/deploy/02-moonlight-proxy.yaml` (+0 -61) 📝 `hack/deploy/03-misc.yaml` (+240 -1) ➕ `hack/resources/device_classes/README.md` (+6 -0) ➕ `hack/resources/device_classes/default_device_class.yaml` (+11 -0) ➕ `hack/resources/device_classes/multi_gpu_class.yaml` (+22 -0) ➕ `hack/resources/dra_tests/README.md` (+8 -0) ➕ `hack/resources/dra_tests/deployment_resource_claim_template.yaml` (+63 -0) ➕ `hack/resources/dra_tests/firefox.yaml` (+117 -0) ➕ `hack/resources/dra_tests/firefox_session.yaml` (+40 -0) 📝 `hack/update-codegen.sh` (+1 -1) 📝 `pkg/api/v1alpha1/pairing.go` (+14 -0) 📝 `pkg/api/v1alpha1/session.go` (+7 -0) 📝 `pkg/api/v1alpha1/zz_generated.deepcopy.go` (+34 -3) _...and 20 more files_ </details> ### 📄 Description The wolf-agent DRA device manages a wolf instance, it gets called by the kubelet to create a wayland + pulse audio sockets for a statefulset pod launched by the lobby controller. Once that resourceClaim is fulfilled, it will recieve a session update from the direwolf-operator's session controller informing it that the user session belongs to it's lobby, triggered Lobby Join for the session. ## Lobbies Each wolf-agent interacts with resourceClaims, which represent a lobby, it doesn't interact with the lobby CRD directly, because the lobby CRD is a cluster wide resource, and the DRA is node specific, meaning that it only needs to treat the resourceClaims as a lobby, without directly interfering with the direwolf-operator. Instead it tracks it's own lobbies through the registered ResourceClaims. ## Sessions The DRA driver will listen to session creation/update api calls for a lobbyName, checking if this session belongs to any of it's managed lobbies, once a matching lobby name is found a session is creating on this wolf instance, before updating the session CRD's status with WolfSessionID and waiting for the direwolf operator to set the StreamStarted to true, in order to join the session to the lobby. After the user joins the stream in their moonlight-client, the operator updates the session triggering the join in the wolf-dra. Basically, the wolf-agent DRA is responsible for lobby creation and session controller. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
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/fenrir#56
No description provided.