Unreleased documentation. Choose your installed release in the version menu. Features described here may be absent from that release.
Inspect configuration and deployment¶
Start with fleet diagnostics to identify a failed validation
or deployment. Use the commands below to inspect its configuration and the
HAProxy pod involved. They assume release haptic in namespace haptic.
Output can contain certificate keys, configuration, and application data. Keep exported files private and review excerpts before sharing them.
Inspect the generated configuration¶
Read the latest published HAProxy configuration:
umask 077
kubectl exec -n haptic deployment/haptic-controller -c controller -- \
haptic config view > current.cfg
This is the controller's output; it doesn't prove every HAProxy pod has applied
it. Check deployment health and test the route. To change it,
edit your templates or Helm values rather than the generated HAProxyCfg.
Inspect the active templates¶
Export the complete input, including all referenced template libraries:
umask 077
kubectl exec -n haptic deployment/haptic-controller -c controller -- \
haptic config view --input > current-input.yaml
If a snippet differs from your values, check the startup logs for
Template snippet overridden by a later config. The message names the
snippet and the objects defining it. See library merge order.
Check whether a change needs a reload¶
Use the haptic CLI from your controller release and prepare the
offline schemas. Compare two complete
configuration files:
The result is runtime, file_only, or reload, with reasons and planned
commands. A successful comparison exits with status 0, including a reload
result. Use --output json for automation.
By default, the comparison renders without watched resources. Add
--test <name> to use a validation test's fixtures on both sides. Use --all
to list every planned operation.
Inspect one HAProxy pod¶
Select a pod and verify its current files and deployment state:
POD=$(kubectl get pod -n haptic \
-l app.kubernetes.io/instance=haptic,app.kubernetes.io/component=loadbalancer \
-o jsonpath='{.items[0].metadata.name}')
kubectl exec -n haptic "$POD" -c agent -- haptic agent state --verify
The last apply result identifies a failed stage and HAProxy's error. A different
running and applied plan can result from runtime updates since the last reload;
check reload_pending_at for a scheduled reload. Add --files to list the files
with their sizes and checksums.
Resolve a rejected configuration¶
For ConfigValidated=False, read HAProxy's error from the published configuration:
The controller restores the last accepted files on affected pods. Fix the input named in the error; a successful render clears the condition and deploys the new configuration.
ConfigPinned=True means two consecutive renders were refused. New output is
held until the input changes. Read ConfigValidated for the reason and inspect
the affected pod with haptic agent state --verify.
Find a template error¶
Read recent controller logs:
kubectl logs --namespace haptic \
--selector app.kubernetes.io/instance=haptic,app.kubernetes.io/component=controller \
--container controller --tail=100
For errors in your own templates, run validation tests.
Add --trace-templates to list rendered snippets and their timings. In the
browser playground, the provenance
control links an output line to its template. That line mapping isn't available
in the running controller.
If resources change but no render follows, check watch selectors and logs for watch errors. For slow rendering or high memory use, follow resource sizing.
For a controller bug investigation, the developer debug reference covers raw endpoints, event correlation, and profiling.