Templates HAProxyTemplateConfig
Resources or paste kubectl -o yaml
Rendered output
haproxy -c; it won't catch undefined backends, unknown keywords, or global/defaults errors.HAProxyTemplateConfighaproxy -c; it won't catch undefined backends, unknown keywords, or global/defaults errors.haptic-tryout.sh bundles the rendered haproxy.cfg with every map, error
file, and certificate it references, then runs it locally or in your cluster.
chmod +x haptic-tryout.sh ./haptic-tryout.sh [command] # no command: interactive menu
haproxy -c)kubectl./haptic-tryout)k8sk=v,k=v) to match a NetworkPolicyStatic snapshot: the HAPTIC controller keeps backend servers in sync as pods change; this script does not, so a restarted target pod returns 503.
The right panel is the real haproxy.cfg the HAPTIC controller would deploy —
rendered in your browser from the Templates (left) and
Resources (middle) panels. It works with Ingress (plain or with your
controller's annotations), Gateway API, or a custom CRD. Load a preset from
Start, or bring your own:
Export your live config into Templates and edit it:
kubectl get htplcfg -A -o yaml
Then paste the resources it watches into Resources (commands below) and diff
the rendered output against your current haproxy.cfg — before you apply the change.
In Start, pick the config that matches your setup, then paste your resources into Resources (commands below):
The resources tab then shows what each object bucketed into (and why anything was dropped); the migration tab shows how each annotation maps to HAProxy.
Ingress
kubectl get ingress,service,endpointslices,secrets -A -o yaml
Gateway API
kubectl get gatewayclass,gateway,httproute,service,endpointslices,secrets -A -o yaml
Match the kinds to your watchedResources — add
grpcroutes, tcproutes, tlsroutes, or your own CRD if you
use them. Everything stays in your browser; nothing is uploaded, so real secrets and cluster
data are safe to paste.
Once this page has loaded, the playground makes no further network requests — it renders in WebAssembly on your machine. Confirm it: open your browser's developer tools, watch the Network tab, and edit a config — nothing is sent.
To host the whole thing yourself, build the self-contained static bundle from source (needs Go, Helm, and yq) and serve the folder:
git clone https://gitlab.com/haproxy-haptic/haptic cd haptic ./scripts/build-playground.sh ./playground-local dev cd playground-local && python3 -m http.server 8080
Then open http://localhost:8080. The bundle is plain static files — HTML,
JavaScript, and WebAssembly with no third-party requests — so any static file server works.