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