feat(execution-beacon): add runbook_url to default alerts - #264
Merged
adriantpaez merged 1 commit intoAug 24, 2026
Merged
Conversation
The chart renders a PrometheusRule by default, but no alert set the runbook_url annotation and no values path could inject one -- metrics.prometheusRule exposed only default, namespace, severity, additionalLabels and rules, and additionalLabels lands on the object's metadata rather than on alert annotations. Deployments behind the bros-alerts-must-have-runbooks Kyverno policy were denied at admission, failing the whole PrometheusRule and leaving the Application degraded. Add metrics.prometheusRule.runbookUrl, defaulting to the Execution Beacon Alerts runbook, and emit runbook_url on all eight default alerts guarded by `with` so an empty value omits the annotation rather than rendering an empty string. Making it a value rather than a literal lets consumers outside Nethermind retarget or drop it. Custom rules passed via metrics.prometheusRule.rules are untouched; that list is tpl-rendered, so callers already control their own annotations. Refs BRO-1378
khalifaa55
approved these changes
Aug 24, 2026
adriantpaez
deleted the
bro-1378-execution-beacon-default-alerts-missing-runbook_url-blocking
branch
August 24, 2026 10:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes BRO-1378.
Problem
The chart renders a
PrometheusRuleby default, butgrep -rn runbook templates/returned 0 hits — no alert set therunbook_urlannotation, and no values path could inject one.metrics.prometheusRuleexposed onlydefault,namespace,severity,additionalLabelsandrules, andadditionalLabelslands on the object's metadata rather than on alert annotations.Deployments behind the
bros-alerts-must-have-runbooksKyverno policy were denied at admission:The policy denies the whole object, so one non-compliant alert failed all of them and left the ArgoCD Application degraded.
Change
Adds
metrics.prometheusRule.runbookUrl, defaulting to the Execution Beacon Alerts runbook, and emitsrunbook_urlon all eight default alerts —EthNodeDownandEthNodeUpdateFailedin_alerts.tpl, plus the client-specific branches inprometheusrules.yaml(Lighthouse ×2, Prysm ×3, Teku ×1).The annotation is guarded by
with, mirroring the existingseverityhandling, so an empty value omits the key rather than renderingrunbook_url: "". Making it a value rather than a literal lets consumers outside Nethermind retarget or drop it.Custom rules passed via
metrics.prometheusRule.rulesare untouched — that list istpl-rendered, so callers already control their own annotations.values.schema.jsonisadditionalProperties: falseat every level and hand-maintained, so the new key needed a matching schema entry; without it everyhelm templatewould break.Version 3.2.0 → 3.3.0.
Verification
helm templateforlighthouse,prysmandteku— alerts missingrunbook_urlis[]for all three--set metrics.prometheusRule.runbookUrl=https://example.com/rboverrides correctly--set metrics.prometheusRule.runbookUrl=""omits the key entirelyhelm-unittest: 29 passed, 5 suites, 0 failed (includes a new case covering the empty-value guard)helm lint: cleanStill to do against a live cluster:
kubectl apply --dry-run=serveron the rendered rule to confirm the Kyverno gate passes, then re-sync the Application.