main.ymlΒΆ

---
application_id: "svc-net-wireguard"

WIREGUARD_CONFIG_DIR: "/etc/wireguard"

WIREGUARD_INTERFACES: "{{ lookup('config', application_id, 'networks.interfaces', []) }}"

WIREGUARD_ACTIVE_MESHES: >-
  {{ dict(WIREGUARD_INTERFACES | selectattr('address') | map(attribute='name')
          | zip(WIREGUARD_INTERFACES | selectattr('address'))) }}

WIREGUARD_MESH_NAMES: "{{ WIREGUARD_ACTIVE_MESHES.keys() | list | sort }}"

WIREGUARD_MESHLESS_COMPOSE_HOST: "{{ IS_COMPOSE_MODE and WIREGUARD_MESH_NAMES | length == 0 }}"

WIREGUARD_SWARM_MANAGER: "{{ 'svc-swarm-manager' in group_names }}"

WIREGUARD_AWAITED_KEYS: "{{ WIREGUARD_ACTIVE_MESHES | mesh_awaited_keys(WIREGUARD_SWARM_MANAGER | bool) }}"

WIREGUARD_PING_BINARY: "/bin/ping"

WIREGUARD_PRIVATE_KEY: "{{ lookup('config', application_id, 'secrets.credentials.mesh_private_key', '') }}"

WIREGUARD_IS_HUB: >-
  {{ WIREGUARD_ACTIVE_MESHES.values() | map(attribute='is_hub') | select | list | length > 0 }}

WIREGUARD_DIALLED_PEERS: >-
  {{ WIREGUARD_ACTIVE_MESHES.values()
     | map('mesh_dialled_peers')
     | flatten
     | list }}

WIREGUARD_EXPECTED_PEERS: "{{ WIREGUARD_DIALLED_PEERS | map(attribute='address') | list }}"

WIREGUARD_DIALLED_ENDPOINTS: "{{ WIREGUARD_DIALLED_PEERS | map(attribute='endpoint') | unique | list }}"

WIREGUARD_HEADER_BYTES: 60
WIREGUARD_VXLAN_HEADER_BYTES: 50

WIREGUARD_PMTU_TARGETS: >-
  {{ (wireguard_underlay.values() | list)
     | default(NETWORK_PUBLIC_DNS_RESOLVERS, true) }}