Add container-workload-render L1 test (R-PLAT-02)

The renderer's PaaS path (kind: container) had no verifying conformance test — the
R-PLAT-02 token appears only in renderer comments, so a change touching catalog/
surfaced it as an uncovered touched-requirement (blocking the merge gate). Adds the
container render analog of vm-lifecycle (R-PLAT-03): asserts a kind: container
ServiceDefinition renders a Deployment (running the declared image) + a Service,
with the egress-class/auth-mode labels admission requires. Offline render-check.sh,
wrapped by a chainsaw Test for in-cluster runs.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
jakman85andClaude Opus 4.8 committed 2026-08-24 22:22:04 -05:00
1 parent 4a017c590e
commit a79f24f75e
4 files changed
+254

No files matched your search

@@ -0,0 +1,152 @@
---
# Namespace (trust zone; default-deny + policies apply)
apiVersion: v1
kind: Namespace
metadata:
name: paas-demo
labels:
homelab.keithjackson.dev/app-namespace: 'true'
gateway-access: shared
---
# Default-deny baseline (R-NET-01): deny all, allow only DNS
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: paas-demo
labels:
homelab.keithjackson.dev/baseline: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress: []
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
---
# Deployment (R-PLAT-02)
apiVersion: apps/v1
kind: Deployment
metadata:
name: paas-demo
namespace: paas-demo
labels:
app.kubernetes.io/name: paas-demo
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: paas-demo
template:
metadata:
labels:
app.kubernetes.io/name: paas-demo
homelab.keithjackson.dev/egress-class: internet
homelab.keithjackson.dev/auth-mode: forward-auth
annotations:
homelab.keithjackson.dev/auth-mode: forward-auth
homelab.keithjackson.dev/auth-groups: platform-admins
spec:
containers:
- name: paas-demo
image: nginx:1.27
ports:
- containerPort: 8080
---
# Service
apiVersion: v1
kind: Service
metadata:
name: paas-demo
namespace: paas-demo
labels:
app.kubernetes.io/name: paas-demo
spec:
selector:
app.kubernetes.io/name: paas-demo
ports:
- name: port-8080
port: 8080
targetPort: 8080
---
# HTTPRoute paas-demo-8080 (R-TLS/R-DNS)
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: paas-demo-8080
namespace: paas-demo
labels:
app.kubernetes.io/name: paas-demo
annotations:
homelab.keithjackson.dev/auth-mode: forward-auth
homelab.keithjackson.dev/auth-groups: platform-admins
spec:
parentRefs:
- name: shared
namespace: gateway
sectionName: https
hostnames:
- paas-demo.home.keithjackson.dev
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: paas-demo
port: 8080
---
# ServiceMonitor (R-OBS-01)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: paas-demo
namespace: paas-demo
labels:
release: kube-prometheus-stack
app.kubernetes.io/name: paas-demo
spec:
selector:
matchLabels:
app.kubernetes.io/name: paas-demo
namespaceSelector:
matchNames:
- paas-demo
endpoints:
- port: metrics
interval: 30s
---
# Flux ImageRepository (R-UPD)
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: paas-demo
namespace: paas-demo
spec:
image: nginx
interval: 1h0m0s
---
# Flux ImagePolicy (R-UPD)
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: paas-demo
namespace: paas-demo
annotations:
homelab.keithjackson.dev/update-channel: stable
homelab.keithjackson.dev/auto-rollback: 'true'
spec:
imageRepositoryRef:
name: paas-demo
policy:
semver:
range: '>=0.0.0'