---
- hosts: all
any_errors_fatal: false
gather_facts: true
roles:
# Base system configuration - must run first
- { role: base, tags: ['all', 'base'] }
# Docker installation - required for all containers
- { role: docker, tags: ['all', 'docker'] }
# Core infrastructure services
- { role: adguard, tags: ['all', 'dns', 'adguard'], when: enable_adguard | default(true) }
- { role: nginx-proxy-manager, tags: ['all', 'proxy', 'nginx'], when: enable_nginx_proxy_manager | default(true) }
# IoT and smart home infrastructure (host network for discovery)
- { role: mosquitto, tags: ['all', 'mqtt', 'mosquitto', 'iot'], when: enable_mosquitto | default(false) }
- { role: zigbee2mqtt, tags: ['all', 'zigbee', 'z2m', 'iot'], when: enable_zigbee2mqtt | default(false) }
- { role: esphome, tags: ['all', 'esphome', 'iot'], when: enable_esphome | default(false) }
- { role: homeassistant, tags: ['all', 'homeassistant', 'ha', 'iot'], when: enable_homeassistant | default(false) }
# VPN services
- { role: wireguard, tags: ['all', 'vpn', 'wireguard'], when: enable_wireguard | default(false) }
- { role: tailscale, tags: ['all', 'vpn', 'tailscale'], when: enable_tailscale | default(false) }
# Optional services (enable via inventory variables)
- { role: portainer, tags: ['all', 'portainer'], when: enable_portainer | default(false) }
- { role: jellyfin, tags: ['all', 'jellyfin', 'media'], when: enable_jellyfin | default(false) }
- { role: nextcloud, tags: ['all', 'nextcloud', 'files'], when: enable_nextcloud | default(false) }
- { role: vaultwarden, tags: ['all', 'vaultwarden', 'passwords'], when: enable_vaultwarden | default(false) }
- { role: immich, tags: ['all', 'immich', 'photos'], when: enable_immich | default(false) }
- { role: onlyoffice, tags: ['all', 'onlyoffice', 'office', 'collaboration'], when: enable_onlyoffice | default(false) }
- { role: collabora, tags: ['all', 'collabora', 'office', 'collaboration'], when: enable_collabora | default(false) }
- { role: excalidraw, tags: ['all', 'excalidraw', 'whiteboard', 'collaboration'], when: enable_excalidraw | default(false) }
- { role: penpot, tags: ['all', 'penpot', 'design', 'collaboration'], when: enable_penpot | default(false) }