mirror of
https://github.com/games-on-whales/fenrir.git
synced 2026-10-15 12:51:53 +00:00
[PR #55] Wolf-Agent DRA: Implementation #56
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
games-on-whales/fenrir#56
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 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 implementation5b49974[lint] apply linter recommendations031c68b[dev] add resources for testing the wolf-draeb41900[dev] add initial readmes for wolf dra manual resourcesf4d2222[wolf-dra] add pulse audio mountabd182d[wolf-dra] add wolf-dra standalone deployment and firefox app pod manifests56c2854[wolf-dra] add informers to watch for status updates, so it can join sessions to lobbiesd9c21e6[wolf-dra] update resource manifests5d32f8d[wolf-dra] rename provided resource into lobby, instead of wayland9b35c62[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.