feat: add service-catalog pipeline and shared homelab workload test harness#202
feat: add service-catalog pipeline and shared homelab workload test harness#202clubanderson wants to merge 1 commit into
Conversation
…rojectbluefin#79) Implement the shared k8s-native execution path for service-catalog validation under projectbluefin#51. This provides the pipeline, test runner, shared helpers, and operator entry points that the first media (projectbluefin#80) and non-media (projectbluefin#81) lanes will use. Argo workflow templates: - service-catalog-pipeline.yaml: top-level pipeline that creates an ephemeral namespace, deploys lane manifests, runs tests, cleans up - run-service-tests.yaml: non-GNOME test runner that clones testing-lab, discovers the lane test suite, runs pytest, emits JUnit XML + summary Submit wrapper: - argo/service-catalog-smoke.yaml for direct submission Shared test helpers (tests/service_catalog/shared/): - deploy.py: deployment readiness, pod running, endpoints, events - persistence.py: PVC bound, sentinel write/read, rollout restart - reachability.py: DNS resolution, HTTP/HTTPS, TLS handshake - redeploy.py: image upgrade, config change, rollout verification - teardown.py: namespace existence, cluster-scoped leak detection Operator entry points: - Justfile: run-service-catalog-smoke with lane/image-tag/branch params - WORKFLOWS.md: service-catalog-pipeline docs + run-service-tests docs - RUNBOOK.md: architecture diagram, adding-a-lane guide, result inspection Signed-off-by: Andy Anderson <andy@clubanderson.com> Signed-off-by: unknown <unknown@users.noreply.github.com>
hanthor
left a comment
There was a problem hiding this comment.
LGTM — well-structured test/infra addition, clean code.
hanthor
left a comment
There was a problem hiding this comment.
Lane-parameterization verification needed. Foundational PR -- shared helpers must be verified for lane-agnostic operation.
Required verification:
- Verify all shared helpers (deploy.py, persistence.py, reachability.py, redeploy.py, teardown.py) accept deployment name as parameter, not hardcoded.
- APP_LABEL default app=service-catalog-workload will not match lane-specific labels like app=homelab-media-service. Tests must override via env vars, and shared modules must accept label selector as parameter.
Builds on: #200 (contract -- merge first)
|
Scope check before this stack lands — tagging for maintainer review. PRs #200–#205 introduce a service-catalog testing layer (Jellyfin, CUPS/OpenPrinting, HTTPS exposure, auth-gating) that runs pytest in-cluster against Kubernetes deployments. This is a different paradigm from the rest of the repo, which provisions fresh KubeVirt VMs and tests Bluefin's atomic OS contract via behave/qecore. AGENTS.md north star:
The service-catalog tests prove Kubernetes-native workload contracts (PVC lifecycle, reachability, rollout persistence) rather than Bluefin's atomic OS properties. Questions for the maintainer:
Not blocking — just flagging before 10 PRs land at once. The code itself is well-structured and the test isolation (skip gates, deferred lanes, onExit cleanup) is solid. |
hanthor
left a comment
There was a problem hiding this comment.
Review: Approved ✅
Part of the structured service-catalog project build-up. Conventional Commits format, referenced issues, consistent with related PRs in the series.
Summary
Implements the shared k8s-native service-catalog execution path under #51, closing #79. This unblocks the first media (#80) and non-media (#81) lane implementations.
Argo workflow templates
lane,image-tag, andbranchparameters.tests/service_catalog/<lane>/, runs pytest with JUnit XML output, emits summary to stdout for Argo/Loki.Shared test helpers (tests/service_catalog/shared/)
Operator entry points
run-service-catalog-smokewith lane/image-tag/branch paramsHow lanes plug in
Each lane provides:
tests/service_catalog/<lane>/manifests.yaml— k8s manifeststests/service_catalog/<lane>/test_<lane>.py— pytest suite importing shared helpersThe pipeline is lane-agnostic; it reads the lane name from the
laneparameter and discovers manifests + tests by convention.Links
Test plan
just run-service-catalog-smokesubmits the workflow