{ pkgs, config, ... }: let servers = [ "c1" "c2" "c3" ]; server_enabled = builtins.elem config.networking.hostName servers; in { services.consul = { enable = true; webUi = true; interface.advertise = "eno1"; extraConfig = { client_addr = "0.0.0.0"; datacenter = "alo"; server = server_enabled; bootstrap_expect = (builtins.length servers + 2) / 2; retry_join = builtins.filter (elem: elem != config.networking.hostName) servers; }; }; environment.persistence."/persist".directories = [ "/var/lib/consul" ]; networking.firewall = { allowedTCPPorts = [ 8600 8500 8301 8302 8300 ]; allowedUDPPorts = [ 8600 8301 8302 ]; }; }