From 2360508fdddc186a1eeef2baa7026dc56ff21c61 Mon Sep 17 00:00:00 2001 From: qu0b Date: Mon, 16 Feb 2026 05:05:58 +0000 Subject: [PATCH] Add ethrex (lambdaclass) EL client to terraform and ansible - Add lighthouse-ethrex and lodestar-ethrex node variables (super + full) to terraform - Add ethrex to ansible inventory template EL client list - Add ethrex default Docker image to images.yaml - Add ethrex.yaml group vars with container config and prometheus Co-Authored-By: Claude Opus 4.6 --- .../devnet-0/group_vars/all/images.yaml | 1 + .../devnet-0/group_vars/ethrex.yaml | 80 +++++++++++++++++++ terraform/devnet-0/ansible_inventory.tmpl | 2 +- terraform/devnet-0/hetzner/main.tf | 4 + terraform/devnet-0/hetzner/nodes.tf | 36 +++++++++ 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 ansible/inventories/devnet-0/group_vars/ethrex.yaml diff --git a/ansible/inventories/devnet-0/group_vars/all/images.yaml b/ansible/inventories/devnet-0/group_vars/all/images.yaml index 1b30719..6e564ae 100644 --- a/ansible/inventories/devnet-0/group_vars/all/images.yaml +++ b/ansible/inventories/devnet-0/group_vars/all/images.yaml @@ -14,6 +14,7 @@ default_ethereum_client_images: nethermind: nethermindeth/nethermind:master reth: ghcr.io/paradigmxyz/reth:latest nimbusel: ethpandaops/nimbus-eth1:master + ethrex: ghcr.io/lambdaclass/ethrex:latest default_tooling_images: mev_boost: ethpandaops/mev-boost:develop diff --git a/ansible/inventories/devnet-0/group_vars/ethrex.yaml b/ansible/inventories/devnet-0/group_vars/ethrex.yaml new file mode 100644 index 0000000..f250ae7 --- /dev/null +++ b/ansible/inventories/devnet-0/group_vars/ethrex.yaml @@ -0,0 +1,80 @@ +# role: ethpandaops.general.bootstrap +bootstrap_default_user_authorized_keys_github_team_el: + - fmoletta + - JereSalo + - ilitteri + +# role: ethpandaops.general.ethereum_node +ethereum_node_el: ethrex +# role: ethpandaops.general.ethrex +ethrex_container_name: execution +ethrex_container_image: "{{ default_ethereum_client_images.ethrex }}" +ethrex_container_env: + VIRTUAL_HOST: "{{ ethereum_node_rcp_hostname }}" + VIRTUAL_PORT: "{{ ethereum_node_el_ports_http_rpc | string }}" + LETSENCRYPT_HOST: "{{ ethereum_node_rcp_hostname }}" + RUST_LOG: "info" +ethrex_container_volumes: + - "{{ ethrex_datadir }}:/data" + - "{{ ethrex_auth_jwt_path }}:/execution-auth.jwt:ro" + - "{{ eth_testnet_config_dir }}:/network-config:ro" +ethrex_container_command_extra_args: + - --chain=/network-config/genesis.json + - --bootnodes={{ ethereum_el_bootnodes | join(',') }} + - --http.api=eth,net,web3,debug,admin,txpool +prometheus_config: | + global: + scrape_interval: 30s + evaluation_interval: 30s + scrape_timeout: 10s + external_labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" + ip_address: "{{ ansible_host }}" + network: "{{ ethereum_network_name }}" + testnet: "{{ ethereum_network_name }}" + execution_client: "{{ ethereum_node_el }}" + consensus_client: "{{ ethereum_node_cl }}" + supernode: "{{ ethereum_node_cl_supernode_enabled | bool | default(false) }}" + remote_write: + - queue_config: + batch_send_deadline: 5s + max_backoff: 500ms + max_samples_per_send: 500 + min_backoff: 50ms + max_shards: 100 + url: {{ prometheus_remote_push_url }} + remote_timeout: 10s + basic_auth: + username: {{ prometheus_remote_write_username }} + password: {{ prometheus_remote_write_password }} + scrape_configs: + - job_name: "prometheus" + metrics_path: "/metrics" + static_configs: + - targets: ["localhost:9090"] + labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" + - job_name: "node" + metrics_path: "/metrics" + static_configs: + - targets: ["172.17.0.1:9100"] + labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" + - job_name: "exporter" + metrics_path: "/metrics" + static_configs: + - targets: ["ethereum-metrics-exporter:9090"] + labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" + - job_name: "consensus_node" + metrics_path: "/metrics" + static_configs: + - targets: ["{{ vars[ethereum_node_cl + '_container_name'] }}:{{ ethereum_node_cl_ports_metrics }}"] + labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" + - job_name: "execution" + metrics_path: "/metrics" + static_configs: + - targets: ["execution:{{ ethereum_node_el_ports_metrics }}"] + labels: + instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}" diff --git a/terraform/devnet-0/ansible_inventory.tmpl b/terraform/devnet-0/ansible_inventory.tmpl index 3bfc22e..21afc65 100644 --- a/terraform/devnet-0/ansible_inventory.tmpl +++ b/terraform/devnet-0/ansible_inventory.tmpl @@ -45,7 +45,7 @@ mev_relay # Execution client groups -%{ for el in ["besu", "ethereumjs", "geth", "nethermind", "erigon", "reth", "nimbusel"] ~} +%{ for el in ["besu", "ethereumjs", "geth", "nethermind", "erigon", "reth", "nimbusel", "ethrex"] ~} [${el}:children] %{ for gid, group in groups ~} %{ if split("-", gid)[0] != "bootnode" && split("-", gid)[0] != "mev" ~} diff --git a/terraform/devnet-0/hetzner/main.tf b/terraform/devnet-0/hetzner/main.tf index 8532ead..f375980 100644 --- a/terraform/devnet-0/hetzner/main.tf +++ b/terraform/devnet-0/hetzner/main.tf @@ -74,6 +74,7 @@ locals { var.lighthouse_besu_full, var.lighthouse_reth_full, var.lighthouse_nimbusel_full, + var.lighthouse_ethrex_full, var.prysm_geth_full, var.prysm_nethermind_full, var.prysm_erigon_full, @@ -86,6 +87,7 @@ locals { var.lodestar_besu_full, var.lodestar_reth_full, var.lodestar_nimbusel_full, + var.lodestar_ethrex_full, var.nimbus_geth_full, var.nimbus_nethermind_full, var.nimbus_erigon_full, @@ -111,6 +113,7 @@ locals { var.lighthouse_besu_super, var.lighthouse_reth_super, var.lighthouse_nimbusel_super, + var.lighthouse_ethrex_super, var.prysm_geth_super, var.prysm_nethermind_super, var.prysm_erigon_super, @@ -123,6 +126,7 @@ locals { var.lodestar_besu_super, var.lodestar_reth_super, var.lodestar_nimbusel_super, + var.lodestar_ethrex_super, var.nimbus_geth_super, var.nimbus_nethermind_super, var.nimbus_erigon_super, diff --git a/terraform/devnet-0/hetzner/nodes.tf b/terraform/devnet-0/hetzner/nodes.tf index 6e3ca83..948ffb0 100644 --- a/terraform/devnet-0/hetzner/nodes.tf +++ b/terraform/devnet-0/hetzner/nodes.tf @@ -75,6 +75,15 @@ variable "lighthouse_nimbusel_super" { } } +variable "lighthouse_ethrex_super" { + default = { + name = "lighthouse-ethrex-super" + count = 0 + validator_start = 0 + validator_end = 0 + } +} + # Prysm variable "prysm_geth_super" { default = { @@ -185,6 +194,15 @@ variable "lodestar_nimbusel_super" { } } +variable "lodestar_ethrex_super" { + default = { + name = "lodestar-ethrex-super" + count = 0 + validator_start = 0 + validator_end = 0 + } +} + # Nimbus variable "nimbus_geth_super" { default = { @@ -407,6 +425,15 @@ variable "lighthouse_nimbusel_full" { } } +variable "lighthouse_ethrex_full" { + default = { + name = "lighthouse-ethrex-full" + count = 0 + validator_start = 0 + validator_end = 0 + } +} + # Prysm variable "prysm_geth_full" { default = { @@ -517,6 +544,15 @@ variable "lodestar_nimbusel_full" { } } +variable "lodestar_ethrex_full" { + default = { + name = "lodestar-ethrex-full" + count = 0 + validator_start = 0 + validator_end = 0 + } +} + # Nimbus variable "nimbus_geth_full" { default = {