From 091a75936791df39cff43ee389a2a0c4a06710c8 Mon Sep 17 00:00:00 2001 From: rob Date: Fri, 10 Jul 2026 15:05:27 +0000 Subject: [PATCH] dshackle overrides: read chain-level disables from .env (DSHACKLE__METHOD_GROUPS_DISABLED) - flows from host_vars env_overrides through the standard envfile pipeline; host-local yaml remains as secondary source Co-Authored-By: Claude Fable 5 --- apply-dshackle-overrides.py | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/apply-dshackle-overrides.py b/apply-dshackle-overrides.py index 73635662..47a4111f 100755 --- a/apply-dshackle-overrides.py +++ b/apply-dshackle-overrides.py @@ -65,10 +65,40 @@ def apply(upstream, ov): return changed +ENVFILE = '/root/rpc/.env' + + +def env_overrides(): + """Chain-level overrides from .env (rendered from host_vars env_overrides): + DSHACKLE__METHOD_GROUPS_DISABLED=trace,debug + DSHACKLE__METHODS_DISABLED=eth_getFilterLogs + = dshackle chain name, upper, '-' -> '_' (e.g. BASE, ETH_BEACON_CHAIN).""" + spec = {} + if not os.path.exists(ENVFILE): + return spec + import re as _re + for line in open(ENVFILE): + m = _re.match(r'DSHACKLE_([A-Z0-9_]+)_(METHOD_GROUPS|METHODS)_DISABLED=(.*)', line.strip()) + if not m: + continue + chain = m.group(1).lower().replace('_', '-') + key = 'method_groups_disabled' if m.group(2) == 'METHOD_GROUPS' else 'methods_disabled' + vals = [v.strip() for v in m.group(3).split(',') if v.strip()] + if vals: + spec.setdefault(f'chain:{chain}', {}).setdefault(key, []).extend(vals) + return spec + + def main(): - if not os.path.exists(OVERRIDES): - return - spec = (yaml.safe_load(open(OVERRIDES)) or {}).get('upstreams') or {} + spec = env_overrides() + if os.path.exists(OVERRIDES): + for k, v in ((yaml.safe_load(open(OVERRIDES)) or {}).get('upstreams') or {}).items(): + cur = spec.setdefault(k, {}) + for kk, vv in (v or {}).items(): + if isinstance(vv, list): + cur[kk] = sorted(set((cur.get(kk) or []) + vv)) + else: + cur.setdefault(kk, vv) if not spec: return total = 0