Files
infrastructure/llm-server/encoding/ansible/roles/video_encoding/README.md
T
spektr 69930f815a Encoding: Pipeline-Konten, NFS-Mount, Layout und Handover-Simulation umgesetzt und verifiziert.
- workload_accounts: gn-media (GID 970), gn-download (983), gn-dashboard (984);
  gn-media als primäre Gruppe der Pipeline-Konten — AUTH_SYS ueber NFSv4 wirkte
  serverseitig nicht mit Supplementary-Gruppen (Betriebsbefund 30.10.2026);
  Sudoers des Deploy-Kontos auf (ALL:ALL) verbreitert (become_user)
- video_encoding: NFS-Client, Mount-Unit und Pipeline-Layout auf dem Export
  (10.0.0.2:/media/datenhdd3/Encoding -> /var/lib/ghostnet-pipeline, ausserhalb
  der Homes); Layout-Anlage als Dienstkonten wegen root_squash; Verifikation
  der Verzeichnisrechte als gn-encoding (2777/2770/0750/2750, Gruppe 970)
- pve_media_cron: Legacy-Crontab (chown root:root + chmod -R 0777 auf allen
  Medienplatten, alle 10 min) entfernt — haette jedes echte Berechtigungsmodell
  plattgewalzt; Backup unter /var/backups/ghostnet/pve/; verify-production
  prueft das Fehlen ab
- verify-pipeline-handover.yml: Handover-Simulation über alle Identitaeten
  (CT-101-.dlc-Drop -> gn-download -> queue -> gn-encoding -> output/state ->
  gn-dashboard); einmal vollstaendig bestanden (30.10.2026)
- Doku: GNENC-000/001/002, GNAI-017 (6.10/6.11), GNMON-001 auf Stand gebracht

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-30 20:47:42 +01:00

2.0 KiB

Video encoding baseline

The video_encoding role manages the CPU-only video encoding workload baseline for the locked gn-encoding service account (UID/GID 982) on ghostnet-ki.

It verifies the account identity, the locked password and the deterministic subordinate ID ranges, enforces the absence of GPU device groups, manages the root-owned configuration directory and the administrator-managed rootless Quadlet directory, and proves that the account cannot read /dev/kfd or any DRM render node and uses its own rootless Podman store.

Pipeline storage comes from the PVE-host NFS export (10.0.0.2:/media/datenhdd3/Encoding, GNAI-017/GNAI-019), mounted at /var/lib/ghostnet-encoding/pipeline inside the account home — the home itself is not the mountpoint, so the rootless Podman store below it stays visible. The role installs the NFS client, manages the systemd mount unit and creates the pipeline directory layout (input/, jd/, queue/, work/, output/, state/, one subdirectory per HandBrake profile) as the service accounts over NFS, because root_squash prevents root-owned creation. The layout ownership and modes (2777 on the SMB-facing trees, 2770/0750/2750 elsewhere, group gn-media GID 970) are verified after convergence (GNENC-002 section 4).

While no encoder image is selected (video_encoding_image empty), the role additionally guards that no Quadlet file and no container exists for the account. Encoder image, schedule, resource limits and health checks remain gated by the open decisions in docs/platform/llm-server/encoding/GNENC-001 and are not assumed here.

The account itself is created by the shared workload_accounts role in the host project (llm-server/host/ansible), together with gn-download (983), gn-dashboard (984) and the shared group gn-media (GID 970); this role requires the host baseline to be applied first.

The file handover between the pipeline identities is exercised by playbooks/verify-pipeline-handover.yml.