Add new Ansible roles and configuration for the edge proxy and private network architecture: ## New Roles: - **edge-traefik**: Edge reverse proxy that routes to private clients - Dynamic routing configuration for multiple clients - SSL termination at the edge - Routes traffic to private IPs (10.0.0.x) - **nat-gateway**: NAT/gateway configuration for edge server - IP forwarding and masquerading - Allows private network clients to access internet - iptables rules for Docker integration - **diun**: Docker Image Update Notifier - Monitors containers for available updates - Email notifications via Mailgun - Per-client configuration - **kuma**: Uptime monitoring integration - Registers HTTP monitors for client services - Automated monitor creation via API - Checks Authentik, Nextcloud, Collabora endpoints ## New Playbooks: - **setup-edge.yml**: Configure edge server with proxy and NAT ## Configuration: - **host_vars**: Per-client Ansible configuration (valk, white) - SSH bastion configuration for private IPs - Client-specific secrets file references This enables the scalable multi-tenant architecture where: - Edge server has public IP and routes traffic - Client servers use private IPs only (cost savings) - All traffic flows through edge proxy with SSL termination 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
57 lines
1.6 KiB
YAML
57 lines
1.6 KiB
YAML
---
|
|
- name: Set SMTP credentials from mailgun role facts or client_secrets
|
|
set_fact:
|
|
diun_smtp_username_final: "{{ mailgun_smtp_user | default(client_secrets.mailgun_smtp_user | default(client_name ~ '@mg.vrije.cloud')) }}"
|
|
diun_smtp_password_final: "{{ mailgun_smtp_password | default(client_secrets.mailgun_smtp_password | default('')) }}"
|
|
when: mailgun_smtp_user is defined or client_secrets.mailgun_smtp_user is defined or client_name is defined
|
|
no_log: true
|
|
|
|
- name: Create monitoring Docker network
|
|
community.docker.docker_network:
|
|
name: monitoring
|
|
state: present
|
|
|
|
- name: Create Diun directory
|
|
file:
|
|
path: /opt/docker/diun
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Create Diun data directory
|
|
file:
|
|
path: /opt/docker/diun/data
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Deploy Diun configuration
|
|
template:
|
|
src: diun.yml.j2
|
|
dest: /opt/docker/diun/diun.yml
|
|
mode: '0644'
|
|
notify: Restart Diun
|
|
|
|
- name: Deploy Diun docker-compose.yml
|
|
template:
|
|
src: docker-compose.yml.j2
|
|
dest: /opt/docker/diun/docker-compose.yml
|
|
mode: '0644'
|
|
notify: Restart Diun
|
|
|
|
- name: Start Diun container
|
|
community.docker.docker_compose_v2:
|
|
project_src: /opt/docker/diun
|
|
state: present
|
|
pull: always
|
|
register: diun_deploy
|
|
|
|
- name: Wait for Diun to be healthy
|
|
shell: docker inspect --format='{{"{{"}} .State.Status {{"}}"}}' diun
|
|
register: diun_status
|
|
until: diun_status.stdout == "running"
|
|
retries: 5
|
|
delay: 3
|
|
changed_when: false
|
|
|
|
- name: Display Diun status
|
|
debug:
|
|
msg: "Diun is {{ diun_status.stdout }} on {{ inventory_hostname }}"
|