---
beacon_node_network: 'prater'
# TODO This is to avoid too long service names.
beacon_node_repo_branch: >-
  {{ node.branch_override is defined | ternary(
       node.branch_override,
       ((node.branch == "libp2p") | ternary("nim-libp2p-auto-bump-unstable", node.branch))
     ) }}
beacon_node_nim_commit: '{{ node.get("nim_commit", "") }}'
# TODO Drop this once all nodes have an number.
service_number: '{{ node.get("num", False) | ternary(("-%02d"|format(node.get("num", 0))), "") }}'
beacon_node_service_name: 'beacon-node-{{ beacon_node_network }}-{{ node.branch }}'
# Ports
beacon_node_discovery_port: '{{ 9000 + port_offset }}'
beacon_node_listening_port: '{{ 9000 + port_offset }}'
beacon_node_metrics_port:   '{{ 9200 + port_offset }}'
beacon_node_rest_port:      '{{ 9300 + port_offset }}'
beacon_node_rpc_port:       '{{ 9900 + port_offset }}'
# Firewall
beacon_node_firewall_libp2p_open: '{{ node.get("open_libp2p_ports", true) }}'
# Tuning
beacon_node_max_peers: 300
beacon_node_threads: >-
  {{ node.num_threads is defined | ternary(
       node.num_threads,
       (node.branch == "testing") | ternary(4, 1)
  ) }}
# Monitoring
beacon_node_validator_monitor_auto: '{{ node.branch == "unstable" }}'
beacon_node_validator_monitor_totals: >-
  {{ node.branch == "unstable" and
   ((node.public_api is defined and node.public_api)
     or
    (node.end is defined and (node.end - node.start) > 64)) }}
# Builds
beacon_node_build_frequency: '{{ node.get("build_freq", "daily") }}'
beacon_node_build_start_time: '{{ node.get("build_start", omit) }}'
# Validators from nimbus-private repo
beacon_node_dist_validators_enabled: '{{ node.start is defined and node.end is defined }}'
beacon_node_dist_validators_start: '{{ node.start | mandatory }}'
beacon_node_dist_validators_end: '{{ node.end | mandatory }}'
# Windows service user
beacon_node_service_user_pass: '{{lookup("bitwarden", "nimbus/windows", field="password")}}'
# HTTP RPC support is unstable
beacon_node_web3_urls: '{{ beacon_node_web3_urls_all | reject("match", "^http://") }}'

# Split by hostname for more central location
nodes_layout:
  # WARNING: The nodes hosted on AWS are bootstrap nodes and should not be changed.
  'stable-large-01.aws-eu-central-1a.nimbus.prater': # 2000 each
    - { branch: 'stable',   start:     0, end:  2000 }

  'testing-large-01.aws-eu-central-1a.nimbus.prater': # 2000 each
    - { branch: 'testing',  start:  2000, end:  4000 }

  'unstable-large-01.aws-eu-central-1a.nimbus.prater': # 2000 each
    - { branch: 'unstable', start:  4000, end:  6000 }

  'macos-01.ms-eu-dublin.nimbus.prater': # 2000 each
    - { branch: 'stable',   start:  6000, end:  8000, build_start: '13:00:00' }
    - { branch: 'testing',  start:  8000, end: 10000, build_start: '15:00:00' }
    - { branch: 'unstable', start: 12000, end: 14000, build_start: '16:00:00' }

  'windows-01.he-eu-hel1.nimbus.prater': # 2000 each
    - { branch: 'stable',   start: 14000, end: 16000, build_start: '13:00:00' }
    - { branch: 'testing',  start: 16000, end: 18000, build_start: '15:00:00' }
    - { branch: 'unstable', start: 18000, end: 20000, build_start: '16:00:00' }

  'metal-01.he-eu-hel1.nimbus.prater': # 0 each
    - { branch: 'stable',                             build_freq: '*-*-* 13:00:00' }
    - { branch: 'testing',                            build_freq: '*-*-* 15:00:00' }
    - { branch: 'unstable',                           build_freq: '*-*-* 17:00:00', public_api: true }
    - { branch: 'libp2p',                             build_freq: '*-*-* 19:00:00' }

  'metal-02.he-eu-hel1.nimbus.prater': # 1 each
    - { branch: 'stable',   start: 20000, end: 20001, build_freq: '*-*-* 13:00:00' }
    - { branch: 'testing',  start: 20001, end: 20002, build_freq: '*-*-* 15:00:00', public_api: true }
    - { branch: 'unstable', start: 20002, end: 20003, build_freq: '*-*-* 17:00:00' }
    - { branch: 'libp2p',   start: 20003, end: 20004, build_freq: '*-*-* 19:00:00' }

  'metal-03.he-eu-hel1.nimbus.prater': # 10 each
    - { branch: 'stable',   start: 20004, end: 20014, build_freq: '*-*-* 11:00:00' }
    - { branch: 'testing',  start: 20024, end: 20034, build_freq: '*-*-* 15:00:00' }
    - { branch: 'unstable', start: 20014, end: 20024, build_freq: '*-*-* 13:00:00', open_libp2p_ports: false }
    - { branch: 'libp2p',   start: 20034, end: 20044, build_freq: '*-*-* 17:00:00' }

  'metal-04.he-eu-hel1.nimbus.prater': # 30 each
    - { branch: 'stable',   start: 20044, end: 20074, build_freq: '*-*-* 11:00:00' }
    - { branch: 'testing',  start: 20104, end: 20134, build_freq: '*-*-* 15:00:00' }
    - { branch: 'unstable', start: 20074, end: 20104, build_freq: '*-*-* 13:00:00' }
    - { branch: 'libp2p',   start: 20134, end: 20164, build_freq: '*-*-* 17:00:00' }

  'metal-05.he-eu-hel1.nimbus.prater': # 60 each
    - { branch: 'stable',   start: 20164, end: 20224, build_freq: '*-*-* 11:00:00' }
    - { branch: 'testing',  start: 20284, end: 20344, build_freq: '*-*-* 15:00:00' }
    - { branch: 'unstable', start: 20224, end: 20284, build_freq: '*-*-* 13:00:00' }
    - { branch: 'libp2p',   start: 20344, end: 20404, build_freq: '*-*-* 17:00:00' }

  'metal-06.he-eu-hel1.nimbus.prater': # 899 each
    - { branch: 'stable',   start: 20404, end: 22303, build_freq: '*-*-* 11:00:00' }
    - { branch: 'testing',  start: 24202, end: 26101, build_freq: '*-*-* 15:00:00', open_libp2p_ports: false, branch_override: 'nim-1.6', nim_commit: 'version-1-6' }
    - { branch: 'unstable', start: 22303, end: 24202, build_freq: '*-*-* 13:00:00' }
    - { branch: 'libp2p',   start: 26101, end: 28000, build_freq: '*-*-* 17:00:00' }

  'metal-07.he-eu-hel1.nimbus.prater': # 4000 each
    - { branch: 'stable',   start: 28000, end: 31000, build_freq: '*-*-* 11:00:00' }
    - { branch: 'testing',  start: 34000, end: 37000, build_freq: '*-*-* 15:00:00', num_threads: 0, branch_override: 'nim-1.6', nim_commit: 'version-1-6' }
    - { branch: 'unstable', start: 31000, end: 34000, build_freq: '*-*-* 13:00:00', open_libp2p_ports: false }
    - { branch: 'libp2p',   start: 37000, end: 40000, build_freq: '*-*-* 17:00:00' }