diff --git a/defaults/main.yml b/defaults/main.yml index fd41395..90eda01 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -88,9 +88,11 @@ snapshots_bucket_base_url: "" enable_consensus: false consensus_secrets_file: "" consensus_port: 3054 -consensus_debug_port_enabled: false -consensus_debug_port: 5000 consensus_outbound: [] +consensus_debug_port: 5000 +enable_consensus_debug_port: false +expose_consensus_debug_port: false +consensus_debug_port_path_prefix: "/consensus_debug" # External Node and database options database_name: "" diff --git a/example_playbooks/mainnet_with_snapshots_recovery/requirements.yml b/example_playbooks/mainnet_with_snapshots_recovery/requirements.yml index 8be2ff2..aa98a87 100644 --- a/example_playbooks/mainnet_with_snapshots_recovery/requirements.yml +++ b/example_playbooks/mainnet_with_snapshots_recovery/requirements.yml @@ -8,6 +8,8 @@ roles: version: "v3.3.0" collections: + - name: community.docker + version: 4.5.2 - name: community.general version: 8.4.0 # Collection for the replication only. diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..1992b19 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,8 @@ +--- +- name: Restart external-node service + community.docker.docker_compose_v2: + project_src: "{{ configuration_directory }}" + files: "{{ docker_compose_files }}" + state: restarted + services: + - external_node diff --git a/tasks/provision.yml b/tasks/provision.yml index 3daecb5..1e3250c 100644 --- a/tasks/provision.yml +++ b/tasks/provision.yml @@ -54,6 +54,13 @@ msg: "Variable '{{ item }}' is empty" when: vars[item] == "" with_items: "{{ en_required_variables }}" +- name: "Verify consensus debug port configuration" + ansible.builtin.fail: + msg: "Cannot expose consensus debug port (expose_consensus_debug_port=true) if it is not enabled (enable_consensus_debug_port=false)." + when: + - enable_consensus + - expose_consensus_debug_port + - not enable_consensus_debug_port - name: Create main configs ansible.builtin.template: @@ -67,6 +74,8 @@ dest: "{{ configuration_directory }}/external_node.env" - src: "templates/postgres.env.j2" dest: "{{ configuration_directory }}/postgres.env" + loop_control: + label: "{{ item.dest }}" - name: Create restore script register: restore_dump_script @@ -99,6 +108,7 @@ src: "templates/consensus_config.yaml.j2" dest: "{{ configuration_directory }}/consensus_config.yaml" mode: '0644' + notify: Restart external-node service - name: Decrypt consensus_secrets when: enable_consensus @@ -107,24 +117,17 @@ dest: "{{ configuration_directory }}/consensus_secrets.yaml" decrypt: true mode: '0600' + notify: Restart external-node service -- name: Run docker-compose without monitoring - when: not enable_monitoring - ansible.builtin.shell: - cmd: nohup docker compose -f docker-compose.yaml up -d /dev/null 2>&1 & - chdir: "{{ configuration_directory }}" - changed_when: false +- name: Set docker compose files list + ansible.builtin.set_fact: + docker_compose_files: "{{ ['docker-compose.yaml'] + (['monitoring.yaml'] if enable_monitoring else []) }}" -- name: Run docker-compose with monitoring - when: enable_monitoring and (not restore_dump_script.changed) - ansible.builtin.shell: - cmd: nohup docker compose -f monitoring.yaml -f docker-compose.yaml up -d /dev/null 2>&1 & - chdir: "{{ configuration_directory }}" - changed_when: false - -- name: Run docker-compose with monitoring with recreation - when: enable_monitoring and restore_dump_script.changed - ansible.builtin.shell: - cmd: nohup docker compose -f monitoring.yaml -f docker-compose.yaml up -d --force-recreate /dev/null 2>&1 & - chdir: "{{ configuration_directory }}" - changed_when: false +- name: Run docker compose services (non-blocking) + community.docker.docker_compose_v2: + project_src: "{{ configuration_directory }}" + files: "{{ docker_compose_files }}" + state: present + pull: "{{ docker_pull_policy | default('missing') }}" + recreate: "{{ 'always' if restore_dump_script.changed else 'auto' }}" + wait: false diff --git a/templates/consensus_config.yaml.j2 b/templates/consensus_config.yaml.j2 index b8f6d72..6d99a61 100644 --- a/templates/consensus_config.yaml.j2 +++ b/templates/consensus_config.yaml.j2 @@ -2,7 +2,7 @@ server_addr: '0.0.0.0:3054' public_addr: '{{ ansible_default_ipv4.address }}:{{ consensus_port }}' max_payload_size: 5000000 gossip_dynamic_inbound_limit: 200 -{% if consensus_debug_port_enabled %} +{% if enable_consensus_debug_port %} debug_page_addr: "0.0.0.0:{{ consensus_debug_port }}" {% endif %} rpc_config: diff --git a/templates/docker-compose.yaml.j2 b/templates/docker-compose.yaml.j2 index c349a03..6ecf0c7 100644 --- a/templates/docker-compose.yaml.j2 +++ b/templates/docker-compose.yaml.j2 @@ -80,7 +80,6 @@ services: - "traefik.http.routers.external_node_main.entrypoints=web" {% endif %} - "traefik.http.routers.external_node_main.service=external_node_main" - - "traefik.http.services.external_node_health.loadbalancer.server.port={{ healthcheck_port }}" - "traefik.http.routers.external_node_health.rule=PathPrefix(`/`)" - "traefik.http.routers.external_node_health.entrypoints=external_node_health" @@ -94,6 +93,20 @@ services: - "traefik.tcp.routers.external_node_consensus.rule=HostSNI(`*`)" - "traefik.tcp.routers.external_node_consensus.entrypoints=external_node_consensus" - "traefik.tcp.routers.external_node_consensus.service=external_node_consensus" +{% endif %} +{% if enable_consensus and expose_consensus_debug_port %} + - "traefik.http.services.external_node_consensus_debug.loadbalancer.server.port={{ consensus_debug_port }}" + - "traefik.http.routers.external_node_consensus_debug.rule=PathPrefix(`{{ consensus_debug_port_path_prefix }}`)" +{% if enable_tls %} + - "traefik.http.routers.external_node_consensus_debug.entrypoints=websecure" + - "traefik.http.routers.external_node_consensus_debug.tls.certresolver=myresolver" +{% else %} + - "traefik.http.routers.external_node_consensus_debug.entrypoints=web" +{% endif %} + - "traefik.http.routers.external_node_consensus_debug.service=external_node_consensus_debug" +{% if enable_basic_auth %} + - "traefik.http.routers.external_node_consensus_debug.middlewares=external_node_auth" +{% endif %} {% endif %} expose: - {{ rpc_http_port }} @@ -102,6 +115,9 @@ services: - {{ metrics_port }} {% if enable_consensus %} - {{ consensus_port }} +{% if expose_consensus_debug_port %} + - {{ consensus_debug_port }} +{% endif %} {% endif %} environment: ZKSYNC_HOME: "/"